From 3666958ac0cdcc8f5f2a9477f04f0bdfa62f8a23 Mon Sep 17 00:00:00 2001 From: HectorVilas <96928935+HectorVilas@users.noreply.github.com> Date: Sat, 14 Jan 2023 19:54:52 -0300 Subject: [PATCH] update live --- dist/index.bundle.js | 78 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/dist/index.bundle.js b/dist/index.bundle.js index 43edf1c..230fa3b 100644 --- a/dist/index.bundle.js +++ b/dist/index.bundle.js @@ -45,7 +45,7 @@ var ___CSS_LOADER_URL_REPLACEMENT_8___ = _node_modules_css_loader_dist_runtime_g var ___CSS_LOADER_URL_REPLACEMENT_9___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_9___); var ___CSS_LOADER_URL_REPLACEMENT_10___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_10___); // Module -___CSS_LOADER_EXPORT___.push([module.id, ":root {\r\n --bgc-page: lavender;\r\n --card-shadow: .25rem .25rem .25rem rgba(0,0,0,.1),\r\n inset .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --card-shadow-invert: inset .25rem .25rem .25rem rgba(0,0,0,.1),\r\n .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --icon-size: 30px;\r\n --icon-menu-size: 40px;\r\n --icon-check-size: 20px;\r\n --txt-col-1: #000;\r\n --txt-col-2: #444;\r\n --txt-col-3: #666;\r\n --font-size-title: 1.75rem;\r\n --card-border-rad: .75rem;\r\n --card-open-transition: 250ms;\r\n --card-padding: .5rem;\r\n --card-drag-padding: calc(var(--font-size-title) + var(--card-padding) * 2.75);\r\n --hover-anim-duration: 250ms;\r\n --menu-width: 350px;\r\n --menu-width-widescreen: 400px;\r\n --viewport-min-width: 600px;\r\n --deletion-delay: 2s; \r\n --hover-delay: 150ms;\r\n}\r\n\r\n/* default values reset */\r\nbody { padding: 0; margin: 0; min-width: var(--viewport-min-width);}\r\nol, ul { padding: 0; margin: 0; list-style-type: none; }\r\nh1, h2, p {margin: 0;}\r\nh1 {\r\n font-size: 2rem;\r\n font-weight: 900;\r\n text-transform: uppercase;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-shadow: 1px 1px 1px hsl(240, 30%, 50%);\r\n}\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n* {font-family: 'Times New Roman', Times, serif;}\r\n\r\ninput::selection {\r\n color: white;\r\n background-color: hsl(240, 80%, 70%);\r\n}\r\ninput:not([type=\"checkbox\"]):focus {\r\n outline: 4px solid rgba(46, 16, 192, .25);\r\n transition: 0ms;\r\n}\r\n\r\n/* menu */\r\n\r\n#menu-button {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 2;\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");\r\n background-size: 100%;\r\n width: var(--icon-menu-size);\r\n height: var(--icon-menu-size);\r\n box-shadow: var(--card-shadow);\r\n background-color: #aaa;\r\n transition: background-color 150ms;\r\n}\r\n#menu-button:hover {\r\n cursor: pointer;\r\n background-color: white;\r\n}\r\n\r\n#menu {\r\n z-index: 2;\r\n position: absolute;\r\n box-sizing: border-box;\r\n padding: .5rem;\r\n top: var(--icon-menu-size);\r\n left: 0;\r\n max-height: calc(100vh - var(--icon-menu-size));\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n width: var(--menu-width);\r\n box-shadow: var(--card-shadow);\r\n backdrop-filter: blur(5px);\r\n background-color: rgba(255, 255, 255, 0.5);\r\n font-size: 1.75rem;\r\n display: none;\r\n}\r\n#menu.reveal { display: block; }\r\n\r\n#menu .menu-item {\r\n display: grid;\r\n grid-template-columns: 1fr auto auto;\r\n align-items: center;\r\n height: calc(var(--icon-menu-size) * 1.25);\r\n}\r\n\r\n#menu .menu-item p {\r\n margin: .5rem 0;\r\n width: 200px;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n#menu .menu-item .edit-project {\r\n font-size: 1.75rem;\r\n width: 200px;\r\n}\r\n\r\n.fieldset-list li {\r\n transition: padding 200ms, background-color 350ms;\r\n}.fieldset-list li:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n#screen-cover-menu {display: none;}\r\n#screen-cover-menu.reveal {\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n}\r\n\r\n#menu .project-title {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n}\r\n\r\n#menu .fieldset-options p {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n#menu a {\r\n text-decoration: none;\r\n color: inherit;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n#menu .fieldset-options .menu-item.about {\r\n --icon-size: 50px;\r\n --duration: 3s;\r\n background-size: 700%;\r\n background-position: bottom left;\r\n}\r\n#menu.reveal .fieldset-options .menu-item.about {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ");\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n}\r\n@keyframes bg-anim {\r\n to { background-position: calc(var(--icon-size) * 2) calc(var(--icon-size) * -1); }\r\n}\r\n@keyframes bg-zoom-out {\r\n from { background-size: 700%; }\r\n to { background-size: var(--icon-size); }\r\n}\r\n\r\n/* page content */\r\n\r\nbody {background-color: var(--bgc-page);}\r\n\r\n#cards-container {\r\n box-sizing: border-box;\r\n margin: 0;\r\n width: 100vw;\r\n min-width: var(--viewport-min-width);\r\n height: 100vh;\r\n overflow: hidden;\r\n overflow-y: auto;\r\n scroll-behavior: smooth;\r\n}\r\n\r\n.project-item {\r\n box-sizing: border-box;\r\n padding: 1rem;\r\n margin: 1rem;\r\n}\r\n\r\nheader {\r\n position: sticky;\r\n top: 0;\r\n z-index: 1;\r\n justify-content: center;\r\n text-align: center;\r\n height: var(--icon-menu-size);\r\n background-color: var(--bgc-page);\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n\r\n/* cards */\r\n\r\n.card {\r\n isolation: isolate;\r\n box-sizing: border-box;\r\n width: 100%;\r\n box-shadow: var(--card-shadow);\r\n padding: var(--card-padding);\r\n display: grid;\r\n grid-template-columns: auto 1fr auto auto;\r\n grid-template-rows: repeat(6, auto);\r\n grid-template-areas:\r\n \" drag title progress edit \"\r\n \" ..... descr descr descr \"\r\n \" ..... created priority priority \"\r\n \" ..... due priority priority \"\r\n \" ..... tasks tasks tasks \"\r\n \" ..... add-task add-task add-task \";\r\n align-items: center;\r\n overflow: hidden;\r\n} .card.active {\r\n height: auto;\r\n box-shadow: inset 0 0 5rem hsl(240, 70%, 90%);\r\n} .card:not(.active):hover {\r\n background-color: rgba(255, 255, 255, 0.5);\r\n}\r\n\r\n.card:first-of-type { border-radius: var(--card-border-rad) var(--card-border-rad) 0 0; }\r\n.card:last-of-type { border-radius: 0 0 var(--card-border-rad) var(--card-border-rad); }\r\n\r\n.card .title {\r\n font-size: var(--font-size-title);\r\n color: var(--txt-col-1);\r\n cursor: pointer;\r\n padding-left: .5rem;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card .progress {\r\n grid-area: progress;\r\n box-sizing: border-box;\r\n margin-right: 5px;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n border-radius: 50%;\r\n position: relative;\r\n}.card .progress::after {\r\n position: absolute;\r\n content: \"%\";\r\n text-align: center;\r\n font-weight: 900;\r\n inset: 5px;\r\n border-radius: 50%;\r\n background-color: var(--bgc-page);\r\n backdrop-filter: blur(5px);\r\n}\r\n.card .description {\r\n grid-area: descr;\r\n font-size: 1.5rem;\r\n color: var(--txt-col-2);\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 100%;\r\n}\r\n.card .date-creation {\r\n grid-area: created;\r\n}\r\n.card .date-due {\r\n grid-area: due;\r\n}.card .date-due.edit-date-due {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") no-repeat;\r\n background-size: contain;\r\n padding-left: 1.75rem;\r\n font-size: 1rem;\r\n background-color: white;\r\n}\r\n\r\n/*adding transparency for overflowed text*/\r\n.card .title:not(.edit-title),\r\n.card .description,\r\n.card label,\r\n.project-title,\r\nh1{\r\n mask-image: linear-gradient(to left, transparent, white 50px);\r\n}\r\n\r\n\r\n.card .checklist {\r\n grid-area: tasks;\r\n display: grid;\r\n}\r\n.card .edit-priority {\r\n grid-area: priority;\r\n display: grid;\r\n grid-template-rows: repeat(2, 1fr);\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n}\r\n.card .edit-priority input[type=\"range\"] {\r\n width: 80%;\r\n justify-self: center;\r\n}\r\n\r\n.create-task-div {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n height: calc(var(--icon-size) * 1.4);\r\n}\r\n.create-task-div p {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 0%;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n.create-task-div:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n.create-task-div:hover p {\r\n width: calc(100% - var(--icon-size) * 1.3);\r\n}\r\n\r\n.card-icon.create-task.create-todo {\r\n margin-left: 0;\r\n}\r\n.card.todo-add-div:hover .card-icon.create-task.create-todo {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n.todo-add-div {\r\n box-sizing: border-box;\r\n display: flex;\r\n align-items: center;\r\n padding: .5rem .25rem;\r\n gap: .5rem;\r\n cursor: pointer;\r\n}\r\n\r\n.todo-add-div p {\r\n font-size: 2rem;\r\n font-weight: 600;\r\n overflow: hidden;\r\n width: 0rem;\r\n white-space: nowrap;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n\r\n.todo-add-div:hover p {\r\n width: 15rem;\r\n}\r\n\r\n\r\n/* card priority indicator */\r\n\r\n.card[data-priority=\"low\"] {\r\n background: linear-gradient(to right,lime, rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"low\"].active {\r\n background: linear-gradient(to bottom,lime, rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"middle\"] {\r\n background: linear-gradient(to right, goldenrod, rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"middle\"].active {\r\n background: linear-gradient(to bottom, goldenrod, rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"high\"] {\r\n background: linear-gradient(to right, orangered, rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"high\"].active {\r\n background: linear-gradient(to bottom, orangered, rgba(0, 128, 0, 0) 60px);\r\n}\r\n\r\n\r\n\r\n/* card details transition */\r\n\r\n.card .description,\r\n.card .date-creation,\r\n.card .date-due,\r\n.card ul li {\r\n overflow: hidden;\r\n transition: var(--card-open-transition);\r\n height: 0rem;\r\n}\r\n.card.active .description,\r\n.card.active .date-creation,\r\n.card.active .date-due,\r\n.card.active ul li {\r\n overflow: visible;\r\n height: 1.75rem;\r\n}\r\n/*individual settings*/\r\n.card .description { margin-top: 0rem; margin-bottom: 0rem;}\r\n.card.active .description { margin-top: 1rem; margin-bottom: .5rem;}\r\n.card.active ul li { height: 2.5rem;}\r\n.card .date-due {margin-bottom: 0rem; }\r\n.card.active .date-due {margin-bottom: .5rem; }\r\n\r\n.card ul li:nth-child(1) { transition-delay: 25ms; }\r\n.card ul li:nth-child(2) { transition-delay: 50ms; }\r\n.card ul li:nth-child(3) { transition-delay: 75ms; }\r\n.card ul li:nth-child(4) { transition-delay: 100ms; }\r\n.card ul li:nth-child(5) { transition-delay: 125ms; }\r\n.card ul li:nth-child(6) { transition-delay: 150ms; }\r\n.card ul li:nth-child(7) { transition-delay: 175ms; }\r\n.card ul li:nth-child(8) { transition-delay: 200ms; }\r\n.card ul li:nth-child(9) { transition-delay: 225ms; }\r\n.card ul li:nth-child(10) { transition-delay: 250ms; }\r\n.card ul li:nth-child(11) { transition-delay: 275ms; }\r\n.card ul li:nth-child(12) { transition-delay: 300ms; }\r\n.card ul li:nth-child(13) { transition-delay: 325ms; }\r\n.card ul li:nth-child(14) { transition-delay: 350ms; }\r\n.card ul li:nth-child(15) { transition-delay: 375ms; }\r\n.card ul li:nth-child(16) { transition-delay: 400ms; }\r\n.card ul li:nth-child(17) { transition-delay: 425ms; }\r\n.card ul li:nth-child(18) { transition-delay: 450ms; }\r\n.card ul li:nth-child(19) { transition-delay: 475ms; }\r\n.card ul li:nth-child(1n+20) { transition-delay: 500ms; }\r\n\r\n\r\n\r\n/* card icons */\r\n\r\n.card li input[type=\"checkbox\"] {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n appearance: none;\r\n cursor: pointer;\r\n}\r\n.card li input[type=\"checkbox\"]::before {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-color: rgba(0,0,0,.03);\r\n box-shadow: .1rem .1rem .1rem white,\r\n inset .1rem .1rem .25rem rgba(0,0,0,.1);\r\n border-radius: .25rem;\r\n}\r\n.card li input[type=\"checkbox\"]::after {\r\n --check-anim-duration: 200ms;\r\n position: absolute;\r\n content: \"\";\r\n inset: -7px;\r\n background-color: red;\r\n clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%, 1% 75%);\r\n animation: checkmark-backwards var(--check-anim-duration) ease-out forwards;\r\n}\r\n.card li input[type=\"checkbox\"]:checked::after {\r\n animation: checkmark-forwards var(--check-anim-duration) ease-in forwards;\r\n}\r\n@keyframes checkmark-forwards {\r\n 0% {opacity: 0;}\r\n 1% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 30% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 100% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n} @keyframes checkmark-backwards {\r\n 0% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 70% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 99% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 100% {opacity: 0;}\r\n}\r\n\r\n.card label,\r\n.card .edit-label {\r\n font-size: 1.25rem;\r\n color: var(--txt-col-2);\r\n background: linear-gradient(to right, transparent 0%, rgba(255, 255, 255, 0.5), transparent 100%) no-repeat;\r\n background-size: 100%;\r\n transition: background-position 500ms;\r\n background-position-x: -100vw;\r\n cursor: pointer;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card li input[type=\"checkbox\"]:checked + label {\r\n text-decoration: line-through;\r\n color: var(--txt-col-3);\r\n background-position-x: 100vw;\r\n}\r\n\r\n.card.edit-mode .card-icon.remove-task {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") center no-repeat;\r\n background-size: 80%;\r\n}\r\n\r\n.card-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n cursor: pointer;\r\n appearance: none;\r\n background-size: 100%;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\n.card-icon::after {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-size: 100%;\r\n background-position: center;\r\n}\r\n\r\n.card-icon.icon-drag {\r\n cursor: ns-resize;\r\n}\r\n\r\n.card-icon.icon-pin::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_4___ + ");\r\n} .card-icon.icon-pin:checked::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_5___ + ");\r\n}\r\n.card-icon.icon-edit::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_6___ + ");\r\n} .card-icon.icon-edit:checked::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_7___ + ");\r\n}\r\n.card-icon.icon-fav::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_8___ + ");\r\n}.card-icon.icon-fav:checked::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_9___ + ");\r\n}\r\n\r\n.card ul li {\r\n display: grid;\r\n grid-template-columns: auto 1fr auto;\r\n gap: .5rem;\r\n align-items: center;\r\n}\r\n\r\n.card .add-task {\r\n grid-area: add-task;\r\n /* display: grid; */\r\n grid-template-columns: var(--icon-size) 1fr;\r\n grid-template-areas: \". plus\";\r\n overflow: hidden;\r\n}\r\n.card .create-task,\r\n.create-task {\r\n grid-area: plus;\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_10___ + ");\r\n width: calc(var(--icon-size) * 1.1) ;\r\n height: calc(var(--icon-size) * 1.1) ;\r\n margin-left: 7px;\r\n}\r\n.card .create-task:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-spin-90 { to {rotate: 90deg;}}\r\n\r\n.edit-buttons {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n}\r\n.delete-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n margin-left: 5px;\r\n align-items: center;\r\n}.icon-trash,\r\n.icon-trash-lid {\r\n position: absolute;\r\n transition: rotate 300ms;\r\n}\r\n.icon-trash { transform-origin: 100% 0%;}\r\n.icon-trash-lid { transform-origin: 250% 0%;}\r\n.delete-icon:hover .icon-trash { rotate: -7deg;}\r\n.delete-icon:hover .icon-trash-lid { rotate: 7deg; }\r\n.delete-icon:active .icon-trash { transition: rotate 2s; rotate: -18deg; }\r\n.delete-icon:active .icon-trash-lid { transition: rotate 2s; rotate: 10deg; }\r\n\r\n.delete-icon.deleting {\r\n /*item is deleted after animation ends*/\r\n animation: deleting var(--deletion-delay) linear;\r\n}\r\n.delete-icon.deleting::after,\r\n.delete-icon.deleting::before {\r\n position: absolute;\r\n content: \"⚠️Deleting...⚠️\";\r\n font-size: 1.5rem;\r\n color: var(--bgc-page);\r\n padding: .25rem;\r\n box-shadow: var(--card-shadow);\r\n pointer-events: none;\r\n transform: translate(-100%, -10%);\r\n background-color: #444;\r\n animation: deleting-bg var(--deletion-delay) ease-out;\r\n clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);\r\n}\r\n.delete-icon.deleting::after {\r\n background-color: red;\r\n animation: deleting-text var(--deletion-delay) ease-out;\r\n\r\n}\r\n\r\n@keyframes deleting {\r\n to {\r\n filter: drop-shadow(0 0 .5rem red);\r\n }\r\n}\r\n@keyframes deleting-text {\r\n from {clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);}\r\n to {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n@keyframes deleting-bg { /* this disappears the bar if fav cancels deletion*/\r\n 0%, 100% {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n\r\n.card-icon.icon-edit:hover,\r\n.card-icon.icon-pin:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n transform-origin: 0% 100%;\r\n}\r\n@keyframes icon-shake {\r\n 0%, 100% { rotate: 0deg;}\r\n 10% { rotate: 5deg;}\r\n 20% { rotate: -5deg;}\r\n 30% { rotate: 4deg;}\r\n 40% { rotate: -4deg;}\r\n 50% { rotate: 3deg;}\r\n 60% { rotate: -3deg;}\r\n 70% { rotate: 2deg;}\r\n 80% { rotate: -2deg;}\r\n 90% { rotate: 1deg;}\r\n}\r\n\r\n.card-icon.icon-fav:hover{\r\n animation: icon-spin-72 var(--hover-anim-duration);\r\n transform-origin: 50% 55%;\r\n}\r\n@keyframes icon-spin-72 { to {rotate: 72deg;} }\r\n\r\n.card-icon.icon-fav.shake {\r\n animation: icon-fav-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-fav-shake {\r\n 0%, 100% {\r\n rotate: 0deg;\r\n filter: drop-shadow(0 0 5px goldenrod)\r\n brightness(150%);\r\n }\r\n 10% { rotate: 10deg;}\r\n 20% { rotate: -10deg;}\r\n 30% { rotate: 8deg;}\r\n 40% { rotate: -8deg;}\r\n 50% { rotate: 6deg;}\r\n 60% { rotate: -6deg;}\r\n 70% { rotate: 4deg;}\r\n 80% { rotate: -4deg;}\r\n 90% { rotate: 2deg;}\r\n}\r\n\r\n\r\n\r\n/* edit mode content status */\r\n\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n border-radius: .25rem;\r\n background-color: white;\r\n border: none;\r\n box-shadow: inset .15rem .15rem .15rem rgba(0,0,0,.25);\r\n} input[type=\"text\"].edit-label {\r\n background-color: white;\r\n}\r\n\r\n.card.edit-mode input[type=\"text\"], input[type=\"date\"] {\r\n cursor: text;\r\n}\r\n\r\n.card.edit-mode .title { display: none; }\r\n.card .edit-title { display: none; font-weight: 600;}\r\n.card.edit-mode .edit-title { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .description { display: none; }\r\n.card .edit-description { display: none; }\r\n.card.edit-mode .edit-description { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .date-due { display: none; }\r\n.card .edit-date-due { display: none; }\r\n.card.edit-mode .edit-date-due { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .edit-priority {display: grid;}\r\n.card .edit-priority {display: none;}\r\n\r\n.card.edit-mode li label { display: none; }\r\n.card .edit-label { display: none; }\r\n.card.edit-mode .edit-label { display: block; box-sizing: border-box; }\r\n.card input[type=\"checkbox\"]:checked ~ .edit-label {\r\n text-decoration: line-through rgba(0,0,0,.25);\r\n}\r\n\r\n.card.edit-mode .add-task {display: grid;}\r\n.card .add-task {display: none;}\r\n\r\n#menu .menu-tasks .edit-project { display: none; }\r\n#menu .menu-tasks.edit-mode .edit-project { display: block; }\r\n#menu .menu-tasks .project-title { display: block; }\r\n#menu .menu-tasks.edit-mode .project-title { display: none; }\r\n\r\n\r\n\r\n/* dragged card */\r\n.card.dragging-card {\r\n position: absolute;\r\n background-color: white;\r\n pointer-events: none;\r\n border-radius: var(--card-border-rad);\r\n transition: none;\r\n}\r\n.card.dragging-card .edit-buttons {\r\n filter: grayscale(100%);\r\n /* display: none; */\r\n}\r\n\r\n\r\n\r\n/* search results */\r\n\r\n.card.search-result {\r\n grid-template-areas:\r\n \" title progress \"\r\n \" descr descr \"\r\n \" created created \"\r\n \" due due \";\r\n grid-template-columns: 1fr auto;\r\n padding-left: 1rem;\r\n border-radius: 1rem;\r\n margin-bottom: 1rem;\r\n cursor: pointer;\r\n box-shadow: var(--card-shadow);\r\n transition: background-color 150ms ease-in-out;\r\n}\r\n.card.search-result:hover { background-color: hsl(240, 67%, 98%); }\r\n.card.search-result:active { box-shadow: var(--card-shadow-invert); }\r\n\r\n\r\n.card.search-result .description { margin: .5rem 0 0 0; }\r\n.card.search-result .date-creation { margin-top: .5rem; }\r\n.card.search-result .date-due { margin: 0; }\r\n.card.search-result .date-due:empty { display: none; }\r\n.card.search-result .title { padding-left: 0; }\r\n\r\n\r\n\r\n/* responsiveness */\r\n\r\n@media screen and (min-width: 1000px) {\r\n body{\r\n display: grid;\r\n grid-template-columns: var(--menu-width) 1fr;\r\n grid-template-areas: \"sidebar cards\";\r\n }\r\n #menu-button,\r\n #screen-cover-menu {\r\n display: none !important;\r\n }\r\n #menu {\r\n position: relative;\r\n display: block;\r\n grid-area: sidebar;\r\n top: 0;\r\n height: 100vh;\r\n max-height: none;\r\n }\r\n\r\n #cards-container {\r\n grid-area: cards;\r\n width: 100%;\r\n }\r\n\r\n #menu .fieldset-options .menu-item.about:hover {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ");\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n }\r\n}\r\n\r\n@media screen and (min-width: 1500px) {\r\n body{\r\n grid-template-columns: var(--menu-width-widescreen) 1fr;\r\n }\r\n #menu {\r\n width: var(--menu-width-widescreen);\r\n }\r\n}\r\n\r\n\r\n\r\n/* for general use */\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.opacity-zero {\r\n opacity: 0;\r\n}\r\n\r\n.margin-top {\r\n margin-top: var(--card-drag-padding);\r\n}\r\n.margin-bottom {\r\n margin-bottom: var(--card-drag-padding);\r\n}\r\n\r\n\r\n/*for testing*/\r\n/* * {\r\n outline: 1px solid gray;\r\n} */", "",{"version":3,"sources":["webpack://./src/style.css"],"names":[],"mappings":"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","sourcesContent":[":root {\r\n --bgc-page: lavender;\r\n --card-shadow: .25rem .25rem .25rem rgba(0,0,0,.1),\r\n inset .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --card-shadow-invert: inset .25rem .25rem .25rem rgba(0,0,0,.1),\r\n .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --icon-size: 30px;\r\n --icon-menu-size: 40px;\r\n --icon-check-size: 20px;\r\n --txt-col-1: #000;\r\n --txt-col-2: #444;\r\n --txt-col-3: #666;\r\n --font-size-title: 1.75rem;\r\n --card-border-rad: .75rem;\r\n --card-open-transition: 250ms;\r\n --card-padding: .5rem;\r\n --card-drag-padding: calc(var(--font-size-title) + var(--card-padding) * 2.75);\r\n --hover-anim-duration: 250ms;\r\n --menu-width: 350px;\r\n --menu-width-widescreen: 400px;\r\n --viewport-min-width: 600px;\r\n --deletion-delay: 2s; \r\n --hover-delay: 150ms;\r\n}\r\n\r\n/* default values reset */\r\nbody { padding: 0; margin: 0; min-width: var(--viewport-min-width);}\r\nol, ul { padding: 0; margin: 0; list-style-type: none; }\r\nh1, h2, p {margin: 0;}\r\nh1 {\r\n font-size: 2rem;\r\n font-weight: 900;\r\n text-transform: uppercase;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-shadow: 1px 1px 1px hsl(240, 30%, 50%);\r\n}\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n* {font-family: 'Times New Roman', Times, serif;}\r\n\r\ninput::selection {\r\n color: white;\r\n background-color: hsl(240, 80%, 70%);\r\n}\r\ninput:not([type=\"checkbox\"]):focus {\r\n outline: 4px solid rgba(46, 16, 192, .25);\r\n transition: 0ms;\r\n}\r\n\r\n/* menu */\r\n\r\n#menu-button {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 2;\r\n background-image: url(./media/images/icons/menu.svg);\r\n background-size: 100%;\r\n width: var(--icon-menu-size);\r\n height: var(--icon-menu-size);\r\n box-shadow: var(--card-shadow);\r\n background-color: #aaa;\r\n transition: background-color 150ms;\r\n}\r\n#menu-button:hover {\r\n cursor: pointer;\r\n background-color: white;\r\n}\r\n\r\n#menu {\r\n z-index: 2;\r\n position: absolute;\r\n box-sizing: border-box;\r\n padding: .5rem;\r\n top: var(--icon-menu-size);\r\n left: 0;\r\n max-height: calc(100vh - var(--icon-menu-size));\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n width: var(--menu-width);\r\n box-shadow: var(--card-shadow);\r\n backdrop-filter: blur(5px);\r\n background-color: rgba(255, 255, 255, 0.5);\r\n font-size: 1.75rem;\r\n display: none;\r\n}\r\n#menu.reveal { display: block; }\r\n\r\n#menu .menu-item {\r\n display: grid;\r\n grid-template-columns: 1fr auto auto;\r\n align-items: center;\r\n height: calc(var(--icon-menu-size) * 1.25);\r\n}\r\n\r\n#menu .menu-item p {\r\n margin: .5rem 0;\r\n width: 200px;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n#menu .menu-item .edit-project {\r\n font-size: 1.75rem;\r\n width: 200px;\r\n}\r\n\r\n.fieldset-list li {\r\n transition: padding 200ms, background-color 350ms;\r\n}.fieldset-list li:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n#screen-cover-menu {display: none;}\r\n#screen-cover-menu.reveal {\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n}\r\n\r\n#menu .project-title {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n}\r\n\r\n#menu .fieldset-options p {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n#menu a {\r\n text-decoration: none;\r\n color: inherit;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n#menu .fieldset-options .menu-item.about {\r\n --icon-size: 50px;\r\n --duration: 3s;\r\n background-size: 700%;\r\n background-position: bottom left;\r\n}\r\n#menu.reveal .fieldset-options .menu-item.about {\r\n background: url(./media/images/background/github-mark.svg);\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n}\r\n@keyframes bg-anim {\r\n to { background-position: calc(var(--icon-size) * 2) calc(var(--icon-size) * -1); }\r\n}\r\n@keyframes bg-zoom-out {\r\n from { background-size: 700%; }\r\n to { background-size: var(--icon-size); }\r\n}\r\n\r\n/* page content */\r\n\r\nbody {background-color: var(--bgc-page);}\r\n\r\n#cards-container {\r\n box-sizing: border-box;\r\n margin: 0;\r\n width: 100vw;\r\n min-width: var(--viewport-min-width);\r\n height: 100vh;\r\n overflow: hidden;\r\n overflow-y: auto;\r\n scroll-behavior: smooth;\r\n}\r\n\r\n.project-item {\r\n box-sizing: border-box;\r\n padding: 1rem;\r\n margin: 1rem;\r\n}\r\n\r\nheader {\r\n position: sticky;\r\n top: 0;\r\n z-index: 1;\r\n justify-content: center;\r\n text-align: center;\r\n height: var(--icon-menu-size);\r\n background-color: var(--bgc-page);\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n\r\n/* cards */\r\n\r\n.card {\r\n isolation: isolate;\r\n box-sizing: border-box;\r\n width: 100%;\r\n box-shadow: var(--card-shadow);\r\n padding: var(--card-padding);\r\n display: grid;\r\n grid-template-columns: auto 1fr auto auto;\r\n grid-template-rows: repeat(6, auto);\r\n grid-template-areas:\r\n \" drag title progress edit \"\r\n \" ..... descr descr descr \"\r\n \" ..... created priority priority \"\r\n \" ..... due priority priority \"\r\n \" ..... tasks tasks tasks \"\r\n \" ..... add-task add-task add-task \";\r\n align-items: center;\r\n overflow: hidden;\r\n} .card.active {\r\n height: auto;\r\n box-shadow: inset 0 0 5rem hsl(240, 70%, 90%);\r\n} .card:not(.active):hover {\r\n background-color: rgba(255, 255, 255, 0.5);\r\n}\r\n\r\n.card:first-of-type { border-radius: var(--card-border-rad) var(--card-border-rad) 0 0; }\r\n.card:last-of-type { border-radius: 0 0 var(--card-border-rad) var(--card-border-rad); }\r\n\r\n.card .title {\r\n font-size: var(--font-size-title);\r\n color: var(--txt-col-1);\r\n cursor: pointer;\r\n padding-left: .5rem;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card .progress {\r\n grid-area: progress;\r\n box-sizing: border-box;\r\n margin-right: 5px;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n border-radius: 50%;\r\n position: relative;\r\n}.card .progress::after {\r\n position: absolute;\r\n content: \"%\";\r\n text-align: center;\r\n font-weight: 900;\r\n inset: 5px;\r\n border-radius: 50%;\r\n background-color: var(--bgc-page);\r\n backdrop-filter: blur(5px);\r\n}\r\n.card .description {\r\n grid-area: descr;\r\n font-size: 1.5rem;\r\n color: var(--txt-col-2);\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 100%;\r\n}\r\n.card .date-creation {\r\n grid-area: created;\r\n}\r\n.card .date-due {\r\n grid-area: due;\r\n}.card .date-due.edit-date-due {\r\n background: url(./media/images/icons/due.svg) no-repeat;\r\n background-size: contain;\r\n padding-left: 1.75rem;\r\n font-size: 1rem;\r\n background-color: white;\r\n}\r\n\r\n/*adding transparency for overflowed text*/\r\n.card .title:not(.edit-title),\r\n.card .description,\r\n.card label,\r\n.project-title,\r\nh1{\r\n mask-image: linear-gradient(to left, transparent, white 50px);\r\n}\r\n\r\n\r\n.card .checklist {\r\n grid-area: tasks;\r\n display: grid;\r\n}\r\n.card .edit-priority {\r\n grid-area: priority;\r\n display: grid;\r\n grid-template-rows: repeat(2, 1fr);\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n}\r\n.card .edit-priority input[type=\"range\"] {\r\n width: 80%;\r\n justify-self: center;\r\n}\r\n\r\n.create-task-div {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n height: calc(var(--icon-size) * 1.4);\r\n}\r\n.create-task-div p {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 0%;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n.create-task-div:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n.create-task-div:hover p {\r\n width: calc(100% - var(--icon-size) * 1.3);\r\n}\r\n\r\n.card-icon.create-task.create-todo {\r\n margin-left: 0;\r\n}\r\n.card.todo-add-div:hover .card-icon.create-task.create-todo {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n.todo-add-div {\r\n box-sizing: border-box;\r\n display: flex;\r\n align-items: center;\r\n padding: .5rem .25rem;\r\n gap: .5rem;\r\n cursor: pointer;\r\n}\r\n\r\n.todo-add-div p {\r\n font-size: 2rem;\r\n font-weight: 600;\r\n overflow: hidden;\r\n width: 0rem;\r\n white-space: nowrap;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n\r\n.todo-add-div:hover p {\r\n width: 15rem;\r\n}\r\n\r\n\r\n/* card priority indicator */\r\n\r\n.card[data-priority=\"low\"] {\r\n background: linear-gradient(to right,lime, rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"low\"].active {\r\n background: linear-gradient(to bottom,lime, rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"middle\"] {\r\n background: linear-gradient(to right, goldenrod, rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"middle\"].active {\r\n background: linear-gradient(to bottom, goldenrod, rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"high\"] {\r\n background: linear-gradient(to right, orangered, rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"high\"].active {\r\n background: linear-gradient(to bottom, orangered, rgba(0, 128, 0, 0) 60px);\r\n}\r\n\r\n\r\n\r\n/* card details transition */\r\n\r\n.card .description,\r\n.card .date-creation,\r\n.card .date-due,\r\n.card ul li {\r\n overflow: hidden;\r\n transition: var(--card-open-transition);\r\n height: 0rem;\r\n}\r\n.card.active .description,\r\n.card.active .date-creation,\r\n.card.active .date-due,\r\n.card.active ul li {\r\n overflow: visible;\r\n height: 1.75rem;\r\n}\r\n/*individual settings*/\r\n.card .description { margin-top: 0rem; margin-bottom: 0rem;}\r\n.card.active .description { margin-top: 1rem; margin-bottom: .5rem;}\r\n.card.active ul li { height: 2.5rem;}\r\n.card .date-due {margin-bottom: 0rem; }\r\n.card.active .date-due {margin-bottom: .5rem; }\r\n\r\n.card ul li:nth-child(1) { transition-delay: 25ms; }\r\n.card ul li:nth-child(2) { transition-delay: 50ms; }\r\n.card ul li:nth-child(3) { transition-delay: 75ms; }\r\n.card ul li:nth-child(4) { transition-delay: 100ms; }\r\n.card ul li:nth-child(5) { transition-delay: 125ms; }\r\n.card ul li:nth-child(6) { transition-delay: 150ms; }\r\n.card ul li:nth-child(7) { transition-delay: 175ms; }\r\n.card ul li:nth-child(8) { transition-delay: 200ms; }\r\n.card ul li:nth-child(9) { transition-delay: 225ms; }\r\n.card ul li:nth-child(10) { transition-delay: 250ms; }\r\n.card ul li:nth-child(11) { transition-delay: 275ms; }\r\n.card ul li:nth-child(12) { transition-delay: 300ms; }\r\n.card ul li:nth-child(13) { transition-delay: 325ms; }\r\n.card ul li:nth-child(14) { transition-delay: 350ms; }\r\n.card ul li:nth-child(15) { transition-delay: 375ms; }\r\n.card ul li:nth-child(16) { transition-delay: 400ms; }\r\n.card ul li:nth-child(17) { transition-delay: 425ms; }\r\n.card ul li:nth-child(18) { transition-delay: 450ms; }\r\n.card ul li:nth-child(19) { transition-delay: 475ms; }\r\n.card ul li:nth-child(1n+20) { transition-delay: 500ms; }\r\n\r\n\r\n\r\n/* card icons */\r\n\r\n.card li input[type=\"checkbox\"] {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n appearance: none;\r\n cursor: pointer;\r\n}\r\n.card li input[type=\"checkbox\"]::before {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-color: rgba(0,0,0,.03);\r\n box-shadow: .1rem .1rem .1rem white,\r\n inset .1rem .1rem .25rem rgba(0,0,0,.1);\r\n border-radius: .25rem;\r\n}\r\n.card li input[type=\"checkbox\"]::after {\r\n --check-anim-duration: 200ms;\r\n position: absolute;\r\n content: \"\";\r\n inset: -7px;\r\n background-color: red;\r\n clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%, 1% 75%);\r\n animation: checkmark-backwards var(--check-anim-duration) ease-out forwards;\r\n}\r\n.card li input[type=\"checkbox\"]:checked::after {\r\n animation: checkmark-forwards var(--check-anim-duration) ease-in forwards;\r\n}\r\n@keyframes checkmark-forwards {\r\n 0% {opacity: 0;}\r\n 1% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 30% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 100% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n} @keyframes checkmark-backwards {\r\n 0% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 70% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 99% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 100% {opacity: 0;}\r\n}\r\n\r\n.card label,\r\n.card .edit-label {\r\n font-size: 1.25rem;\r\n color: var(--txt-col-2);\r\n background: linear-gradient(to right, transparent 0%, rgba(255, 255, 255, 0.5), transparent 100%) no-repeat;\r\n background-size: 100%;\r\n transition: background-position 500ms;\r\n background-position-x: -100vw;\r\n cursor: pointer;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card li input[type=\"checkbox\"]:checked + label {\r\n text-decoration: line-through;\r\n color: var(--txt-col-3);\r\n background-position-x: 100vw;\r\n}\r\n\r\n.card.edit-mode .card-icon.remove-task {\r\n background: url(./media/images/icons/remove-task.svg) center no-repeat;\r\n background-size: 80%;\r\n}\r\n\r\n.card-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n cursor: pointer;\r\n appearance: none;\r\n background-size: 100%;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\n.card-icon::after {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-size: 100%;\r\n background-position: center;\r\n}\r\n\r\n.card-icon.icon-drag {\r\n cursor: ns-resize;\r\n}\r\n\r\n.card-icon.icon-pin::after {\r\n background-image: url(./media/images/icons/pin.svg);\r\n} .card-icon.icon-pin:checked::after {\r\n background-image: url(./media/images/icons/pin-active.svg);\r\n}\r\n.card-icon.icon-edit::after {\r\n background-image: url(./media/images/icons/edit.svg);\r\n} .card-icon.icon-edit:checked::after {\r\n background-image: url(./media/images/icons/edit-active.svg);\r\n}\r\n.card-icon.icon-fav::after {\r\n background-image: url(./media/images/icons/fav.svg);\r\n}.card-icon.icon-fav:checked::after {\r\n background-image: url(./media/images/icons/fav-active.svg);\r\n}\r\n\r\n.card ul li {\r\n display: grid;\r\n grid-template-columns: auto 1fr auto;\r\n gap: .5rem;\r\n align-items: center;\r\n}\r\n\r\n.card .add-task {\r\n grid-area: add-task;\r\n /* display: grid; */\r\n grid-template-columns: var(--icon-size) 1fr;\r\n grid-template-areas: \". plus\";\r\n overflow: hidden;\r\n}\r\n.card .create-task,\r\n.create-task {\r\n grid-area: plus;\r\n background-image: url(./media/images/icons/add-task.svg);\r\n width: calc(var(--icon-size) * 1.1) ;\r\n height: calc(var(--icon-size) * 1.1) ;\r\n margin-left: 7px;\r\n}\r\n.card .create-task:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-spin-90 { to {rotate: 90deg;}}\r\n\r\n.edit-buttons {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n}\r\n.delete-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n margin-left: 5px;\r\n align-items: center;\r\n}.icon-trash,\r\n.icon-trash-lid {\r\n position: absolute;\r\n transition: rotate 300ms;\r\n}\r\n.icon-trash { transform-origin: 100% 0%;}\r\n.icon-trash-lid { transform-origin: 250% 0%;}\r\n.delete-icon:hover .icon-trash { rotate: -7deg;}\r\n.delete-icon:hover .icon-trash-lid { rotate: 7deg; }\r\n.delete-icon:active .icon-trash { transition: rotate 2s; rotate: -18deg; }\r\n.delete-icon:active .icon-trash-lid { transition: rotate 2s; rotate: 10deg; }\r\n\r\n.delete-icon.deleting {\r\n /*item is deleted after animation ends*/\r\n animation: deleting var(--deletion-delay) linear;\r\n}\r\n.delete-icon.deleting::after,\r\n.delete-icon.deleting::before {\r\n position: absolute;\r\n content: \"⚠️Deleting...⚠️\";\r\n font-size: 1.5rem;\r\n color: var(--bgc-page);\r\n padding: .25rem;\r\n box-shadow: var(--card-shadow);\r\n pointer-events: none;\r\n transform: translate(-100%, -10%);\r\n background-color: #444;\r\n animation: deleting-bg var(--deletion-delay) ease-out;\r\n clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);\r\n}\r\n.delete-icon.deleting::after {\r\n background-color: red;\r\n animation: deleting-text var(--deletion-delay) ease-out;\r\n\r\n}\r\n\r\n@keyframes deleting {\r\n to {\r\n filter: drop-shadow(0 0 .5rem red);\r\n }\r\n}\r\n@keyframes deleting-text {\r\n from {clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);}\r\n to {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n@keyframes deleting-bg { /* this disappears the bar if fav cancels deletion*/\r\n 0%, 100% {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n\r\n.card-icon.icon-edit:hover,\r\n.card-icon.icon-pin:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n transform-origin: 0% 100%;\r\n}\r\n@keyframes icon-shake {\r\n 0%, 100% { rotate: 0deg;}\r\n 10% { rotate: 5deg;}\r\n 20% { rotate: -5deg;}\r\n 30% { rotate: 4deg;}\r\n 40% { rotate: -4deg;}\r\n 50% { rotate: 3deg;}\r\n 60% { rotate: -3deg;}\r\n 70% { rotate: 2deg;}\r\n 80% { rotate: -2deg;}\r\n 90% { rotate: 1deg;}\r\n}\r\n\r\n.card-icon.icon-fav:hover{\r\n animation: icon-spin-72 var(--hover-anim-duration);\r\n transform-origin: 50% 55%;\r\n}\r\n@keyframes icon-spin-72 { to {rotate: 72deg;} }\r\n\r\n.card-icon.icon-fav.shake {\r\n animation: icon-fav-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-fav-shake {\r\n 0%, 100% {\r\n rotate: 0deg;\r\n filter: drop-shadow(0 0 5px goldenrod)\r\n brightness(150%);\r\n }\r\n 10% { rotate: 10deg;}\r\n 20% { rotate: -10deg;}\r\n 30% { rotate: 8deg;}\r\n 40% { rotate: -8deg;}\r\n 50% { rotate: 6deg;}\r\n 60% { rotate: -6deg;}\r\n 70% { rotate: 4deg;}\r\n 80% { rotate: -4deg;}\r\n 90% { rotate: 2deg;}\r\n}\r\n\r\n\r\n\r\n/* edit mode content status */\r\n\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n border-radius: .25rem;\r\n background-color: white;\r\n border: none;\r\n box-shadow: inset .15rem .15rem .15rem rgba(0,0,0,.25);\r\n} input[type=\"text\"].edit-label {\r\n background-color: white;\r\n}\r\n\r\n.card.edit-mode input[type=\"text\"], input[type=\"date\"] {\r\n cursor: text;\r\n}\r\n\r\n.card.edit-mode .title { display: none; }\r\n.card .edit-title { display: none; font-weight: 600;}\r\n.card.edit-mode .edit-title { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .description { display: none; }\r\n.card .edit-description { display: none; }\r\n.card.edit-mode .edit-description { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .date-due { display: none; }\r\n.card .edit-date-due { display: none; }\r\n.card.edit-mode .edit-date-due { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .edit-priority {display: grid;}\r\n.card .edit-priority {display: none;}\r\n\r\n.card.edit-mode li label { display: none; }\r\n.card .edit-label { display: none; }\r\n.card.edit-mode .edit-label { display: block; box-sizing: border-box; }\r\n.card input[type=\"checkbox\"]:checked ~ .edit-label {\r\n text-decoration: line-through rgba(0,0,0,.25);\r\n}\r\n\r\n.card.edit-mode .add-task {display: grid;}\r\n.card .add-task {display: none;}\r\n\r\n#menu .menu-tasks .edit-project { display: none; }\r\n#menu .menu-tasks.edit-mode .edit-project { display: block; }\r\n#menu .menu-tasks .project-title { display: block; }\r\n#menu .menu-tasks.edit-mode .project-title { display: none; }\r\n\r\n\r\n\r\n/* dragged card */\r\n.card.dragging-card {\r\n position: absolute;\r\n background-color: white;\r\n pointer-events: none;\r\n border-radius: var(--card-border-rad);\r\n transition: none;\r\n}\r\n.card.dragging-card .edit-buttons {\r\n filter: grayscale(100%);\r\n /* display: none; */\r\n}\r\n\r\n\r\n\r\n/* search results */\r\n\r\n.card.search-result {\r\n grid-template-areas:\r\n \" title progress \"\r\n \" descr descr \"\r\n \" created created \"\r\n \" due due \";\r\n grid-template-columns: 1fr auto;\r\n padding-left: 1rem;\r\n border-radius: 1rem;\r\n margin-bottom: 1rem;\r\n cursor: pointer;\r\n box-shadow: var(--card-shadow);\r\n transition: background-color 150ms ease-in-out;\r\n}\r\n.card.search-result:hover { background-color: hsl(240, 67%, 98%); }\r\n.card.search-result:active { box-shadow: var(--card-shadow-invert); }\r\n\r\n\r\n.card.search-result .description { margin: .5rem 0 0 0; }\r\n.card.search-result .date-creation { margin-top: .5rem; }\r\n.card.search-result .date-due { margin: 0; }\r\n.card.search-result .date-due:empty { display: none; }\r\n.card.search-result .title { padding-left: 0; }\r\n\r\n\r\n\r\n/* responsiveness */\r\n\r\n@media screen and (min-width: 1000px) {\r\n body{\r\n display: grid;\r\n grid-template-columns: var(--menu-width) 1fr;\r\n grid-template-areas: \"sidebar cards\";\r\n }\r\n #menu-button,\r\n #screen-cover-menu {\r\n display: none !important;\r\n }\r\n #menu {\r\n position: relative;\r\n display: block;\r\n grid-area: sidebar;\r\n top: 0;\r\n height: 100vh;\r\n max-height: none;\r\n }\r\n\r\n #cards-container {\r\n grid-area: cards;\r\n width: 100%;\r\n }\r\n\r\n #menu .fieldset-options .menu-item.about:hover {\r\n background: url(./media/images/background/github-mark.svg);\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n }\r\n}\r\n\r\n@media screen and (min-width: 1500px) {\r\n body{\r\n grid-template-columns: var(--menu-width-widescreen) 1fr;\r\n }\r\n #menu {\r\n width: var(--menu-width-widescreen);\r\n }\r\n}\r\n\r\n\r\n\r\n/* for general use */\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.opacity-zero {\r\n opacity: 0;\r\n}\r\n\r\n.margin-top {\r\n margin-top: var(--card-drag-padding);\r\n}\r\n.margin-bottom {\r\n margin-bottom: var(--card-drag-padding);\r\n}\r\n\r\n\r\n/*for testing*/\r\n/* * {\r\n outline: 1px solid gray;\r\n} */"],"sourceRoot":""}]); +___CSS_LOADER_EXPORT___.push([module.id, ":root {\r\n --bgc-page: lavender;\r\n --card-shadow: .25rem .25rem .25rem rgba(0,0,0,.1),\r\n inset .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --card-shadow-invert: inset .25rem .25rem .25rem rgba(0,0,0,.1),\r\n .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --card-shadow-open: inset 0 0 5rem hsl(240, 70%, 90%);\r\n --card-bg-hover: rgba(255, 255, 255, 0.5);\r\n --label-bg-anim: linear-gradient(\r\n to right,\r\n transparent 0%, rgba(255, 255, 255, 0.5),\r\n transparent 100%\r\n ) no-repeat;\r\n --icon-size: 30px;\r\n --icon-menu-size: 40px;\r\n --icon-check-size: 20px;\r\n --txt-col-1: #000;\r\n --txt-col-2: #444;\r\n --txt-col-3: #666;\r\n --font-size-title: 1.75rem;\r\n --card-border-rad: .75rem;\r\n --card-open-transition: 250ms;\r\n --card-padding: .5rem;\r\n --card-drag-padding: calc(var(--font-size-title) + var(--card-padding) * 2.75);\r\n --hover-anim-duration: 250ms;\r\n --menu-width: 350px;\r\n --menu-width-widescreen: 400px;\r\n --viewport-min-width: 600px;\r\n --deletion-delay: 2s; \r\n --hover-delay: 150ms;\r\n --menu-btn-bg-col: #aaa;\r\n --menu-bg-col: rgba(255, 255, 255, 0.5);\r\n --chk-bg-col: none;\r\n --priority-low: lime;\r\n --priority-mid: goldenrod;\r\n --priority-high: orangered;\r\n}\r\n\r\n:root.dark {\r\n --bgc-page: hsl(240, 20%, 30%);\r\n --card-shadow: .25rem .25rem .25rem rgba(0,0,0,.1),\r\n inset .25rem .25rem .25rem rgba(255, 255, 255, .1);\r\n --card-shadow-invert: inset .25rem .25rem .25rem rgba(0,0,0,.1),\r\n .25rem .25rem .25rem rgba(255,255,255, .1);\r\n --card-shadow-open: inset 0 0 5rem hsl(240, 20%, 25%);\r\n --card-bg-hover: rgba(70, 70, 70, 0.5);\r\n --label-bg-anim: linear-gradient(\r\n to right,\r\n transparent 0%, rgba(255, 255, 255, 0.1),\r\n transparent 100%\r\n ) no-repeat;\r\n --txt-col-1: #ccc;\r\n --txt-col-2: #aaa;\r\n --txt-col-3: #888;\r\n --menu-btn-bg-col: #555;\r\n --menu-bg-col: rgba(64, 64, 64, 0.5);\r\n --chk-bg-col: rgba(0, 0, 0, 0.1);\r\n --priority-low: hsl(120, 50%, 40%);\r\n --priority-mid: hsl(43, 40%, 45%);\r\n --priority-high: hsl(16, 50%, 40%);\r\n}\r\n\r\n/* default values reset */\r\nbody { padding: 0; margin: 0; min-width: var(--viewport-min-width);}\r\nol, ul { padding: 0; margin: 0; list-style-type: none; }\r\nh1, h2, p {margin: 0;}\r\nh1 {\r\n color: var(--txt-col-1);\r\n font-size: 2rem;\r\n font-weight: 900;\r\n text-transform: uppercase;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-shadow: 1px 1px 1px hsl(240, 30%, 50%);\r\n}\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n* {font-family: 'Times New Roman', Times, serif;}\r\n\r\ninput::selection {\r\n color: white;\r\n background-color: hsl(240, 80%, 70%);\r\n}\r\ninput:not([type=\"checkbox\"]):focus {\r\n outline: 4px solid rgba(46, 16, 192, .25);\r\n transition: 0ms;\r\n}\r\n\r\n/* menu */\r\n\r\n#menu-button {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 2;\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");\r\n background-size: 100%;\r\n width: var(--icon-menu-size);\r\n height: var(--icon-menu-size);\r\n box-shadow: var(--card-shadow);\r\n background-color: var(--menu-btn-bg-col);\r\n transition: background-color 150ms;\r\n}\r\n#menu-button:hover {\r\n cursor: pointer;\r\n background-color: white;\r\n}\r\n\r\n#menu {\r\n z-index: 2;\r\n position: absolute;\r\n box-sizing: border-box;\r\n padding: .5rem;\r\n top: var(--icon-menu-size);\r\n left: 0;\r\n max-height: calc(100vh - var(--icon-menu-size));\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n width: var(--menu-width);\r\n box-shadow: var(--card-shadow);\r\n backdrop-filter: blur(5px);\r\n color: var(--txt-col-1);\r\n background-color: var(--menu-bg-col);\r\n font-size: 1.75rem;\r\n display: none;\r\n}\r\n#menu.reveal { display: block; }\r\n\r\n#menu .menu-item {\r\n display: grid;\r\n grid-template-columns: 1fr auto auto;\r\n align-items: center;\r\n height: calc(var(--icon-menu-size) * 1.25);\r\n}\r\n\r\n#menu .menu-item p {\r\n margin: .5rem 0;\r\n width: 200px;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n#menu .menu-item .edit-project {\r\n font-size: 1.75rem;\r\n width: 200px;\r\n}\r\n\r\n.fieldset-list li {\r\n transition: padding 200ms, background-color 350ms;\r\n}.fieldset-list li:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n#screen-cover-menu {display: none;}\r\n#screen-cover-menu.reveal {\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n}\r\n\r\n#menu .project-title {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n}\r\n\r\n#menu .fieldset-options p {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n#menu a {\r\n text-decoration: none;\r\n color: inherit;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n#menu .fieldset-options .menu-item.dark-mode {\r\n display: grid;\r\n grid-template-columns: auto 1fr;\r\n}\r\n\r\n.dark-mode input {\r\n --transition-dur: 350ms;\r\n --transition: background-color calc(var(--transition-dur) * .5) ease-in-out,\r\n transform var(--transition-dur) cubic-bezier(.68,-0.55,.27,1.55);\r\n appearance: unset;\r\n position: relative;\r\n width: calc(var(--icon-size) * 2);\r\n height: var(--icon-size);\r\n margin: 0;\r\n margin-right: .5rem;\r\n border-radius: 1rem;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}.dark-mode input::before {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n border-radius: 1rem;\r\n background-color: var(--bgc-page);\r\n box-shadow: var(--card-shadow-invert);\r\n transition: var(--transition);\r\n}.dark-mode input::after {\r\n position: absolute;\r\n content: \"\";\r\n border-radius: 50%;\r\n height: 100%;\r\n aspect-ratio: 1/1;\r\n background-color: hsl(60, 80%, 70%);\r\n box-shadow: var(--card-shadow);\r\n transition: var(--transition);\r\n}.dark-mode input:checked:before {\r\n background-color: hsl(240, 20%, 40%);\r\n}.dark-mode input:checked::after {\r\n transform: translateX(100%);\r\n background-color: hsl(240, 30%, 75%);\r\n}\r\n.dark-mode label { cursor: pointer; }\r\n\r\n#menu .fieldset-options .menu-item.about {\r\n --icon-size: 50px;\r\n --duration: 3s;\r\n background-size: 700%;\r\n background-position: bottom left;\r\n}\r\n#menu.reveal .fieldset-options .menu-item.about {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ");\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n}\r\n@keyframes bg-anim {\r\n to { background-position: calc(var(--icon-size) * 2) calc(var(--icon-size) * -1); }\r\n}\r\n@keyframes bg-zoom-out {\r\n from { background-size: 700%; }\r\n to { background-size: var(--icon-size); }\r\n}\r\n\r\n/* page content */\r\n\r\nbody {background-color: var(--bgc-page);}\r\n\r\n#cards-container {\r\n box-sizing: border-box;\r\n margin: 0;\r\n width: 100vw;\r\n min-width: var(--viewport-min-width);\r\n height: 100vh;\r\n overflow: hidden;\r\n overflow-y: auto;\r\n scroll-behavior: smooth;\r\n}\r\n\r\n.project-item {\r\n box-sizing: border-box;\r\n padding: 1rem;\r\n margin: 1rem;\r\n}\r\n\r\nheader {\r\n position: sticky;\r\n top: 0;\r\n z-index: 1;\r\n justify-content: center;\r\n text-align: center;\r\n height: var(--icon-menu-size);\r\n background-color: var(--bgc-page);\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n\r\n/* cards */\r\n\r\n.card {\r\n isolation: isolate;\r\n box-sizing: border-box;\r\n width: 100%;\r\n box-shadow: var(--card-shadow);\r\n padding: var(--card-padding);\r\n display: grid;\r\n grid-template-columns: auto 1fr auto auto;\r\n grid-template-rows: repeat(6, auto);\r\n grid-template-areas:\r\n \" drag title progress edit \"\r\n \" ..... descr descr descr \"\r\n \" ..... created priority priority \"\r\n \" ..... due priority priority \"\r\n \" ..... tasks tasks tasks \"\r\n \" ..... add-task add-task add-task \";\r\n align-items: center;\r\n overflow: hidden;\r\n} .card.active {\r\n height: auto;\r\n box-shadow: var(--card-shadow-open);\r\n} .card:not(.active):hover {\r\n background-color: var(--card-bg-hover);\r\n}\r\n\r\n.card:first-of-type { border-radius: var(--card-border-rad) var(--card-border-rad) 0 0; }\r\n.card:last-of-type { border-radius: 0 0 var(--card-border-rad) var(--card-border-rad); }\r\n\r\n.card .title {\r\n font-size: var(--font-size-title);\r\n color: var(--txt-col-1);\r\n cursor: pointer;\r\n padding-left: .5rem;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card .progress {\r\n grid-area: progress;\r\n box-sizing: border-box;\r\n margin-right: 5px;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n border-radius: 50%;\r\n position: relative;\r\n}.card .progress::after {\r\n position: absolute;\r\n content: \"%\";\r\n color: var(--txt-col-1);\r\n text-align: center;\r\n font-weight: 900;\r\n inset: 5px;\r\n border-radius: 50%;\r\n background-color: var(--bgc-page);\r\n backdrop-filter: blur(5px);\r\n}\r\n.card .description {\r\n grid-area: descr;\r\n font-size: 1.5rem;\r\n color: var(--txt-col-2);\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 100%;\r\n}\r\n.card .date-creation {\r\n grid-area: created;\r\n}\r\n.card .date-due {\r\n grid-area: due;\r\n}.card .date-due.edit-date-due {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") no-repeat;\r\n background-size: contain;\r\n padding-left: 1.75rem;\r\n font-size: 1rem;\r\n background-color: white;\r\n}\r\n\r\n/*adding transparency for overflowed text*/\r\n.card .title:not(.edit-title),\r\n.card .description,\r\n.card label,\r\n.project-title,\r\nh1{\r\n mask-image: linear-gradient(to left, transparent, white 50px);\r\n}\r\n\r\n\r\n.card .checklist {\r\n grid-area: tasks;\r\n display: grid;\r\n}\r\n.card .edit-priority {\r\n grid-area: priority;\r\n display: grid;\r\n grid-template-rows: repeat(2, 1fr);\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n}\r\n.card .edit-priority input[type=\"range\"] {\r\n width: 80%;\r\n justify-self: center;\r\n}\r\n\r\n.create-task-div {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n height: calc(var(--icon-size) * 1.4);\r\n}\r\n.create-task-div p {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 0%;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n.create-task-div:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n.create-task-div:hover p {\r\n width: calc(100% - var(--icon-size) * 1.3);\r\n}\r\n\r\n.card-icon.create-task.create-todo {\r\n margin-left: 0;\r\n}\r\n.card.todo-add-div:hover .card-icon.create-task.create-todo {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n.todo-add-div {\r\n box-sizing: border-box;\r\n display: flex;\r\n align-items: center;\r\n padding: .5rem .25rem;\r\n gap: .5rem;\r\n cursor: pointer;\r\n}\r\n\r\n.todo-add-div p {\r\n font-size: 2rem;\r\n font-weight: 600;\r\n overflow: hidden;\r\n width: 0rem;\r\n white-space: nowrap;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n\r\n.todo-add-div:hover p {\r\n width: 15rem;\r\n}\r\n\r\n\r\n/* card priority indicator */\r\n\r\n.card[data-priority=\"low\"] {\r\n background: linear-gradient(to right,var(--priority-low), rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"low\"].active {\r\n background: linear-gradient(to bottom,var(--priority-low), rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"middle\"] {\r\n background: linear-gradient(to right, var(--priority-mid), rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"middle\"].active {\r\n background: linear-gradient(to bottom, var(--priority-mid), rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"high\"] {\r\n background: linear-gradient(to right, var(--priority-high), rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"high\"].active {\r\n background: linear-gradient(to bottom, var(--priority-high), rgba(0, 128, 0, 0) 60px);\r\n}\r\n\r\n\r\n\r\n/* card details transition */\r\n\r\n.card .description,\r\n.card .date-creation,\r\n.card .date-due,\r\n.card ul li {\r\n overflow: hidden;\r\n transition: var(--card-open-transition);\r\n height: 0rem;\r\n}\r\n.card.active .description,\r\n.card.active .date-creation,\r\n.card.active .date-due,\r\n.card.active ul li {\r\n overflow: visible;\r\n height: 1.75rem;\r\n}\r\n/*individual settings*/\r\n.card .description { margin-top: 0rem; margin-bottom: 0rem;}\r\n.card.active .description { margin-top: 1rem; margin-bottom: .5rem;}\r\n.card.active ul li { height: 2.5rem;}\r\n.card .date-due {margin-bottom: 0rem; }\r\n.card.active .date-due {margin-bottom: .5rem; }\r\n\r\n.card ul li:nth-child(1) { transition-delay: 25ms; }\r\n.card ul li:nth-child(2) { transition-delay: 50ms; }\r\n.card ul li:nth-child(3) { transition-delay: 75ms; }\r\n.card ul li:nth-child(4) { transition-delay: 100ms; }\r\n.card ul li:nth-child(5) { transition-delay: 125ms; }\r\n.card ul li:nth-child(6) { transition-delay: 150ms; }\r\n.card ul li:nth-child(7) { transition-delay: 175ms; }\r\n.card ul li:nth-child(8) { transition-delay: 200ms; }\r\n.card ul li:nth-child(9) { transition-delay: 225ms; }\r\n.card ul li:nth-child(10) { transition-delay: 250ms; }\r\n.card ul li:nth-child(11) { transition-delay: 275ms; }\r\n.card ul li:nth-child(12) { transition-delay: 300ms; }\r\n.card ul li:nth-child(13) { transition-delay: 325ms; }\r\n.card ul li:nth-child(14) { transition-delay: 350ms; }\r\n.card ul li:nth-child(15) { transition-delay: 375ms; }\r\n.card ul li:nth-child(16) { transition-delay: 400ms; }\r\n.card ul li:nth-child(17) { transition-delay: 425ms; }\r\n.card ul li:nth-child(18) { transition-delay: 450ms; }\r\n.card ul li:nth-child(19) { transition-delay: 475ms; }\r\n.card ul li:nth-child(1n+20) { transition-delay: 500ms; }\r\n\r\n\r\n\r\n/* card icons */\r\n\r\n.card li input[type=\"checkbox\"] {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n appearance: none;\r\n cursor: pointer;\r\n}\r\n.card li input[type=\"checkbox\"]::before {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-color: rgba(0,0,0,.03);\r\n box-shadow: .1rem .1rem .1rem white,\r\n inset .1rem .1rem .25rem rgba(0,0,0,.1);\r\n border-radius: .25rem;\r\n background-color: var(--chk-bg-col);\r\n}\r\n.card li input[type=\"checkbox\"]::after {\r\n --check-anim-duration: 200ms;\r\n position: absolute;\r\n content: \"\";\r\n inset: -7px;\r\n background-color: red;\r\n clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%, 1% 75%);\r\n animation: checkmark-backwards var(--check-anim-duration) ease-out forwards;\r\n}\r\n.card li input[type=\"checkbox\"]:checked::after {\r\n animation: checkmark-forwards var(--check-anim-duration) ease-in forwards;\r\n}\r\n@keyframes checkmark-forwards {\r\n 0% {opacity: 0;}\r\n 1% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 30% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 100% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n} @keyframes checkmark-backwards {\r\n 0% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 70% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 99% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 100% {opacity: 0;}\r\n}\r\n\r\n.card label,\r\n.card .edit-label {\r\n font-size: 1.25rem;\r\n color: var(--txt-col-2);\r\n background: var(--label-bg-anim);\r\n background-size: 100%;\r\n transition: background-position 500ms;\r\n background-position-x: -100vw;\r\n cursor: pointer;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card li input[type=\"checkbox\"]:checked + label {\r\n text-decoration: line-through;\r\n color: var(--txt-col-3);\r\n background-position-x: 100vw;\r\n}\r\n\r\n.card.edit-mode .card-icon.remove-task {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") center no-repeat;\r\n background-size: 80%;\r\n}\r\n\r\n.card-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n cursor: pointer;\r\n appearance: none;\r\n background-size: 100%;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\n.card-icon::after {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-size: 100%;\r\n background-position: center;\r\n}\r\n\r\n.card-icon.icon-drag {\r\n cursor: ns-resize;\r\n}\r\n\r\n.card-icon.icon-pin::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_4___ + ");\r\n} .card-icon.icon-pin:checked::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_5___ + ");\r\n}\r\n.card-icon.icon-edit::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_6___ + ");\r\n} .card-icon.icon-edit:checked::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_7___ + ");\r\n}\r\n.card-icon.icon-fav::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_8___ + ");\r\n}.card-icon.icon-fav:checked::after {\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_9___ + ");\r\n}\r\n\r\n.card ul li {\r\n display: grid;\r\n grid-template-columns: auto 1fr auto;\r\n gap: .5rem;\r\n align-items: center;\r\n}\r\n\r\n.card .add-task {\r\n grid-area: add-task;\r\n /* display: grid; */\r\n grid-template-columns: var(--icon-size) 1fr;\r\n grid-template-areas: \". plus\";\r\n overflow: hidden;\r\n}\r\n.card .create-task,\r\n.create-task {\r\n grid-area: plus;\r\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_10___ + ");\r\n width: calc(var(--icon-size) * 1.1) ;\r\n height: calc(var(--icon-size) * 1.1) ;\r\n margin-left: 7px;\r\n}\r\n.card .create-task:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-spin-90 { to {rotate: 90deg;}}\r\n\r\n.edit-buttons {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n}\r\n.delete-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n margin-left: 5px;\r\n align-items: center;\r\n}.icon-trash,\r\n.icon-trash-lid {\r\n position: absolute;\r\n transition: rotate 300ms;\r\n}\r\n.icon-trash { transform-origin: 100% 0%;}\r\n.icon-trash-lid { transform-origin: 250% 0%;}\r\n.delete-icon:hover .icon-trash { rotate: -7deg;}\r\n.delete-icon:hover .icon-trash-lid { rotate: 7deg; }\r\n.delete-icon:active .icon-trash { transition: rotate 2s; rotate: -18deg; }\r\n.delete-icon:active .icon-trash-lid { transition: rotate 2s; rotate: 10deg; }\r\n\r\n.delete-icon.deleting {\r\n /*item is deleted after animation ends*/\r\n animation: deleting var(--deletion-delay) linear;\r\n}\r\n.delete-icon.deleting::after,\r\n.delete-icon.deleting::before {\r\n position: absolute;\r\n content: \"⚠️Deleting...⚠️\";\r\n font-size: 1.5rem;\r\n color: var(--bgc-page);\r\n padding: .25rem;\r\n box-shadow: var(--card-shadow);\r\n pointer-events: none;\r\n transform: translate(-100%, -10%);\r\n background-color: #444;\r\n animation: deleting-bg var(--deletion-delay) ease-out;\r\n clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);\r\n}\r\n.delete-icon.deleting::after {\r\n background-color: red;\r\n animation: deleting-text var(--deletion-delay) ease-out;\r\n\r\n}\r\n\r\n@keyframes deleting {\r\n to {\r\n filter: drop-shadow(0 0 .5rem red);\r\n }\r\n}\r\n@keyframes deleting-text {\r\n from {clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);}\r\n to {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n@keyframes deleting-bg { /* this disappears the bar if fav cancels deletion*/\r\n 0%, 100% {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n\r\n.card-icon.icon-edit:hover,\r\n.card-icon.icon-pin:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n transform-origin: 0% 100%;\r\n}\r\n@keyframes icon-shake {\r\n 0%, 100% { rotate: 0deg;}\r\n 10% { rotate: 5deg;}\r\n 20% { rotate: -5deg;}\r\n 30% { rotate: 4deg;}\r\n 40% { rotate: -4deg;}\r\n 50% { rotate: 3deg;}\r\n 60% { rotate: -3deg;}\r\n 70% { rotate: 2deg;}\r\n 80% { rotate: -2deg;}\r\n 90% { rotate: 1deg;}\r\n}\r\n\r\n.card-icon.icon-fav:hover{\r\n animation: icon-spin-72 var(--hover-anim-duration);\r\n transform-origin: 50% 55%;\r\n}\r\n@keyframes icon-spin-72 { to {rotate: 72deg;} }\r\n\r\n.card-icon.icon-fav.shake {\r\n animation: icon-fav-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-fav-shake {\r\n 0%, 100% {\r\n rotate: 0deg;\r\n filter: drop-shadow(0 0 5px goldenrod)\r\n brightness(150%);\r\n }\r\n 10% { rotate: 10deg;}\r\n 20% { rotate: -10deg;}\r\n 30% { rotate: 8deg;}\r\n 40% { rotate: -8deg;}\r\n 50% { rotate: 6deg;}\r\n 60% { rotate: -6deg;}\r\n 70% { rotate: 4deg;}\r\n 80% { rotate: -4deg;}\r\n 90% { rotate: 2deg;}\r\n}\r\n\r\n\r\n\r\n/* edit mode content status */\r\n\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n border-radius: .25rem;\r\n background-color: white;\r\n border: none;\r\n box-shadow: inset .15rem .15rem .15rem rgba(0,0,0,.25);\r\n} input[type=\"text\"].edit-label {\r\n background-color: white;\r\n}\r\n\r\n.card.edit-mode input[type=\"text\"], input[type=\"date\"] {\r\n cursor: text;\r\n}\r\n\r\n.card.edit-mode .title { display: none; }\r\n.card .edit-title { display: none; font-weight: 600;}\r\n.card.edit-mode .edit-title { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .description { display: none; }\r\n.card .edit-description { display: none; }\r\n.card.edit-mode .edit-description { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .date-due { display: none; }\r\n.card .edit-date-due { display: none; }\r\n.card.edit-mode .edit-date-due { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .edit-priority {display: grid;}\r\n.card .edit-priority {display: none;}\r\n\r\n.card.edit-mode li label { display: none; }\r\n.card .edit-label { display: none; }\r\n.card.edit-mode .edit-label { display: block; box-sizing: border-box; }\r\n.card input[type=\"checkbox\"]:checked ~ .edit-label {\r\n text-decoration: line-through rgba(0,0,0,.25);\r\n}\r\n\r\n.card.edit-mode .add-task {display: grid;}\r\n.card .add-task {display: none;}\r\n\r\n#menu .menu-tasks .edit-project { display: none; }\r\n#menu .menu-tasks.edit-mode .edit-project { display: block; }\r\n#menu .menu-tasks .project-title { display: block; }\r\n#menu .menu-tasks.edit-mode .project-title { display: none; }\r\n\r\n\r\n\r\n/* dragged card */\r\n.card.dragging-card {\r\n position: absolute;\r\n background-color: white;\r\n pointer-events: none;\r\n border-radius: var(--card-border-rad);\r\n transition: none;\r\n}\r\n.card.dragging-card .edit-buttons {\r\n filter: grayscale(100%);\r\n /* display: none; */\r\n}\r\n\r\n\r\n\r\n/* search results */\r\n\r\n.card.search-result {\r\n grid-template-areas:\r\n \" title progress \"\r\n \" descr descr \"\r\n \" created created \"\r\n \" due due \";\r\n grid-template-columns: 1fr auto;\r\n padding-left: 1rem;\r\n border-radius: 1rem;\r\n margin-bottom: 1rem;\r\n cursor: pointer;\r\n box-shadow: var(--card-shadow);\r\n transition: background-color 150ms ease-in-out;\r\n}\r\n.card.search-result:hover { background-color: hsl(240, 67%, 98%); }\r\n.card.search-result:active { box-shadow: var(--card-shadow-invert); }\r\n\r\n\r\n.card.search-result .description { margin: .5rem 0 0 0; }\r\n.card.search-result .date-creation { margin-top: .5rem; }\r\n.card.search-result .date-due { margin: 0; }\r\n.card.search-result .date-due:empty { display: none; }\r\n.card.search-result .title { padding-left: 0; }\r\n\r\n\r\n\r\n/* responsiveness */\r\n\r\n@media screen and (min-width: 1000px) {\r\n body{\r\n display: grid;\r\n grid-template-columns: var(--menu-width) 1fr;\r\n grid-template-areas: \"sidebar cards\";\r\n }\r\n #menu-button,\r\n #screen-cover-menu {\r\n display: none !important;\r\n }\r\n #menu {\r\n position: relative;\r\n display: block;\r\n grid-area: sidebar;\r\n top: 0;\r\n height: 100vh;\r\n max-height: none;\r\n }\r\n\r\n #cards-container {\r\n grid-area: cards;\r\n width: 100%;\r\n }\r\n\r\n #menu.reveal .fieldset-options .menu-item.about {\r\n animation: none;\r\n background: none;\r\n }\r\n #menu .fieldset-options .menu-item.about:hover {\r\n background: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ");\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n }\r\n}\r\n\r\n@media screen and (min-width: 1500px) {\r\n body{\r\n grid-template-columns: var(--menu-width-widescreen) 1fr;\r\n }\r\n #menu {\r\n width: var(--menu-width-widescreen);\r\n }\r\n}\r\n\r\n\r\n\r\n/* for general use */\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.opacity-zero {\r\n opacity: 0;\r\n}\r\n\r\n.margin-top {\r\n margin-top: var(--card-drag-padding);\r\n}\r\n.margin-bottom {\r\n margin-bottom: var(--card-drag-padding);\r\n}\r\n\r\n\r\n/*for testing*/\r\n/* * {\r\n outline: 1px solid gray;\r\n} */", "",{"version":3,"sources":["webpack://./src/style.css"],"names":[],"mappings":"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","sourcesContent":[":root {\r\n --bgc-page: lavender;\r\n --card-shadow: .25rem .25rem .25rem rgba(0,0,0,.1),\r\n inset .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --card-shadow-invert: inset .25rem .25rem .25rem rgba(0,0,0,.1),\r\n .25rem .25rem .25rem rgba(255,255,255,.5);\r\n --card-shadow-open: inset 0 0 5rem hsl(240, 70%, 90%);\r\n --card-bg-hover: rgba(255, 255, 255, 0.5);\r\n --label-bg-anim: linear-gradient(\r\n to right,\r\n transparent 0%, rgba(255, 255, 255, 0.5),\r\n transparent 100%\r\n ) no-repeat;\r\n --icon-size: 30px;\r\n --icon-menu-size: 40px;\r\n --icon-check-size: 20px;\r\n --txt-col-1: #000;\r\n --txt-col-2: #444;\r\n --txt-col-3: #666;\r\n --font-size-title: 1.75rem;\r\n --card-border-rad: .75rem;\r\n --card-open-transition: 250ms;\r\n --card-padding: .5rem;\r\n --card-drag-padding: calc(var(--font-size-title) + var(--card-padding) * 2.75);\r\n --hover-anim-duration: 250ms;\r\n --menu-width: 350px;\r\n --menu-width-widescreen: 400px;\r\n --viewport-min-width: 600px;\r\n --deletion-delay: 2s; \r\n --hover-delay: 150ms;\r\n --menu-btn-bg-col: #aaa;\r\n --menu-bg-col: rgba(255, 255, 255, 0.5);\r\n --chk-bg-col: none;\r\n --priority-low: lime;\r\n --priority-mid: goldenrod;\r\n --priority-high: orangered;\r\n}\r\n\r\n:root.dark {\r\n --bgc-page: hsl(240, 20%, 30%);\r\n --card-shadow: .25rem .25rem .25rem rgba(0,0,0,.1),\r\n inset .25rem .25rem .25rem rgba(255, 255, 255, .1);\r\n --card-shadow-invert: inset .25rem .25rem .25rem rgba(0,0,0,.1),\r\n .25rem .25rem .25rem rgba(255,255,255, .1);\r\n --card-shadow-open: inset 0 0 5rem hsl(240, 20%, 25%);\r\n --card-bg-hover: rgba(70, 70, 70, 0.5);\r\n --label-bg-anim: linear-gradient(\r\n to right,\r\n transparent 0%, rgba(255, 255, 255, 0.1),\r\n transparent 100%\r\n ) no-repeat;\r\n --txt-col-1: #ccc;\r\n --txt-col-2: #aaa;\r\n --txt-col-3: #888;\r\n --menu-btn-bg-col: #555;\r\n --menu-bg-col: rgba(64, 64, 64, 0.5);\r\n --chk-bg-col: rgba(0, 0, 0, 0.1);\r\n --priority-low: hsl(120, 50%, 40%);\r\n --priority-mid: hsl(43, 40%, 45%);\r\n --priority-high: hsl(16, 50%, 40%);\r\n}\r\n\r\n/* default values reset */\r\nbody { padding: 0; margin: 0; min-width: var(--viewport-min-width);}\r\nol, ul { padding: 0; margin: 0; list-style-type: none; }\r\nh1, h2, p {margin: 0;}\r\nh1 {\r\n color: var(--txt-col-1);\r\n font-size: 2rem;\r\n font-weight: 900;\r\n text-transform: uppercase;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-shadow: 1px 1px 1px hsl(240, 30%, 50%);\r\n}\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n* {font-family: 'Times New Roman', Times, serif;}\r\n\r\ninput::selection {\r\n color: white;\r\n background-color: hsl(240, 80%, 70%);\r\n}\r\ninput:not([type=\"checkbox\"]):focus {\r\n outline: 4px solid rgba(46, 16, 192, .25);\r\n transition: 0ms;\r\n}\r\n\r\n/* menu */\r\n\r\n#menu-button {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 2;\r\n background-image: url(./media/images/icons/menu.svg);\r\n background-size: 100%;\r\n width: var(--icon-menu-size);\r\n height: var(--icon-menu-size);\r\n box-shadow: var(--card-shadow);\r\n background-color: var(--menu-btn-bg-col);\r\n transition: background-color 150ms;\r\n}\r\n#menu-button:hover {\r\n cursor: pointer;\r\n background-color: white;\r\n}\r\n\r\n#menu {\r\n z-index: 2;\r\n position: absolute;\r\n box-sizing: border-box;\r\n padding: .5rem;\r\n top: var(--icon-menu-size);\r\n left: 0;\r\n max-height: calc(100vh - var(--icon-menu-size));\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n width: var(--menu-width);\r\n box-shadow: var(--card-shadow);\r\n backdrop-filter: blur(5px);\r\n color: var(--txt-col-1);\r\n background-color: var(--menu-bg-col);\r\n font-size: 1.75rem;\r\n display: none;\r\n}\r\n#menu.reveal { display: block; }\r\n\r\n#menu .menu-item {\r\n display: grid;\r\n grid-template-columns: 1fr auto auto;\r\n align-items: center;\r\n height: calc(var(--icon-menu-size) * 1.25);\r\n}\r\n\r\n#menu .menu-item p {\r\n margin: .5rem 0;\r\n width: 200px;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n#menu .menu-item .edit-project {\r\n font-size: 1.75rem;\r\n width: 200px;\r\n}\r\n\r\n.fieldset-list li {\r\n transition: padding 200ms, background-color 350ms;\r\n}.fieldset-list li:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n#screen-cover-menu {display: none;}\r\n#screen-cover-menu.reveal {\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n}\r\n\r\n#menu .project-title {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n}\r\n\r\n#menu .fieldset-options p {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n#menu a {\r\n text-decoration: none;\r\n color: inherit;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n#menu .fieldset-options .menu-item.dark-mode {\r\n display: grid;\r\n grid-template-columns: auto 1fr;\r\n}\r\n\r\n.dark-mode input {\r\n --transition-dur: 350ms;\r\n --transition: background-color calc(var(--transition-dur) * .5) ease-in-out,\r\n transform var(--transition-dur) cubic-bezier(.68,-0.55,.27,1.55);\r\n appearance: unset;\r\n position: relative;\r\n width: calc(var(--icon-size) * 2);\r\n height: var(--icon-size);\r\n margin: 0;\r\n margin-right: .5rem;\r\n border-radius: 1rem;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}.dark-mode input::before {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n border-radius: 1rem;\r\n background-color: var(--bgc-page);\r\n box-shadow: var(--card-shadow-invert);\r\n transition: var(--transition);\r\n}.dark-mode input::after {\r\n position: absolute;\r\n content: \"\";\r\n border-radius: 50%;\r\n height: 100%;\r\n aspect-ratio: 1/1;\r\n background-color: hsl(60, 80%, 70%);\r\n box-shadow: var(--card-shadow);\r\n transition: var(--transition);\r\n}.dark-mode input:checked:before {\r\n background-color: hsl(240, 20%, 40%);\r\n}.dark-mode input:checked::after {\r\n transform: translateX(100%);\r\n background-color: hsl(240, 30%, 75%);\r\n}\r\n.dark-mode label { cursor: pointer; }\r\n\r\n#menu .fieldset-options .menu-item.about {\r\n --icon-size: 50px;\r\n --duration: 3s;\r\n background-size: 700%;\r\n background-position: bottom left;\r\n}\r\n#menu.reveal .fieldset-options .menu-item.about {\r\n background: url(./media/images/background/github-mark.svg);\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n}\r\n@keyframes bg-anim {\r\n to { background-position: calc(var(--icon-size) * 2) calc(var(--icon-size) * -1); }\r\n}\r\n@keyframes bg-zoom-out {\r\n from { background-size: 700%; }\r\n to { background-size: var(--icon-size); }\r\n}\r\n\r\n/* page content */\r\n\r\nbody {background-color: var(--bgc-page);}\r\n\r\n#cards-container {\r\n box-sizing: border-box;\r\n margin: 0;\r\n width: 100vw;\r\n min-width: var(--viewport-min-width);\r\n height: 100vh;\r\n overflow: hidden;\r\n overflow-y: auto;\r\n scroll-behavior: smooth;\r\n}\r\n\r\n.project-item {\r\n box-sizing: border-box;\r\n padding: 1rem;\r\n margin: 1rem;\r\n}\r\n\r\nheader {\r\n position: sticky;\r\n top: 0;\r\n z-index: 1;\r\n justify-content: center;\r\n text-align: center;\r\n height: var(--icon-menu-size);\r\n background-color: var(--bgc-page);\r\n box-shadow: var(--card-shadow);\r\n}\r\n\r\n\r\n/* cards */\r\n\r\n.card {\r\n isolation: isolate;\r\n box-sizing: border-box;\r\n width: 100%;\r\n box-shadow: var(--card-shadow);\r\n padding: var(--card-padding);\r\n display: grid;\r\n grid-template-columns: auto 1fr auto auto;\r\n grid-template-rows: repeat(6, auto);\r\n grid-template-areas:\r\n \" drag title progress edit \"\r\n \" ..... descr descr descr \"\r\n \" ..... created priority priority \"\r\n \" ..... due priority priority \"\r\n \" ..... tasks tasks tasks \"\r\n \" ..... add-task add-task add-task \";\r\n align-items: center;\r\n overflow: hidden;\r\n} .card.active {\r\n height: auto;\r\n box-shadow: var(--card-shadow-open);\r\n} .card:not(.active):hover {\r\n background-color: var(--card-bg-hover);\r\n}\r\n\r\n.card:first-of-type { border-radius: var(--card-border-rad) var(--card-border-rad) 0 0; }\r\n.card:last-of-type { border-radius: 0 0 var(--card-border-rad) var(--card-border-rad); }\r\n\r\n.card .title {\r\n font-size: var(--font-size-title);\r\n color: var(--txt-col-1);\r\n cursor: pointer;\r\n padding-left: .5rem;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card .progress {\r\n grid-area: progress;\r\n box-sizing: border-box;\r\n margin-right: 5px;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n border-radius: 50%;\r\n position: relative;\r\n}.card .progress::after {\r\n position: absolute;\r\n content: \"%\";\r\n color: var(--txt-col-1);\r\n text-align: center;\r\n font-weight: 900;\r\n inset: 5px;\r\n border-radius: 50%;\r\n background-color: var(--bgc-page);\r\n backdrop-filter: blur(5px);\r\n}\r\n.card .description {\r\n grid-area: descr;\r\n font-size: 1.5rem;\r\n color: var(--txt-col-2);\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 100%;\r\n}\r\n.card .date-creation {\r\n grid-area: created;\r\n}\r\n.card .date-due {\r\n grid-area: due;\r\n}.card .date-due.edit-date-due {\r\n background: url(./media/images/icons/due.svg) no-repeat;\r\n background-size: contain;\r\n padding-left: 1.75rem;\r\n font-size: 1rem;\r\n background-color: white;\r\n}\r\n\r\n/*adding transparency for overflowed text*/\r\n.card .title:not(.edit-title),\r\n.card .description,\r\n.card label,\r\n.project-title,\r\nh1{\r\n mask-image: linear-gradient(to left, transparent, white 50px);\r\n}\r\n\r\n\r\n.card .checklist {\r\n grid-area: tasks;\r\n display: grid;\r\n}\r\n.card .edit-priority {\r\n grid-area: priority;\r\n display: grid;\r\n grid-template-rows: repeat(2, 1fr);\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n}\r\n.card .edit-priority input[type=\"range\"] {\r\n width: 80%;\r\n justify-self: center;\r\n}\r\n\r\n.create-task-div {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n height: calc(var(--icon-size) * 1.4);\r\n}\r\n.create-task-div p {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n width: 0%;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n.create-task-div:hover {\r\n box-shadow: var(--card-shadow);\r\n}\r\n.create-task-div:hover p {\r\n width: calc(100% - var(--icon-size) * 1.3);\r\n}\r\n\r\n.card-icon.create-task.create-todo {\r\n margin-left: 0;\r\n}\r\n.card.todo-add-div:hover .card-icon.create-task.create-todo {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n.todo-add-div {\r\n box-sizing: border-box;\r\n display: flex;\r\n align-items: center;\r\n padding: .5rem .25rem;\r\n gap: .5rem;\r\n cursor: pointer;\r\n}\r\n\r\n.todo-add-div p {\r\n font-size: 2rem;\r\n font-weight: 600;\r\n overflow: hidden;\r\n width: 0rem;\r\n white-space: nowrap;\r\n transition: width var(--hover-anim-duration) ease-in-out var(--hover-delay);\r\n}\r\n\r\n.todo-add-div:hover p {\r\n width: 15rem;\r\n}\r\n\r\n\r\n/* card priority indicator */\r\n\r\n.card[data-priority=\"low\"] {\r\n background: linear-gradient(to right,var(--priority-low), rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"low\"].active {\r\n background: linear-gradient(to bottom,var(--priority-low), rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"middle\"] {\r\n background: linear-gradient(to right, var(--priority-mid), rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"middle\"].active {\r\n background: linear-gradient(to bottom, var(--priority-mid), rgba(0, 128, 0, 0) 60px);\r\n}\r\n.card[data-priority=\"high\"] {\r\n background: linear-gradient(to right, var(--priority-high), rgba(0, 128, 0, 0) 60px);\r\n} .card[data-priority=\"high\"].active {\r\n background: linear-gradient(to bottom, var(--priority-high), rgba(0, 128, 0, 0) 60px);\r\n}\r\n\r\n\r\n\r\n/* card details transition */\r\n\r\n.card .description,\r\n.card .date-creation,\r\n.card .date-due,\r\n.card ul li {\r\n overflow: hidden;\r\n transition: var(--card-open-transition);\r\n height: 0rem;\r\n}\r\n.card.active .description,\r\n.card.active .date-creation,\r\n.card.active .date-due,\r\n.card.active ul li {\r\n overflow: visible;\r\n height: 1.75rem;\r\n}\r\n/*individual settings*/\r\n.card .description { margin-top: 0rem; margin-bottom: 0rem;}\r\n.card.active .description { margin-top: 1rem; margin-bottom: .5rem;}\r\n.card.active ul li { height: 2.5rem;}\r\n.card .date-due {margin-bottom: 0rem; }\r\n.card.active .date-due {margin-bottom: .5rem; }\r\n\r\n.card ul li:nth-child(1) { transition-delay: 25ms; }\r\n.card ul li:nth-child(2) { transition-delay: 50ms; }\r\n.card ul li:nth-child(3) { transition-delay: 75ms; }\r\n.card ul li:nth-child(4) { transition-delay: 100ms; }\r\n.card ul li:nth-child(5) { transition-delay: 125ms; }\r\n.card ul li:nth-child(6) { transition-delay: 150ms; }\r\n.card ul li:nth-child(7) { transition-delay: 175ms; }\r\n.card ul li:nth-child(8) { transition-delay: 200ms; }\r\n.card ul li:nth-child(9) { transition-delay: 225ms; }\r\n.card ul li:nth-child(10) { transition-delay: 250ms; }\r\n.card ul li:nth-child(11) { transition-delay: 275ms; }\r\n.card ul li:nth-child(12) { transition-delay: 300ms; }\r\n.card ul li:nth-child(13) { transition-delay: 325ms; }\r\n.card ul li:nth-child(14) { transition-delay: 350ms; }\r\n.card ul li:nth-child(15) { transition-delay: 375ms; }\r\n.card ul li:nth-child(16) { transition-delay: 400ms; }\r\n.card ul li:nth-child(17) { transition-delay: 425ms; }\r\n.card ul li:nth-child(18) { transition-delay: 450ms; }\r\n.card ul li:nth-child(19) { transition-delay: 475ms; }\r\n.card ul li:nth-child(1n+20) { transition-delay: 500ms; }\r\n\r\n\r\n\r\n/* card icons */\r\n\r\n.card li input[type=\"checkbox\"] {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n appearance: none;\r\n cursor: pointer;\r\n}\r\n.card li input[type=\"checkbox\"]::before {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-color: rgba(0,0,0,.03);\r\n box-shadow: .1rem .1rem .1rem white,\r\n inset .1rem .1rem .25rem rgba(0,0,0,.1);\r\n border-radius: .25rem;\r\n background-color: var(--chk-bg-col);\r\n}\r\n.card li input[type=\"checkbox\"]::after {\r\n --check-anim-duration: 200ms;\r\n position: absolute;\r\n content: \"\";\r\n inset: -7px;\r\n background-color: red;\r\n clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%, 1% 75%);\r\n animation: checkmark-backwards var(--check-anim-duration) ease-out forwards;\r\n}\r\n.card li input[type=\"checkbox\"]:checked::after {\r\n animation: checkmark-forwards var(--check-anim-duration) ease-in forwards;\r\n}\r\n@keyframes checkmark-forwards {\r\n 0% {opacity: 0;}\r\n 1% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 30% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 100% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n} @keyframes checkmark-backwards {\r\n 0% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 85% 0, 100% 10%, 40% 100%);}\r\n 50% {clip-path: polygon(0 75%, 15% 60%, 35% 75%, 43% 81%, 49% 88%, 40% 100%);}\r\n 70% {clip-path: polygon(0 75%, 15% 60%, 21% 66%, 26% 70%, 31% 76%, 9% 86%);}\r\n 99% {opacity: 1; clip-path: polygon(0 75%, 15% 60%, 15% 61%, 16% 62%, 18% 65%, 4% 78%);}\r\n 100% {opacity: 0;}\r\n}\r\n\r\n.card label,\r\n.card .edit-label {\r\n font-size: 1.25rem;\r\n color: var(--txt-col-2);\r\n background: var(--label-bg-anim);\r\n background-size: 100%;\r\n transition: background-position 500ms;\r\n background-position-x: -100vw;\r\n cursor: pointer;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n.card li input[type=\"checkbox\"]:checked + label {\r\n text-decoration: line-through;\r\n color: var(--txt-col-3);\r\n background-position-x: 100vw;\r\n}\r\n\r\n.card.edit-mode .card-icon.remove-task {\r\n background: url(./media/images/icons/remove-task.svg) center no-repeat;\r\n background-size: 80%;\r\n}\r\n\r\n.card-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n cursor: pointer;\r\n appearance: none;\r\n background-size: 100%;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\n.card-icon::after {\r\n position: absolute;\r\n content: \"\";\r\n inset: 0;\r\n background-size: 100%;\r\n background-position: center;\r\n}\r\n\r\n.card-icon.icon-drag {\r\n cursor: ns-resize;\r\n}\r\n\r\n.card-icon.icon-pin::after {\r\n background-image: url(./media/images/icons/pin.svg);\r\n} .card-icon.icon-pin:checked::after {\r\n background-image: url(./media/images/icons/pin-active.svg);\r\n}\r\n.card-icon.icon-edit::after {\r\n background-image: url(./media/images/icons/edit.svg);\r\n} .card-icon.icon-edit:checked::after {\r\n background-image: url(./media/images/icons/edit-active.svg);\r\n}\r\n.card-icon.icon-fav::after {\r\n background-image: url(./media/images/icons/fav.svg);\r\n}.card-icon.icon-fav:checked::after {\r\n background-image: url(./media/images/icons/fav-active.svg);\r\n}\r\n\r\n.card ul li {\r\n display: grid;\r\n grid-template-columns: auto 1fr auto;\r\n gap: .5rem;\r\n align-items: center;\r\n}\r\n\r\n.card .add-task {\r\n grid-area: add-task;\r\n /* display: grid; */\r\n grid-template-columns: var(--icon-size) 1fr;\r\n grid-template-areas: \". plus\";\r\n overflow: hidden;\r\n}\r\n.card .create-task,\r\n.create-task {\r\n grid-area: plus;\r\n background-image: url(./media/images/icons/add-task.svg);\r\n width: calc(var(--icon-size) * 1.1) ;\r\n height: calc(var(--icon-size) * 1.1) ;\r\n margin-left: 7px;\r\n}\r\n.card .create-task:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-spin-90 { to {rotate: 90deg;}}\r\n\r\n.edit-buttons {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n}\r\n.delete-icon {\r\n position: relative;\r\n width: var(--icon-size);\r\n height: var(--icon-size);\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n margin-left: 5px;\r\n align-items: center;\r\n}.icon-trash,\r\n.icon-trash-lid {\r\n position: absolute;\r\n transition: rotate 300ms;\r\n}\r\n.icon-trash { transform-origin: 100% 0%;}\r\n.icon-trash-lid { transform-origin: 250% 0%;}\r\n.delete-icon:hover .icon-trash { rotate: -7deg;}\r\n.delete-icon:hover .icon-trash-lid { rotate: 7deg; }\r\n.delete-icon:active .icon-trash { transition: rotate 2s; rotate: -18deg; }\r\n.delete-icon:active .icon-trash-lid { transition: rotate 2s; rotate: 10deg; }\r\n\r\n.delete-icon.deleting {\r\n /*item is deleted after animation ends*/\r\n animation: deleting var(--deletion-delay) linear;\r\n}\r\n.delete-icon.deleting::after,\r\n.delete-icon.deleting::before {\r\n position: absolute;\r\n content: \"⚠️Deleting...⚠️\";\r\n font-size: 1.5rem;\r\n color: var(--bgc-page);\r\n padding: .25rem;\r\n box-shadow: var(--card-shadow);\r\n pointer-events: none;\r\n transform: translate(-100%, -10%);\r\n background-color: #444;\r\n animation: deleting-bg var(--deletion-delay) ease-out;\r\n clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);\r\n}\r\n.delete-icon.deleting::after {\r\n background-color: red;\r\n animation: deleting-text var(--deletion-delay) ease-out;\r\n\r\n}\r\n\r\n@keyframes deleting {\r\n to {\r\n filter: drop-shadow(0 0 .5rem red);\r\n }\r\n}\r\n@keyframes deleting-text {\r\n from {clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);}\r\n to {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n@keyframes deleting-bg { /* this disappears the bar if fav cancels deletion*/\r\n 0%, 100% {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);}\r\n}\r\n\r\n.card-icon.icon-edit:hover,\r\n.card-icon.icon-pin:hover {\r\n animation: icon-shake var(--hover-anim-duration);\r\n transform-origin: 0% 100%;\r\n}\r\n@keyframes icon-shake {\r\n 0%, 100% { rotate: 0deg;}\r\n 10% { rotate: 5deg;}\r\n 20% { rotate: -5deg;}\r\n 30% { rotate: 4deg;}\r\n 40% { rotate: -4deg;}\r\n 50% { rotate: 3deg;}\r\n 60% { rotate: -3deg;}\r\n 70% { rotate: 2deg;}\r\n 80% { rotate: -2deg;}\r\n 90% { rotate: 1deg;}\r\n}\r\n\r\n.card-icon.icon-fav:hover{\r\n animation: icon-spin-72 var(--hover-anim-duration);\r\n transform-origin: 50% 55%;\r\n}\r\n@keyframes icon-spin-72 { to {rotate: 72deg;} }\r\n\r\n.card-icon.icon-fav.shake {\r\n animation: icon-fav-shake var(--hover-anim-duration);\r\n}\r\n@keyframes icon-fav-shake {\r\n 0%, 100% {\r\n rotate: 0deg;\r\n filter: drop-shadow(0 0 5px goldenrod)\r\n brightness(150%);\r\n }\r\n 10% { rotate: 10deg;}\r\n 20% { rotate: -10deg;}\r\n 30% { rotate: 8deg;}\r\n 40% { rotate: -8deg;}\r\n 50% { rotate: 6deg;}\r\n 60% { rotate: -6deg;}\r\n 70% { rotate: 4deg;}\r\n 80% { rotate: -4deg;}\r\n 90% { rotate: 2deg;}\r\n}\r\n\r\n\r\n\r\n/* edit mode content status */\r\n\r\ninput[type=\"text\"], input[type=\"date\"] {\r\n border-radius: .25rem;\r\n background-color: white;\r\n border: none;\r\n box-shadow: inset .15rem .15rem .15rem rgba(0,0,0,.25);\r\n} input[type=\"text\"].edit-label {\r\n background-color: white;\r\n}\r\n\r\n.card.edit-mode input[type=\"text\"], input[type=\"date\"] {\r\n cursor: text;\r\n}\r\n\r\n.card.edit-mode .title { display: none; }\r\n.card .edit-title { display: none; font-weight: 600;}\r\n.card.edit-mode .edit-title { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .description { display: none; }\r\n.card .edit-description { display: none; }\r\n.card.edit-mode .edit-description { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .date-due { display: none; }\r\n.card .edit-date-due { display: none; }\r\n.card.edit-mode .edit-date-due { display: block; box-sizing: border-box; }\r\n\r\n.card.edit-mode .edit-priority {display: grid;}\r\n.card .edit-priority {display: none;}\r\n\r\n.card.edit-mode li label { display: none; }\r\n.card .edit-label { display: none; }\r\n.card.edit-mode .edit-label { display: block; box-sizing: border-box; }\r\n.card input[type=\"checkbox\"]:checked ~ .edit-label {\r\n text-decoration: line-through rgba(0,0,0,.25);\r\n}\r\n\r\n.card.edit-mode .add-task {display: grid;}\r\n.card .add-task {display: none;}\r\n\r\n#menu .menu-tasks .edit-project { display: none; }\r\n#menu .menu-tasks.edit-mode .edit-project { display: block; }\r\n#menu .menu-tasks .project-title { display: block; }\r\n#menu .menu-tasks.edit-mode .project-title { display: none; }\r\n\r\n\r\n\r\n/* dragged card */\r\n.card.dragging-card {\r\n position: absolute;\r\n background-color: white;\r\n pointer-events: none;\r\n border-radius: var(--card-border-rad);\r\n transition: none;\r\n}\r\n.card.dragging-card .edit-buttons {\r\n filter: grayscale(100%);\r\n /* display: none; */\r\n}\r\n\r\n\r\n\r\n/* search results */\r\n\r\n.card.search-result {\r\n grid-template-areas:\r\n \" title progress \"\r\n \" descr descr \"\r\n \" created created \"\r\n \" due due \";\r\n grid-template-columns: 1fr auto;\r\n padding-left: 1rem;\r\n border-radius: 1rem;\r\n margin-bottom: 1rem;\r\n cursor: pointer;\r\n box-shadow: var(--card-shadow);\r\n transition: background-color 150ms ease-in-out;\r\n}\r\n.card.search-result:hover { background-color: hsl(240, 67%, 98%); }\r\n.card.search-result:active { box-shadow: var(--card-shadow-invert); }\r\n\r\n\r\n.card.search-result .description { margin: .5rem 0 0 0; }\r\n.card.search-result .date-creation { margin-top: .5rem; }\r\n.card.search-result .date-due { margin: 0; }\r\n.card.search-result .date-due:empty { display: none; }\r\n.card.search-result .title { padding-left: 0; }\r\n\r\n\r\n\r\n/* responsiveness */\r\n\r\n@media screen and (min-width: 1000px) {\r\n body{\r\n display: grid;\r\n grid-template-columns: var(--menu-width) 1fr;\r\n grid-template-areas: \"sidebar cards\";\r\n }\r\n #menu-button,\r\n #screen-cover-menu {\r\n display: none !important;\r\n }\r\n #menu {\r\n position: relative;\r\n display: block;\r\n grid-area: sidebar;\r\n top: 0;\r\n height: 100vh;\r\n max-height: none;\r\n }\r\n\r\n #cards-container {\r\n grid-area: cards;\r\n width: 100%;\r\n }\r\n\r\n #menu.reveal .fieldset-options .menu-item.about {\r\n animation: none;\r\n background: none;\r\n }\r\n #menu .fieldset-options .menu-item.about:hover {\r\n background: url(./media/images/background/github-mark.svg);\r\n background-size: var(--icon-size);\r\n animation: bg-anim var(--duration) calc(var(--duration) / 5) infinite linear,\r\n bg-zoom-out var(--duration) cubic-bezier(.08,.82,.17,1) forwards;\r\n }\r\n}\r\n\r\n@media screen and (min-width: 1500px) {\r\n body{\r\n grid-template-columns: var(--menu-width-widescreen) 1fr;\r\n }\r\n #menu {\r\n width: var(--menu-width-widescreen);\r\n }\r\n}\r\n\r\n\r\n\r\n/* for general use */\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.opacity-zero {\r\n opacity: 0;\r\n}\r\n\r\n.margin-top {\r\n margin-top: var(--card-drag-padding);\r\n}\r\n.margin-bottom {\r\n margin-bottom: var(--card-drag-padding);\r\n}\r\n\r\n\r\n/*for testing*/\r\n/* * {\r\n outline: 1px solid gray;\r\n} */"],"sourceRoot":""}]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); @@ -5294,10 +5294,12 @@ _modules_ui_js__WEBPACK_IMPORTED_MODULE_1__.ui.placeCards(0); //search with datalist if possible -//empty state (or main page) +//empty state (or main page, notes included) //add options menu/modal (hotkeys, theme, ) +//dark mode + /***/ }), /***/ "./src/modules/classes.js": @@ -5339,10 +5341,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _todoSample_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./todoSample.js */ "./src/modules/todoSample.js"); /* harmony import */ var _classes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./classes.js */ "./src/modules/classes.js"); /* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isToday/index.js"); -/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isThisWeek/index.js"); -/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isThisMonth/index.js"); -/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isThisYear/index.js"); -/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isFuture/index.js"); +/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isFuture/index.js"); +/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isThisWeek/index.js"); +/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isThisMonth/index.js"); +/* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/isThisYear/index.js"); /* harmony import */ var date_fns__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/format/index.js"); @@ -5493,7 +5495,8 @@ const todoHandler = (() => { const filtered = { title: "Tasks for this week", todos: []}; local.forEach((thisProject, projectIdx) => thisProject.todos.forEach((thisTodo, todoIdx) => { const formatDate = thisTodo.dateDue.split("-").join(","); - if((0,date_fns__WEBPACK_IMPORTED_MODULE_3__["default"])(new Date(formatDate))){ + if((0,date_fns__WEBPACK_IMPORTED_MODULE_3__["default"])(new Date(formatDate)) + &&(0,date_fns__WEBPACK_IMPORTED_MODULE_4__["default"])(new Date(formatDate))){ thisTodo.projectIdx = projectIdx; thisTodo.todoIdx = todoIdx; filtered.todos.push(thisTodo); @@ -5506,7 +5509,8 @@ const todoHandler = (() => { const filtered = { title: "Tasks for this month", todos: []}; local.forEach((thisProject, projectIdx) => thisProject.todos.forEach((thisTodo, todoIdx) => { const formatDate = thisTodo.dateDue.split("-").join(","); - if((0,date_fns__WEBPACK_IMPORTED_MODULE_4__["default"])(new Date(formatDate))){ + if((0,date_fns__WEBPACK_IMPORTED_MODULE_3__["default"])(new Date(formatDate)) + &&(0,date_fns__WEBPACK_IMPORTED_MODULE_5__["default"])(new Date(formatDate))){ thisTodo.projectIdx = projectIdx; thisTodo.todoIdx = todoIdx; filtered.todos.push(thisTodo); @@ -5520,7 +5524,8 @@ const todoHandler = (() => { local.forEach((thisProject, projectIdx) => thisProject.todos.forEach((thisTodo, todoIdx) => { const formatDate = thisTodo.dateDue.split("-").join(","); - if((0,date_fns__WEBPACK_IMPORTED_MODULE_5__["default"])(new Date(formatDate))){ + if((0,date_fns__WEBPACK_IMPORTED_MODULE_3__["default"])(new Date(formatDate)) + &&(0,date_fns__WEBPACK_IMPORTED_MODULE_6__["default"])(new Date(formatDate))){ thisTodo.projectIdx = projectIdx; thisTodo.todoIdx = todoIdx; filtered.todos.push(thisTodo); @@ -5535,8 +5540,9 @@ const todoHandler = (() => { local.forEach((thisProject, projectIdx) => thisProject.todos.forEach((thisTodo, todoIdx) => { const formatDate = thisTodo.dateDue.split("-").join(","); - if(!(0,date_fns__WEBPACK_IMPORTED_MODULE_6__["default"])(new Date(formatDate)) - && !(0,date_fns__WEBPACK_IMPORTED_MODULE_2__["default"])(new Date(formatDate))){ + if(!(0,date_fns__WEBPACK_IMPORTED_MODULE_3__["default"])(new Date(formatDate)) + && !(0,date_fns__WEBPACK_IMPORTED_MODULE_2__["default"])(new Date(formatDate)) + && thisTodo.dateDue.length > 0){ thisTodo.projectIdx = projectIdx; thisTodo.todoIdx = todoIdx; filtered.todos.push(thisTodo); @@ -5584,6 +5590,7 @@ const todoHandler = (() => { function loadSample(){ if(localStorage.length === 0){ localStorage.setItem("todo", JSON.stringify(_todoSample_js__WEBPACK_IMPORTED_MODULE_0__.todoSample)); + localStorage.dark = JSON.stringify(false); } } @@ -5620,11 +5627,20 @@ const todoHandler = (() => { setLocalStorage(local); } + function darkMode(isActive){ + localStorage.dark = JSON.stringify(isActive); + console.log(localStorage.dark); + } + + function isOnDarkMode(){ + return JSON.parse(localStorage?.dark); + } + return { toggleFav, togglePin, getFavStatus, deleteTodo, taskCheck, deleteTask, editTitle, editDescription, editDateDue, editLabel, createTask, getProjectsTitles, deleteProject, changePriority, getProject, createTodo, createProject, editProjectTitle, loadSample, - moveDraggedCard } + moveDraggedCard, darkMode, isOnDarkMode } })(); /***/ }), @@ -5774,6 +5790,9 @@ const ui = (() => { //create example projects if there's no localStorage _todoHandler_js__WEBPACK_IMPORTED_MODULE_0__.todoHandler.loadSample(); + //set dark mode if left active + loadDarkMode(); + const menuBtn = document.createElement("div"); menuBtn.id = "menu-button"; menuBtn.addEventListener("click", toggleMenu); @@ -5835,7 +5854,20 @@ const ui = (() => { const optionsList = document.createElement("ul"); - optionsList.classList.add("fieldset-list") + optionsList.classList.add("fieldset-list"); + + const darkModeLi = document.createElement("li"); + darkModeLi.classList.add("menu-item", "dark-mode"); + const darkModeCheckbox = document.createElement("input"); + darkModeCheckbox.type = "checkbox"; + darkModeCheckbox.id = "dark-mode"; + darkModeCheckbox.checked = _todoHandler_js__WEBPACK_IMPORTED_MODULE_0__.todoHandler.isOnDarkMode(); + darkModeCheckbox.addEventListener("change", toggleDarkMode); + const darkModeLabel = document.createElement("label"); + darkModeLabel.innerText = "Dark mode"; + darkModeLabel.htmlFor = darkModeCheckbox.id; + darkModeLi.append(darkModeCheckbox, darkModeLabel); + const aboutLi = document.createElement("li"); aboutLi.classList.add("menu-item", "about"); const aboutDivPara = document.createElement("p"); @@ -5846,7 +5878,7 @@ const ui = (() => { aboutDivPara.append(aboutLink); aboutLi.append(aboutDivPara); - optionsList.append(aboutLi); + optionsList.append(darkModeLi, aboutLi); fieldsetOptions.append(optionsList); fieldsetOptions.append(legendOptions); @@ -5935,6 +5967,7 @@ const ui = (() => { const completed = todo.checks.filter(item => item.isDone).length; const percentage = completed * 100 / todo.checks.length; progress.style.background = `conic-gradient(#2e10c0 ${percentage}%, transparent ${percentage}%, transparent 100%)` + progress.style.opacity = todo.checks.length === 0 ? "0%" : "100%"; const description = document.createElement("p"); description.classList.add("description"); @@ -6655,6 +6688,21 @@ const ui = (() => { percentageDiv.style.opacity = thisProject.checks.length === 0 ? "0%" : "100%"; } + function loadDarkMode(){ + if(_todoHandler_js__WEBPACK_IMPORTED_MODULE_0__.todoHandler.isOnDarkMode()) { + const root = document.querySelector(":root"); + root.classList.add("dark"); + }; + } + + function toggleDarkMode(){ + const root = document.querySelector(":root"); + + this.checked ? root.classList.add("dark") + : root.classList.remove("dark"); + _todoHandler_js__WEBPACK_IMPORTED_MODULE_0__.todoHandler.darkMode(this.checked); + } + return { placeCards, loadMenu }; })(); @@ -6806,4 +6854,4 @@ module.exports = __webpack_require__.p + "3986a511b137d999737d.svg"; /******/ var __webpack_exports__ = (__webpack_exec__("./src/index.js")); /******/ } ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssWUFBWSxXQUFXLE1BQU0sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLHNCQUFzQixNQUFNLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sT0FBTyxNQUFNLEtBQUssc0JBQXNCLE1BQU0sS0FBSyxzQkFBc0IsdUJBQXVCLE9BQU8sYUFBYSx3QkFBd0IsTUFBTSxZQUFZLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsUUFBUSxXQUFXLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLFdBQVcsT0FBTyxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sd0JBQXdCLDBCQUEwQixNQUFNLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxXQUFXLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssVUFBVSxXQUFXLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLFlBQVksVUFBVSxZQUFZLFFBQVEsS0FBSyxZQUFZLFdBQVcsS0FBSyxLQUFLLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE1BQU0sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVks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QUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUscUVBQWU7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLHFFQUFlO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxxRUFBZTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLG1FQUFpQjtBQUM1QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLG1FQUFpQjtBQUM1QixHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLHFFQUFlO0FBQzFCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsV0FBVyxxRUFBZTtBQUMxQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLG1FQUFpQjtBQUM1QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLG1FQUFp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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsV0FBVztBQUM1RDtBQUNBLGlEQUFpRCxXQUFXO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1FQUFzQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxXQUFXLGlCQUFpQixXQUFXO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsb0RBQU0sVUFBVSxvREFBUSxrQ0FBa0M7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxvREFBTSxVQUFVLG9EQUFRLDhCQUE4QjtBQUM5RCxVQUFVLG9EQUFPO0FBQ2pCLFlBQVksb0RBQWtCO0FBQzlCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrRUFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtRUFBc0I7QUFDOUM7QUFDQSx1RUFBdUUsV0FBVyxvQkFBb0IsUUFBUTtBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxXQUFXLGlCQUFpQixXQUFXO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vc3JjL3N0eWxlLmNzcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ0lTT1dlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcm91bmRpbmdNZXRob2RzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9jb25zdGFudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJbkhvdXJzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZGlmZmVyZW5jZUluTWludXRlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJblNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9mb3JtYXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9nZXRRdWFydGVyL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaW50bEZvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNEYXRlL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNGdXR1cmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1NhbWVEYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1NhbWVNb250aC9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzU2FtZVdlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1NhbWVZZWFyL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNUaGlzTW9udGgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1RoaXNXZWVrL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNUaGlzWWVhci9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVG9kYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1ZhbGlkL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL21hdGNoL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2VJU08vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdGFydE9mRGF5L2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3RhcnRPZldlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdWJNaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS90b0RhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vc3JjL3N0eWxlLmNzcz83MTYzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL3NyYy9tb2R1bGVzL2NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vc3JjL21vZHVsZXMvdG9kb0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vc3JjL21vZHVsZXMvdG9kb1NhbXBsZS5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9zcmMvbW9kdWxlcy91aS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gPSBuZXcgVVJMKFwiLi9tZWRpYS9pbWFnZXMvaWNvbnMvbWVudS5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9iYWNrZ3JvdW5kL2dpdGh1Yi1tYXJrLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL2R1ZS5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9yZW1vdmUtdGFzay5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9waW4uc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzVfX18gPSBuZXcgVVJMKFwiLi9tZWRpYS9pbWFnZXMvaWNvbnMvcGluLWFjdGl2ZS5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9lZGl0LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF83X19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL2VkaXQtYWN0aXZlLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF84X19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL2Zhdi5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfOV9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9mYXYtYWN0aXZlLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xMF9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9hZGQtdGFzay5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzVfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF81X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF82X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzdfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzhfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF84X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF85X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfOV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMTBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xMF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdCB7XFxyXFxuICAtLWJnYy1wYWdlOiBsYXZlbmRlcjtcXHJcXG4gIC0tY2FyZC1zaGFkb3c6IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMCwwLDAsLjEpLFxcclxcbiAgICBpbnNldCAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDI1NSwyNTUsMjU1LC41KTtcXHJcXG4gIC0tY2FyZC1zaGFkb3ctaW52ZXJ0OiBpbnNldCAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKSxcXHJcXG4gICAgLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgyNTUsMjU1LDI1NSwuNSk7XFxyXFxuICAtLWljb24tc2l6ZTogMzBweDtcXHJcXG4gIC0taWNvbi1tZW51LXNpemU6IDQwcHg7XFxyXFxuICAtLWljb24tY2hlY2stc2l6ZTogMjBweDtcXHJcXG4gIC0tdHh0LWNvbC0xOiAjMDAwO1xcclxcbiAgLS10eHQtY29sLTI6ICM0NDQ7XFxyXFxuICAtLXR4dC1jb2wtMzogIzY2NjtcXHJcXG4gIC0tZm9udC1zaXplLXRpdGxlOiAxLjc1cmVtO1xcclxcbiAgLS1jYXJkLWJvcmRlci1yYWQ6IC43NXJlbTtcXHJcXG4gIC0tY2FyZC1vcGVuLXRyYW5zaXRpb246IDI1MG1zO1xcclxcbiAgLS1jYXJkLXBhZGRpbmc6IC41cmVtO1xcclxcbiAgLS1jYXJkLWRyYWctcGFkZGluZzogY2FsYyh2YXIoLS1mb250LXNpemUtdGl0bGUpICsgdmFyKC0tY2FyZC1wYWRkaW5nKSAqIDIuNzUpO1xcclxcbiAgLS1ob3Zlci1hbmltLWR1cmF0aW9uOiAyNTBtcztcXHJcXG4gIC0tbWVudS13aWR0aDogMzUwcHg7XFxyXFxuICAtLW1lbnUtd2lkdGgtd2lkZXNjcmVlbjogNDAwcHg7XFxyXFxuICAtLXZpZXdwb3J0LW1pbi13aWR0aDogNjAwcHg7XFxyXFxuICAtLWRlbGV0aW9uLWRlbGF5OiAyczsgXFxyXFxuICAtLWhvdmVyLWRlbGF5OiAxNTBtcztcXHJcXG59XFxyXFxuXFxyXFxuLyogZGVmYXVsdCB2YWx1ZXMgcmVzZXQgKi9cXHJcXG5ib2R5IHsgcGFkZGluZzogMDsgbWFyZ2luOiAwOyBtaW4td2lkdGg6IHZhcigtLXZpZXdwb3J0LW1pbi13aWR0aCk7fVxcclxcbm9sLCB1bCB7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgbGlzdC1zdHlsZS10eXBlOiBub25lOyB9XFxyXFxuaDEsIGgyLCBwIHttYXJnaW46IDA7fVxcclxcbmgxIHtcXHJcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XFxyXFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggaHNsKDI0MCwgMzAlLCA1MCUpO1xcclxcbn1cXHJcXG5pbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0sIGlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSB7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbn1cXHJcXG4qIHtmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsIFRpbWVzLCBzZXJpZjt9XFxyXFxuXFxyXFxuaW5wdXQ6OnNlbGVjdGlvbiB7XFxyXFxuICBjb2xvcjogd2hpdGU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjQwLCA4MCUsIDcwJSk7XFxyXFxufVxcclxcbmlucHV0Om5vdChbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSk6Zm9jdXMge1xcclxcbiAgb3V0bGluZTogNHB4IHNvbGlkIHJnYmEoNDYsIDE2LCAxOTIsIC4yNSk7XFxyXFxuICB0cmFuc2l0aW9uOiAwbXM7XFxyXFxufVxcclxcblxcclxcbi8qIG1lbnUgKi9cXHJcXG5cXHJcXG4jbWVudS1idXR0b24ge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHotaW5kZXg6IDI7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgd2lkdGg6IHZhcigtLWljb24tbWVudS1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FhYTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXM7XFxyXFxufVxcclxcbiNtZW51LWJ1dHRvbjpob3ZlciB7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUge1xcclxcbiAgei1pbmRleDogMjtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBwYWRkaW5nOiAuNXJlbTtcXHJcXG4gIHRvcDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1pY29uLW1lbnUtc2l6ZSkpO1xcclxcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcclxcbiAgb3ZlcmZsb3cteTogYXV0bztcXHJcXG4gIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoKTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcclxcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG59XFxyXFxuI21lbnUucmV2ZWFsIHsgZGlzcGxheTogYmxvY2s7IH1cXHJcXG5cXHJcXG4jbWVudSAubWVudS1pdGVtIHtcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvIGF1dG87XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWljb24tbWVudS1zaXplKSAqIDEuMjUpO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAubWVudS1pdGVtIHAge1xcclxcbiAgbWFyZ2luOiAuNXJlbSAwO1xcclxcbiAgd2lkdGg6IDIwMHB4O1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLm1lbnUtaXRlbSAuZWRpdC1wcm9qZWN0IHtcXHJcXG4gIGZvbnQtc2l6ZTogMS43NXJlbTtcXHJcXG4gIHdpZHRoOiAyMDBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmZpZWxkc2V0LWxpc3QgbGkge1xcclxcbiAgdHJhbnNpdGlvbjogcGFkZGluZyAyMDBtcywgYmFja2dyb3VuZC1jb2xvciAzNTBtcztcXHJcXG59LmZpZWxkc2V0LWxpc3QgbGk6aG92ZXIge1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbn1cXHJcXG5cXHJcXG4jc2NyZWVuLWNvdmVyLW1lbnUge2Rpc3BsYXk6IG5vbmU7fVxcclxcbiNzY3JlZW4tY292ZXItbWVudS5yZXZlYWwge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB0b3A6IDA7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLnByb2plY3QtdGl0bGUge1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxufVxcclxcblxcclxcbiNtZW51IC5maWVsZHNldC1vcHRpb25zIHAge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSBhIHtcXHJcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXHJcXG4gIGNvbG9yOiBpbmhlcml0O1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbiNtZW51IC5maWVsZHNldC1vcHRpb25zIC5tZW51LWl0ZW0uYWJvdXQge1xcclxcbiAgLS1pY29uLXNpemU6IDUwcHg7XFxyXFxuICAtLWR1cmF0aW9uOiAzcztcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogNzAwJTtcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0O1xcclxcbn1cXHJcXG4jbWVudS5yZXZlYWwgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dCB7XFxyXFxuICBiYWNrZ3JvdW5kOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYW5pbWF0aW9uOiBiZy1hbmltIHZhcigtLWR1cmF0aW9uKSBjYWxjKHZhcigtLWR1cmF0aW9uKSAvIDUpIGluZmluaXRlIGxpbmVhcixcXHJcXG4gIGJnLXpvb20tb3V0IHZhcigtLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoLjA4LC44MiwuMTcsMSkgZm9yd2FyZHM7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgYmctYW5pbSB7XFxyXFxuICB0byB7IGJhY2tncm91bmQtcG9zaXRpb246IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDIpIGNhbGModmFyKC0taWNvbi1zaXplKSAqIC0xKTsgfVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGJnLXpvb20tb3V0IHtcXHJcXG4gIGZyb20geyBiYWNrZ3JvdW5kLXNpemU6IDcwMCU7IH1cXHJcXG4gIHRvIHsgYmFja2dyb3VuZC1zaXplOiB2YXIoLS1pY29uLXNpemUpOyB9XFxyXFxufVxcclxcblxcclxcbi8qIHBhZ2UgY29udGVudCAqL1xcclxcblxcclxcbmJvZHkge2JhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYy1wYWdlKTt9XFxyXFxuXFxyXFxuI2NhcmRzLWNvbnRhaW5lciB7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcclxcbiAgbWluLXdpZHRoOiB2YXIoLS12aWV3cG9ydC1taW4td2lkdGgpO1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XFxyXFxufVxcclxcblxcclxcbi5wcm9qZWN0LWl0ZW0ge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHBhZGRpbmc6IDFyZW07XFxyXFxuICBtYXJnaW46IDFyZW07XFxyXFxufVxcclxcblxcclxcbmhlYWRlciB7XFxyXFxuICBwb3NpdGlvbjogc3RpY2t5O1xcclxcbiAgdG9wOiAwO1xcclxcbiAgei1pbmRleDogMTtcXHJcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLW1lbnUtc2l6ZSk7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxufVxcclxcblxcclxcblxcclxcbi8qIGNhcmRzICovXFxyXFxuXFxyXFxuLmNhcmQge1xcclxcbiAgaXNvbGF0aW9uOiBpc29sYXRlO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgcGFkZGluZzogdmFyKC0tY2FyZC1wYWRkaW5nKTtcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG8gYXV0bztcXHJcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDYsIGF1dG8pO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcXHJcXG4gICAgXFxcIiBkcmFnICB0aXRsZSAgICBwcm9ncmVzcyBlZGl0ICAgICBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gZGVzY3IgICAgZGVzY3IgICAgZGVzY3IgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGNyZWF0ZWQgIHByaW9yaXR5IHByaW9yaXR5IFxcXCJcXHJcXG4gICAgXFxcIiAuLi4uLiBkdWUgICAgICBwcmlvcml0eSBwcmlvcml0eSBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gdGFza3MgICAgdGFza3MgICAgdGFza3MgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGFkZC10YXNrIGFkZC10YXNrIGFkZC10YXNrIFxcXCI7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG59IC5jYXJkLmFjdGl2ZSB7XFxyXFxuICBoZWlnaHQ6IGF1dG87XFxyXFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgNXJlbSBoc2woMjQwLCA3MCUsIDkwJSk7XFxyXFxufSAuY2FyZDpub3QoLmFjdGl2ZSk6aG92ZXIge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZDpmaXJzdC1vZi10eXBlIHsgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1ib3JkZXItcmFkKSB2YXIoLS1jYXJkLWJvcmRlci1yYWQpIDAgMDsgfVxcclxcbi5jYXJkOmxhc3Qtb2YtdHlwZSB7IGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1jYXJkLWJvcmRlci1yYWQpIHZhcigtLWNhcmQtYm9yZGVyLXJhZCk7IH1cXHJcXG5cXHJcXG4uY2FyZCAudGl0bGUge1xcclxcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtdGl0bGUpO1xcclxcbiAgY29sb3I6IHZhcigtLXR4dC1jb2wtMSk7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBwYWRkaW5nLWxlZnQ6IC41cmVtO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxufVxcclxcbi5jYXJkIC5wcm9ncmVzcyB7XFxyXFxuICBncmlkLWFyZWE6IHByb2dyZXNzO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIG1hcmdpbi1yaWdodDogNXB4O1xcclxcbiAgd2lkdGg6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBoZWlnaHQ6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxufS5jYXJkIC5wcm9ncmVzczo6YWZ0ZXIge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogXFxcIiVcXFwiO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgZm9udC13ZWlnaHQ6IDkwMDtcXHJcXG4gIGluc2V0OiA1cHg7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcXHJcXG59XFxyXFxuLmNhcmQgLmRlc2NyaXB0aW9uIHtcXHJcXG4gIGdyaWQtYXJlYTogZGVzY3I7XFxyXFxuICBmb250LXNpemU6IDEuNXJlbTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTIpO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuLmNhcmQgLmRhdGUtY3JlYXRpb24ge1xcclxcbiAgZ3JpZC1hcmVhOiBjcmVhdGVkO1xcclxcbn1cXHJcXG4uY2FyZCAuZGF0ZS1kdWUge1xcclxcbiAgZ3JpZC1hcmVhOiBkdWU7XFxyXFxufS5jYXJkIC5kYXRlLWR1ZS5lZGl0LWRhdGUtZHVlIHtcXHJcXG4gIGJhY2tncm91bmQ6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gKyBcIikgbm8tcmVwZWF0O1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xcclxcbiAgZm9udC1zaXplOiAxcmVtO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbi8qYWRkaW5nIHRyYW5zcGFyZW5jeSBmb3Igb3ZlcmZsb3dlZCB0ZXh0Ki9cXHJcXG4uY2FyZCAudGl0bGU6bm90KC5lZGl0LXRpdGxlKSxcXHJcXG4uY2FyZCAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQgbGFiZWwsXFxyXFxuLnByb2plY3QtdGl0bGUsXFxyXFxuaDF7XFxyXFxuICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdHJhbnNwYXJlbnQsIHdoaXRlIDUwcHgpO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4uY2FyZCAuY2hlY2tsaXN0IHtcXHJcXG4gIGdyaWQtYXJlYTogdGFza3M7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbn1cXHJcXG4uY2FyZCAuZWRpdC1wcmlvcml0eSB7XFxyXFxuICBncmlkLWFyZWE6IHByaW9yaXR5O1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDIsIDFmcik7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxufVxcclxcbi5jYXJkIC5lZGl0LXByaW9yaXR5IGlucHV0W3R5cGU9XFxcInJhbmdlXFxcIl0ge1xcclxcbiAgd2lkdGg6IDgwJTtcXHJcXG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uY3JlYXRlLXRhc2stZGl2IHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAxLjQpO1xcclxcbn1cXHJcXG4uY3JlYXRlLXRhc2stZGl2IHAge1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3aWR0aDogMCU7XFxyXFxuICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKSBlYXNlLWluLW91dCB2YXIoLS1ob3Zlci1kZWxheSk7XFxyXFxufVxcclxcbi5jcmVhdGUtdGFzay1kaXY6aG92ZXIge1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbn1cXHJcXG4uY3JlYXRlLXRhc2stZGl2OmhvdmVyIHAge1xcclxcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIHZhcigtLWljb24tc2l6ZSkgKiAxLjMpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmNyZWF0ZS10YXNrLmNyZWF0ZS10b2RvIHtcXHJcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcclxcbn1cXHJcXG4uY2FyZC50b2RvLWFkZC1kaXY6aG92ZXIgLmNhcmQtaWNvbi5jcmVhdGUtdGFzay5jcmVhdGUtdG9kbyB7XFxyXFxuICBhbmltYXRpb246IGljb24tc2hha2UgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxufVxcclxcbi50b2RvLWFkZC1kaXYge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgcGFkZGluZzogLjVyZW0gLjI1cmVtO1xcclxcbiAgZ2FwOiAuNXJlbTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnRvZG8tYWRkLWRpdiBwIHtcXHJcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2lkdGg6IDByZW07XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbikgZWFzZS1pbi1vdXQgdmFyKC0taG92ZXItZGVsYXkpO1xcclxcbn1cXHJcXG5cXHJcXG4udG9kby1hZGQtZGl2OmhvdmVyIHAge1xcclxcbiAgd2lkdGg6IDE1cmVtO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIHByaW9yaXR5IGluZGljYXRvciAqL1xcclxcblxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImxvd1xcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCxsaW1lLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufSAuY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJsb3dcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSxsaW1lLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufVxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcIm1pZGRsZVxcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgZ29sZGVucm9kLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufSAuY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJtaWRkbGVcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgZ29sZGVucm9kLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufVxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImhpZ2hcXFwiXSB7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIG9yYW5nZXJlZCwgcmdiYSgwLCAxMjgsIDAsIDApIDYwcHgpO1xcclxcbn0gLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwiaGlnaFxcXCJdLmFjdGl2ZSB7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBvcmFuZ2VyZWQsIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogY2FyZCBkZXRhaWxzIHRyYW5zaXRpb24gKi9cXHJcXG5cXHJcXG4uY2FyZCAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQgLmRhdGUtY3JlYXRpb24sXFxyXFxuLmNhcmQgLmRhdGUtZHVlLFxcclxcbi5jYXJkIHVsIGxpIHtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0cmFuc2l0aW9uOiB2YXIoLS1jYXJkLW9wZW4tdHJhbnNpdGlvbik7XFxyXFxuICBoZWlnaHQ6IDByZW07XFxyXFxufVxcclxcbi5jYXJkLmFjdGl2ZSAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQuYWN0aXZlIC5kYXRlLWNyZWF0aW9uLFxcclxcbi5jYXJkLmFjdGl2ZSAuZGF0ZS1kdWUsXFxyXFxuLmNhcmQuYWN0aXZlIHVsIGxpIHtcXHJcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcclxcbiAgaGVpZ2h0OiAxLjc1cmVtO1xcclxcbn1cXHJcXG4vKmluZGl2aWR1YWwgc2V0dGluZ3MqL1xcclxcbi5jYXJkIC5kZXNjcmlwdGlvbiB7IG1hcmdpbi10b3A6IDByZW07IG1hcmdpbi1ib3R0b206IDByZW07fVxcclxcbi5jYXJkLmFjdGl2ZSAuZGVzY3JpcHRpb24geyBtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAuNXJlbTt9XFxyXFxuLmNhcmQuYWN0aXZlIHVsIGxpIHsgaGVpZ2h0OiAyLjVyZW07fVxcclxcbi5jYXJkIC5kYXRlLWR1ZSAge21hcmdpbi1ib3R0b206IDByZW07IH1cXHJcXG4uY2FyZC5hY3RpdmUgLmRhdGUtZHVlICB7bWFyZ2luLWJvdHRvbTogLjVyZW07IH1cXHJcXG5cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAyNW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDIpIHsgdHJhbnNpdGlvbi1kZWxheTogNTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgzKSB7IHRyYW5zaXRpb24tZGVsYXk6IDc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg1KSB7IHRyYW5zaXRpb24tZGVsYXk6IDEyNW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDYpIHsgdHJhbnNpdGlvbi1kZWxheTogMTUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNykgeyB0cmFuc2l0aW9uLWRlbGF5OiAxNzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg4KSB7IHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDkpIHsgdHJhbnNpdGlvbi1kZWxheTogMjI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTApIHsgdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTEpIHsgdHJhbnNpdGlvbi1kZWxheTogMjc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTIpIHsgdHJhbnNpdGlvbi1kZWxheTogMzAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTMpIHsgdHJhbnNpdGlvbi1kZWxheTogMzI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTQpIHsgdHJhbnNpdGlvbi1kZWxheTogMzUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTUpIHsgdHJhbnNpdGlvbi1kZWxheTogMzc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTYpIHsgdHJhbnNpdGlvbi1kZWxheTogNDAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTcpIHsgdHJhbnNpdGlvbi1kZWxheTogNDI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTgpIHsgdHJhbnNpdGlvbi1kZWxheTogNDUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTkpIHsgdHJhbnNpdGlvbi1kZWxheTogNDc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMW4rMjApIHsgdHJhbnNpdGlvbi1kZWxheTogNTAwbXM7IH1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIGljb25zICovXFxyXFxuXFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcbi5jYXJkIGxpIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06OmJlZm9yZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDMpO1xcclxcbiAgYm94LXNoYWRvdzogLjFyZW0gLjFyZW0gLjFyZW0gd2hpdGUsXFxyXFxuICAgIGluc2V0IC4xcmVtIC4xcmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IC4yNXJlbTtcXHJcXG59XFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTo6YWZ0ZXIge1xcclxcbiAgLS1jaGVjay1hbmltLWR1cmF0aW9uOiAyMDBtcztcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgaW5zZXQ6IC03cHg7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XFxyXFxuICBjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDE1JSA2MSUsIDE2JSA2MiUsIDE4JSA2NSUsIDQlIDc4JSwgMSUgNzUlKTtcXHJcXG4gIGFuaW1hdGlvbjogY2hlY2ttYXJrLWJhY2t3YXJkcyB2YXIoLS1jaGVjay1hbmltLWR1cmF0aW9uKSBlYXNlLW91dCBmb3J3YXJkcztcXHJcXG59XFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkOjphZnRlciB7XFxyXFxuICBhbmltYXRpb246IGNoZWNrbWFyay1mb3J3YXJkcyB2YXIoLS1jaGVjay1hbmltLWR1cmF0aW9uKSBlYXNlLWluIGZvcndhcmRzO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGNoZWNrbWFyay1mb3J3YXJkcyB7XFxyXFxuICAwJSB7b3BhY2l0eTogMDt9XFxyXFxuICAxJSB7b3BhY2l0eTogMTsgY2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAxNSUgNjElLCAxNiUgNjIlLCAxOCUgNjUlLCA0JSA3OCUpO31cXHJcXG4gIDMwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAyMSUgNjYlLCAyNiUgNzAlLCAzMSUgNzYlLCA5JSA4NiUpO31cXHJcXG4gIDUwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAzNSUgNzUlLCA0MyUgODElLCA0OSUgODglLCA0MCUgMTAwJSk7fVxcclxcbiAgMTAwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAzNSUgNzUlLCA4NSUgMCwgMTAwJSAxMCUsIDQwJSAxMDAlKTt9XFxyXFxufSBAa2V5ZnJhbWVzIGNoZWNrbWFyay1iYWNrd2FyZHMge1xcclxcbiAgMCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMzUlIDc1JSwgODUlIDAsIDEwMCUgMTAlLCA0MCUgMTAwJSk7fVxcclxcbiAgNTAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDM1JSA3NSUsIDQzJSA4MSUsIDQ5JSA4OCUsIDQwJSAxMDAlKTt9XFxyXFxuICA3MCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMjElIDY2JSwgMjYlIDcwJSwgMzElIDc2JSwgOSUgODYlKTt9XFxyXFxuICA5OSUge29wYWNpdHk6IDE7IGNsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMTUlIDYxJSwgMTYlIDYyJSwgMTglIDY1JSwgNCUgNzglKTt9XFxyXFxuICAxMDAlIHtvcGFjaXR5OiAwO31cXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQgbGFiZWwsXFxyXFxuLmNhcmQgLmVkaXQtbGFiZWwge1xcclxcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcclxcbiAgY29sb3I6IHZhcigtLXR4dC1jb2wtMik7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIHRyYW5zcGFyZW50IDEwMCUpIG5vLXJlcGVhdDtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gNTAwbXM7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC0xMDB2dztcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbn1cXHJcXG4uY2FyZCBsaSBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmNoZWNrZWQgKyBsYWJlbCB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTMpO1xcclxcbiAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDB2dztcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5jYXJkLWljb24ucmVtb3ZlLXRhc2sge1xcclxcbiAgYmFja2dyb3VuZDogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyArIFwiKSBjZW50ZXIgbm8tcmVwZWF0O1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiA4MCU7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24ge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgd2lkdGg6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBoZWlnaHQ6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBhcHBlYXJhbmNlOiBub25lO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcclxcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXHJcXG59XFxyXFxuLmNhcmQtaWNvbjo6YWZ0ZXIge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogXFxcIlxcXCI7XFxyXFxuICBpbnNldDogMDtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLWRyYWcge1xcclxcbiAgY3Vyc29yOiBucy1yZXNpemU7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1waW46OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18gKyBcIik7XFxyXFxufSAuY2FyZC1pY29uLmljb24tcGluOmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzVfX18gKyBcIik7XFxyXFxufVxcclxcbi5jYXJkLWljb24uaWNvbi1lZGl0OjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF82X19fICsgXCIpO1xcclxcbn0gLmNhcmQtaWNvbi5pY29uLWVkaXQ6Y2hlY2tlZDo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyArIFwiKTtcXHJcXG59XFxyXFxuLmNhcmQtaWNvbi5pY29uLWZhdjo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfOF9fXyArIFwiKTtcXHJcXG59LmNhcmQtaWNvbi5pY29uLWZhdjpjaGVja2VkOjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF85X19fICsgXCIpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZCB1bCBsaSB7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvO1xcclxcbiAgZ2FwOiAuNXJlbTtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5jYXJkIC5hZGQtdGFzayB7XFxyXFxuICBncmlkLWFyZWE6IGFkZC10YXNrO1xcclxcbiAgLyogZGlzcGxheTogZ3JpZDsgKi9cXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0taWNvbi1zaXplKSAxZnI7XFxyXFxuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcXFwiLiBwbHVzXFxcIjtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxufVxcclxcbi5jYXJkIC5jcmVhdGUtdGFzayxcXHJcXG4uY3JlYXRlLXRhc2sge1xcclxcbiAgZ3JpZC1hcmVhOiBwbHVzO1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMTBfX18gKyBcIik7XFxyXFxuICB3aWR0aDogY2FsYyh2YXIoLS1pY29uLXNpemUpICogMS4xKSA7XFxyXFxuICBoZWlnaHQ6IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDEuMSkgO1xcclxcbiAgbWFyZ2luLWxlZnQ6IDdweDtcXHJcXG59XFxyXFxuLmNhcmQgLmNyZWF0ZS10YXNrOmhvdmVyIHtcXHJcXG4gIGFuaW1hdGlvbjogaWNvbi1zaGFrZSB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBpY29uLXNwaW4tOTAgeyB0byB7cm90YXRlOiA5MGRlZzt9fVxcclxcblxcclxcbi5lZGl0LWJ1dHRvbnMge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIDFmcik7XFxyXFxufVxcclxcbi5kZWxldGUtaWNvbiB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIG1hcmdpbi10b3A6IGF1dG87XFxyXFxuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xcclxcbiAgbWFyZ2luLWxlZnQ6IDVweDtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxufS5pY29uLXRyYXNoLFxcclxcbi5pY29uLXRyYXNoLWxpZCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB0cmFuc2l0aW9uOiByb3RhdGUgMzAwbXM7XFxyXFxufVxcclxcbi5pY29uLXRyYXNoIHsgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwJTt9XFxyXFxuLmljb24tdHJhc2gtbGlkIHsgdHJhbnNmb3JtLW9yaWdpbjogMjUwJSAwJTt9XFxyXFxuLmRlbGV0ZS1pY29uOmhvdmVyIC5pY29uLXRyYXNoIHsgcm90YXRlOiAtN2RlZzt9XFxyXFxuLmRlbGV0ZS1pY29uOmhvdmVyIC5pY29uLXRyYXNoLWxpZCB7IHJvdGF0ZTogN2RlZzsgfVxcclxcbi5kZWxldGUtaWNvbjphY3RpdmUgLmljb24tdHJhc2ggeyB0cmFuc2l0aW9uOiByb3RhdGUgMnM7IHJvdGF0ZTogLTE4ZGVnOyB9XFxyXFxuLmRlbGV0ZS1pY29uOmFjdGl2ZSAuaWNvbi10cmFzaC1saWQgeyB0cmFuc2l0aW9uOiByb3RhdGUgMnM7IHJvdGF0ZTogMTBkZWc7IH1cXHJcXG5cXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmcge1xcclxcbiAgLyppdGVtIGlzIGRlbGV0ZWQgYWZ0ZXIgYW5pbWF0aW9uIGVuZHMqL1xcclxcbiAgYW5pbWF0aW9uOiBkZWxldGluZyB2YXIoLS1kZWxldGlvbi1kZWxheSkgbGluZWFyO1xcclxcbn1cXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmc6OmFmdGVyLFxcclxcbi5kZWxldGUtaWNvbi5kZWxldGluZzo6YmVmb3JlIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCLimqDvuI9EZWxldGluZy4uLuKaoO+4j1xcXCI7XFxyXFxuICBmb250LXNpemU6IDEuNXJlbTtcXHJcXG4gIGNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBwYWRkaW5nOiAuMjVyZW07XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtMTAlKTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7XFxyXFxuICBhbmltYXRpb246IGRlbGV0aW5nLWJnIHZhcigtLWRlbGV0aW9uLWRlbGF5KSBlYXNlLW91dDtcXHJcXG4gIGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDAgMCwgMCAxMDAlLCAwIDEwMCUpO1xcclxcbn1cXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmc6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXHJcXG4gIGFuaW1hdGlvbjogZGVsZXRpbmctdGV4dCB2YXIoLS1kZWxldGlvbi1kZWxheSkgZWFzZS1vdXQ7XFxyXFxuXFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgZGVsZXRpbmcge1xcclxcbiAgdG8ge1xcclxcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAuNXJlbSByZWQpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGRlbGV0aW5nLXRleHQge1xcclxcbiAgZnJvbSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMCAwLCAwIDEwMCUsIDAgMTAwJSk7fVxcclxcbiAgdG8ge2NsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSAxMDAlLCAwIDEwMCUpO31cXHJcXG59XFxyXFxuQGtleWZyYW1lcyBkZWxldGluZy1iZyB7IC8qIHRoaXMgZGlzYXBwZWFycyB0aGUgYmFyIGlmIGZhdiBjYW5jZWxzIGRlbGV0aW9uKi9cXHJcXG4gIDAlLCAxMDAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCAxMDAlKTt9XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1lZGl0OmhvdmVyLFxcclxcbi5jYXJkLWljb24uaWNvbi1waW46aG92ZXIge1xcclxcbiAgYW5pbWF0aW9uOiBpY29uLXNoYWtlIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pO1xcclxcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMTAwJTtcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBpY29uLXNoYWtlIHtcXHJcXG4gIDAlLCAxMDAlIHsgcm90YXRlOiAwZGVnO31cXHJcXG4gIDEwJSB7IHJvdGF0ZTogNWRlZzt9XFxyXFxuICAyMCUgeyByb3RhdGU6IC01ZGVnO31cXHJcXG4gIDMwJSB7IHJvdGF0ZTogNGRlZzt9XFxyXFxuICA0MCUgeyByb3RhdGU6IC00ZGVnO31cXHJcXG4gIDUwJSB7IHJvdGF0ZTogM2RlZzt9XFxyXFxuICA2MCUgeyByb3RhdGU6IC0zZGVnO31cXHJcXG4gIDcwJSB7IHJvdGF0ZTogMmRlZzt9XFxyXFxuICA4MCUgeyByb3RhdGU6IC0yZGVnO31cXHJcXG4gIDkwJSB7IHJvdGF0ZTogMWRlZzt9XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1mYXY6aG92ZXJ7XFxyXFxuICBhbmltYXRpb246IGljb24tc3Bpbi03MiB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1NSU7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgaWNvbi1zcGluLTcyIHsgdG8ge3JvdGF0ZTogNzJkZWc7fSB9XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLWZhdi5zaGFrZSB7XFxyXFxuICBhbmltYXRpb246IGljb24tZmF2LXNoYWtlIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGljb24tZmF2LXNoYWtlIHtcXHJcXG4gIDAlLCAxMDAlIHtcXHJcXG4gICAgcm90YXRlOiAwZGVnO1xcclxcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA1cHggZ29sZGVucm9kKVxcclxcbiAgICAgIGJyaWdodG5lc3MoMTUwJSk7XFxyXFxuICB9XFxyXFxuICAxMCUgeyByb3RhdGU6IDEwZGVnO31cXHJcXG4gIDIwJSB7IHJvdGF0ZTogLTEwZGVnO31cXHJcXG4gIDMwJSB7IHJvdGF0ZTogOGRlZzt9XFxyXFxuICA0MCUgeyByb3RhdGU6IC04ZGVnO31cXHJcXG4gIDUwJSB7IHJvdGF0ZTogNmRlZzt9XFxyXFxuICA2MCUgeyByb3RhdGU6IC02ZGVnO31cXHJcXG4gIDcwJSB7IHJvdGF0ZTogNGRlZzt9XFxyXFxuICA4MCUgeyByb3RhdGU6IC00ZGVnO31cXHJcXG4gIDkwJSB7IHJvdGF0ZTogMmRlZzt9XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGVkaXQgbW9kZSBjb250ZW50IHN0YXR1cyAqL1xcclxcblxcclxcbmlucHV0W3R5cGU9XFxcInRleHRcXFwiXSwgaW5wdXRbdHlwZT1cXFwiZGF0ZVxcXCJdIHtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IC4yNXJlbTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYm94LXNoYWRvdzogaW5zZXQgLjE1cmVtIC4xNXJlbSAuMTVyZW0gcmdiYSgwLDAsMCwuMjUpO1xcclxcbn0gaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLmVkaXQtbGFiZWwge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSBpbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0sIGlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSB7XFxyXFxuICBjdXJzb3I6IHRleHQ7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAudGl0bGUgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQgLmVkaXQtdGl0bGUgeyBkaXNwbGF5OiBub25lOyBmb250LXdlaWdodDogNjAwO31cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmVkaXQtdGl0bGUgeyBkaXNwbGF5OiBibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZGVzY3JpcHRpb24geyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQgLmVkaXQtZGVzY3JpcHRpb24geyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LWRlc2NyaXB0aW9uIHsgZGlzcGxheTogYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmRhdGUtZHVlIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkIC5lZGl0LWRhdGUtZHVlIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC1kYXRlLWR1ZSB7IGRpc3BsYXk6IGJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LXByaW9yaXR5IHtkaXNwbGF5OiBncmlkO31cXHJcXG4uY2FyZCAuZWRpdC1wcmlvcml0eSB7ZGlzcGxheTogbm9uZTt9XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIGxpIGxhYmVsIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkIC5lZGl0LWxhYmVsIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC1sYWJlbCB7IGRpc3BsYXk6IGJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxyXFxuLmNhcmQgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkIH4gLmVkaXQtbGFiZWwge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggcmdiYSgwLDAsMCwuMjUpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmFkZC10YXNrIHtkaXNwbGF5OiBncmlkO31cXHJcXG4uY2FyZCAuYWRkLXRhc2sge2Rpc3BsYXk6IG5vbmU7fVxcclxcblxcclxcbiNtZW51IC5tZW51LXRhc2tzIC5lZGl0LXByb2plY3QgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuI21lbnUgLm1lbnUtdGFza3MuZWRpdC1tb2RlIC5lZGl0LXByb2plY3QgeyBkaXNwbGF5OiBibG9jazsgfVxcclxcbiNtZW51IC5tZW51LXRhc2tzIC5wcm9qZWN0LXRpdGxlIHsgZGlzcGxheTogYmxvY2s7IH1cXHJcXG4jbWVudSAubWVudS10YXNrcy5lZGl0LW1vZGUgLnByb2plY3QtdGl0bGUgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogZHJhZ2dlZCBjYXJkICovXFxyXFxuLmNhcmQuZHJhZ2dpbmctY2FyZCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1ib3JkZXItcmFkKTtcXHJcXG4gIHRyYW5zaXRpb246IG5vbmU7XFxyXFxufVxcclxcbi5jYXJkLmRyYWdnaW5nLWNhcmQgLmVkaXQtYnV0dG9ucyB7XFxyXFxuICBmaWx0ZXI6IGdyYXlzY2FsZSgxMDAlKTtcXHJcXG4gIC8qIGRpc3BsYXk6IG5vbmU7ICovXFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIHNlYXJjaCByZXN1bHRzICovXFxyXFxuXFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCB7XFxyXFxuICBncmlkLXRlbXBsYXRlLWFyZWFzOlxcclxcbiAgICBcXFwiIHRpdGxlICAgcHJvZ3Jlc3MgXFxcIlxcclxcbiAgICBcXFwiIGRlc2NyICAgZGVzY3IgICAgXFxcIlxcclxcbiAgICBcXFwiIGNyZWF0ZWQgY3JlYXRlZCAgXFxcIlxcclxcbiAgICBcXFwiIGR1ZSAgICAgZHVlICAgICAgXFxcIjtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87XFxyXFxuICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxyXFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMgZWFzZS1pbi1vdXQ7XFxyXFxufVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQ6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjQwLCA2NyUsIDk4JSk7IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0OmFjdGl2ZSB7IGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93LWludmVydCk7IH1cXHJcXG5cXHJcXG5cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kZXNjcmlwdGlvbiB7IG1hcmdpbjogLjVyZW0gMCAwIDA7IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kYXRlLWNyZWF0aW9uIHsgbWFyZ2luLXRvcDogLjVyZW07IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kYXRlLWR1ZSB7IG1hcmdpbjogMDsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLmRhdGUtZHVlOmVtcHR5IHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLnRpdGxlIHsgcGFkZGluZy1sZWZ0OiAwOyB9XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogcmVzcG9uc2l2ZW5lc3MgKi9cXHJcXG5cXHJcXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDAwcHgpIHtcXHJcXG4gIGJvZHl7XFxyXFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tbWVudS13aWR0aCkgMWZyO1xcclxcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcXFwic2lkZWJhciBjYXJkc1xcXCI7XFxyXFxuICB9XFxyXFxuICAjbWVudS1idXR0b24sXFxyXFxuICAjc2NyZWVuLWNvdmVyLW1lbnUge1xcclxcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxuICAjbWVudSB7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIGdyaWQtYXJlYTogc2lkZWJhcjtcXHJcXG4gICAgdG9wOiAwO1xcclxcbiAgICBoZWlnaHQ6IDEwMHZoO1xcclxcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xcclxcbiAgfVxcclxcblxcclxcbiAgI2NhcmRzLWNvbnRhaW5lciB7XFxyXFxuICAgIGdyaWQtYXJlYTogY2FyZHM7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgfVxcclxcblxcclxcbiAgI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dDpob3ZlciB7XFxyXFxuICAgIGJhY2tncm91bmQ6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIik7XFxyXFxuICAgIGJhY2tncm91bmQtc2l6ZTogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gICAgYW5pbWF0aW9uOiBiZy1hbmltIHZhcigtLWR1cmF0aW9uKSBjYWxjKHZhcigtLWR1cmF0aW9uKSAvIDUpIGluZmluaXRlIGxpbmVhcixcXHJcXG4gIGJnLXpvb20tb3V0IHZhcigtLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoLjA4LC44MiwuMTcsMSkgZm9yd2FyZHM7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE1MDBweCkge1xcclxcbiAgYm9keXtcXHJcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1tZW51LXdpZHRoLXdpZGVzY3JlZW4pIDFmcjtcXHJcXG4gIH1cXHJcXG4gICNtZW51IHtcXHJcXG4gICAgd2lkdGg6IHZhcigtLW1lbnUtd2lkdGgtd2lkZXNjcmVlbik7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGZvciBnZW5lcmFsIHVzZSAqL1xcclxcblxcclxcbi5oaWRkZW4ge1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuLm9wYWNpdHktemVybyB7XFxyXFxuICBvcGFjaXR5OiAwO1xcclxcbn1cXHJcXG5cXHJcXG4ubWFyZ2luLXRvcCB7XFxyXFxuICBtYXJnaW4tdG9wOiB2YXIoLS1jYXJkLWRyYWctcGFkZGluZyk7XFxyXFxufVxcclxcbi5tYXJnaW4tYm90dG9tIHtcXHJcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLWNhcmQtZHJhZy1wYWRkaW5nKTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLypmb3IgdGVzdGluZyovXFxyXFxuLyogKiB7XFxyXFxuICBvdXRsaW5lOiAxcHggc29saWQgZ3JheTtcXHJcXG59ICovXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLG9CQUFvQjtFQUNwQjttREFDaUQ7RUFDakQ7NkNBQzJDO0VBQzNDLGlCQUFpQjtFQUNqQixzQkFBc0I7RUFDdEIsdUJBQXVCO0VBQ3ZCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsaUJBQWlCO0VBQ2pCLDBCQUEwQjtF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QUFtQztFQUNyQztBQUNGOzs7O0FBSUEsb0JBQW9COztBQUVwQjtFQUNFLGFBQWE7QUFDZjs7QUFFQTtFQUNFLFVBQVU7QUFDWjs7QUFFQTtFQUNFLG9DQUFvQztBQUN0QztBQUNBO0VBQ0UsdUNBQXVDO0FBQ3pDOzs7QUFHQSxjQUFjO0FBQ2Q7O0dBRUdcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOnJvb3Qge1xcclxcbiAgLS1iZ2MtcGFnZTogbGF2ZW5kZXI7XFxyXFxuICAtLWNhcmQtc2hhZG93OiAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKSxcXHJcXG4gICAgaW5zZXQgLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgyNTUsMjU1LDI1NSwuNSk7XFxyXFxuICAtLWNhcmQtc2hhZG93LWludmVydDogaW5zZXQgLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgwLDAsMCwuMSksXFxyXFxuICAgIC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMjU1LDI1NSwyNTUsLjUpO1xcclxcbiAgLS1pY29uLXNpemU6IDMwcHg7XFxyXFxuICAtLWljb24tbWVudS1zaXplOiA0MHB4O1xcclxcbiAgLS1pY29uLWNoZWNrLXNpemU6IDIwcHg7XFxyXFxuICAtLXR4dC1jb2wtMTogIzAwMDtcXHJcXG4gIC0tdHh0LWNvbC0yOiAjNDQ0O1xcclxcbiAgLS10eHQtY29sLTM6ICM2NjY7XFxyXFxuICAtLWZvbnQtc2l6ZS10aXRsZTogMS43NXJlbTtcXHJcXG4gIC0tY2FyZC1ib3JkZXItcmFkOiAuNzVyZW07XFxyXFxuICAtLWNhcmQtb3Blbi10cmFuc2l0aW9uOiAyNTBtcztcXHJcXG4gIC0tY2FyZC1wYWRkaW5nOiAuNXJlbTtcXHJcXG4gIC0tY2FyZC1kcmFnLXBhZGRpbmc6IGNhbGModmFyKC0tZm9udC1zaXplLXRpdGxlKSArIHZhcigtLWNhcmQtcGFkZGluZykgKiAyLjc1KTtcXHJcXG4gIC0taG92ZXItYW5pbS1kdXJhdGlvbjogMjUwbXM7XFxyXFxuICAtLW1lbnUtd2lkdGg6IDM1MHB4O1xcclxcbiAgLS1tZW51LXdpZHRoLXdpZGVzY3JlZW46IDQwMHB4O1xcclxcbiAgLS12aWV3cG9ydC1taW4td2lkdGg6IDYwMHB4O1xcclxcbiAgLS1kZWxldGlvbi1kZWxheTogMnM7IFxcclxcbiAgLS1ob3Zlci1kZWxheTogMTUwbXM7XFxyXFxufVxcclxcblxcclxcbi8qIGRlZmF1bHQgdmFsdWVzIHJlc2V0ICovXFxyXFxuYm9keSB7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgbWluLXdpZHRoOiB2YXIoLS12aWV3cG9ydC1taW4td2lkdGgpO31cXHJcXG5vbCwgdWwgeyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgfVxcclxcbmgxLCBoMiwgcCB7bWFyZ2luOiAwO31cXHJcXG5oMSB7XFxyXFxuICBmb250LXNpemU6IDJyZW07XFxyXFxuICBmb250LXdlaWdodDogOTAwO1xcclxcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4IGhzbCgyNDAsIDMwJSwgNTAlKTtcXHJcXG59XFxyXFxuaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLCBpbnB1dFt0eXBlPVxcXCJkYXRlXFxcIl0ge1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG59XFxyXFxuKiB7Zm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLCBUaW1lcywgc2VyaWY7fVxcclxcblxcclxcbmlucHV0OjpzZWxlY3Rpb24ge1xcclxcbiAgY29sb3I6IHdoaXRlO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0MCwgODAlLCA3MCUpO1xcclxcbn1cXHJcXG5pbnB1dDpub3QoW3R5cGU9XFxcImNoZWNrYm94XFxcIl0pOmZvY3VzIHtcXHJcXG4gIG91dGxpbmU6IDRweCBzb2xpZCByZ2JhKDQ2LCAxNiwgMTkyLCAuMjUpO1xcclxcbiAgdHJhbnNpdGlvbjogMG1zO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBtZW51ICovXFxyXFxuXFxyXFxuI21lbnUtYnV0dG9uIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0b3A6IDA7XFxyXFxuICB6LWluZGV4OiAyO1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL21lbnUuc3ZnKTtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLW1lbnUtc2l6ZSk7XFxyXFxuICBoZWlnaHQ6IHZhcigtLWljb24tbWVudS1zaXplKTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYWE7XFxyXFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zO1xcclxcbn1cXHJcXG4jbWVudS1idXR0b246aG92ZXIge1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbiNtZW51IHtcXHJcXG4gIHotaW5kZXg6IDI7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgcGFkZGluZzogLjVyZW07XFxyXFxuICB0b3A6IHZhcigtLWljb24tbWVudS1zaXplKTtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0taWNvbi1tZW51LXNpemUpKTtcXHJcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXHJcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxyXFxuICB3aWR0aDogdmFyKC0tbWVudS13aWR0aCk7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXHJcXG4gIGZvbnQtc2l6ZTogMS43NXJlbTtcXHJcXG4gIGRpc3BsYXk6IG5vbmU7XFxyXFxufVxcclxcbiNtZW51LnJldmVhbCB7IGRpc3BsYXk6IGJsb2NrOyB9XFxyXFxuXFxyXFxuI21lbnUgLm1lbnUtaXRlbSB7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0byBhdXRvO1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG4gIGhlaWdodDogY2FsYyh2YXIoLS1pY29uLW1lbnUtc2l6ZSkgKiAxLjI1KTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLm1lbnUtaXRlbSBwIHtcXHJcXG4gIG1hcmdpbjogLjVyZW0gMDtcXHJcXG4gIHdpZHRoOiAyMDBweDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcblxcclxcbiNtZW51IC5tZW51LWl0ZW0gLmVkaXQtcHJvamVjdCB7XFxyXFxuICBmb250LXNpemU6IDEuNzVyZW07XFxyXFxuICB3aWR0aDogMjAwcHg7XFxyXFxufVxcclxcblxcclxcbi5maWVsZHNldC1saXN0IGxpIHtcXHJcXG4gIHRyYW5zaXRpb246IHBhZGRpbmcgMjAwbXMsIGJhY2tncm91bmQtY29sb3IgMzUwbXM7XFxyXFxufS5maWVsZHNldC1saXN0IGxpOmhvdmVyIHtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG59XFxyXFxuXFxyXFxuI3NjcmVlbi1jb3Zlci1tZW51IHtkaXNwbGF5OiBub25lO31cXHJcXG4jc2NyZWVuLWNvdmVyLW1lbnUucmV2ZWFsIHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgdG9wOiAwO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHdpZHRoOiAxMDB2dztcXHJcXG4gIGhlaWdodDogMTAwdmg7XFxyXFxufVxcclxcblxcclxcbiNtZW51IC5wcm9qZWN0LXRpdGxlIHtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAuZmllbGRzZXQtb3B0aW9ucyBwIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgYSB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuICBjb2xvcjogaW5oZXJpdDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAuZmllbGRzZXQtb3B0aW9ucyAubWVudS1pdGVtLmFib3V0IHtcXHJcXG4gIC0taWNvbi1zaXplOiA1MHB4O1xcclxcbiAgLS1kdXJhdGlvbjogM3M7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDcwMCU7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gbGVmdDtcXHJcXG59XFxyXFxuI21lbnUucmV2ZWFsIC5maWVsZHNldC1vcHRpb25zIC5tZW51LWl0ZW0uYWJvdXQge1xcclxcbiAgYmFja2dyb3VuZDogdXJsKC4vbWVkaWEvaW1hZ2VzL2JhY2tncm91bmQvZ2l0aHViLW1hcmsuc3ZnKTtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGFuaW1hdGlvbjogYmctYW5pbSB2YXIoLS1kdXJhdGlvbikgY2FsYyh2YXIoLS1kdXJhdGlvbikgLyA1KSBpbmZpbml0ZSBsaW5lYXIsXFxyXFxuICBiZy16b29tLW91dCB2YXIoLS1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKC4wOCwuODIsLjE3LDEpIGZvcndhcmRzO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGJnLWFuaW0ge1xcclxcbiAgdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAyKSBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAtMSk7IH1cXHJcXG59XFxyXFxuQGtleWZyYW1lcyBiZy16b29tLW91dCB7XFxyXFxuICBmcm9tIHsgYmFja2dyb3VuZC1zaXplOiA3MDAlOyB9XFxyXFxuICB0byB7IGJhY2tncm91bmQtc2l6ZTogdmFyKC0taWNvbi1zaXplKTsgfVxcclxcbn1cXHJcXG5cXHJcXG4vKiBwYWdlIGNvbnRlbnQgKi9cXHJcXG5cXHJcXG5ib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7fVxcclxcblxcclxcbiNjYXJkcy1jb250YWluZXIge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIHdpZHRoOiAxMDB2dztcXHJcXG4gIG1pbi13aWR0aDogdmFyKC0tdmlld3BvcnQtbWluLXdpZHRoKTtcXHJcXG4gIGhlaWdodDogMTAwdmg7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgb3ZlcmZsb3cteTogYXV0bztcXHJcXG4gIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xcclxcbn1cXHJcXG5cXHJcXG4ucHJvamVjdC1pdGVtIHtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBwYWRkaW5nOiAxcmVtO1xcclxcbiAgbWFyZ2luOiAxcmVtO1xcclxcbn1cXHJcXG5cXHJcXG5oZWFkZXIge1xcclxcbiAgcG9zaXRpb246IHN0aWNreTtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHotaW5kZXg6IDE7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmdjLXBhZ2UpO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkcyAqL1xcclxcblxcclxcbi5jYXJkIHtcXHJcXG4gIGlzb2xhdGlvbjogaXNvbGF0ZTtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIHBhZGRpbmc6IHZhcigtLWNhcmQtcGFkZGluZyk7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvIGF1dG87XFxyXFxuICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCg2LCBhdXRvKTtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtYXJlYXM6XFxyXFxuICAgIFxcXCIgZHJhZyAgdGl0bGUgICAgcHJvZ3Jlc3MgZWRpdCAgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGRlc2NyICAgIGRlc2NyICAgIGRlc2NyICAgIFxcXCJcXHJcXG4gICAgXFxcIiAuLi4uLiBjcmVhdGVkICBwcmlvcml0eSBwcmlvcml0eSBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gZHVlICAgICAgcHJpb3JpdHkgcHJpb3JpdHkgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIHRhc2tzICAgIHRhc2tzICAgIHRhc2tzICAgIFxcXCJcXHJcXG4gICAgXFxcIiAuLi4uLiBhZGQtdGFzayBhZGQtdGFzayBhZGQtdGFzayBcXFwiO1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxufSAuY2FyZC5hY3RpdmUge1xcclxcbiAgaGVpZ2h0OiBhdXRvO1xcclxcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDVyZW0gaHNsKDI0MCwgNzAlLCA5MCUpO1xcclxcbn0gLmNhcmQ6bm90KC5hY3RpdmUpOmhvdmVyIHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7IGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtYm9yZGVyLXJhZCkgdmFyKC0tY2FyZC1ib3JkZXItcmFkKSAwIDA7IH1cXHJcXG4uY2FyZDpsYXN0LW9mLXR5cGUgeyBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tY2FyZC1ib3JkZXItcmFkKSB2YXIoLS1jYXJkLWJvcmRlci1yYWQpOyB9XFxyXFxuXFxyXFxuLmNhcmQgLnRpdGxlIHtcXHJcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXRpdGxlKTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTEpO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAuNXJlbTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbn1cXHJcXG4uY2FyZCAucHJvZ3Jlc3Mge1xcclxcbiAgZ3JpZC1hcmVhOiBwcm9ncmVzcztcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbn0uY2FyZCAucHJvZ3Jlc3M6OmFmdGVyIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCIlXFxcIjtcXHJcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XFxyXFxuICBpbnNldDogNXB4O1xcclxcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmdjLXBhZ2UpO1xcclxcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XFxyXFxufVxcclxcbi5jYXJkIC5kZXNjcmlwdGlvbiB7XFxyXFxuICBncmlkLWFyZWE6IGRlc2NyO1xcclxcbiAgZm9udC1zaXplOiAxLjVyZW07XFxyXFxuICBjb2xvcjogdmFyKC0tdHh0LWNvbC0yKTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcbi5jYXJkIC5kYXRlLWNyZWF0aW9uIHtcXHJcXG4gIGdyaWQtYXJlYTogY3JlYXRlZDtcXHJcXG59XFxyXFxuLmNhcmQgLmRhdGUtZHVlIHtcXHJcXG4gIGdyaWQtYXJlYTogZHVlO1xcclxcbn0uY2FyZCAuZGF0ZS1kdWUuZWRpdC1kYXRlLWR1ZSB7XFxyXFxuICBiYWNrZ3JvdW5kOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvZHVlLnN2Zykgbm8tcmVwZWF0O1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xcclxcbiAgZm9udC1zaXplOiAxcmVtO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbi8qYWRkaW5nIHRyYW5zcGFyZW5jeSBmb3Igb3ZlcmZsb3dlZCB0ZXh0Ki9cXHJcXG4uY2FyZCAudGl0bGU6bm90KC5lZGl0LXRpdGxlKSxcXHJcXG4uY2FyZCAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQgbGFiZWwsXFxyXFxuLnByb2plY3QtdGl0bGUsXFxyXFxuaDF7XFxyXFxuICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdHJhbnNwYXJlbnQsIHdoaXRlIDUwcHgpO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4uY2FyZCAuY2hlY2tsaXN0IHtcXHJcXG4gIGdyaWQtYXJlYTogdGFza3M7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbn1cXHJcXG4uY2FyZCAuZWRpdC1wcmlvcml0eSB7XFxyXFxuICBncmlkLWFyZWE6IHByaW9yaXR5O1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDIsIDFmcik7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxufVxcclxcbi5jYXJkIC5lZGl0LXByaW9yaXR5IGlucHV0W3R5cGU9XFxcInJhbmdlXFxcIl0ge1xcclxcbiAgd2lkdGg6IDgwJTtcXHJcXG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uY3JlYXRlLXRhc2stZGl2IHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAxLjQpO1xcclxcbn1cXHJcXG4uY3JlYXRlLXRhc2stZGl2IHAge1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3aWR0aDogMCU7XFxyXFxuICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKSBlYXNlLWluLW91dCB2YXIoLS1ob3Zlci1kZWxheSk7XFxyXFxufVxcclxcbi5jcmVhdGUtdGFzay1kaXY6aG92ZXIge1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbn1cXHJcXG4uY3JlYXRlLXRhc2stZGl2OmhvdmVyIHAge1xcclxcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIHZhcigtLWljb24tc2l6ZSkgKiAxLjMpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmNyZWF0ZS10YXNrLmNyZWF0ZS10b2RvIHtcXHJcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcclxcbn1cXHJcXG4uY2FyZC50b2RvLWFkZC1kaXY6aG92ZXIgLmNhcmQtaWNvbi5jcmVhdGUtdGFzay5jcmVhdGUtdG9kbyB7XFxyXFxuICBhbmltYXRpb246IGljb24tc2hha2UgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxufVxcclxcbi50b2RvLWFkZC1kaXYge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgcGFkZGluZzogLjVyZW0gLjI1cmVtO1xcclxcbiAgZ2FwOiAuNXJlbTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnRvZG8tYWRkLWRpdiBwIHtcXHJcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2lkdGg6IDByZW07XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbikgZWFzZS1pbi1vdXQgdmFyKC0taG92ZXItZGVsYXkpO1xcclxcbn1cXHJcXG5cXHJcXG4udG9kby1hZGQtZGl2OmhvdmVyIHAge1xcclxcbiAgd2lkdGg6IDE1cmVtO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIHByaW9yaXR5IGluZGljYXRvciAqL1xcclxcblxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImxvd1xcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCxsaW1lLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufSAuY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJsb3dcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSxsaW1lLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufVxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcIm1pZGRsZVxcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgZ29sZGVucm9kLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufSAuY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJtaWRkbGVcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgZ29sZGVucm9kLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufVxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImhpZ2hcXFwiXSB7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIG9yYW5nZXJlZCwgcmdiYSgwLCAxMjgsIDAsIDApIDYwcHgpO1xcclxcbn0gLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwiaGlnaFxcXCJdLmFjdGl2ZSB7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBvcmFuZ2VyZWQsIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogY2FyZCBkZXRhaWxzIHRyYW5zaXRpb24gKi9cXHJcXG5cXHJcXG4uY2FyZCAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQgLmRhdGUtY3JlYXRpb24sXFxyXFxuLmNhcmQgLmRhdGUtZHVlLFxcclxcbi5jYXJkIHVsIGxpIHtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0cmFuc2l0aW9uOiB2YXIoLS1jYXJkLW9wZW4tdHJhbnNpdGlvbik7XFxyXFxuICBoZWlnaHQ6IDByZW07XFxyXFxufVxcclxcbi5jYXJkLmFjdGl2ZSAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQuYWN0aXZlIC5kYXRlLWNyZWF0aW9uLFxcclxcbi5jYXJkLmFjdGl2ZSAuZGF0ZS1kdWUsXFxyXFxuLmNhcmQuYWN0aXZlIHVsIGxpIHtcXHJcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcclxcbiAgaGVpZ2h0OiAxLjc1cmVtO1xcclxcbn1cXHJcXG4vKmluZGl2aWR1YWwgc2V0dGluZ3MqL1xcclxcbi5jYXJkIC5kZXNjcmlwdGlvbiB7IG1hcmdpbi10b3A6IDByZW07IG1hcmdpbi1ib3R0b206IDByZW07fVxcclxcbi5jYXJkLmFjdGl2ZSAuZGVzY3JpcHRpb24geyBtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAuNXJlbTt9XFxyXFxuLmNhcmQuYWN0aXZlIHVsIGxpIHsgaGVpZ2h0OiAyLjVyZW07fVxcclxcbi5jYXJkIC5kYXRlLWR1ZSAge21hcmdpbi1ib3R0b206IDByZW07IH1cXHJcXG4uY2FyZC5hY3RpdmUgLmRhdGUtZHVlICB7bWFyZ2luLWJvdHRvbTogLjVyZW07IH1cXHJcXG5cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAyNW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDIpIHsgdHJhbnNpdGlvbi1kZWxheTogNTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgzKSB7IHRyYW5zaXRpb24tZGVsYXk6IDc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg1KSB7IHRyYW5zaXRpb24tZGVsYXk6IDEyNW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDYpIHsgdHJhbnNpdGlvbi1kZWxheTogMTUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNykgeyB0cmFuc2l0aW9uLWRlbGF5OiAxNzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg4KSB7IHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDkpIHsgdHJhbnNpdGlvbi1kZWxheTogMjI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTApIHsgdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTEpIHsgdHJhbnNpdGlvbi1kZWxheTogMjc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTIpIHsgdHJhbnNpdGlvbi1kZWxheTogMzAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTMpIHsgdHJhbnNpdGlvbi1kZWxheTogMzI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTQpIHsgdHJhbnNpdGlvbi1kZWxheTogMzUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTUpIHsgdHJhbnNpdGlvbi1kZWxheTogMzc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTYpIHsgdHJhbnNpdGlvbi1kZWxheTogNDAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTcpIHsgdHJhbnNpdGlvbi1kZWxheTogNDI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTgpIHsgdHJhbnNpdGlvbi1kZWxheTogNDUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTkpIHsgdHJhbnNpdGlvbi1kZWxheTogNDc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMW4rMjApIHsgdHJhbnNpdGlvbi1kZWxheTogNTAwbXM7IH1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIGljb25zICovXFxyXFxuXFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcbi5jYXJkIGxpIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06OmJlZm9yZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDMpO1xcclxcbiAgYm94LXNoYWRvdzogLjFyZW0gLjFyZW0gLjFyZW0gd2hpdGUsXFxyXFxuICAgIGluc2V0IC4xcmVtIC4xcmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IC4yNXJlbTtcXHJcXG59XFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTo6YWZ0ZXIge1xcclxcbiAgLS1jaGVjay1hbmltLWR1cmF0aW9uOiAyMDBtcztcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgaW5zZXQ6IC03cHg7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XFxyXFxuICBjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDE1JSA2MSUsIDE2JSA2MiUsIDE4JSA2NSUsIDQlIDc4JSwgMSUgNzUlKTtcXHJcXG4gIGFuaW1hdGlvbjogY2hlY2ttYXJrLWJhY2t3YXJkcyB2YXIoLS1jaGVjay1hbmltLWR1cmF0aW9uKSBlYXNlLW91dCBmb3J3YXJkcztcXHJcXG59XFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkOjphZnRlciB7XFxyXFxuICBhbmltYXRpb246IGNoZWNrbWFyay1mb3J3YXJkcyB2YXIoLS1jaGVjay1hbmltLWR1cmF0aW9uKSBlYXNlLWluIGZvcndhcmRzO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGNoZWNrbWFyay1mb3J3YXJkcyB7XFxyXFxuICAwJSB7b3BhY2l0eTogMDt9XFxyXFxuICAxJSB7b3BhY2l0eTogMTsgY2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAxNSUgNjElLCAxNiUgNjIlLCAxOCUgNjUlLCA0JSA3OCUpO31cXHJcXG4gIDMwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAyMSUgNjYlLCAyNiUgNzAlLCAzMSUgNzYlLCA5JSA4NiUpO31cXHJcXG4gIDUwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAzNSUgNzUlLCA0MyUgODElLCA0OSUgODglLCA0MCUgMTAwJSk7fVxcclxcbiAgMTAwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAzNSUgNzUlLCA4NSUgMCwgMTAwJSAxMCUsIDQwJSAxMDAlKTt9XFxyXFxufSBAa2V5ZnJhbWVzIGNoZWNrbWFyay1iYWNrd2FyZHMge1xcclxcbiAgMCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMzUlIDc1JSwgODUlIDAsIDEwMCUgMTAlLCA0MCUgMTAwJSk7fVxcclxcbiAgNTAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDM1JSA3NSUsIDQzJSA4MSUsIDQ5JSA4OCUsIDQwJSAxMDAlKTt9XFxyXFxuICA3MCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMjElIDY2JSwgMjYlIDcwJSwgMzElIDc2JSwgOSUgODYlKTt9XFxyXFxuICA5OSUge29wYWNpdHk6IDE7IGNsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMTUlIDYxJSwgMTYlIDYyJSwgMTglIDY1JSwgNCUgNzglKTt9XFxyXFxuICAxMDAlIHtvcGFjaXR5OiAwO31cXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQgbGFiZWwsXFxyXFxuLmNhcmQgLmVkaXQtbGFiZWwge1xcclxcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcclxcbiAgY29sb3I6IHZhcigtLXR4dC1jb2wtMik7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIHRyYW5zcGFyZW50IDEwMCUpIG5vLXJlcGVhdDtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gNTAwbXM7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC0xMDB2dztcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbn1cXHJcXG4uY2FyZCBsaSBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmNoZWNrZWQgKyBsYWJlbCB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTMpO1xcclxcbiAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDB2dztcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5jYXJkLWljb24ucmVtb3ZlLXRhc2sge1xcclxcbiAgYmFja2dyb3VuZDogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL3JlbW92ZS10YXNrLnN2ZykgY2VudGVyIG5vLXJlcGVhdDtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogODAlO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uIHtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgYXBwZWFyYW5jZTogbm9uZTtcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXHJcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxyXFxufVxcclxcbi5jYXJkLWljb246OmFmdGVyIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgaW5zZXQ6IDA7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1kcmFnIHtcXHJcXG4gIGN1cnNvcjogbnMtcmVzaXplO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmljb24tcGluOjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvcGluLnN2Zyk7XFxyXFxufSAuY2FyZC1pY29uLmljb24tcGluOmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguL21lZGlhL2ltYWdlcy9pY29ucy9waW4tYWN0aXZlLnN2Zyk7XFxyXFxufVxcclxcbi5jYXJkLWljb24uaWNvbi1lZGl0OjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvZWRpdC5zdmcpO1xcclxcbn0gLmNhcmQtaWNvbi5pY29uLWVkaXQ6Y2hlY2tlZDo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL2VkaXQtYWN0aXZlLnN2Zyk7XFxyXFxufVxcclxcbi5jYXJkLWljb24uaWNvbi1mYXY6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguL21lZGlhL2ltYWdlcy9pY29ucy9mYXYuc3ZnKTtcXHJcXG59LmNhcmQtaWNvbi5pY29uLWZhdjpjaGVja2VkOjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvZmF2LWFjdGl2ZS5zdmcpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZCB1bCBsaSB7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvO1xcclxcbiAgZ2FwOiAuNXJlbTtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5jYXJkIC5hZGQtdGFzayB7XFxyXFxuICBncmlkLWFyZWE6IGFkZC10YXNrO1xcclxcbiAgLyogZGlzcGxheTogZ3JpZDsgKi9cXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0taWNvbi1zaXplKSAxZnI7XFxyXFxuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcXFwiLiBwbHVzXFxcIjtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxufVxcclxcbi5jYXJkIC5jcmVhdGUtdGFzayxcXHJcXG4uY3JlYXRlLXRhc2sge1xcclxcbiAgZ3JpZC1hcmVhOiBwbHVzO1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL2FkZC10YXNrLnN2Zyk7XFxyXFxuICB3aWR0aDogY2FsYyh2YXIoLS1pY29uLXNpemUpICogMS4xKSA7XFxyXFxuICBoZWlnaHQ6IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDEuMSkgO1xcclxcbiAgbWFyZ2luLWxlZnQ6IDdweDtcXHJcXG59XFxyXFxuLmNhcmQgLmNyZWF0ZS10YXNrOmhvdmVyIHtcXHJcXG4gIGFuaW1hdGlvbjogaWNvbi1zaGFrZSB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBpY29uLXNwaW4tOTAgeyB0byB7cm90YXRlOiA5MGRlZzt9fVxcclxcblxcclxcbi5lZGl0LWJ1dHRvbnMge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIDFmcik7XFxyXFxufVxcclxcbi5kZWxldGUtaWNvbiB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIG1hcmdpbi10b3A6IGF1dG87XFxyXFxuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xcclxcbiAgbWFyZ2luLWxlZnQ6IDVweDtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxufS5pY29uLXRyYXNoLFxcclxcbi5pY29uLXRyYXNoLWxpZCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB0cmFuc2l0aW9uOiByb3RhdGUgMzAwbXM7XFxyXFxufVxcclxcbi5pY29uLXRyYXNoIHsgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwJTt9XFxyXFxuLmljb24tdHJhc2gtbGlkIHsgdHJhbnNmb3JtLW9yaWdpbjogMjUwJSAwJTt9XFxyXFxuLmRlbGV0ZS1pY29uOmhvdmVyIC5pY29uLXRyYXNoIHsgcm90YXRlOiAtN2RlZzt9XFxyXFxuLmRlbGV0ZS1pY29uOmhvdmVyIC5pY29uLXRyYXNoLWxpZCB7IHJvdGF0ZTogN2RlZzsgfVxcclxcbi5kZWxldGUtaWNvbjphY3RpdmUgLmljb24tdHJhc2ggeyB0cmFuc2l0aW9uOiByb3RhdGUgMnM7IHJvdGF0ZTogLTE4ZGVnOyB9XFxyXFxuLmRlbGV0ZS1pY29uOmFjdGl2ZSAuaWNvbi10cmFzaC1saWQgeyB0cmFuc2l0aW9uOiByb3RhdGUgMnM7IHJvdGF0ZTogMTBkZWc7IH1cXHJcXG5cXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmcge1xcclxcbiAgLyppdGVtIGlzIGRlbGV0ZWQgYWZ0ZXIgYW5pbWF0aW9uIGVuZHMqL1xcclxcbiAgYW5pbWF0aW9uOiBkZWxldGluZyB2YXIoLS1kZWxldGlvbi1kZWxheSkgbGluZWFyO1xcclxcbn1cXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmc6OmFmdGVyLFxcclxcbi5kZWxldGUtaWNvbi5kZWxldGluZzo6YmVmb3JlIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCLimqDvuI9EZWxldGluZy4uLuKaoO+4j1xcXCI7XFxyXFxuICBmb250LXNpemU6IDEuNXJlbTtcXHJcXG4gIGNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBwYWRkaW5nOiAuMjVyZW07XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtMTAlKTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7XFxyXFxuICBhbmltYXRpb246IGRlbGV0aW5nLWJnIHZhcigtLWRlbGV0aW9uLWRlbGF5KSBlYXNlLW91dDtcXHJcXG4gIGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDAgMCwgMCAxMDAlLCAwIDEwMCUpO1xcclxcbn1cXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmc6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXHJcXG4gIGFuaW1hdGlvbjogZGVsZXRpbmctdGV4dCB2YXIoLS1kZWxldGlvbi1kZWxheSkgZWFzZS1vdXQ7XFxyXFxuXFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgZGVsZXRpbmcge1xcclxcbiAgdG8ge1xcclxcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAuNXJlbSByZWQpO1xcclxcbiAgfVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGRlbGV0aW5nLXRleHQge1xcclxcbiAgZnJvbSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMCAwLCAwIDEwMCUsIDAgMTAwJSk7fVxcclxcbiAgdG8ge2NsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSAxMDAlLCAwIDEwMCUpO31cXHJcXG59XFxyXFxuQGtleWZyYW1lcyBkZWxldGluZy1iZyB7IC8qIHRoaXMgZGlzYXBwZWFycyB0aGUgYmFyIGlmIGZhdiBjYW5jZWxzIGRlbGV0aW9uKi9cXHJcXG4gIDAlLCAxMDAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCAxMDAlKTt9XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1lZGl0OmhvdmVyLFxcclxcbi5jYXJkLWljb24uaWNvbi1waW46aG92ZXIge1xcclxcbiAgYW5pbWF0aW9uOiBpY29uLXNoYWtlIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pO1xcclxcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMTAwJTtcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBpY29uLXNoYWtlIHtcXHJcXG4gIDAlLCAxMDAlIHsgcm90YXRlOiAwZGVnO31cXHJcXG4gIDEwJSB7IHJvdGF0ZTogNWRlZzt9XFxyXFxuICAyMCUgeyByb3RhdGU6IC01ZGVnO31cXHJcXG4gIDMwJSB7IHJvdGF0ZTogNGRlZzt9XFxyXFxuICA0MCUgeyByb3RhdGU6IC00ZGVnO31cXHJcXG4gIDUwJSB7IHJvdGF0ZTogM2RlZzt9XFxyXFxuICA2MCUgeyByb3RhdGU6IC0zZGVnO31cXHJcXG4gIDcwJSB7IHJvdGF0ZTogMmRlZzt9XFxyXFxuICA4MCUgeyByb3RhdGU6IC0yZGVnO31cXHJcXG4gIDkwJSB7IHJvdGF0ZTogMWRlZzt9XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1mYXY6aG92ZXJ7XFxyXFxuICBhbmltYXRpb246IGljb24tc3Bpbi03MiB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1NSU7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgaWNvbi1zcGluLTcyIHsgdG8ge3JvdGF0ZTogNzJkZWc7fSB9XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLWZhdi5zaGFrZSB7XFxyXFxuICBhbmltYXRpb246IGljb24tZmF2LXNoYWtlIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGljb24tZmF2LXNoYWtlIHtcXHJcXG4gIDAlLCAxMDAlIHtcXHJcXG4gICAgcm90YXRlOiAwZGVnO1xcclxcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA1cHggZ29sZGVucm9kKVxcclxcbiAgICAgIGJyaWdodG5lc3MoMTUwJSk7XFxyXFxuICB9XFxyXFxuICAxMCUgeyByb3RhdGU6IDEwZGVnO31cXHJcXG4gIDIwJSB7IHJvdGF0ZTogLTEwZGVnO31cXHJcXG4gIDMwJSB7IHJvdGF0ZTogOGRlZzt9XFxyXFxuICA0MCUgeyByb3RhdGU6IC04ZGVnO31cXHJcXG4gIDUwJSB7IHJvdGF0ZTogNmRlZzt9XFxyXFxuICA2MCUgeyByb3RhdGU6IC02ZGVnO31cXHJcXG4gIDcwJSB7IHJvdGF0ZTogNGRlZzt9XFxyXFxuICA4MCUgeyByb3RhdGU6IC00ZGVnO31cXHJcXG4gIDkwJSB7IHJvdGF0ZTogMmRlZzt9XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGVkaXQgbW9kZSBjb250ZW50IHN0YXR1cyAqL1xcclxcblxcclxcbmlucHV0W3R5cGU9XFxcInRleHRcXFwiXSwgaW5wdXRbdHlwZT1cXFwiZGF0ZVxcXCJdIHtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IC4yNXJlbTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYm94LXNoYWRvdzogaW5zZXQgLjE1cmVtIC4xNXJlbSAuMTVyZW0gcmdiYSgwLDAsMCwuMjUpO1xcclxcbn0gaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLmVkaXQtbGFiZWwge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSBpbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0sIGlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSB7XFxyXFxuICBjdXJzb3I6IHRleHQ7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAudGl0bGUgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQgLmVkaXQtdGl0bGUgeyBkaXNwbGF5OiBub25lOyBmb250LXdlaWdodDogNjAwO31cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmVkaXQtdGl0bGUgeyBkaXNwbGF5OiBibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZGVzY3JpcHRpb24geyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQgLmVkaXQtZGVzY3JpcHRpb24geyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LWRlc2NyaXB0aW9uIHsgZGlzcGxheTogYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmRhdGUtZHVlIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkIC5lZGl0LWRhdGUtZHVlIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC1kYXRlLWR1ZSB7IGRpc3BsYXk6IGJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LXByaW9yaXR5IHtkaXNwbGF5OiBncmlkO31cXHJcXG4uY2FyZCAuZWRpdC1wcmlvcml0eSB7ZGlzcGxheTogbm9uZTt9XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIGxpIGxhYmVsIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkIC5lZGl0LWxhYmVsIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC1sYWJlbCB7IGRpc3BsYXk6IGJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxyXFxuLmNhcmQgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkIH4gLmVkaXQtbGFiZWwge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggcmdiYSgwLDAsMCwuMjUpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmFkZC10YXNrIHtkaXNwbGF5OiBncmlkO31cXHJcXG4uY2FyZCAuYWRkLXRhc2sge2Rpc3BsYXk6IG5vbmU7fVxcclxcblxcclxcbiNtZW51IC5tZW51LXRhc2tzIC5lZGl0LXByb2plY3QgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuI21lbnUgLm1lbnUtdGFza3MuZWRpdC1tb2RlIC5lZGl0LXByb2plY3QgeyBkaXNwbGF5OiBibG9jazsgfVxcclxcbiNtZW51IC5tZW51LXRhc2tzIC5wcm9qZWN0LXRpdGxlIHsgZGlzcGxheTogYmxvY2s7IH1cXHJcXG4jbWVudSAubWVudS10YXNrcy5lZGl0LW1vZGUgLnByb2plY3QtdGl0bGUgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogZHJhZ2dlZCBjYXJkICovXFxyXFxuLmNhcmQuZHJhZ2dpbmctY2FyZCB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2FyZC1ib3JkZXItcmFkKTtcXHJcXG4gIHRyYW5zaXRpb246IG5vbmU7XFxyXFxufVxcclxcbi5jYXJkLmRyYWdnaW5nLWNhcmQgLmVkaXQtYnV0dG9ucyB7XFxyXFxuICBmaWx0ZXI6IGdyYXlzY2FsZSgxMDAlKTtcXHJcXG4gIC8qIGRpc3BsYXk6IG5vbmU7ICovXFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIHNlYXJjaCByZXN1bHRzICovXFxyXFxuXFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCB7XFxyXFxuICBncmlkLXRlbXBsYXRlLWFyZWFzOlxcclxcbiAgICBcXFwiIHRpdGxlICAgcHJvZ3Jlc3MgXFxcIlxcclxcbiAgICBcXFwiIGRlc2NyICAgZGVzY3IgICAgXFxcIlxcclxcbiAgICBcXFwiIGNyZWF0ZWQgY3JlYXRlZCAgXFxcIlxcclxcbiAgICBcXFwiIGR1ZSAgICAgZHVlICAgICAgXFxcIjtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87XFxyXFxuICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxyXFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMgZWFzZS1pbi1vdXQ7XFxyXFxufVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQ6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjQwLCA2NyUsIDk4JSk7IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0OmFjdGl2ZSB7IGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93LWludmVydCk7IH1cXHJcXG5cXHJcXG5cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kZXNjcmlwdGlvbiB7IG1hcmdpbjogLjVyZW0gMCAwIDA7IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kYXRlLWNyZWF0aW9uIHsgbWFyZ2luLXRvcDogLjVyZW07IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kYXRlLWR1ZSB7IG1hcmdpbjogMDsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLmRhdGUtZHVlOmVtcHR5IHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLnRpdGxlIHsgcGFkZGluZy1sZWZ0OiAwOyB9XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogcmVzcG9uc2l2ZW5lc3MgKi9cXHJcXG5cXHJcXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDAwcHgpIHtcXHJcXG4gIGJvZHl7XFxyXFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tbWVudS13aWR0aCkgMWZyO1xcclxcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcXFwic2lkZWJhciBjYXJkc1xcXCI7XFxyXFxuICB9XFxyXFxuICAjbWVudS1idXR0b24sXFxyXFxuICAjc2NyZWVuLWNvdmVyLW1lbnUge1xcclxcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxuICAjbWVudSB7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIGdyaWQtYXJlYTogc2lkZWJhcjtcXHJcXG4gICAgdG9wOiAwO1xcclxcbiAgICBoZWlnaHQ6IDEwMHZoO1xcclxcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xcclxcbiAgfVxcclxcblxcclxcbiAgI2NhcmRzLWNvbnRhaW5lciB7XFxyXFxuICAgIGdyaWQtYXJlYTogY2FyZHM7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgfVxcclxcblxcclxcbiAgI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dDpob3ZlciB7XFxyXFxuICAgIGJhY2tncm91bmQ6IHVybCguL21lZGlhL2ltYWdlcy9iYWNrZ3JvdW5kL2dpdGh1Yi1tYXJrLnN2Zyk7XFxyXFxuICAgIGJhY2tncm91bmQtc2l6ZTogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gICAgYW5pbWF0aW9uOiBiZy1hbmltIHZhcigtLWR1cmF0aW9uKSBjYWxjKHZhcigtLWR1cmF0aW9uKSAvIDUpIGluZmluaXRlIGxpbmVhcixcXHJcXG4gIGJnLXpvb20tb3V0IHZhcigtLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoLjA4LC44MiwuMTcsMSkgZm9yd2FyZHM7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE1MDBweCkge1xcclxcbiAgYm9keXtcXHJcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1tZW51LXdpZHRoLXdpZGVzY3JlZW4pIDFmcjtcXHJcXG4gIH1cXHJcXG4gICNtZW51IHtcXHJcXG4gICAgd2lkdGg6IHZhcigtLW1lbnUtd2lkdGgtd2lkZXNjcmVlbik7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGZvciBnZW5lcmFsIHVzZSAqL1xcclxcblxcclxcbi5oaWRkZW4ge1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuLm9wYWNpdHktemVybyB7XFxyXFxuICBvcGFjaXR5OiAwO1xcclxcbn1cXHJcXG5cXHJcXG4ubWFyZ2luLXRvcCB7XFxyXFxuICBtYXJnaW4tdG9wOiB2YXIoLS1jYXJkLWRyYWctcGFkZGluZyk7XFxyXFxufVxcclxcbi5tYXJnaW4tYm90dG9tIHtcXHJcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLWNhcmQtZHJhZy1wYWRkaW5nKTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLypmb3IgdGVzdGluZyovXFxyXFxuLyogKiB7XFxyXFxuICBvdXRsaW5lOiAxcHggc29saWQgZ3JheTtcXHJcXG59ICovXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHVybCA9IFN0cmluZyh1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsKTtcblxuICAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cbiAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gdXJsLnNsaWNlKDEsIC0xKTtcbiAgfVxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfVxuXG4gIC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuXG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcblxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpOyAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcblxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyOyAvLyBUd28gZGlnaXQgeWVhclxuXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfSAvLyBPcmRpbmFsIG51bWJlclxuXG5cbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfSAvLyBQYWRkaW5nXG5cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTsgLy8gUGFkZGluZ1xuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuXG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcblxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcblxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG5cbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuXG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG5cbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG5cbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcblxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcblxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcblxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG5cbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcblxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuXG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG5cbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG5cbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcblxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG5cbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcblxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcblxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuXG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcblxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG5cbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG5cbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuXG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG5cbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuXG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG5cbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuXG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcblxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG5cbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcblxuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG5cbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpOyAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG5cbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcblxuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcblxudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG5cbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG5cbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsInZhciByb3VuZGluZ01hcCA9IHtcbiAgY2VpbDogTWF0aC5jZWlsLFxuICByb3VuZDogTWF0aC5yb3VuZCxcbiAgZmxvb3I6IE1hdGguZmxvb3IsXG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA8IDAgPyBNYXRoLmNlaWwodmFsdWUpIDogTWF0aC5mbG9vcih2YWx1ZSk7XG4gIH0gLy8gTWF0aC50cnVuYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cbn07XG52YXIgZGVmYXVsdFJvdW5kaW5nTWV0aG9kID0gJ3RydW5jJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCA/IHJvdW5kaW5nTWFwW21ldGhvZF0gOiByb3VuZGluZ01hcFtkZWZhdWx0Um91bmRpbmdNZXRob2RdO1xufSIsImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcblxuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuXG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwiLyoqXG4gKiBEYXlzIGluIDEgd2Vlay5cbiAqXG4gKiBAbmFtZSBkYXlzSW5XZWVrXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5leHBvcnQgdmFyIGRheXNJbldlZWsgPSA3O1xuLyoqXG4gKiBEYXlzIGluIDEgeWVhclxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cmVzIGV2ZXJ5IDQgeWVhcnMsIGV4Y2VwdCBmb3IgeWVhcnMgdGhhdCBhcmUgZGl2aXNhYmxlIGJ5IDEwMCBhbmQgbm90IGRpdmlzYWJsZSBieSA0MDAuXG4gKiA+IDEgbWVhbiB5ZWFyID0gKDM2NSsxLzQtMS8xMDArMS80MDApIGRheXMgPSAzNjUuMjQyNSBkYXlzXG4gKlxuICogQG5hbWUgZGF5c0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIGRheXNJblllYXIgPSAzNjUuMjQyNTtcbi8qKlxuICogTWF4aW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQG5hbWUgbWF4VGltZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBtaW51dGVcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbk1pbnV0ZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kc0luTWludXRlID0gNjAwMDA7XG4vKipcbiAqIE1pbGxpc2Vjb25kcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkhvdXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJblNlY29uZFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMTAwMDtcbi8qKlxuICogTWluaW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQG5hbWUgbWluVGltZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pblRpbWUgPSAtbWF4VGltZTtcbi8qKlxuICogTWludXRlcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaW51dGVzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgbWludXRlc0luSG91ciA9IDYwO1xuLyoqXG4gKiBNb250aHMgaW4gMSBxdWFydGVyXG4gKlxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgbW9udGhzSW5RdWFydGVyID0gMztcbi8qKlxuICogTW9udGhzIGluIDEgeWVhclxuICpcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1vbnRoc0luWWVhciA9IDEyO1xuLyoqXG4gKiBRdWFydGVycyBpbiAxIHllYXJcbiAqXG4gKiBAbmFtZSBxdWFydGVyc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHF1YXJ0ZXJzSW5ZZWFyID0gNDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgc2Vjb25kc0luSG91ciA9IDM2MDA7XG4vKipcbiAqIFNlY29uZHMgaW4gMSBtaW51dGVcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5NaW51dGVcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBzZWNvbmRzSW5NaW51dGUgPSA2MDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIGRheVxuICpcbiAqIEBuYW1lIHNlY29uZHNJbkRheVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIHdlZWtcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5XZWVrXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7XG4vKipcbiAqIFNlY29uZHMgaW4gMSB5ZWFyXG4gKlxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5EYXkgKiBkYXlzSW5ZZWFyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgbW9udGhcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgcXVhcnRlclxuICpcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBzZWNvbmRzSW5RdWFydGVyID0gc2Vjb25kc0luTW9udGggKiAzOyIsImltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mRGF5IGZyb20gXCIuLi9zdGFydE9mRGF5L2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHRpbWVzIGFyZSByZW1vdmVkXG4gKiBmcm9tIHRoZSBkYXRlcyBhbmQgdGhlbiB0aGUgZGlmZmVyZW5jZSBpbiBkYXlzIGlzIGNhbGN1bGF0ZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMiwgNiwgMiwgMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCAwKVxuICogKVxuICogLy89PiAzNjZcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjU5OjAwIGFuZCAzIEp1bHkgMjAxMSAwMDowMTowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHN0YXJ0T2ZEYXlMZWZ0ID0gc3RhcnRPZkRheShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIHN0YXJ0T2ZEYXlSaWdodCA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlUmlnaHQpO1xuICB2YXIgdGltZXN0YW1wTGVmdCA9IHN0YXJ0T2ZEYXlMZWZ0LmdldFRpbWUoKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZkRheUxlZnQpO1xuICB2YXIgdGltZXN0YW1wUmlnaHQgPSBzdGFydE9mRGF5UmlnaHQuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mRGF5UmlnaHQpOyAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgZGF5IGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgZGF5IG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIE1JTExJU0VDT05EU19JTl9EQVkpO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBtb250aHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBtb250aHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciBtb250aHNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgbW9udGhzIGFyZSBiZXR3ZWVuIDMxIEphbnVhcnkgMjAxNCBhbmQgMSBTZXB0ZW1iZXIgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA4LCAxKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgMCwgMzEpXG4gKiApXG4gKiAvLz0+IDhcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgdmFyIHllYXJEaWZmID0gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xuICB2YXIgbW9udGhEaWZmID0gZGF0ZUxlZnQuZ2V0TW9udGgoKSAtIGRhdGVSaWdodC5nZXRNb250aCgpO1xuICByZXR1cm4geWVhckRpZmYgKiAxMiArIG1vbnRoRGlmZjtcbn0iLCJpbXBvcnQgZ2V0UXVhcnRlciBmcm9tIFwiLi4vZ2V0UXVhcnRlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBxdWFydGVycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHF1YXJ0ZXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgcXVhcnRlcnNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgcXVhcnRlcnMgYXJlIGJldHdlZW4gMzEgRGVjZW1iZXIgMjAxMyBhbmQgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMjAxMywgMTEsIDMxKVxuICogKVxuICogLy89PiAzXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgdmFyIHllYXJEaWZmID0gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xuICB2YXIgcXVhcnRlckRpZmYgPSBnZXRRdWFydGVyKGRhdGVMZWZ0KSAtIGdldFF1YXJ0ZXIoZGF0ZVJpZ2h0KTtcbiAgcmV0dXJuIHllYXJEaWZmICogNCArIHF1YXJ0ZXJEaWZmO1xufSIsImltcG9ydCBzdGFydE9mV2VlayBmcm9tIFwiLi4vc3RhcnRPZldlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHdlZWtzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgd2Vla3MgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHdlZWtzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIHdlZWtzIGFyZSBiZXR3ZWVuIDUgSnVseSAyMDE0IGFuZCAyMCBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDUpXG4gKiApXG4gKiAvLz0+IDNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSxcbiAqIC8vIGhvdyBtYW55IGNhbGVuZGFyIHdlZWtzIGFyZSBiZXR3ZWVuIDUgSnVseSAyMDE0IGFuZCAyMCBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDUpLFxuICogICB7IHdlZWtTdGFydHNPbjogMSB9XG4gKiApXG4gKiAvLz0+IDJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0LCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgc3RhcnRPZldlZWtMZWZ0ID0gc3RhcnRPZldlZWsoZGlydHlEYXRlTGVmdCwgb3B0aW9ucyk7XG4gIHZhciBzdGFydE9mV2Vla1JpZ2h0ID0gc3RhcnRPZldlZWsoZGlydHlEYXRlUmlnaHQsIG9wdGlvbnMpO1xuICB2YXIgdGltZXN0YW1wTGVmdCA9IHN0YXJ0T2ZXZWVrTGVmdC5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZXZWVrTGVmdCk7XG4gIHZhciB0aW1lc3RhbXBSaWdodCA9IHN0YXJ0T2ZXZWVrUmlnaHQuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mV2Vla1JpZ2h0KTsgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIE1JTExJU0VDT05EU19JTl9XRUVLKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnNcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHllYXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgeWVhcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciB5ZWFyc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciB5ZWFycyBhcmUgYmV0d2VlbiAzMSBEZWNlbWJlciAyMDEzIGFuZCAxMSBGZWJydWFyeSAyMDE1P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhcbiAqICAgbmV3IERhdGUoMjAxNSwgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgyMDEzLCAxMSwgMzEpXG4gKiApXG4gKiAvLz0+IDJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnQgPSB0b0RhdGUoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHQgPSB0b0RhdGUoZGlydHlEYXRlUmlnaHQpO1xuICByZXR1cm4gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xufSIsImltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuLi9jb25zdGFudHMvaW5kZXguanNcIjtcbmltcG9ydCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4uL19saWIvcm91bmRpbmdNZXRob2RzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGhvdXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnJvdW5kaW5nTWV0aG9kPSd0cnVuYyddIC0gYSByb3VuZGluZyBtZXRob2QgKGBjZWlsYCwgYGZsb29yYCwgYHJvdW5kYCBvciBgdHJ1bmNgKVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBob3Vyc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBob3VycyBhcmUgYmV0d2VlbiAyIEp1bHkgMjAxNCAwNjo1MDowMCBhbmQgMiBKdWx5IDIwMTQgMTk6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5Ib3VycyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTksIDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCA2LCA1MClcbiAqIClcbiAqIC8vPT4gMTJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5Ib3VycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGlmZiA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luSG91cjtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWlsbGlzZWNvbmRzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxNCAxMjozMDoyMC42MDAgYW5kIDIgSnVseSAyMDE0IDEyOjMwOjIxLjcwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMSwgNzAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMCwgNjAwKVxuICogKVxuICogLy89PiAxMTAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB0b0RhdGUoZGF0ZUxlZnQpLmdldFRpbWUoKSAtIHRvRGF0ZShkYXRlUmlnaHQpLmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbk1pbnV0ZSB9IGZyb20gXCIuLi9jb25zdGFudHMvaW5kZXguanNcIjtcbmltcG9ydCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4uL19saWIvcm91bmRpbmdNZXRob2RzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgbWludXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgc2lnbmVkIG51bWJlciBvZiBmdWxsIChyb3VuZGVkIHRvd2FyZHMgMCkgbWludXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yb3VuZGluZ01ldGhvZD0ndHJ1bmMnXSAtIGEgcm91bmRpbmcgbWV0aG9kIChgY2VpbGAsIGBmbG9vcmAsIGByb3VuZGAgb3IgYHRydW5jYClcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgbWludXRlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBtaW51dGVzIGFyZSBiZXR3ZWVuIDIgSnVseSAyMDE0IDEyOjA3OjU5IGFuZCAyIEp1bHkgMjAxNCAxMjoyMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAyMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCA3LCA1OSlcbiAqIClcbiAqIC8vPT4gMTJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWludXRlcyBhcmUgYmV0d2VlbiAxMDowMTo1OSBhbmQgMTA6MDA6MDBcbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gKiAgIG5ldyBEYXRlKDIwMDAsIDAsIDEsIDEwLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAwMCwgMCwgMSwgMTAsIDEsIDU5KVxuICogKVxuICogLy89PiAtMVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZUxlZnQsIGRhdGVSaWdodCwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59IiwiaW1wb3J0IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0Um91bmRpbmdNZXRob2QgfSBmcm9tIFwiLi4vX2xpYi9yb3VuZGluZ01ldGhvZHMvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluU2Vjb25kc1xuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yb3VuZGluZ01ldGhvZD0ndHJ1bmMnXSAtIGEgcm91bmRpbmcgbWV0aG9kIChgY2VpbGAsIGBmbG9vcmAsIGByb3VuZGAgb3IgYHRydW5jYClcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2Ygc2Vjb25kc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBzZWNvbmRzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxNCAxMjozMDowNy45OTkgYW5kIDIgSnVseSAyMDE0IDEyOjMwOjIwLjAwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJblNlY29uZHMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAzMCwgMjAsIDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDcsIDk5OSlcbiAqIClcbiAqIC8vPT4gMTJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5TZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkaWZmID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gMTAwMDtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59IiwiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5cbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOyAvLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG5cbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuXG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuXG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cblxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG5cbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH0gLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuXG5cbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG5cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuXG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZ2V0UXVhcnRlclxuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSB5ZWFyIHF1YXJ0ZXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIHllYXIgcXVhcnRlciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBxdWFydGVyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggcXVhcnRlciBpcyAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFF1YXJ0ZXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDNcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRRdWFydGVyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcbiAgcmV0dXJuIHF1YXJ0ZXI7XG59IiwiaW1wb3J0IHsgc2Vjb25kc0luRGF5LCBzZWNvbmRzSW5Ib3VyLCBzZWNvbmRzSW5NaW51dGUsIHNlY29uZHNJbk1vbnRoLCBzZWNvbmRzSW5RdWFydGVyLCBzZWNvbmRzSW5XZWVrLCBzZWNvbmRzSW5ZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9pbmRleC5qc1wiO1xuaW1wb3J0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MvaW5kZXguanNcIjtcbmltcG9ydCBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzIGZyb20gXCIuLi9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluSG91cnMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbkhvdXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluTWludXRlcyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluTWludXRlcy9pbmRleC5qc1wiO1xuaW1wb3J0IGRpZmZlcmVuY2VJblNlY29uZHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJblNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpbnRsRm9ybWF0RGlzdGFuY2VcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0cyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdFxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBhbmQgZm9ybWF0cyBpdCBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gd2lsbCBwaWNrIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHVuaXQgZGVwZW5kaW5nIG9uIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGRhdGVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGRpc3RhbmNlIGlzIGEgZmV3IGhvdXJzLCBpdCBtaWdodCByZXR1cm4gYHggaG91cnNgLiBJZiB0aGUgZGlzdGFuY2UgaXMgYSBmZXcgbW9udGhzLCBpdCBtaWdodCByZXR1cm4gYHggbW9udGhzYC5cbiAqXG4gKiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHVuaXQgdG8gZm9yY2UgdXNpbmcgaXQgcmVnYXJkbGVzcyBvZiB0aGUgZGlzdGFuY2UgdG8gZ2V0IGEgcmVzdWx0IGxpa2UgYDEyMzQ1NiBob3Vyc2AuXG4gKlxuICogU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIHVuaXQgcGlja2luZyBsb2dpYzpcbiAqXG4gKiB8IERpc3RhbmNlIGJldHdlZW4gZGF0ZXMgfCBSZXN1bHQgKHBhc3QpICB8IFJlc3VsdCAoZnV0dXJlKSB8XG4gKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8XG4gKiB8IDAgc2Vjb25kcyAgICAgICAgICAgICAgfCBub3cgICAgICAgICAgICB8IG5vdyAgICAgICAgICAgICB8XG4gKiB8IDEtNTkgc2Vjb25kcyAgICAgICAgICAgfCBYIHNlY29uZHMgYWdvICB8IGluIFggc2Vjb25kcyAgICB8XG4gKiB8IDEtNTkgbWludXRlcyAgICAgICAgICAgfCBYIG1pbnV0ZXMgYWdvICB8IGluIFggbWludXRlcyAgICB8XG4gKiB8IDEtMjMgaG91cnMgICAgICAgICAgICAgfCBYIGhvdXJzIGFnbyAgICB8IGluIFggaG91cnMgICAgICB8XG4gKiB8IDEgZGF5ICAgICAgICAgICAgICAgICAgfCB5ZXN0ZXJkYXkgICAgICB8IHRvbW9ycm93ICAgICAgICB8XG4gKiB8IDItNiBkYXlzICAgICAgICAgICAgICAgfCBYIGRheXMgYWdvICAgICB8IGluIFggZGF5cyAgICAgICB8XG4gKiB8IDcgZGF5cyAgICAgICAgICAgICAgICAgfCBsYXN0IHdlZWsgICAgICB8IG5leHQgd2VlayAgICAgICB8XG4gKiB8IDggZGF5cy0xIG1vbnRoICAgICAgICAgfCBYIHdlZWtzIGFnbyAgICB8IGluIFggd2Vla3MgICAgICB8XG4gKiB8IDEgbW9udGggICAgICAgICAgICAgICAgfCBsYXN0IG1vbnRoICAgICB8IG5leHQgbW9udGggICAgICB8XG4gKiB8IDItMyBtb250aHMgICAgICAgICAgICAgfCBYIG1vbnRocyBhZ28gICB8IGluIFggbW9udGhzICAgICB8XG4gKiB8IDEgcXVhcnRlciAgICAgICAgICAgICAgfCBsYXN0IHF1YXJ0ZXIgICB8IG5leHQgcXVhcnRlciAgICB8XG4gKiB8IDItMyBxdWFydGVycyAgICAgICAgICAgfCBYIHF1YXJ0ZXJzIGFnbyB8IGluIFggcXVhcnRlcnMgICB8XG4gKiB8IDEgeWVhciAgICAgICAgICAgICAgICAgfCBsYXN0IHllYXIgICAgICB8IG5leHQgeWVhciAgICAgICB8XG4gKiB8IDIrIHllYXJzICAgICAgICAgICAgICAgfCBYIHllYXJzIGFnbyAgICB8IGluIFggeWVhcnMgICAgICB8XG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBiYXNlRGF0ZSAtIHRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnVuaXRdIC0gZm9ybWF0cyB0aGUgZGlzdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gdW5pdCAoJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnKS5cbiAqIEBwYXJhbSB7U3RyaW5nfFN0cmluZ1tdfSBbb3B0aW9ucy5sb2NhbGVdIC0gdGhlIGxvY2FsZSB0byB1c2UuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubG9jYWxlTWF0Y2hlcj0nYmVzdCBmaXQnXSAtIHRoZSBsb2NhbGUgbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIHVzZS4gT3RoZXIgdmFsdWU6ICdsb29rdXAnLlxuICogU2VlIE1ETiBmb3IgZGV0YWlscyBbTG9jYWxlIGlkZW50aWZpY2F0aW9uIGFuZCBuZWdvdGlhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNsb2NhbGVfaWRlbnRpZmljYXRpb25fYW5kX25lZ290aWF0aW9uKVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLm51bWVyaWM9J2F1dG8nXSAtIHRoZSBvdXRwdXQgbWVzc2FnZSBmb3JtYXQuIFRoZSB2YWx1ZXMgYXJlICdhdXRvJyAoZS5nLiBgeWVzdGVyZGF5YCksICdhbHdheXMnKGUuZy4gYDEgZGF5IGFnb2ApLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnN0eWxlPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQuIFRoZSB2YWx1ZXMgYXJlOiAnbG9uZycgKGUuZy4gYDEgbW9udGhgKSwgJ3Nob3J0JyAoZS5nLiAnaW4gMSBtby4nKSwgJ25hcnJvdycgKGUuZy4gJ2luIDEgbW8uJykuXG4gKiBUaGUgbmFycm93IG9uZSBjb3VsZCBiZSBzaW1pbGFyIHRvIHRoZSBzaG9ydCBvbmUgZm9yIHNvbWUgbG9jYWxlcy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBkaXN0YW5jZSBpbiB3b3JkcyBhY2NvcmRpbmcgdG8gbGFuZ3VhZ2Utc2Vuc2l0aXZlIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBiYXNlRGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy51bml0YCBtdXN0IG5vdCBiZSBpbnZhbGlkIFVuaXRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBub3QgYmUgaW52YWxpZCBsb2NhbGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZU1hdGNoZXJgIG11c3Qgbm90IGJlIGludmFsaWQgbG9jYWxlTWF0Y2hlclxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubnVtZXJpY2AgbXVzdCBub3QgYmUgaW52YWxpZCBudW1lcmljXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5zdHlsZWAgbXVzdCBub3QgYmUgaW52YWxpZCBzdHlsZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBkYXRlcyB3aGVuIHRoZSBmaXN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZD9cbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTEsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKVxuICogKVxuICogLy89PiAnaW4gMSBob3VyJ1xuICpcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGRhdGVzIHdoZW4gdGhlIGZpc3QgZGF0ZSBpcyBiZWZvcmUgdGhlIHNlY29uZD9cbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTEsIDMwLCAwKVxuICogKVxuICogLy89PiAnMSBob3VyIGFnbydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNlIHRoZSB1bml0IG9wdGlvbiB0byBmb3JjZSB0aGUgZnVuY3Rpb24gdG8gb3V0cHV0IHRoZSByZXN1bHQgaW4gcXVhcnRlcnMuIFdpdGhvdXQgc2V0dGluZyBpdCwgdGhlIGV4YW1wbGUgd291bGQgcmV0dXJuIFwibmV4dCB5ZWFyXCJcbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NywgNiwgNCwgMTAsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKSxcbiAqICAgeyB1bml0OiAncXVhcnRlcicgfVxuICogKVxuICogLy89PiAnaW4gNSBxdWFydGVycydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNlIHRoZSBsb2NhbGUgb3B0aW9uIHRvIGdldCB0aGUgcmVzdWx0IGluIFNwYW5pc2guIFdpdGhvdXQgc2V0dGluZyBpdCwgdGhlIGV4YW1wbGUgd291bGQgcmV0dXJuIFwiaW4gMSBob3VyXCIuXG4gKiBpbnRsRm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDEwLCAzMCwgMCksXG4gKiAgIHsgbG9jYWxlOiAnZXMnIH1cbiAqIClcbiAqIC8vPT4gJ2RlbnRybyBkZSAxIGhvcmEnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVzZSB0aGUgbnVtZXJpYyBvcHRpb24gdG8gZm9yY2UgdGhlIGZ1bmN0aW9uIHRvIHVzZSBudW1lcmljIHZhbHVlcy4gV2l0aG91dCBzZXR0aW5nIGl0LCB0aGUgZXhhbXBsZSB3b3VsZCByZXR1cm4gXCJ0b21vcnJvd1wiLlxuICogaW50bEZvcm1hdERpc3RhbmNlKFxuICogICBuZXcgRGF0ZSgxOTg2LCAzLCA1LCAxMSwgMzAsIDApLFxuICogICBuZXcgRGF0ZSgxOTg2LCAzLCA0LCAxMSwgMzAsIDApLFxuICogICB7IG51bWVyaWM6ICdhbHdheXMnIH1cbiAqIClcbiAqIC8vPT4gJ2luIDEgZGF5J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2UgdGhlIHN0eWxlIG9wdGlvbiB0byBmb3JjZSB0aGUgZnVuY3Rpb24gdG8gdXNlIHNob3J0IHZhbHVlcy4gV2l0aG91dCBzZXR0aW5nIGl0LCB0aGUgZXhhbXBsZSB3b3VsZCByZXR1cm4gXCJpbiAyIHllYXJzXCIuXG4gKiBpbnRsRm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDE5ODgsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIHsgc3R5bGU6ICdzaG9ydCcgfVxuICogKVxuICogLy89PiAnaW4gMiB5cidcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW50bEZvcm1hdERpc3RhbmNlKGRhdGUsIGJhc2VEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdmFsdWUgPSAwO1xuICB2YXIgdW5pdDtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRhdGUpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGJhc2VEYXRlKTtcblxuICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVuaXQpKSB7XG4gICAgLy8gR2V0IHRoZSB1bml0IGJhc2VkIG9uIGRpZmZJblNlY29uZHMgY2FsY3VsYXRpb25zIGlmIG5vIHVuaXQgaXMgc3BlY2lmaWVkXG4gICAgdmFyIGRpZmZJblNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpOyAvLyBUaGUgc21hbGxlc3QgdW5pdFxuXG4gICAgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luTWludXRlKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJblNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICB1bml0ID0gJ3NlY29uZCc7XG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkhvdXIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluTWludXRlcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICAgIHVuaXQgPSAnbWludXRlJztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luRGF5ICYmIE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSkgPCAxKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkhvdXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpO1xuICAgICAgdW5pdCA9ICdob3VyJztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJiAodmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZUxlZnQsIGRhdGVSaWdodCkpICYmIE1hdGguYWJzKHZhbHVlKSA8IDcpIHtcbiAgICAgIHVuaXQgPSAnZGF5JztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luTW9udGgpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICAgIHVuaXQgPSAnd2Vlayc7XG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJblF1YXJ0ZXIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICB1bml0ID0gJ21vbnRoJztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luWWVhcikge1xuICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgPCA0KSB7XG4gICAgICAgIC8vIFRvIGZpbHRlciBvdXQgY2FzZXMgdGhhdCBhcmUgbGVzcyB0aGFuIGEgeWVhciBidXQgbWF0Y2ggNCBxdWFydGVyc1xuICAgICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICAgIHVuaXQgPSAncXVhcnRlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgdmFsdWUgaWYgdW5pdCBpcyBzcGVjaWZpZWRcbiAgICB1bml0ID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnVuaXQ7XG5cbiAgICBpZiAodW5pdCA9PT0gJ3NlY29uZCcpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluU2Vjb25kcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdtaW51dGUnKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnaG91cicpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluSG91cnMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnZGF5Jykge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnd2VlaycpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdtb250aCcpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAncXVhcnRlcicpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICd5ZWFyJykge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBydGYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSwge1xuICAgIGxvY2FsZU1hdGNoZXI6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGVNYXRjaGVyLFxuICAgIG51bWVyaWM6IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubnVtZXJpYykgfHwgJ2F1dG8nLFxuICAgIHN0eWxlOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc3R5bGVcbiAgfSk7XG4gIHJldHVybiBydGYuZm9ybWF0KHZhbHVlLCB1bml0KTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0Z1dHVyZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgZnV0dXJlP1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBmdXR1cmU/XG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwcmVzZW50IGluIHRoZSBGUCBzdWJtb2R1bGUgYXNcbiAqID4gaXQgdXNlcyBgRGF0ZS5ub3coKWAgaW50ZXJuYWxseSBoZW5jZSBpbXB1cmUgYW5kIGNhbid0IGJlIHNhZmVseSBjdXJyaWVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIGluIHRoZSBmdXR1cmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNCwgaXMgMzEgRGVjZW1iZXIgMjAxNCBpbiB0aGUgZnV0dXJlP1xuICogY29uc3QgcmVzdWx0ID0gaXNGdXR1cmUobmV3IERhdGUoMjAxNCwgMTEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRnV0dXJlKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKSA+IERhdGUubm93KCk7XG59IiwiaW1wb3J0IHN0YXJ0T2ZEYXkgZnJvbSBcIi4uL3N0YXJ0T2ZEYXkvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZURheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIGRheSAoYW5kIHllYXIgYW5kIG1vbnRoKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAwNjowMDowMCBhbmQgNCBTZXB0ZW1iZXIgMTg6MDA6MDAgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQsIDYsIDApLCBuZXcgRGF0ZSgyMDE0LCA4LCA0LCAxOCwgMCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyIGFuZCA0IE9jdG9iZXIgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQpLCBuZXcgRGF0ZSgyMDE0LCA5LCA0KSlcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyLCAyMDE0IGFuZCA0IFNlcHRlbWJlciwgMjAxNSBpbiB0aGUgc2FtZSBkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVEYXkobmV3IERhdGUoMjAxNCwgOCwgNCksIG5ldyBEYXRlKDIwMTUsIDgsIDQpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2FtZURheShkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0U3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHRTdGFydE9mRGF5ID0gc3RhcnRPZkRheShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdFN0YXJ0T2ZEYXkuZ2V0VGltZSgpID09PSBkYXRlUmlnaHRTdGFydE9mRGF5LmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZU1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgbW9udGggKGFuZCB5ZWFyKVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMiBTZXB0ZW1iZXIgMjAxNCBhbmQgMjUgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgbW9udGg/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVNb250aChuZXcgRGF0ZSgyMDE0LCA4LCAyKSwgbmV3IERhdGUoMjAxNCwgOCwgMjUpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNSBpbiB0aGUgc2FtZSBtb250aD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZU1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCBuZXcgRGF0ZSgyMDE1LCA4LCAyNSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTYW1lTW9udGgoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdC5nZXRGdWxsWWVhcigpID09PSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKSAmJiBkYXRlTGVmdC5nZXRNb250aCgpID09PSBkYXRlUmlnaHQuZ2V0TW9udGgoKTtcbn0iLCJpbXBvcnQgc3RhcnRPZldlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzU2FtZVdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgd2VlayAoYW5kIG1vbnRoIGFuZCB5ZWFyKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgd2VlayAoYW5kIG1vbnRoIGFuZCB5ZWFyKT9cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBmaXJzdCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgc2Vjb25kIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgd2VlayAoYW5kIG1vbnRoIGFuZCB5ZWFyKVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMzEgQXVndXN0IDIwMTQgYW5kIDQgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVdlZWsobmV3IERhdGUoMjAxNCwgNywgMzEpLCBuZXcgRGF0ZSgyMDE0LCA4LCA0KSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB3ZWVrIHN0YXJ0cyB3aXRoIE1vbmRheSxcbiAqIC8vIGFyZSAzMSBBdWd1c3QgMjAxNCBhbmQgNCBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lV2VlayhuZXcgRGF0ZSgyMDE0LCA3LCAzMSksIG5ldyBEYXRlKDIwMTQsIDgsIDQpLCB7XG4gKiAgIHdlZWtTdGFydHNPbjogMVxuICogfSlcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDEgSmFudWFyeSAyMDE0IGFuZCAxIEphbnVhcnkgMjAxNSBpbiB0aGUgc2FtZSB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lV2VlayhuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNSwgMCwgMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2FtZVdlZWsoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdFN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsoZGlydHlEYXRlTGVmdCwgb3B0aW9ucyk7XG4gIHZhciBkYXRlUmlnaHRTdGFydE9mV2VlayA9IHN0YXJ0T2ZXZWVrKGRpcnR5RGF0ZVJpZ2h0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGVMZWZ0U3RhcnRPZldlZWsuZ2V0VGltZSgpID09PSBkYXRlUmlnaHRTdGFydE9mV2Vlay5nZXRUaW1lKCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1NhbWVZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHllYXI/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHllYXI/XG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSB5ZWFyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyKSwgbmV3IERhdGUoMjAxNCwgOCwgMjUpKVxuICogLy89PiB0cnVlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTYW1lWWVhcihkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgcmV0dXJuIGRhdGVMZWZ0LmdldEZ1bGxZZWFyKCkgPT09IGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xufSIsImltcG9ydCBpc1NhbWVNb250aCBmcm9tIFwiLi4vaXNTYW1lTW9udGgvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVGhpc01vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgbW9udGggYXMgdGhlIGN1cnJlbnQgZGF0ZT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSBtb250aCBhcyB0aGUgY3VycmVudCBkYXRlP1xuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGUgRlAgc3VibW9kdWxlIGFzXG4gKiA+IGl0IHVzZXMgYERhdGUubm93KClgIGludGVybmFsbHkgaGVuY2UgaW1wdXJlIGFuZCBjYW4ndCBiZSBzYWZlbHkgY3VycmllZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyBpbiB0aGlzIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMjUgU2VwdGVtYmVyIDIwMTQsIGlzIDE1IFNlcHRlbWJlciAyMDE0IGluIHRoaXMgbW9udGg/XG4gKiBjb25zdCByZXN1bHQgPSBpc1RoaXNNb250aChuZXcgRGF0ZSgyMDE0LCA4LCAxNSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RoaXNNb250aChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiBpc1NhbWVNb250aChEYXRlLm5vdygpLCBkaXJ0eURhdGUpO1xufSIsImltcG9ydCBpc1NhbWVXZWVrIGZyb20gXCIuLi9pc1NhbWVXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzVGhpc1dlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBzYW1lIHdlZWsgYXMgdGhlIGN1cnJlbnQgZGF0ZT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSB3ZWVrIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwcmVzZW50IGluIHRoZSBGUCBzdWJtb2R1bGUgYXNcbiAqID4gaXQgdXNlcyBgRGF0ZS5ub3coKWAgaW50ZXJuYWxseSBoZW5jZSBpbXB1cmUgYW5kIGNhbid0IGJlIHNhZmVseSBjdXJyaWVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgaW4gdGhpcyB3ZWVrXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMjUgU2VwdGVtYmVyIDIwMTQsIGlzIDIxIFNlcHRlbWJlciAyMDE0IGluIHRoaXMgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVGhpc1dlZWsobmV3IERhdGUoMjAxNCwgOCwgMjEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDI1IFNlcHRlbWJlciAyMDE0IGFuZCB3ZWVrIHN0YXJ0cyB3aXRoIE1vbmRheVxuICogLy8gaXMgMjEgU2VwdGVtYmVyIDIwMTQgaW4gdGhpcyB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNUaGlzV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyMSksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGhpc1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gaXNTYW1lV2VlayhkaXJ0eURhdGUsIERhdGUubm93KCksIG9wdGlvbnMpO1xufSIsImltcG9ydCBpc1NhbWVZZWFyIGZyb20gXCIuLi9pc1NhbWVZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1RoaXNZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSB5ZWFyIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgeWVhciBhcyB0aGUgY3VycmVudCBkYXRlP1xuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGUgRlAgc3VibW9kdWxlIGFzXG4gKiA+IGl0IHVzZXMgYERhdGUubm93KClgIGludGVybmFsbHkgaGVuY2UgaW1wdXJlIGFuZCBjYW4ndCBiZSBzYWZlbHkgY3VycmllZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyBpbiB0aGlzIHllYXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAyNSBTZXB0ZW1iZXIgMjAxNCwgaXMgMiBKdWx5IDIwMTQgaW4gdGhpcyB5ZWFyP1xuICogY29uc3QgcmVzdWx0ID0gaXNUaGlzWWVhcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGhpc1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gaXNTYW1lWWVhcihkaXJ0eURhdGUsIERhdGUubm93KCkpO1xufSIsImltcG9ydCBpc1NhbWVEYXkgZnJvbSBcIi4uL2lzU2FtZURheS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNUb2RheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB0b2RheT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSB0b2RheT9cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IHByZXNlbnQgaW4gdGhlIEZQIHN1Ym1vZHVsZSBhc1xuICogPiBpdCB1c2VzIGBEYXRlLm5vdygpYCBpbnRlcm5hbGx5IGhlbmNlIGltcHVyZSBhbmQgY2FuJ3QgYmUgc2FmZWx5IGN1cnJpZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdG9kYXlcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNCwgaXMgNiBPY3RvYmVyIDE0OjAwOjAwIHRvZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNUb2RheShuZXcgRGF0ZSgyMDE0LCA5LCA2LCAxNCwgMCkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RvZGF5KGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIGlzU2FtZURheShkaXJ0eURhdGUsIERhdGUubm93KCkpO1xufSIsImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuXG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuXG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDsgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcblxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG5cbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xuXG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG5cbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcblxudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07IC8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cblxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcblxudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTsgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuXG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xuXG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMFxuICAgIC8qIFN1bmRheSAqL1xuICAgICxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbkhvdXIsIG1pbGxpc2Vjb25kc0luTWludXRlIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHBhcnNlSVNPXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFBhcnNlIElTTyBzdHJpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0IGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzbid0IGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3JcbiAqIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gcGFyc2VJU08oJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnKzAyMDE0MTAxJywgeyBhZGRpdGlvbmFsRGlnaXRzOiAxIH0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7XG4gIHZhciBfb3B0aW9ucyRhZGRpdGlvbmFsRGk7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID0gdG9JbnRlZ2VyKChfb3B0aW9ucyRhZGRpdGlvbmFsRGkgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cykgIT09IG51bGwgJiYgX29wdGlvbnMkYWRkaXRpb25hbERpICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRhZGRpdGlvbmFsRGkgOiAyKTtcblxuICBpZiAoYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJiBhZGRpdGlvbmFsRGlnaXRzICE9PSAxICYmIGFkZGl0aW9uYWxEaWdpdHMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYWRkaXRpb25hbERpZ2l0cyBtdXN0IGJlIDAsIDEgb3IgMicpO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIHZhciBkYXRlU3RyaW5ncyA9IHNwbGl0RGF0ZVN0cmluZyhhcmd1bWVudCk7XG4gIHZhciBkYXRlO1xuXG4gIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7XG4gICAgdmFyIHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTtcbiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpO1xuICB9XG5cbiAgaWYgKCFkYXRlIHx8IGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgdGltZSA9IDA7XG4gIHZhciBvZmZzZXQ7XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHtcbiAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpO1xuXG4gICAgaWYgKGlzTmFOKHRpbWUpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHtcbiAgICBvZmZzZXQgPSBwYXJzZVRpbWV6b25lKGRhdGVTdHJpbmdzLnRpbWV6b25lKTtcblxuICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpcnR5RGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpOyAvLyBqcyBwYXJzZWQgc3RyaW5nIGFzc3VtaW5nIGl0J3MgaW4gVVRDIHRpbWV6b25lXG4gICAgLy8gYnV0IHdlIG5lZWQgaXQgdG8gYmUgcGFyc2VkIGluIG91ciB0aW1lem9uZVxuICAgIC8vIHNvIHdlIHVzZSB1dGMgdmFsdWVzIHRvIGJ1aWxkIGRhdGUgaW4gb3VyIHRpbWV6b25lLlxuICAgIC8vIFllYXIgdmFsdWVzIGZyb20gMCB0byA5OSBtYXAgdG8gdGhlIHllYXJzIDE5MDAgdG8gMTk5OVxuICAgIC8vIHNvIHNldCB5ZWFyIGV4cGxpY2l0bHkgd2l0aCBzZXRGdWxsWWVhci5cblxuICAgIHZhciByZXN1bHQgPSBuZXcgRGF0ZSgwKTtcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoZGlydHlEYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRpcnR5RGF0ZS5nZXRVVENNb250aCgpLCBkaXJ0eURhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICByZXN1bHQuc2V0SG91cnMoZGlydHlEYXRlLmdldFVUQ0hvdXJzKCksIGRpcnR5RGF0ZS5nZXRVVENNaW51dGVzKCksIGRpcnR5RGF0ZS5nZXRVVENTZWNvbmRzKCksIGRpcnR5RGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KTtcbn1cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLyxcbiAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksXG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC9cbn07XG52YXIgZGF0ZVJlZ2V4ID0gL14tPyg/OihcXGR7M30pfChcXGR7Mn0pKD86LT8oXFxkezJ9KSk/fFcoXFxkezJ9KSg/Oi0/KFxcZHsxfSkpP3wpJC87XG52YXIgdGltZVJlZ2V4ID0gL14oXFxkezJ9KD86Wy4sXVxcZCopPykoPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/KD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyQvO1xudmFyIHRpbWV6b25lUmVnZXggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9O1xuICB2YXIgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTtcbiAgdmFyIHRpbWVTdHJpbmc7IC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG5cbiAgaWYgKGFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZGF0ZVN0cmluZ3M7XG4gIH1cblxuICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV07XG5cbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJyk7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ14oPzooXFxcXGR7NH18WystXVxcXFxkeycgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgJ30pfChcXFxcZHsyfXxbKy1dXFxcXGR7JyArICgyICsgYWRkaXRpb25hbERpZ2l0cykgKyAnfSkkKScpO1xuICB2YXIgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcblxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4ge1xuICAgIHllYXI6IE5hTixcbiAgICByZXN0RGF0ZVN0cmluZzogJydcbiAgfTtcbiAgdmFyIHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7XG4gIHZhciBjZW50dXJ5ID0gY2FwdHVyZXNbMl0gPyBwYXJzZUludChjYXB0dXJlc1syXSkgOiBudWxsOyAvLyBlaXRoZXIgeWVhciBvciBjZW50dXJ5IGlzIG51bGwsIG5vdCBib3RoXG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBjZW50dXJ5ID09PSBudWxsID8geWVhciA6IGNlbnR1cnkgKiAxMDAsXG4gICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgdmFyIGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChkYXRlUmVnZXgpOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgc3RyaW5nXG5cbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIHZhciBpc1dlZWtEYXRlID0gISFjYXB0dXJlc1s0XTtcbiAgdmFyIGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pO1xuICB2YXIgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7XG4gIHZhciBkYXkgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzNdKTtcbiAgdmFyIHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTtcbiAgdmFyIGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTtcblxuICBpZiAoaXNXZWVrRGF0ZSkge1xuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspO1xuICB9IGVsc2Uge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIE1hdGgubWF4KGRheU9mWWVhciwgZGF5KSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSkgOiAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgY2FwdHVyZXMgPSB0aW1lU3RyaW5nLm1hdGNoKHRpbWVSZWdleCk7XG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47IC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB0aW1lXG5cbiAgdmFyIGhvdXJzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1sxXSk7XG4gIHZhciBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7XG4gIHZhciBzZWNvbmRzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1szXSk7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHJldHVybiBob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSArIHNlY29uZHMgKiAxMDAwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWVVbml0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoJywnLCAnLicpKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nKSB7XG4gIGlmICh0aW1lem9uZVN0cmluZyA9PT0gJ1onKSByZXR1cm4gMDtcbiAgdmFyIGNhcHR1cmVzID0gdGltZXpvbmVTdHJpbmcubWF0Y2godGltZXpvbmVSZWdleCk7XG4gIGlmICghY2FwdHVyZXMpIHJldHVybiAwO1xuICB2YXIgc2lnbiA9IGNhcHR1cmVzWzFdID09PSAnKycgPyAtMSA6IDE7XG4gIHZhciBob3VycyA9IHBhcnNlSW50KGNhcHR1cmVzWzJdKTtcbiAgdmFyIG1pbnV0ZXMgPSBjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkgfHwgMDtcblxuICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHJldHVybiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlKTtcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3O1xuICB2YXIgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZik7XG4gIHJldHVybiBkYXRlO1xufSAvLyBWYWxpZGF0aW9uIGZ1bmN0aW9uc1xuLy8gRmVicnVhcnkgaXMgbnVsbCB0byBoYW5kbGUgdGhlIGxlYXAgeWVhciAodXNpbmcgfHwpXG5cblxudmFyIGRheXNJbk1vbnRocyA9IFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgcmV0dXJuIG1vbnRoID49IDAgJiYgbW9udGggPD0gMTEgJiYgZGF0ZSA+PSAxICYmIGRhdGUgPD0gKGRheXNJbk1vbnRoc1ttb250aF0gfHwgKGlzTGVhcFllYXJJbmRleCh5ZWFyKSA/IDI5IDogMjgpKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAzNjYgOiAzNjUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgcmV0dXJuIHdlZWsgPj0gMSAmJiB3ZWVrIDw9IDUzICYmIGRheSA+PSAwICYmIGRheSA8PSA2O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgIHJldHVybiBtaW51dGVzID09PSAwICYmIHNlY29uZHMgPT09IDA7XG4gIH1cblxuICByZXR1cm4gc2Vjb25kcyA+PSAwICYmIHNlY29uZHMgPCA2MCAmJiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8IDYwICYmIGhvdXJzID49IDAgJiYgaG91cnMgPCAyNTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHtcbiAgcmV0dXJuIG1pbnV0ZXMgPj0gMCAmJiBtaW51dGVzIDw9IDU5O1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3RhcnRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgc3RhcnQgb2YgYSBkYXlcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMDIgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHJldHVybnMge0RhdGV9IHRoZSBzdGFydCBvZiBhIHdlZWtcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksIHRoZSBzdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJpbXBvcnQgXCIuL3N0eWxlLmNzc1wiO1xyXG5pbXBvcnQgeyB1aSB9IGZyb20gXCIuL21vZHVsZXMvdWkuanNcIjtcclxuXHJcbi8vcnVuIG9uIGxvYWRcclxudWkubG9hZE1lbnUoKTtcclxudWkucGxhY2VDYXJkcygwKTtcclxuXHJcbi8vVE9ETzpcclxuXHJcbi8vc2VhcmNoIHdpdGggZGF0YWxpc3QgaWYgcG9zc2libGVcclxuXHJcbi8vZW1wdHkgc3RhdGUgKG9yIG1haW4gcGFnZSlcclxuXHJcbi8vYWRkIG9wdGlvbnMgbWVudS9tb2RhbCAoaG90a2V5cywgdGhlbWUsICkiLCJleHBvcnQgY2xhc3MgVG9kbyB7XHJcbiAgY29uc3RydWN0b3IodGl0bGUsIGRlc2NyaXB0aW9uLCBkYXRlQ3JlYXRpb24sIGRhdGVEdWUsIC8vdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcclxuICAgIGNoZWNrcywgcHJpb3JpdHksIGlzRmF2b3JpdGUsIGlzUGlubmVkKXtcclxuICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgIHRoaXMuZGF0ZUNyZWF0aW9uID0gZGF0ZUNyZWF0aW9uO1xyXG4gICAgdGhpcy5kYXRlRHVlID0gZGF0ZUR1ZTtcclxuICAgIHRoaXMuY2hlY2tzID0gY2hlY2tzO1xyXG4gICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5O1xyXG4gICAgdGhpcy5pc0Zhdm9yaXRlID0gaXNGYXZvcml0ZTtcclxuICAgIHRoaXMuaXNQaW5uZWQgPSBpc1Bpbm5lZDtcclxuICB9O1xyXG59OyIsImltcG9ydCB7IHRvZG9TYW1wbGUgfSBmcm9tIFwiLi90b2RvU2FtcGxlLmpzXCI7XHJcbmltcG9ydCB7IFRvZG8gfSBmcm9tIFwiLi9jbGFzc2VzLmpzXCI7XHJcbmltcG9ydCB7IGZvcm1hdCwgaXNUb2RheSwgaXNUaGlzV2VlaywgaXNUaGlzTW9udGgsIGlzVGhpc1llYXIsIGlzRnV0dXJlLCB9IGZyb20gXCJkYXRlLWZuc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRvZG9IYW5kbGVyID0gKCgpID0+IHtcclxuICBmdW5jdGlvbiB0b2dnbGVGYXYoKXtcclxuICAgIGNvbnN0IHByb2plY3RJZHggPSB0aGlzLmRhdGFzZXQucHJvamVjdElkeDtcclxuICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzLmRhdGFzZXQudG9kb0lkeDtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmlzRmF2b3JpdGU7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5pc0Zhdm9yaXRlID0gIXZhbHVlO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRvZ2dsZVBpbigpe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXMuZGF0YXNldC50b2RvSWR4O1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuXHJcbiAgICBjb25zdCB2YWx1ZSA9IGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmlzUGlubmVkO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uaXNQaW5uZWQgPSAhdmFsdWU7XHJcbiAgICBcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidG9kb1wiLCBKU09OLnN0cmluZ2lmeShsb2NhbCkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RmF2U3RhdHVzKHByb2plY3RJZHgsIHRvZG9JZHgpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIHJldHVybiBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5pc0Zhdm9yaXRlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVsZXRlVG9kbyhwcm9qZWN0SWR4LCB0b2RvSWR4KXtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvcy5zcGxpY2UodG9kb0lkeCwxKTtcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0YXNrQ2hlY2socHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5jaGVja3NbdGFza0lkeF0uaXNEb25lO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uY2hlY2tzW3Rhc2tJZHhdLmlzRG9uZSA9ICF2YWx1ZTtcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWxldGVUYXNrKHByb2plY3RJZHgsIHRvZG9JZHgsIHRhc2tJZHgpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmNoZWNrcy5zcGxpY2UodGFza0lkeCwgMSk7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBlZGl0VGl0bGUocHJvamVjdElkeCwgdG9kb0lkeCwgc3RyaW5nKXtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS50aXRsZSA9IHN0cmluZztcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGVkaXREZXNjcmlwdGlvbihwcm9qZWN0SWR4LCB0b2RvSWR4LCBzdHJpbmcpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmRlc2NyaXB0aW9uID0gc3RyaW5nO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZWRpdERhdGVEdWUocHJvamVjdElkeCwgdG9kb0lkeCwgc3RyaW5nKXtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5kYXRlRHVlID0gc3RyaW5nO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZWRpdExhYmVsKHByb2plY3RJZHgsIHRvZG9JZHgsIHRhc2tJZHgsIHN0cmluZyl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uY2hlY2tzW3Rhc2tJZHhdLnRhc2sgPSBzdHJpbmc7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBjcmVhdGVUYXNrKHByb2plY3RJZHgsIHRvZG9JZHgpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmNoZWNrcy5wdXNoKHsgdGFzazogXCJcIiwgaXNEb25lOiBmYWxzZSB9KVxyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFByb2plY3RzVGl0bGVzKCl7XHJcbiAgICBsZXQgcHJvamVjdExpc3QgPSBbXVxyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsLmZvckVhY2gocHJvamVjdCA9PiB7XHJcbiAgICAgIHByb2plY3RMaXN0LnB1c2gocHJvamVjdC50aXRsZSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBwcm9qZWN0TGlzdDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlbGV0ZVByb2plY3QocHJvamVjdElkeCl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWwuc3BsaWNlKHByb2plY3RJZHgsIDEpO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gY2hhbmdlUHJpb3JpdHkocHJvamVjdElkeCwgdG9kb0lkeCwgcHJpb3JpdHkpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLnByaW9yaXR5ID0gcHJpb3JpdHkgPT09IFwiMFwiID8gXCJsb3dcIiA6IHByaW9yaXR5ID09PSBcIjFcIiA/IFwibWlkZGxlXCIgOiBcImhpZ2hcIjtcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGdldFByb2plY3QocmVxdWVzdCl7XHJcbiAgICBcclxuICAgIGlmKHR5cGVvZiByZXF1ZXN0ID09PSBcIm51bWJlclwiKXtcclxuICAgICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgcmV0dXJuIGxvY2FsW3JlcXVlc3RdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihyZXF1ZXN0ID09PSBcInBpbm5lZFwiKXtcclxuICAgICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgY29uc3QgZmlsdGVyZWQgPSB7IHRpdGxlOiBcIlBpbm5lZFwiLCB0b2RvczogW119O1xyXG4gICAgICBsb2NhbC5mb3JFYWNoKCh0aGlzUHJvamVjdCwgcHJvamVjdElkeCkgPT4gdGhpc1Byb2plY3QudG9kb3MuZm9yRWFjaCgodGhpc1RvZG8sIHRvZG9JZHgpID0+IHtcclxuICAgICAgICBpZih0aGlzVG9kby5pc1Bpbm5lZCl7XHJcbiAgICAgICAgICB0aGlzVG9kby5wcm9qZWN0SWR4ID0gcHJvamVjdElkeDtcclxuICAgICAgICAgIHRoaXNUb2RvLnRvZG9JZHggPSB0b2RvSWR4O1xyXG4gICAgICAgICAgZmlsdGVyZWQudG9kb3MucHVzaCh0aGlzVG9kbyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSkpO1xyXG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHJlcXVlc3QgPT09IFwiZmF2b3JpdGVzXCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHsgdGl0bGU6IFwiRmF2b3JpdGVzXCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIGxvY2FsLmZvckVhY2goKHRoaXNQcm9qZWN0LCBwcm9qZWN0SWR4KSA9PiB0aGlzUHJvamVjdC50b2Rvcy5mb3JFYWNoKCh0aGlzVG9kbywgdG9kb0lkeCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXNUb2RvLmlzRmF2b3JpdGUpe1xyXG4gICAgICAgICAgdGhpc1RvZG8ucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgICAgICB0aGlzVG9kby50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgICAgICAgIGZpbHRlcmVkLnRvZG9zLnB1c2godGhpc1RvZG8pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0pKTtcclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihyZXF1ZXN0ID09PSBcInRvZGF5XCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHsgdGl0bGU6IFwiVGFza3MgZm9yIHRvZGF5XCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIGxvY2FsLmZvckVhY2goKHRoaXNQcm9qZWN0LCBwcm9qZWN0SWR4KSA9PiB0aGlzUHJvamVjdC50b2Rvcy5mb3JFYWNoKCh0aGlzVG9kbywgdG9kb0lkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdERhdGUgPSB0aGlzVG9kby5kYXRlRHVlLnNwbGl0KFwiLVwiKS5qb2luKFwiLFwiKTtcclxuICAgICAgICBpZihpc1RvZGF5KG5ldyBEYXRlKGZvcm1hdERhdGUpKSl7XHJcbiAgICAgICAgICB0aGlzVG9kby5wcm9qZWN0SWR4ID0gcHJvamVjdElkeDtcclxuICAgICAgICAgIHRoaXNUb2RvLnRvZG9JZHggPSB0b2RvSWR4O1xyXG4gICAgICAgICAgZmlsdGVyZWQudG9kb3MucHVzaCh0aGlzVG9kbyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSkpO1xyXG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHJlcXVlc3QgPT09IFwidGhpcy13ZWVrXCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHsgdGl0bGU6IFwiVGFza3MgZm9yIHRoaXMgd2Vla1wiLCB0b2RvczogW119O1xyXG4gICAgICBsb2NhbC5mb3JFYWNoKCh0aGlzUHJvamVjdCwgcHJvamVjdElkeCkgPT4gdGhpc1Byb2plY3QudG9kb3MuZm9yRWFjaCgodGhpc1RvZG8sIHRvZG9JZHgpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gdGhpc1RvZG8uZGF0ZUR1ZS5zcGxpdChcIi1cIikuam9pbihcIixcIik7XHJcbiAgICAgICAgaWYoaXNUaGlzV2VlayhuZXcgRGF0ZShmb3JtYXREYXRlKSkpe1xyXG4gICAgICAgICAgdGhpc1RvZG8ucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgICAgICB0aGlzVG9kby50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgICAgICAgIGZpbHRlcmVkLnRvZG9zLnB1c2godGhpc1RvZG8pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0pKTtcclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihyZXF1ZXN0ID09PSBcInRoaXMtbW9udGhcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJUYXNrcyBmb3IgdGhpcyBtb250aFwiLCB0b2RvczogW119O1xyXG4gICAgICBsb2NhbC5mb3JFYWNoKCh0aGlzUHJvamVjdCwgcHJvamVjdElkeCkgPT4gdGhpc1Byb2plY3QudG9kb3MuZm9yRWFjaCgodGhpc1RvZG8sIHRvZG9JZHgpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gdGhpc1RvZG8uZGF0ZUR1ZS5zcGxpdChcIi1cIikuam9pbihcIixcIik7XHJcbiAgICAgICAgaWYoaXNUaGlzTW9udGgobmV3IERhdGUoZm9ybWF0RGF0ZSkpKXtcclxuICAgICAgICAgIHRoaXNUb2RvLnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgICAgICAgdGhpc1RvZG8udG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICAgICAgICBmaWx0ZXJlZC50b2Rvcy5wdXNoKHRoaXNUb2RvKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KSk7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVxdWVzdCA9PT0gXCJ0aGlzLXllYXJcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJUYXNrcyBmb3IgdGhpcyB5ZWFyXCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIFxyXG4gICAgICBsb2NhbC5mb3JFYWNoKCh0aGlzUHJvamVjdCwgcHJvamVjdElkeCkgPT4gdGhpc1Byb2plY3QudG9kb3MuZm9yRWFjaCgodGhpc1RvZG8sIHRvZG9JZHgpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gdGhpc1RvZG8uZGF0ZUR1ZS5zcGxpdChcIi1cIikuam9pbihcIixcIik7XHJcbiAgICAgICAgaWYoaXNUaGlzWWVhcihuZXcgRGF0ZShmb3JtYXREYXRlKSkpe1xyXG4gICAgICAgICAgdGhpc1RvZG8ucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgICAgICB0aGlzVG9kby50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgICAgICAgIGZpbHRlcmVkLnRvZG9zLnB1c2godGhpc1RvZG8pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVxdWVzdCA9PT0gXCJleHBpcmVkXCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHsgdGl0bGU6IFwiRXhwaXJlZCB0YXNrc1wiLCB0b2RvczogW119O1xyXG4gICAgICBcclxuICAgICAgbG9jYWwuZm9yRWFjaCgodGhpc1Byb2plY3QsIHByb2plY3RJZHgpID0+IHRoaXNQcm9qZWN0LnRvZG9zLmZvckVhY2goKHRoaXNUb2RvLCB0b2RvSWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0RGF0ZSA9IHRoaXNUb2RvLmRhdGVEdWUuc3BsaXQoXCItXCIpLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgIGlmKCFpc0Z1dHVyZShuZXcgRGF0ZShmb3JtYXREYXRlKSlcclxuICAgICAgICAmJiAhaXNUb2RheShuZXcgRGF0ZShmb3JtYXREYXRlKSkpe1xyXG4gICAgICAgICAgdGhpc1RvZG8ucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgICAgICB0aGlzVG9kby50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgICAgICAgIGZpbHRlcmVkLnRvZG9zLnB1c2godGhpc1RvZG8pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gY3JlYXRlVG9kbyhwcm9qZWN0SWR4KXtcclxuICAgIGxldCByZXBlYXRlZCA9IDA7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3MuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYoaXRlbS50aXRsZS5pbmNsdWRlcyhcIm5ldyB0by1kb1wiKSkgcmVwZWF0ZWQrKztcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdG9kb05hbWUgPSByZXBlYXRlZCA9PT0gMCA/IFwibmV3IHRvLWRvXCIgOiBgbmV3IHRvLWRvKCR7cmVwZWF0ZWR9KWA7XHJcbiAgICBcclxuICAgIGNvbnN0IGRhdGUgPSBmb3JtYXQobmV3IERhdGUoKSwgXCJ5eXl5LU1NLWRkXCIpO1xyXG4gICAgXHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvcy5wdXNoKFxyXG4gICAgICBuZXcgVG9kbyh0b2RvTmFtZSwgXCJcIiwgZGF0ZSwgXCJcIiwgW10sIFwibG93XCIsIGZhbHNlLCBmYWxzZSlcclxuICAgICAgKTtcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0KCl7XHJcbiAgICBsZXQgcmVwZWF0ZWQgPSAwO1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsLmZvckVhY2gocHJvamVjdCA9PiB7XHJcbiAgICAgIGlmKHByb2plY3QudGl0bGUuaW5jbHVkZXMoXCJuZXcgcHJvamVjdFwiKSkgcmVwZWF0ZWQrKztcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdGl0bGUgPSByZXBlYXRlZCA9PT0gMCA/IFwibmV3IHByb2plY3RcIiA6IGBuZXcgcHJvamVjdCgke3JlcGVhdGVkfSlgO1xyXG4gICAgXHJcbiAgICBsb2NhbC5wdXNoKHt0aXRsZSwgdG9kb3M6W10sIH0pO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZWRpdFByb2plY3RUaXRsZShwcm9qZWN0SWR4LCB2YWwpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRpdGxlID0gdmFsO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGxvYWRTYW1wbGUoKXtcclxuICAgIGlmKGxvY2FsU3RvcmFnZS5sZW5ndGggPT09IDApe1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInRvZG9cIiwgSlNPTi5zdHJpbmdpZnkodG9kb1NhbXBsZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKCl7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRvZG9cIikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TG9jYWxTdG9yYWdlKHZhbCl7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInRvZG9cIiwgSlNPTi5zdHJpbmdpZnkodmFsKSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1vdmVEcmFnZ2VkQ2FyZChwcm9qZWN0SWR4LCBmcm9tVG9kbywgdG9Ub2RvLCBwb3NpdGlvbil7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG5cclxuICAgIGNvbnN0IHNhbWVQb3N1cFRvRG93biA9IHBhcnNlSW50KGZyb21Ub2RvKSsxID09IHRvVG9kbztcclxuICAgIGNvbnN0IHNhbWVQb3Nkb3duVG9VcCA9IHBhcnNlSW50KGZyb21Ub2RvKS0xID09IHRvVG9kbzsgXHJcbiAgICBcclxuICAgIGlmKChzYW1lUG9zdXBUb0Rvd24gJiYgcG9zaXRpb24gPT0gXCJiZWZvcmVcIilcclxuICAgIHx8IChzYW1lUG9zZG93blRvVXAgJiYgcG9zaXRpb24gPT0gXCJhZnRlclwiKSl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vZml4IHVwIHRvIGRvd24gYW5kIGJlZm9yZSBpbnZlcnNpb24sIHNhbWUgZm9yIGRvd24gdG8gdXAgYW5kIGFmdGVyXHJcbiAgICBjb25zdCBtb3Zlc0Rvd24gPSBmcm9tVG9kbyA8IHRvVG9kbztcclxuICAgIGNvbnN0IGN1dCA9IG1vdmVzRG93biAmJiBwb3NpdGlvbiA9PSBcImJlZm9yZVwiID8gcGFyc2VJbnQodG9Ub2RvKS0xXHJcbiAgICA6ICFtb3Zlc0Rvd24gJiYgcG9zaXRpb24gPT0gXCJhZnRlclwiID8gcGFyc2VJbnQodG9Ub2RvKSsxXHJcbiAgICA6IHRvVG9kbztcclxuXHJcbiAgICBjb25zdCBmcm9tQ2FyZCA9IGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zLnNwbGljZShmcm9tVG9kbywgMSk7XHJcbiAgICBjb25zdCBmaXJzdEhhbGYgPSBsb2NhbFtwcm9qZWN0SWR4XS50b2RvcztcclxuICAgIGNvbnN0IHNlY29uZEhhbGYgPSBmaXJzdEhhbGYuc3BsaWNlKGN1dCwgZmlyc3RIYWxmLmxlbmd0aCk7XHJcblxyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3MgPSBbLi4uZmlyc3RIYWxmLCAuLi5mcm9tQ2FyZCwgLi4uc2Vjb25kSGFsZl07XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgdG9nZ2xlRmF2LCB0b2dnbGVQaW4sIGdldEZhdlN0YXR1cywgZGVsZXRlVG9kbywgdGFza0NoZWNrLFxyXG4gICAgZGVsZXRlVGFzaywgZWRpdFRpdGxlLCBlZGl0RGVzY3JpcHRpb24sIGVkaXREYXRlRHVlLCBlZGl0TGFiZWwsXHJcbiAgICBjcmVhdGVUYXNrLCBnZXRQcm9qZWN0c1RpdGxlcywgZGVsZXRlUHJvamVjdCwgY2hhbmdlUHJpb3JpdHksXHJcbiAgICBnZXRQcm9qZWN0LCBjcmVhdGVUb2RvLCBjcmVhdGVQcm9qZWN0LCBlZGl0UHJvamVjdFRpdGxlLCBsb2FkU2FtcGxlLFxyXG4gICAgbW92ZURyYWdnZWRDYXJkIH1cclxufSkoKTsiLCJpbXBvcnQge1RvZG99IGZyb20gXCIuL2NsYXNzZXMuanNcIjtcclxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcImRhdGUtZm5zXCI7XHJcblxyXG5jb25zdCBkYXRlID0gZm9ybWF0KG5ldyBEYXRlKCksIFwieXl5eS1NTS1kZFwiKTtcclxuICAgIFxyXG5leHBvcnQgY29uc3QgdG9kb1NhbXBsZSA9IFtcclxuICB7XHJcbiAgICB0aXRsZTogXCJIb3cgdG8gdXNlXCIsXHJcbiAgICB0b2RvczogW1xyXG4gICAgICBuZXcgVG9kbyhcIjEpIENyZWF0aW5nIGEgcHJvamVjdFwiLCBcIlRoZXNlIGFyZSB0aGUgc3RlcHMgdG8gY3JlYXRlIGEgbmV3IHByb2plY3RcIiwgZGF0ZSxcIlwiLCBbXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBUb3VjaCB0aGUgYnVyZ2VyIGJ1dHRvbiBcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCJvciBsb29rIGF0IHRoZSBzaWRlYmFyIGF0IHRoZSBsZWZ0XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFRvdWNoIHRoZSBwbHVzIGJ1dHRvblwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBZb3VyIG5ldyBwcm9qZWN0IHdpbGwgb3BlblwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBUb3VjaCB0aGUgcGVuY2lsIGJ1dHRvbiBvbiB0aGUgbWVudVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBXcml0ZSBhIHByb3BlciB0aXRsZSBmb3IgdGhlIG5ldyBwcm9qZWN0XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFRoZSBuZXcgdGl0bGUgYXV0b3NhdmVzIHdoaWxlIHdyaXRpbmdcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgQ29uZ3JhdHVsYXRpb25zISBZb3UgY3JlYXRlZCB5b3VyIGZpcnN0IHByb2plY3QhXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIElmIHlvdSB3YW50IHRvIGRlbGV0ZSBhIHByb2plY3QsIGhvbGQgb24gdGhlIGJpblwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIm5leHQgdG8gaXQncyB0aXRsZSBvbiB0aGUgbWVudVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgIF0sIFwibG93XCIsIHRydWUsIHRydWUpLFxyXG5cclxuICAgICAgbmV3IFRvZG8oXCIyKSBBZGRpbmcgYSB0by1kb1wiLCBcIlRoaXMgaXMgaG93IHlvdSBjcmVhdGUgYSBuZXcgdG8tZG9cIiwgZGF0ZSxcIlwiLCBbXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBUb3VjaCB0aGUgcGx1cyBidXR0b24gYXQgdGhlIGJvdHRvbVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBUaGlzIHdpbGwgb3BlbiB0aGUgdG8tZG8gb24gZWRpdCBtb2RlXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFlvdSBjYW4gY2hhbmdlIHRoZSBuYW1lIGFuZCBhZGQgYSBkZXNjcmlwdGlvblwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBDaGFuZ2VzIGFyZSBzYXZlZCBvbiBlYWNoIGtleSBwcmVzc1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBZb3UgY2FuIGFkZCBhIGR1ZSBkYXRlIGFuZCBjaGFuZ2UgcHJpb3JpdHlcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgVGhlIHBsdXMgYnV0dG9uIGF0IHRoZSBib3R0b20gd2lsbCBjcmVhdGUgdGFza3NcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgV3JpdGUgYSBkZXNjcmlwdGlvbiBmb3IgeW91ciBuZXcgdGFza1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBOZXh0IHRvIGl0IHRoZXJlJ3MgYSBjaGVja2JveFwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcInVzZSBpdCBvbmNlIHRoZSB0YXNrIGlzIGRvbmVcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgWW91IGNhbiBkZWxldGUgYSB0YXNrIHdpdGggdGhlIGNyb3NzIGJ1dHRvblwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBEaXNhYmxlIHRoZSBlZGl0IG1vZGUgd2l0aCB0aGUgYmx1ZSBwZW5jaWwgYnV0dG9uXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFlvdSBjYW4gdXNlIHRoZSBjaGVja2JveCBldmVuIHdpdGhvdXQgZWRpdCBtb2RlXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIENyZWF0ZSBhcyBtYW55IHRvLWRvcyBhcyB5b3UgbmVlZCFcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICBdLCBcImxvd1wiLCB0cnVlLCB0cnVlKSxcclxuXHJcbiAgICAgIG5ldyBUb2RvKFwiMykgTWFuYWdpbmcgYSB0by1kb1wiLCBcIkhlcmUncyB3aGF0IHlvdSBjYW4gZG8gd2l0aCB5b3VyIHRvLWRvc1wiLCBkYXRlLFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIEF0IHRoZSByaWdodCBvZiB0aGUgdGl0bGUgdGhlcmUncyA0IGJ1dHRvbnM6XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiMS4gVGhlIHBpbiBidXR0b24gd2lsbCBzaG93IHRoZSB0by1kbyBpbiB0aGUgcGlubmVkIGZpbHRlclwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjIuIFRoZSBwZW5jaWwgYnV0dG9uIHdpbGwgdG9nZ2xlIHRoZSBlZGl0IG1vZGVcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCIzLiBUaGUgc3RhciBidXR0b24gd2lsbCBtYXJrIHRoZSB0by1kbyBhcyBmYXZvcml0ZVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcInRoaXMgd2lsbCBhbHNvIHByZXZlbnQgZGVsZXRpb24sIHVubGlrZSB0aGUgcGluXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiYW5kIHdpbGwgYWxzbyBzaG93IG9uIHRoZSBmYXZvcml0ZXMgZmlsdGVyXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiNC4gVGhlIGJpbiBidXR0b24gd2lsbCBkZWxldGUgdGhlIHRvLWRvXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwib25seSBpZiBpdCdzIG5vdCBmYXZlZCBieSB0aGUgc3RhclwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcImhvbGQgb24gaXQgZm9yIGEgZmV3IHNlY29uZHMgdG8gZGVsZXRlXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwib3IgcmVsZWFzZSBiZWZvcmUgdGhlIGJhciBmaWxscyB0byBjYW5jZWxcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgQXQgdGhlIGxlZnQgdGhlcmUncyBhIGhhbmRsZSBpY29uOlwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjEuIGhvbGQgZG93biBvbiBpdCB0byBkcmFnIGEgdG8tZG9cIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCIyLiByZWxlYXNlIGl0IHdoZXJlIHlvdSB3YW50IHRvIG1vdmUgaXRcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICBdLCBcImxvd1wiLCB0cnVlLCB0cnVlKSxcclxuXHJcbiAgICAgIG5ldyBUb2RvKFwiNCkgSG90a2V5c1wiLCBcIlRoZSBob3RrZXlzIHlvdSBjYW4gdXNlIG9uIGVkaXQgbW9kZVwiLCBkYXRlLFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFlvdSBjYW4gdXNlIHNvbWUgaG90a2V5cyB3aGVuIHdvcmtpbmcgb24gdGFza3NcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCJ3aGlsZSB0aGUgY3Vyc29yIGlzIG9uIHRoZSB0ZXh0IGZpZWxkOlwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjEuIEVudGVyOiBjcmVhdGUgYSBuZXcgdGFza1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjIuIFVwL2Rvd24gYXJyb3dzOiBtb3ZlIGJldHdlZW4gaW5wdXRzXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiMy4gQ1RSTCtzcGFjZWJhcjogY2hlY2tzL3VuY2hlY2tzIGl0J3MgcmVzcGVjdGl2ZSBib3hcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCI0LiBBTFQrRGVsZXRlOiBkZWxldGVzIGN1cnJlbnQgdGFza1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgIF0sIFwibG93XCIsIHRydWUsIHRydWUpLFxyXG5cclxuICAgICAgbmV3IFRvZG8oXCJBYm91dFwiLCBcIlRvLWRvIHByb2plY3QgY3JlYXRlZCBieSBIZWN0b3IgVmlsYXNcIiwgZGF0ZSxcIlwiLCBbXHJcbiAgICAgICAgeyB0YXNrOiBcIkZpbmQgbWUgb24gR2l0SHViIGFzIEhlY3RvclZpbGFzIVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcImdpdGh1Yi5jb20vSGVjdG9yVmlsYXNcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICBdLCBcIlwiLCB0cnVlLCB0cnVlKSxcclxuICAgIF0sXHJcbiAgfSxcclxuXHJcbiAge1xyXG4gICAgdGl0bGU6IFwiRXhhbXBsZSBwcm9qZWN0XCIsXHJcbiAgICB0b2RvczogW1xyXG4gICAgICBuZXcgVG9kbyhcImV4ZXJjaXNlXCIsIFwiSXQncyBsZWcgZGF5IVwiLCBkYXRlLCBcIlwiLCBbXHJcbiAgICAgICAgeyB0YXNrOiBcInJ1biAza21cIiwgaXNEb25lOiB0cnVlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcImJpY3ljbGVcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCJzcXVhdHNcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICBdLCBcIm1pZGRsZVwiLCBmYWxzZSwgdHJ1ZSksXHJcblxyXG4gICAgICBuZXcgVG9kbyhcImNvZGluZ1wiLCBcIlwiLCBkYXRlLCBcIlwiLCBbXHJcbiAgICAgICAgeyB0YXNrOiBcImNoZWNrIGNzcy10cmlja3NcIiwgaXNEb25lOiB0cnVlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcImNvbnRpbnVlIFRPUCBwcmFjdGljZVwiLCBpc0RvbmU6IHRydWUgfSxcclxuICAgICAgXSwgXCJoaWdoXCIsIHRydWUsIGZhbHNlKSxcclxuICAgIF0sXHJcbiAgfSxcclxuXTsiLCJpbXBvcnQge3RvZG9IYW5kbGVyfSBmcm9tIFwiLi90b2RvSGFuZGxlci5qc1wiXHJcblxyXG5pbXBvcnQgaWNvbkRyYWcgZnJvbSBcIi4uL21lZGlhL2ltYWdlcy9pY29ucy9kcmFnLnN2Z1wiO1xyXG5pbXBvcnQgaWNvblRyYXNoIGZyb20gXCIuLi9tZWRpYS9pbWFnZXMvaWNvbnMvdHJhc2guc3ZnXCI7XHJcbmltcG9ydCBpY29uVHJhc2hMaWQgZnJvbSBcIi4uL21lZGlhL2ltYWdlcy9pY29ucy90cmFzaC1saWQuc3ZnXCI7XHJcblxyXG5pbXBvcnQgeyBmb3JtYXQsIHBhcnNlSVNPLCBpbnRsRm9ybWF0RGlzdGFuY2UsIGlzVG9kYXkgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCB1aSA9ICgoKSA9PiB7XHJcbiAgY29uc3QgbW91c2UgPSB7IHg6MCwgeTowIH07IC8vdHJhY2sgbW91c2UgZm9yIGRyYWdcclxuICBsZXQgY3Vyc29ySW50ZXJ2YWw7XHJcbiAgY29uc3QgY2FyZE1vdmUgPSB7IC8vZm9yIGRyYWcgYW5kIGRyb3BcclxuICAgIGZyb206IHtwcm9qZWN0OiB1bmRlZmluZWQsIHRvZG86IHVuZGVmaW5lZH0sXHJcbiAgICB0bzoge3Byb2plY3Q6IHVuZGVmaW5lZCwgdG9kbzogdW5kZWZpbmVkfSxcclxuICAgIHBvc2l0aW9uOiB1bmRlZmluZWQsXHJcbiAgfVxyXG5cclxuICBjb25zdCBjYXJkc0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FyZHMtY29udGFpbmVyXCIpO1xyXG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcclxuXHJcbiAgY29uc3QgZGF0ZUZvcm1hdCA9IFwiRUUnLCcgTU1NTSBkbyB5eXl5XCI7XHJcblxyXG4gIGZ1bmN0aW9uIGxvYWRNZW51KCl7XHJcbiAgICAvL2NyZWF0ZSBleGFtcGxlIHByb2plY3RzIGlmIHRoZXJlJ3Mgbm8gbG9jYWxTdG9yYWdlXHJcbiAgICB0b2RvSGFuZGxlci5sb2FkU2FtcGxlKCk7XHJcblxyXG4gICAgY29uc3QgbWVudUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBtZW51QnRuLmlkID0gXCJtZW51LWJ1dHRvblwiO1xyXG4gICAgbWVudUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdG9nZ2xlTWVudSk7XHJcblxyXG4gICAgY29uc3QgbWVudSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBtZW51LmlkID0gXCJtZW51XCI7XHJcblxyXG4gICAgY29uc3Qgc2NyZWVuQ292ZXJNZW51ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHNjcmVlbkNvdmVyTWVudS5pZCA9IFwic2NyZWVuLWNvdmVyLW1lbnVcIjtcclxuICAgIHNjcmVlbkNvdmVyTWVudS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdG9nZ2xlTWVudSk7XHJcblxyXG4gICAgLy9maWx0ZXIgbGlzdFxyXG4gICAgY29uc3QgZmllbGRzZXRGaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XHJcbiAgICBmaWVsZHNldEZpbHRlci5jbGFzc0xpc3QuYWRkKFwibWVudS1maWVsZHNldFwiLCBcImZpZWxkc2V0LWZpbHRlclwiKTtcclxuICAgIGNvbnN0IGxlZ2VuZER1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsZWdlbmRcIik7XHJcbiAgICBsZWdlbmREdWUuaW5uZXJUZXh0ID0gXCJGaWx0ZXJcIjtcclxuXHJcbiAgICBjb25zdCBsaXN0RHVlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO1xyXG4gICAgbGlzdER1ZS5jbGFzc0xpc3QuYWRkKFwiZmllbGRzZXQtbGlzdFwiLCBcImR1ZS1saXN0XCIpO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcnMgPSBbXCJUb2RheVwiLCBcIlRoaXMgd2Vla1wiLCBcIlRoaXMgbW9udGhcIiwgXCJUaGlzIHllYXJcIiwgXCJFeHBpcmVkXCIsIFwiUGlubmVkXCIsIFwiRmF2b3JpdGVzXCJdO1xyXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspe1xyXG4gICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcclxuICAgICAgbGkuY2xhc3NMaXN0LmFkZChcIm1lbnUtZmlsdGVyXCIsIFwibWVudS1pdGVtXCIpO1xyXG4gICAgICBsaS5kYXRhc2V0LmZpbHRlciA9IGZpbHRlcnNbaV0uc3BsaXQoXCIgXCIpLmpvaW4oXCItXCIpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmaWx0ZXJUb2Rvcyk7XHJcblxyXG4gICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgIHBhcmEuaW5uZXJUZXh0ID0gZmlsdGVyc1tpXTtcclxuXHJcbiAgICAgIGxpLmFwcGVuZENoaWxkKHBhcmEpO1xyXG4gICAgICBsaXN0RHVlLmFwcGVuZENoaWxkKGxpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgZmllbGRzZXRGaWx0ZXIuYXBwZW5kKGxlZ2VuZER1ZSwgbGlzdER1ZSk7XHJcblxyXG4gICAgLy90YXNrcyBsaXN0XHJcbiAgICBjb25zdCBmaWVsZHNldFRhc2tzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO1xyXG4gICAgZmllbGRzZXRUYXNrcy5jbGFzc0xpc3QuYWRkKFwibWVudS1maWVsZHNldFwiLCBcImZpZWxkc2V0LXRhc2tzXCIpO1xyXG4gICAgY29uc3QgbGVnZW5kUHJvamVjdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGVnZW5kXCIpO1xyXG4gICAgbGVnZW5kUHJvamVjdHMuaW5uZXJUZXh0ID0gXCJQcm9qZWN0c1wiO1xyXG5cclxuICAgIGNvbnN0IG5ld1Byb2plY3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbmV3UHJvamVjdERpdi5jbGFzc0xpc3QuYWRkKFwiY3JlYXRlLXRhc2stZGl2XCIpO1xyXG4gICAgbmV3UHJvamVjdERpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlUHJvamVjdCk7XHJcbiAgICBjb25zdCBuZXdQcm9qZWN0UGFyYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgbmV3UHJvamVjdFBhcmEuaW5uZXJUZXh0ID0gXCJDcmVhdGUgcHJvamVjdFwiO1xyXG4gICAgY29uc3QgbmV3UHJvamVjdEljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbmV3UHJvamVjdEljb24uY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImNyZWF0ZS10YXNrXCIpO1xyXG5cclxuICAgIG5ld1Byb2plY3REaXYuYXBwZW5kKG5ld1Byb2plY3RQYXJhLCBuZXdQcm9qZWN0SWNvbik7XHJcbiAgICBmaWVsZHNldFRhc2tzLmFwcGVuZChsZWdlbmRQcm9qZWN0cywgcHJvamVjdHNMaXN0KCksIG5ld1Byb2plY3REaXYpO1xyXG5cclxuICAgIC8vb3B0aW9ucyBhbmQgb3RoZXJzXHJcbiAgICBjb25zdCBmaWVsZHNldE9wdGlvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XHJcbiAgICBmaWVsZHNldE9wdGlvbnMuY2xhc3NMaXN0LmFkZChcIm1lbnUtZmllbGRzZXRcIiwgXCJmaWVsZHNldC1vcHRpb25zXCIpO1xyXG4gICAgY29uc3QgbGVnZW5kT3B0aW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsZWdlbmRcIik7XHJcbiAgICBsZWdlbmRPcHRpb25zLmlubmVyVGV4dCA9IFwiT3B0aW9uc1wiO1xyXG5cclxuICAgIFxyXG4gICAgY29uc3Qgb3B0aW9uc0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XHJcbiAgICBvcHRpb25zTGlzdC5jbGFzc0xpc3QuYWRkKFwiZmllbGRzZXQtbGlzdFwiKVxyXG4gICAgY29uc3QgYWJvdXRMaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcclxuICAgIGFib3V0TGkuY2xhc3NMaXN0LmFkZChcIm1lbnUtaXRlbVwiLCBcImFib3V0XCIpO1xyXG4gICAgY29uc3QgYWJvdXREaXZQYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBjb25zdCBhYm91dExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGFib3V0TGluay5pbm5lclRleHQgPSBcIkhlY3RvciBWaWxhcycgR2l0aHViXCJcclxuICAgIGFib3V0TGluay5ocmVmID0gXCJodHRwczovL2dpdGh1Yi5jb20vSGVjdG9yVmlsYXNcIjtcclxuICAgIGFib3V0TGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG4gICAgXHJcbiAgICBhYm91dERpdlBhcmEuYXBwZW5kKGFib3V0TGluayk7XHJcbiAgICBhYm91dExpLmFwcGVuZChhYm91dERpdlBhcmEpO1xyXG4gICAgb3B0aW9uc0xpc3QuYXBwZW5kKGFib3V0TGkpO1xyXG4gICAgZmllbGRzZXRPcHRpb25zLmFwcGVuZChvcHRpb25zTGlzdCk7XHJcbiAgICBcclxuICAgIGZpZWxkc2V0T3B0aW9ucy5hcHBlbmQobGVnZW5kT3B0aW9ucyk7XHJcbiAgICBtZW51LmFwcGVuZChmaWVsZHNldEZpbHRlciwgZmllbGRzZXRUYXNrcywgZmllbGRzZXRPcHRpb25zKTtcclxuICAgIGJvZHkuYXBwZW5kKG1lbnVCdG4sIG1lbnUsIHNjcmVlbkNvdmVyTWVudSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9qZWN0c0xpc3QocmVkcmF3ID0gZmFsc2Upe1xyXG4gICAgbGV0IGZpZWxkc2V0VWwsIGZpZWxkc2V0TGk7XHJcbiAgICBpZihyZWRyYXcpe1xyXG4gICAgICBmaWVsZHNldFVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tZW51LWZpZWxkc2V0LmZpZWxkc2V0LXRhc2tzIHVsXCIpO1xyXG4gICAgICBmaWVsZHNldExpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tZW51LWZpZWxkc2V0LmZpZWxkc2V0LXRhc2tzIHVsIGxpXCIpO1xyXG4gICAgICBmaWVsZHNldExpLmZvckVhY2gobGkgPT4ge1xyXG4gICAgICAgIGxpLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGkpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbGlzdFRhc2tzVWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XHJcbiAgICBsaXN0VGFza3NVbC5jbGFzc0xpc3QuYWRkKFwiZmllbGRzZXQtbGlzdFwiLCBcImR1ZS1saXN0XCIpO1xyXG5cclxuICAgIGNvbnN0IHByb2plY3RzTGlzdCA9IHRvZG9IYW5kbGVyLmdldFByb2plY3RzVGl0bGVzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2plY3RzTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcclxuICAgICAgbGkuY2xhc3NMaXN0LmFkZChcIm1lbnUtdGFza3NcIiwgXCJtZW51LWl0ZW1cIiwgYHByb2plY3QtJHtwcm9qZWN0c0xpc3RbaV0uc3BsaXQoXCIgXCIpLmpvaW4oXCItXCIpfWApO1xyXG4gICAgICBsaS5kYXRhc2V0LnByb2plY3RJZHggPSBpO1xyXG4gICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgIHBhcmEuaW5uZXJUZXh0ID0gcHJvamVjdHNMaXN0W2ldO1xyXG4gICAgICBwYXJhLnRpdGxlID0gcHJvamVjdHNMaXN0W2ldO1xyXG4gICAgICBwYXJhLmNsYXNzTGlzdC5hZGQoXCJwcm9qZWN0LXRpdGxlXCIpO1xyXG4gICAgICBwYXJhLmRhdGFzZXQucHJvamVjdElkeCA9IGk7XHJcbiAgICAgIHBhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNoYW5nZVBSb2plY3QpO1xyXG5cclxuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIGlucHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZChcImVkaXQtcHJvamVjdFwiKTtcclxuICAgICAgaW5wdXQuZGF0YXNldC5wcm9qZWN0SWR4ID0gaTtcclxuICAgICAgaW5wdXQudmFsdWUgPSBwcm9qZWN0c0xpc3RbaV07XHJcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBlZGl0UHJvamVjdFRpdGxlKTtcclxuICAgICAgY29uc3QgZWRpdEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgZWRpdEJ0bi50eXBlID0gXCJjaGVja2JveFwiO1xyXG4gICAgICBlZGl0QnRuLmNsYXNzTGlzdC5hZGQoXCJjYXJkLWljb25cIiwgXCJpY29uLWVkaXRcIik7XHJcbiAgICAgIGVkaXRCdG4uZGF0YXNldC5wcm9qZWN0SWR4ID0gaTtcclxuICAgICAgZWRpdEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcHJvamVjdEVkaXQpO1xyXG5cclxuICAgICAgY29uc3QgZGVsZXRlQnRuID0gdHJhc2hJY29uKGRlbGV0ZVByb2plY3QpO1xyXG5cclxuXHJcbiAgICAgIGxpLmFwcGVuZChwYXJhLCBpbnB1dCwgZWRpdEJ0biwgZGVsZXRlQnRuKTtcclxuICAgICAgaWYocmVkcmF3KXtcclxuICAgICAgICBmaWVsZHNldFVsLmFwcGVuZChsaSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGlzdFRhc2tzVWwuYXBwZW5kQ2hpbGQobGkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmKCFyZWRyYXcpIHJldHVybiBsaXN0VGFza3NVbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2FyZCh0b2RvLCBwcm9qZWN0SWR4LCB0b2RvSWR4KXtcclxuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY2FyZC5jbGFzc0xpc3QuYWRkKFwiY2FyZFwiKTtcclxuICAgIGNhcmQuZGF0YXNldC5wcmlvcml0eSA9IHRvZG8ucHJpb3JpdHk7XHJcbiAgICAvLyBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHNwYWNlQ2FyZHMpO1xyXG4gICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHNwYWNlQ2FyZHMpO1xyXG5cclxuICAgIGNvbnN0IGRyYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgZHJhZy5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwiaWNvbi1kcmFnXCIpO1xyXG4gICAgZHJhZy5zcmMgPSBpY29uRHJhZztcclxuICAgIGRyYWcuZHJhZ2dhYmxlID0gZmFsc2U7XHJcbiAgICBkcmFnLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgY2FyZERyYWcpO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgyXCIpO1xyXG4gICAgdGl0bGUuY2xhc3NMaXN0LmFkZChcInRpdGxlXCIpO1xyXG4gICAgdGl0bGUuaW5uZXJUZXh0ID0gdG9kby50aXRsZTtcclxuICAgIHRpdGxlLnRpdGxlID0gdG9kby50aXRsZTtcclxuICAgIHRpdGxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2dnbGVDYXJkKTtcclxuICAgIGNvbnN0IGVkaXRUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgIGVkaXRUaXRsZS50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICBlZGl0VGl0bGUuY2xhc3NMaXN0LmFkZChcInRpdGxlXCIsIFwiZWRpdC10aXRsZVwiKTtcclxuICAgIGVkaXRUaXRsZS52YWx1ZSA9IHRvZG8udGl0bGU7XHJcbiAgICBlZGl0VGl0bGUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGVkaXRGaWVsZCk7XHJcblxyXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcHJvZ3Jlc3MuY2xhc3NMaXN0LmFkZChcInByb2dyZXNzXCIpO1xyXG4gICAgXHJcbiAgICBjb25zdCBjb21wbGV0ZWQgPSB0b2RvLmNoZWNrcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRG9uZSkubGVuZ3RoO1xyXG4gICAgY29uc3QgcGVyY2VudGFnZSA9IGNvbXBsZXRlZCAqIDEwMCAvIHRvZG8uY2hlY2tzLmxlbmd0aDtcclxuICAgIHByb2dyZXNzLnN0eWxlLmJhY2tncm91bmQgPSBgY29uaWMtZ3JhZGllbnQoIzJlMTBjMCAke3BlcmNlbnRhZ2V9JSwgdHJhbnNwYXJlbnQgJHtwZXJjZW50YWdlfSUsIHRyYW5zcGFyZW50IDEwMCUpYFxyXG4gICAgXHJcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZChcImRlc2NyaXB0aW9uXCIpO1xyXG4gICAgZGVzY3JpcHRpb24uaW5uZXJUZXh0ID0gdG9kby5kZXNjcmlwdGlvbjtcclxuICAgIGRlc2NyaXB0aW9uLnRpdGxlID0gdG9kby5kZXNjcmlwdGlvbjtcclxuICAgIGNvbnN0IGVkaXREZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgIGVkaXREZXNjcmlwdGlvbi50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICBlZGl0RGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZChcImRlc2NyaXB0aW9uXCIsIFwiZWRpdC1kZXNjcmlwdGlvblwiKTtcclxuICAgIGVkaXREZXNjcmlwdGlvbi52YWx1ZSA9IHRvZG8uZGVzY3JpcHRpb247XHJcbiAgICBlZGl0RGVzY3JpcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGVkaXRGaWVsZCk7XHJcblxyXG4gICAgY29uc3QgZGF0ZUNyZWF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBkYXRlQ3JlYXRpb24uY2xhc3NMaXN0LmFkZChcImRhdGUtY3JlYXRpb25cIik7XHJcbiAgICBkYXRlQ3JlYXRpb24uaW5uZXJUZXh0ID0gYENyZWF0ZWQ6ICR7Zm9ybWF0KG5ldyBEYXRlKHBhcnNlSVNPKHRvZG8uZGF0ZUNyZWF0aW9uKSksIGRhdGVGb3JtYXQpfWA7XHJcblxyXG4gICAgY29uc3QgZGF0ZUR1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgZGF0ZUR1ZS5jbGFzc0xpc3QuYWRkKFwiZGF0ZS1kdWVcIik7XHJcbiAgICBjb25zdCBkdWVEYXRlRm9ybWF0ID0gdG9kby5kYXRlRHVlLnNwbGl0KFwiLVwiKS5qb2luKFwiIFwiKTtcclxuICAgIGRhdGVEdWUuaW5uZXJUZXh0ID0gdG9kby5kYXRlRHVlLmxlbmd0aCA+IDAgPyBgRHVlOiAke1xyXG4gICAgICBmb3JtYXQobmV3IERhdGUocGFyc2VJU08odG9kby5kYXRlRHVlKSksIGRhdGVGb3JtYXQpfSAoJHtcclxuICAgICAgICBpc1RvZGF5KG5ldyBEYXRlKGR1ZURhdGVGb3JtYXQpKSA/IFwidG9kYXlcIiBcclxuICAgICAgICA6IGludGxGb3JtYXREaXN0YW5jZShuZXcgRGF0ZShkdWVEYXRlRm9ybWF0KSwgbmV3IERhdGUoKSlcclxuICAgICAgfSlgIDogXCJcIjtcclxuICAgIGNvbnN0IGVkaXREYXRlRHVlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgZWRpdERhdGVEdWUudHlwZSA9IFwiZGF0ZVwiO1xyXG4gICAgZWRpdERhdGVEdWUuY2xhc3NMaXN0LmFkZChcImRhdGUtZHVlXCIsIFwiZWRpdC1kYXRlLWR1ZVwiKTtcclxuICAgIGVkaXREYXRlRHVlLnZhbHVlID0gdG9kby5kYXRlRHVlO1xyXG4gICAgZWRpdERhdGVEdWUudGl0bGUgPSBcIkR1ZSBkYXRlXCI7XHJcbiAgICBlZGl0RGF0ZUR1ZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZWRpdEZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBjaGVja3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XHJcbiAgICBjaGVja3MuY2xhc3NMaXN0LmFkZChcImNoZWNrbGlzdFwiKTtcclxuXHJcbiAgICAvL2FkZCBkYXRhc2V0IHRvIGVhY2ggaXRlbVxyXG4gICAgW2NhcmQsZWRpdFRpdGxlLGRyYWcsZWRpdERlc2NyaXB0aW9uLGVkaXREYXRlRHVlXS5mb3JFYWNoKGljb24gPT4ge1xyXG4gICAgICBpY29uLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgIGljb24uZGF0YXNldC50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRvZG8uY2hlY2tzLmZvckVhY2goKGNoZWNrLGkpID0+IHtcclxuICAgICAgY2hlY2tzLmFwcGVuZENoaWxkKGNyZWF0ZVRhc2tMaSh0b2RvLCBjaGVjaywgcHJvamVjdElkeCwgdG9kb0lkeCwgaSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWRkVGFza0xpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGFkZFRhc2tMaS5jbGFzc0xpc3QuYWRkKFwiYWRkLXRhc2tcIik7XHJcbiAgICBjb25zdCBhZGRUYXNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGFkZFRhc2suY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImNyZWF0ZS10YXNrXCIpO1xyXG4gICAgYWRkVGFzay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlVGFzayk7XHJcbiAgICBhZGRUYXNrLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICBhZGRUYXNrLmRhdGFzZXQudG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICBhZGRUYXNrLmRhdGFzZXQudG9kbyA9IHRvZG8udGl0bGU7XHJcbiAgICBhZGRUYXNrTGkuYXBwZW5kQ2hpbGQoYWRkVGFzayk7XHJcbiAgICBcclxuXHJcbiAgICBjYXJkLmFwcGVuZChhZGRUYXNrTGkpO1xyXG5cclxuICAgIGNhcmQuYXBwZW5kKGRyYWcsIHRpdGxlLCBlZGl0VGl0bGUsIHByb2dyZXNzLCBkYXRlQ3JlYXRpb24sIGRhdGVEdWUsIGVkaXREYXRlRHVlLFxyXG4gICAgICBwcmlvcml0eURpdih0b2RvLCB0b2RvSWR4LCBwcm9qZWN0SWR4KSwgZWRpdEJ1dHRvbnNEaXYodG9kbywgcHJvamVjdElkeCwgdG9kb0lkeCksXHJcbiAgICAgIGRlc2NyaXB0aW9uLCBlZGl0RGVzY3JpcHRpb24sIGNoZWNrcyk7XHJcblxyXG4gICAgcmV0dXJuIGNhcmQ7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlZGl0QnV0dG9uc0Rpdih0b2RvLCBwcm9qZWN0SWR4LCB0b2RvSWR4KXtcclxuICAgIGNvbnN0IGVkaXRCdG5zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGVkaXRCdG5zLmNsYXNzTGlzdC5hZGQoXCJlZGl0LWJ1dHRvbnNcIik7XHJcblxyXG4gICAgY29uc3QgcGluID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgcGluLnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBwaW4uY2hlY2tlZCA9IHRvZG8uaXNQaW5uZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBwaW4uY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImljb24tcGluXCIpO1xyXG4gICAgcGluLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2RvSGFuZGxlci50b2dnbGVQaW4pO1xyXG5cclxuICAgIGNvbnN0IGVkaXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICBlZGl0LnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBlZGl0LmNsYXNzTGlzdC5hZGQoXCJjYXJkLWljb25cIiwgXCJpY29uLWVkaXRcIik7XHJcbiAgICBlZGl0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjYXJkRWRpdCk7XHJcblxyXG4gICAgY29uc3QgZmF2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgZmF2LnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBmYXYuY2hlY2tlZCA9IHRvZG8uaXNGYXZvcml0ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGZhdi5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwiaWNvbi1mYXZcIik7XHJcbiAgICBmYXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRvZG9IYW5kbGVyLnRvZ2dsZUZhdik7XHJcbiAgICBmYXYuYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCAoZSkgPT4ge1xyXG4gICAgICBpZihlLmFuaW1hdGlvbk5hbWUgPT09IFwiaWNvbi1mYXYtc2hha2VcIikge1xyXG4gICAgICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoXCJzaGFrZVwiKTtcclxuICAgICAgfTtcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgZGVsZXRlSWNvbiA9IHRyYXNoSWNvbihjYXJkRGVsZXRlKTtcclxuXHJcbiAgICAvL2FkZCBkYXRhc2V0IHRvIGVhY2ggaXRlbVxyXG4gICAgW3BpbixlZGl0LGZhdixkZWxldGVJY29uXS5mb3JFYWNoKGljb24gPT4ge1xyXG4gICAgICBpY29uLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgIGljb24uZGF0YXNldC50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgIH0pO1xyXG5cclxuICAgIGVkaXRCdG5zLmFwcGVuZChwaW4sIGVkaXQsIGZhdiwgZGVsZXRlSWNvbik7XHJcblxyXG4gICAgcmV0dXJuIGVkaXRCdG5zO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdHJhc2hJY29uKGNsaWNrRnVuY3Rpb24pe1xyXG4gICAgY29uc3QgZGVsZXRlSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBkZWxldGVJY29uLmNsYXNzTGlzdC5hZGQoXCJkZWxldGUtaWNvblwiKTtcclxuICAgIFxyXG4gICAgLy9zdGFydCBkZWxldGlvbiBvbiBjbGljayBvciB0b3VjaFxyXG4gICAgZGVsZXRlSWNvbi5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uKCl7XHJcbiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZChcImRlbGV0aW5nXCIpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uKCl7XHJcbiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZChcImRlbGV0aW5nXCIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9jYW5jZWwgZGVsZXRpb24gb24gbW91c2Ugb3V0LCB0b3VjaCBzdG9wIG9yIHRvdWNoIG1vdmVcclxuICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24oKXtcclxuICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKFwiZGVsZXRpbmdcIik7XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGZ1bmN0aW9uKCl7XHJcbiAgICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZShcImRlbGV0aW5nXCIpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCBmdW5jdGlvbigpe1xyXG4gICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoXCJkZWxldGluZ1wiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vc3RhcnQgZGVsZXRpb25cclxuICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBmdW5jdGlvbihlKXtcclxuICAgICAgaWYoZS5hbmltYXRpb25OYW1lID09PSBcImRlbGV0aW5nXCIpe1xyXG4gICAgICAgIGNvbnN0IHByb2plY3RJZHggPSB0aGlzLmRhdGFzZXQucHJvamVjdElkeDtcclxuICAgICAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICAgICAgaWYgKGNsaWNrRnVuY3Rpb24gPT0gZGVsZXRlUHJvamVjdCkge1xyXG4gICAgICAgICAgZGVsZXRlUHJvamVjdChwcm9qZWN0SWR4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2FyZERlbGV0ZShwcm9qZWN0SWR4LCB0b2RvSWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0cmFzaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcbiAgICB0cmFzaC5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwiaWNvbi10cmFzaFwiKTtcclxuICAgIHRyYXNoLnNyYyA9IGljb25UcmFzaDtcclxuICAgIHRyYXNoLmRyYWdnYWJsZSA9IGZhbHNlO1xyXG4gICAgY29uc3QgdHJhc2hMaWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgdHJhc2hMaWQuY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImljb24tdHJhc2gtbGlkXCIpO1xyXG4gICAgdHJhc2hMaWQuc3JjID0gaWNvblRyYXNoTGlkO1xyXG4gICAgdHJhc2hMaWQuZHJhZ2dhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgZGVsZXRlSWNvbi5hcHBlbmQodHJhc2gsIHRyYXNoTGlkKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlSWNvbjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByaW9yaXR5RGl2KHRvZG8sIHRvZG9JZHgsIHByb2plY3RJZHgpe1xyXG4gICAgY29uc3QgcHJpb3JpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcHJpb3JpdHlEaXYuY2xhc3NMaXN0LmFkZChcImVkaXQtcHJpb3JpdHlcIik7XHJcbiAgICBcclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjtcclxuICAgIHJhbmdlLmRhdGFzZXQudG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICByYW5nZS5kYXRhc2V0LnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgcmFuZ2UubWluID0gMDtcclxuICAgIHJhbmdlLm1heCA9IDI7XHJcbiAgICByYW5nZS5zdGVwID0gMTtcclxuICAgIHJhbmdlLnZhbHVlID0gdG9kby5wcmlvcml0eSA9PT0gXCJsb3dcIj8gMCA6IHRvZG8ucHJpb3JpdHkgPT09IFwibWlkZGxlXCIgPyAxIDogMjtcclxuICAgIHJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgY2hhbmdlUHJpb3JpdHkpXHJcblxyXG4gICAgY29uc3QgcGFyYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgcGFyYS5pbm5lclRleHQgPSBgUHJpb3JpdHk6ICR7dG9kby5wcmlvcml0eX1gO1xyXG5cclxuICAgIHByaW9yaXR5RGl2LmFwcGVuZChwYXJhLCByYW5nZSk7XHJcblxyXG4gICAgcmV0dXJuIHByaW9yaXR5RGl2O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGxhY2VDYXJkcyhpZHhPckZpbHRlciwgYWN0aXZhdGVUb2RvKXtcclxuICAgIGNhcmRzQ29udGFpbmVyLnJlcGxhY2VDaGlsZHJlbigpXHJcbiAgICBcclxuICAgIGNvbnN0IHByb2plY3QgPSB0b2RvSGFuZGxlci5nZXRQcm9qZWN0KGlkeE9yRmlsdGVyKTtcclxuICAgIFxyXG4gICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImhlYWRlclwiKTtcclxuXHJcbiAgICBjb25zdCBwcm9qZWN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBwcm9qZWN0SXRlbS5kYXRhc2V0LmlkeCA9IGlkeE9yRmlsdGVyO1xyXG4gICAgcHJvamVjdEl0ZW0uY2xhc3NMaXN0LmFkZChcInByb2plY3QtaXRlbVwiKTtcclxuXHJcbiAgICBjb25zdCBoMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcclxuICAgIGgxLmRhdGFzZXQucHJvamVjdElkeCA9IGlkeE9yRmlsdGVyO1xyXG4gICAgaDEuaW5uZXJUZXh0ID0gcHJvamVjdC50aXRsZTtcclxuICAgIGgxLnRpdGxlID0gcHJvamVjdC50aXRsZTtcclxuICAgIGhlYWRlci5hcHBlbmRDaGlsZChoMSk7XHJcblxyXG4gICAgcHJvamVjdC50b2Rvcy5mb3JFYWNoKCh0b2RvLCB0b2RvSWR4KSA9PiB7XHJcbiAgICAgIHByb2plY3RJdGVtLmFwcGVuZENoaWxkKHBsYWNlU2luZ2xlQ2FyZCh0b2RvLCBpZHhPckZpbHRlciwgdG9kb0lkeCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWRkVG9kb0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBhZGRUb2RvRGl2LmNsYXNzTGlzdC5hZGQoXCJjYXJkXCIsIFwidG9kby1hZGQtZGl2XCIpO1xyXG4gICAgYWRkVG9kb0Rpdi5kYXRhc2V0LnByb2plY3RJZHggPSBpZHhPckZpbHRlcjtcclxuICAgIGFkZFRvZG9EaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNyZWF0ZVRvZG8pO1xyXG4gICAgXHJcbiAgICBjb25zdCBhZGRUb2RvQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGFkZFRvZG9CdG4uY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImNyZWF0ZS10YXNrXCIsIFwiY3JlYXRlLXRvZG9cIik7XHJcblxyXG4gICAgY29uc3QgYWRkVG9kb1BhcmEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGFkZFRvZG9QYXJhLmlubmVyVGV4dCA9IFwiQ3JlYXRlIG5ldyB0by1kb1wiO1xyXG5cclxuICAgIGFkZFRvZG9EaXYuYXBwZW5kKGFkZFRvZG9CdG4sIGFkZFRvZG9QYXJhKTtcclxuICAgIHByb2plY3RJdGVtLmFwcGVuZENoaWxkKGFkZFRvZG9EaXYpO1xyXG4gICAgY2FyZHNDb250YWluZXIuYXBwZW5kKGhlYWRlciwgcHJvamVjdEl0ZW0pO1xyXG5cclxuICAgIGlmKGFjdGl2YXRlVG9kbyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXRvZG8taWR4PVwiJHthY3RpdmF0ZVRvZG99XCJdYCk7XHJcbiAgICAgICAgYWN0aXZlQ2FyZC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYWN0aXZlQ2FyZC5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gdG9nZ2xlQ2FyZCgpIHtcclxuICAgIGNvbnN0IGNhcmQgPSB0aGlzLnBhcmVudE5vZGU7XHJcbiAgICBjYXJkLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgaWYoIWNhcmQuY2xhc3NOYW1lLmluY2x1ZGVzKFwiYWN0aXZlXCIpKSB7XHJcbiAgICAgIGNhcmQucXVlcnlTZWxlY3RvcihcIi5pY29uLWVkaXRcIikuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICBjYXJkLmNsYXNzTGlzdC5yZW1vdmUoXCJlZGl0LW1vZGVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYXJkRHJhZygpe1xyXG4gICAgY2FyZE1vdmUuZnJvbS5wcm9qZWN0ID0gdGhpcy5jbG9zZXN0KFwiLmNhcmRcIikuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgY2FyZE1vdmUuZnJvbS50b2RvID0gdGhpcy5jbG9zZXN0KFwiLmNhcmRcIikuZGF0YXNldC50b2RvSWR4O1xyXG4gICAgXHJcbiAgICAvL2FkZCB0ZW1wb3JhbCBldmVudCBsaXN0ZW5lciwgcmVtb3ZlZCBvbiBleGVjdXRpb25cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYXJkUGxhY2UpO1xyXG4gICAgYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gXCJub25lXCI7XHJcblxyXG4gICAgLy9kaXNhYmxpbmcgZWRpdCBtb2RlIG9uIGFsbCBjYXJkc1xyXG4gICAgY29uc3QgYWxsQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcmRcIik7XHJcbiAgICBhbGxDYXJkcy5mb3JFYWNoKGNhcmQgPT4gY2FyZC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIsIFwiZWRpdC1tb2RlXCIpKTtcclxuXHJcbiAgICBjb25zdCBpY29uRWRpdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaWNvbi1lZGl0XCIpO1xyXG4gICAgaWNvbkVkaXQuZm9yRWFjaChpY29uID0+IGljb24uY2hlY2tlZCA9IGZhbHNlKTtcclxuXHJcbiAgICAvL2NyZWF0aW5nIGRyYWdnZWQgY2FyZFxyXG4gICAgY29uc3QgdGFyZ2V0Q2FyZCA9IHRoaXMuY2xvc2VzdChcIi5jYXJkXCIpO1xyXG4gICAgY29uc3QgZHJhZ2dpbmdDYXJkID0gdGFyZ2V0Q2FyZC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICBkcmFnZ2luZ0NhcmQuY2xhc3NMaXN0LmFkZChcImRyYWdnaW5nLWNhcmRcIik7XHJcbiAgICBkcmFnZ2luZ0NhcmQuc3R5bGUud2lkdGggPSBgJHt0YXJnZXRDYXJkLmNsaWVudFdpZHRofXB4YDtcclxuICAgIHRhcmdldENhcmQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgIFxyXG4gICAgLy9hZGQgbWFyZ2luIGJlZm9yZSBkcmFnZ2luZywgcHJldmVudHMgdmlzdWFsIGFubm95YW5jZVxyXG4gICAgY29uc3QgbmV4dENhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgdGFyZ2V0Q2FyZC5kYXRhc2V0LnByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3BhcnNlSW50KHRhcmdldENhcmQuZGF0YXNldC50b2RvSWR4KSsxfVwiXWApXHJcbiAgICBpZihuZXh0Q2FyZCkgbmV4dENhcmQuY2xhc3NMaXN0LmFkZChcIm1hcmdpbi10b3BcIik7XHJcblxyXG4gICAgLy9hZGQgdGVtcG9yYWwgbGlzdGVuZXIgYW5kIGludGVydmFsLCByZW1vdmVkIGJ5IGNhcmRQbGFjZSgpIGFmdGVyIHVzZVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgXHJcbiAgICBjdXJzb3JJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgZHJhZ2dpbmdDYXJkLnN0eWxlLmxlZnQgPSBgJHttb3VzZS54IC0gMjV9cHhgO1xyXG4gICAgICBkcmFnZ2luZ0NhcmQuc3R5bGUudG9wID0gYCR7bW91c2UueSAtIChkcmFnZ2luZ0NhcmQuY2xpZW50SGVpZ2h0IC8gMil9cHhgO1xyXG4gICAgfSwgMTAwMC82MCk7IC8vZGl2aWRlZCBieSBkZXNpcmVkIEZQU1xyXG4gICAgXHJcbiAgICBib2R5LmFwcGVuZChkcmFnZ2luZ0NhcmQpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlTW91c2VQb3MoZSl7XHJcbiAgICBtb3VzZS54ID0gZS5jbGllbnRYO1xyXG4gICAgbW91c2UueSA9IGUuY2xpZW50WTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNwYWNlQ2FyZHMoZSl7XHJcbiAgICBpZihlLmJ1dHRvbnMgIT09IDEgfHwgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZHJhZ2dpbmctY2FyZFwiKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXMuZGF0YXNldC50b2RvSWR4O1xyXG5cclxuICAgIGNhcmRNb3ZlLnRvLnByb2plY3QgPSBwcm9qZWN0SWR4O1xyXG4gICAgY2FyZE1vdmUudG8udG9kbyA9IHRvZG9JZHg7XHJcbiAgICBcclxuICAgIGNvbnN0IHdpdGhTZXBhcmF0aW9uID0gZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIubWFyZ2luLXRvcFwiKSB8fCBkb2N1bWVudD8ucXVlcnlTZWxlY3RvcihcIi5tYXJnaW4tYm90dG9tXCIpO1xyXG4gICAgd2l0aFNlcGFyYXRpb24/LmNsYXNzTGlzdC5yZW1vdmUoXCJtYXJnaW4tdG9wXCIsIFwibWFyZ2luLWJvdHRvbVwiKTtcclxuXHJcbiAgICBjb25zdCBjYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY2FyZDpub3QoLnNlcGFyYXRvcik6bm90KC5kcmFnZ2luZy1jYXJkKTpub3QoLmhpZGRlbilbZGF0YS1wcm9qZWN0LWlkeF1bZGF0YS10b2RvLWlkeF1cIik7XHJcbiAgICBjYXJkcy5mb3JFYWNoKGNhcmQgPT4ge1xyXG4gICAgICBpZihjYXJkLmRhdGFzZXQucHJvamVjdElkeCA9PT0gcHJvamVjdElkeFxyXG4gICAgICAgICYmIGNhcmQuZGF0YXNldC50b2RvSWR4ID09PSB0b2RvSWR4KXtcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvamVjdC1pdGVtXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjYXJkSGVpZ2h0ID0gdGhpcy5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgbW91c2VQb3NDYXJkID0gZS5sYXllclk7XHJcblxyXG4gICAgICAgIGlmKG1vdXNlUG9zQ2FyZCA8IGNhcmRIZWlnaHQgLyAyKXtcclxuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZChcIm1hcmdpbi10b3BcIik7XHJcbiAgICAgICAgICBjYXJkTW92ZS5wb3NpdGlvbiA9IFwiYmVmb3JlXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZChcIm1hcmdpbi1ib3R0b21cIik7XHJcbiAgICAgICAgICBjYXJkTW92ZS5wb3NpdGlvbiA9IFwiYWZ0ZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYXJkUGxhY2UoKXtcclxuICAgIC8vcmVtb3ZlIHRlbXBvcmFsIGV2ZW50IGxpc3RlbmVyLCBpbnRlcnZhbCBhbmQgb3BhY2l0eSBhZGRlZCBieSBjYXJkRHJhZygpXHJcbiAgICBjbGVhckludGVydmFsKGN1cnNvckludGVydmFsKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYXJkUGxhY2UpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gXCJ0ZXh0XCI7XHJcblxyXG4gICAgY29uc3QgaW52aXNpYmxlQ2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaGlkZGVuXCIpO1xyXG4gICAgaW52aXNpYmxlQ2FyZC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgXHJcbiAgICBjb25zdCBkcmFnZ2luZ0NhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmRyYWdnaW5nLWNhcmRcIik7XHJcbiAgICBib2R5LnJlbW92ZUNoaWxkKGRyYWdnaW5nQ2FyZCk7XHJcblxyXG4gICAgY29uc3Qgd2l0aFNlcGFyYXRpb24gPSBkb2N1bWVudD8ucXVlcnlTZWxlY3RvcihcIi5tYXJnaW4tdG9wXCIpIHx8IGRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKFwiLm1hcmdpbi1ib3R0b21cIik7XHJcbiAgICB3aXRoU2VwYXJhdGlvbj8uY2xhc3NMaXN0LnJlbW92ZShcIm1hcmdpbi10b3BcIiwgXCJtYXJnaW4tYm90dG9tXCIpO1xyXG5cclxuICAgIC8vbW92ZSB0by1kb3NcclxuICAgIGlmKGNhcmRNb3ZlLmZyb20ucHJvamVjdCAmJiBjYXJkTW92ZS5mcm9tLnRvZG9cclxuICAgICAgJiYgY2FyZE1vdmUudG8ucHJvamVjdCAmJiBjYXJkTW92ZS50by50b2RvKXtcclxuICAgICAgXHJcbiAgICAgIHRvZG9IYW5kbGVyLm1vdmVEcmFnZ2VkQ2FyZChjYXJkTW92ZS5mcm9tLnByb2plY3QsIGNhcmRNb3ZlLmZyb20udG9kbywgY2FyZE1vdmUudG8udG9kbywgY2FyZE1vdmUucG9zaXRpb24pO1xyXG4gICAgICBwbGFjZUNhcmRzKHBhcnNlSW50KGNhcmRNb3ZlLmZyb20ucHJvamVjdCkpO1xyXG4gICAgICBcclxuICAgICAgLy9jbGVhciBkcmFnIHZhbHVlc1xyXG4gICAgICBjYXJkTW92ZS5mcm9tLnByb2plY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgIGNhcmRNb3ZlLmZyb20udG9kbyA9IHVuZGVmaW5lZDtcclxuICAgICAgY2FyZE1vdmUudG8ucHJvamVjdCA9IHVuZGVmaW5lZDtcclxuICAgICAgY2FyZE1vdmUudG8udG9kbyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNhcmRFZGl0KCl7XHJcbiAgICBjb25zdCBjYXJkQ2xhc3MgPSB0aGlzLmNsb3Nlc3QoXCIuY2FyZFwiKS5jbGFzc0xpc3Q7XHJcbiAgICB0aGlzLmNoZWNrZWQgPyBjYXJkQ2xhc3MuYWRkKFwiZWRpdC1tb2RlXCIpIDogY2FyZENsYXNzLnJlbW92ZShcImVkaXQtbW9kZVwiKTtcclxuICAgIHRoaXMuY2xvc2VzdChcIi5jYXJkXCIpLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYXJkRGVsZXRlKHByb2plY3RJZHhQYXJhbSwgdG9kb0lkeFBhcmFtKXtcclxuICAgIGNvbnN0IHByb2plY3RJZHggPSB0aGlzPy5kYXRhc2V0Py5wcm9qZWN0SWR4IHx8IHByb2plY3RJZHhQYXJhbTtcclxuICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzPy5kYXRhc2V0Py50b2RvSWR4IHx8IHRvZG9JZHhQYXJhbTtcclxuXHJcbiAgICBpZih0b2RvSGFuZGxlci5nZXRGYXZTdGF0dXMocHJvamVjdElkeCwgdG9kb0lkeCkpIHtcclxuICAgICAgY29uc3QgdGhpc0NhcmRTdGFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIC5pY29uLWZhdmApO1xyXG4gICAgICB0aGlzQ2FyZFN0YXIuY2xhc3NMaXN0LmFkZChcInNoYWtlXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9O1xyXG5cclxuICAgIHRvZG9IYW5kbGVyLmRlbGV0ZVRvZG8ocHJvamVjdElkeCwgdG9kb0lkeCk7XHJcbiAgICBwbGFjZUNhcmRzKHBhcnNlSW50KHByb2plY3RJZHgpKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVRhc2tMaSh0b2RvLCBjaGVjaywgcHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCl7XHJcbiAgICBjb25zdCB0YXNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgY2hlY2tib3gudHlwZSA9IFwiY2hlY2tib3hcIjtcclxuICAgIGNoZWNrYm94LmlkID0gYCR7cHJvamVjdElkeH0tJHt0b2RvSWR4fS0ke3Rhc2tJZHh9YDsgLy9mb3IgbGFiZWwgb25seVxyXG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGNoZWNrPy5pc0RvbmUgfHwgZmFsc2U7XHJcbiAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGFza0NoZWNrKTtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiKTtcclxuICAgIGxhYmVsLmh0bWxGb3IgPSBjaGVja2JveC5pZDtcclxuICAgIGxhYmVsLmRhdGFzZXQudG9kb1RpdGxlID0gdG9kby50aXRsZTtcclxuICAgIGxhYmVsLmlubmVyVGV4dCA9IGNoZWNrPy50YXNrIHx8IFwiXCI7XHJcbiAgICBsYWJlbC50aXRsZSA9IGNoZWNrPy50YXNrIHx8IFwiXCI7XHJcbiAgICBjb25zdCBlZGl0TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICBlZGl0TGFiZWwudHlwZSA9IFwidGV4dFwiO1xyXG4gICAgZWRpdExhYmVsLmNsYXNzTGlzdC5hZGQoXCJlZGl0LWxhYmVsXCIpO1xyXG4gICAgZWRpdExhYmVsLnR5cGUgPSBcInRleHRcIjtcclxuICAgIGVkaXRMYWJlbC5odG1sRm9yID0gY2hlY2tib3guaWQ7XHJcbiAgICBlZGl0TGFiZWwudmFsdWUgPSBjaGVjaz8udGFzayB8fCBcIlwiO1xyXG4gICAgZWRpdExhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBlZGl0RmllbGQpO1xyXG4gICAgZWRpdExhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGxhYmVsS2V5cHJlc3MpO1xyXG5cclxuICAgIGNvbnN0IHJlbW92ZVRhc2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcmVtb3ZlVGFzay5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwicmVtb3ZlLXRhc2tcIik7XHJcbiAgICByZW1vdmVUYXNrLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkZWxldGVUYXNrKTtcclxuXHJcbiAgICAvL2FkZCBkYXRhc2V0XHJcbiAgICBbY2hlY2tib3gsZWRpdExhYmVsLCByZW1vdmVUYXNrXS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgIGl0ZW0uZGF0YXNldC50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgICAgaXRlbS5kYXRhc2V0LnRhc2tJZHggPSB0YXNrSWR4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGFzay5hcHBlbmQoY2hlY2tib3gsIGxhYmVsLCBlZGl0TGFiZWwsIHJlbW92ZVRhc2spO1xyXG5cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGFiZWxLZXlwcmVzcyhlKXtcclxuICAgIGlmKGUua2V5ID09PSBcIkVudGVyXCIpe1xyXG4gICAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzLmRhdGFzZXQudG9kb0lkeDtcclxuICAgICAgY29uc3QgdG9kbyA9IHRoaXMuY2xvc2VzdChcIi5jYXJkXCIpLnF1ZXJ5U2VsZWN0b3IoXCIuY3JlYXRlLXRhc2tcIikuZGF0YXNldC50b2RvO1xyXG4gICAgICBjcmVhdGVUYXNrKHByb2plY3RJZHgsIHRvZG9JZHgsIHRvZG8pXHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmKGUua2V5ID09PSBcIkFycm93VXBcIiB8fCBlLmtleSA9PT0gXCJBcnJvd0Rvd25cIil7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICAgIGNvbnN0IHRhc2tJZHggPSBwYXJzZUludCh0aGlzLmRhdGFzZXQudGFza0lkeCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBtb3ZlID0gZS5rZXkgPT09IFwiQXJyb3dVcFwiID8gLTEgOiArMTtcclxuICAgICAgY29uc3QgbWF4ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLmVkaXQtbGFiZWxbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgICAgcHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl1gKS5sZW5ndGgtMTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IG5ld0FjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5lZGl0LWxhYmVsW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdW2RhdGEtdGFzay1pZHg9XCIke01hdGgubWF4KDAsIE1hdGgubWluKHRhc2tJZHgrbW92ZSwgbWF4KSl9XCJdYCk7XHJcbiAgICAgIFxyXG4gICAgICBuZXdBY3RpdmUuZm9jdXMoKTtcclxuICAgIH0gZWxzZSBpZihlLmtleSA9PT0gXCIgXCIgJiYgZS5jdHJsS2V5KXtcclxuICAgICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICAgIGNvbnN0IHRhc2tJZHggPSBwYXJzZUludCh0aGlzLmRhdGFzZXQudGFza0lkeCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgICBwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXVtkYXRhLXRhc2staWR4PVwiJHt0YXNrSWR4fVwiXWApO1xyXG4gICAgICBjaGVja2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7XHJcbiAgICAgIHRhc2tDaGVjayhwcm9qZWN0SWR4LCB0b2RvSWR4LCB0YXNrSWR4KTtcclxuICAgIH0gZWxzZSBpZihlLmtleSA9PT0gXCJEZWxldGVcIiAmJiBlLmFsdEtleSkge1xyXG4gICAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzLmRhdGFzZXQudG9kb0lkeDtcclxuICAgICAgY29uc3QgdGFza0lkeCA9IHBhcnNlSW50KHRoaXMuZGF0YXNldC50YXNrSWR4KTtcclxuXHJcbiAgICAgIGRlbGV0ZVRhc2socHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVhdGVUYXNrKHByb2plY3RJZHhQYXJhbSwgdG9kb0lkeFBhcmFtLCB0b2RvUGFyYW0pe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXM/LmRhdGFzZXQ/LnByb2plY3RJZHggfHwgcHJvamVjdElkeFBhcmFtO1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRvZG9JZHggfHwgdG9kb0lkeFBhcmFtO1xyXG4gICAgY29uc3QgdG9kbyA9IHRoaXM/LmRhdGFzZXQ/LnRvZG8gfHwgdG9kb1BhcmFtO1xyXG4gICAgXHJcbiAgICB0b2RvSGFuZGxlci5jcmVhdGVUYXNrKHByb2plY3RJZHgsIHRvZG9JZHgpO1xyXG4gICAgXHJcbiAgICBjb25zdCBuZXdUYXNrSWR4ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICBwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXSBsaWApXHJcbiAgICAgIC5sZW5ndGg7XHJcblxyXG4gICAgY29uc3QgdGhpc0NhcmRVbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgcHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl0gdWxgKTtcclxuICAgICAgXHJcbiAgICB0aGlzQ2FyZFVsLmFwcGVuZENoaWxkKGNyZWF0ZVRhc2tMaSh0b2RvLCBmYWxzZSwgcHJvamVjdElkeCwgdG9kb0lkeCwgbmV3VGFza0lkeCkpO1xyXG4gICAgXHJcbiAgICBjb25zdCB0aGlzQ2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5jYXJkW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICBwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXWApO1xyXG4gICAgY29uc3QgbmV3SW5wdXQgPSB0aGlzQ2FyZC5xdWVyeVNlbGVjdG9yQWxsKFwiLmVkaXQtbGFiZWxcIik7XHJcbiAgICBuZXdJbnB1dFtuZXdJbnB1dC5sZW5ndGggLTFdLmZvY3VzKCk7XHJcblxyXG4gICAgdXBkYXRlUHJvZ3Jlc3MocHJvamVjdElkeCwgdG9kb0lkeCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWxldGVUYXNrKHBhcmFtUHJvamVjdElkeCwgcGFyYW1Ub2RvSWR4LCBwYXJhbVRhc2tJZHgpe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXM/LmRhdGFzZXQ/LnByb2plY3RJZHggfHwgcGFyYW1Qcm9qZWN0SWR4O1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRvZG9JZHggfHwgcGFyYW1Ub2RvSWR4O1xyXG4gICAgY29uc3QgdGFza0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRhc2tJZHggfHwgcGFyYW1UYXNrSWR4O1xyXG5cclxuICAgIHRvZG9IYW5kbGVyLmRlbGV0ZVRhc2socHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCk7XHJcbiAgICBpZih0aGlzKXtcclxuICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGhpc1Rhc2sgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGBpbnB1dFt0eXBlPVwidGV4dFwiXVtkYXRhLXByb2plY3QtaWR4PVwiJHtwcm9qZWN0SWR4XHJcbiAgICAgICAgfVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXVtkYXRhLXRhc2staWR4PVwiJHt0YXNrSWR4XHJcbiAgICAgICAgfVwiXWBcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGhpc0xpID0gdGhpc1Rhc2sucGFyZW50Tm9kZTtcclxuICAgICAgdGhpc0xpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc0xpKTtcclxuXHJcbiAgICAgIC8vXHJcbiAgICAgIGNvbnN0IG5leHRJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgYGlucHV0W3R5cGU9XCJ0ZXh0XCJdW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHhcclxuICAgICAgICB9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdW2RhdGEtdGFzay1pZHg9XCIke3BhcnNlSW50KHRhc2tJZHgpKzFcclxuICAgICAgICB9XCJdYFxyXG4gICAgICApO1xyXG4gICAgICBpZihuZXh0SW5wdXQpIHtcclxuICAgICAgICBuZXh0SW5wdXQuZm9jdXMoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxhc3RJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC5jYXJkLmFjdGl2ZSAuZWRpdC1sYWJlbGApO1xyXG4gICAgICAgIGlmKGxhc3RJbnB1dC5sZW5ndGggPiAwKSBsYXN0SW5wdXRbbGFzdElucHV0Lmxlbmd0aCAtMV0uZm9jdXMoKTtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IHRoaXNUYXNrTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgcHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl0gbGkgLnJlbW92ZS10YXNrYCk7XHJcbiAgICBjb25zdCB0aGlzVGFza0NoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIGxpIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXWApO1xyXG4gICAgY29uc3QgdGhpc1Rhc2tMYWJlbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIGxpIGxhYmVsYCk7XHJcbiAgICBjb25zdCB0aGlzVGFza1RleHRJbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIGxpIGlucHV0W3R5cGU9XCJ0ZXh0XCJdYCk7XHJcbiAgICBcclxuICAgIFt0aGlzVGFza0xpc3QsIHRoaXNUYXNrQ2hlY2tib3hlcywgdGhpc1Rhc2tUZXh0SW5wdXRzXVxyXG4gICAgLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICBncm91cC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgaXRlbS5kYXRhc2V0LnRhc2tJZHggPSBpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpc1Rhc2tMYWJlbHMuZm9yRWFjaCgobGFiZWwsIGkpID0+IHtcclxuICAgICAgbGFiZWwuaHRtbEZvciA9IGAke2xhYmVsLmRhdGFzZXQudG9kb1RpdGxlfS0ke2l9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHVwZGF0ZVByb2dyZXNzKHByb2plY3RJZHgsIHRvZG9JZHgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZWRpdEZpZWxkKCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICBjb25zdCB0YXNrSWR4ID0gdGhpcz8uZGF0YXNldD8udGFza0lkeDtcclxuXHJcbiAgICBpZih0aGlzLmNsYXNzTmFtZS5pbmNsdWRlcyhcImVkaXQtdGl0bGVcIikpe1xyXG4gICAgICB0b2RvSGFuZGxlci5lZGl0VGl0bGUocHJvamVjdElkeCwgdG9kb0lkeCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IHRoaXNUaXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5jYXJkW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIC50aXRsZWApO1xyXG4gICAgICB0aGlzVGl0bGUuaW5uZXJUZXh0ID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpc1RpdGxlLnRpdGxlID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9IGVsc2UgaWYodGhpcy5jbGFzc05hbWUuaW5jbHVkZXMoXCJlZGl0LWRlc2NyaXB0aW9uXCIpKXtcclxuICAgICAgdG9kb0hhbmRsZXIuZWRpdERlc2NyaXB0aW9uKHByb2plY3RJZHgsIHRvZG9JZHgsIHRoaXMudmFsdWUpO1xyXG4gICAgICBjb25zdCB0aGlzRGVzY3JpcHRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXByb2plY3QtaWR4PVwiJHtwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXSAuZGVzY3JpcHRpb25gKTtcclxuICAgICAgdGhpc0Rlc2NyaXB0aW9uLmlubmVyVGV4dCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRoaXNEZXNjcmlwdGlvbi50aXRsZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmKHRoaXMuY2xhc3NOYW1lLmluY2x1ZGVzKFwiZWRpdC1kYXRlLWR1ZVwiKSl7XHJcbiAgICAgIHRvZG9IYW5kbGVyLmVkaXREYXRlRHVlKHByb2plY3RJZHgsIHRvZG9JZHgsIHRoaXMudmFsdWUpXHJcbiAgICAgIGNvbnN0IHRoaXNEYXRlRHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmNhcmRbZGF0YS1wcm9qZWN0LWlkeD1cIiR7cHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl0gLmRhdGUtZHVlYCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBkdWVEYXRlRm9ybWF0ID0gdGhpcy52YWx1ZS5zcGxpdChcIi1cIikuam9pbihcIiBcIik7XHJcbiAgICAgIHRoaXNEYXRlRHVlLmlubmVyVGV4dCA9IHRoaXMudmFsdWUubGVuZ3RoID4gMCA/IGBEdWU6ICR7XHJcbiAgICAgICAgZm9ybWF0KG5ldyBEYXRlKHBhcnNlSVNPKHRoaXMudmFsdWUpKSwgZGF0ZUZvcm1hdCl9ICgke1xyXG4gICAgICAgICAgaXNUb2RheShuZXcgRGF0ZShkdWVEYXRlRm9ybWF0KSkgPyBcInRvZGF5XCIgXHJcbiAgICAgICAgICA6IGludGxGb3JtYXREaXN0YW5jZShuZXcgRGF0ZShkdWVEYXRlRm9ybWF0KSwgbmV3IERhdGUoKSlcclxuICAgICAgICB9KWAgOiBcIlwiO1xyXG4gICAgICBcclxuICAgIH0gZWxzZSBpZih0aGlzLmNsYXNzTmFtZS5pbmNsdWRlcyhcImVkaXQtbGFiZWxcIikpe1xyXG4gICAgICB0b2RvSGFuZGxlci5lZGl0TGFiZWwocHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IHRoaXNUYXNrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdW2RhdGEtdGFzay1pZHg9XCIke3Rhc2tJZHh9XCJdIH4gbGFiZWxgKTtcclxuICAgICAgdGhpc1Rhc2suaW5uZXJUZXh0ID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpc1Rhc2sudGl0bGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdG9nZ2xlTWVudSgpe1xyXG4gICAgY29uc3QgbWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWVudVwiKTtcclxuICAgIGNvbnN0IG1lbnVCZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2NyZWVuLWNvdmVyLW1lbnVcIik7XHJcbiAgICBbbWVudSxtZW51QmddLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC50b2dnbGUoXCJyZXZlYWxcIikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2hhbmdlUFJvamVjdCgpe1xyXG4gICAgdG9nZ2xlTWVudSgpO1xyXG4gICAgcGxhY2VDYXJkcyhwYXJzZUludCh0aGlzLmRhdGFzZXQucHJvamVjdElkeCkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVsZXRlUHJvamVjdChwcm9qZWN0SWR4KXtcclxuICAgIHRvZG9IYW5kbGVyLmRlbGV0ZVByb2plY3QocHJvamVjdElkeCk7XHJcblxyXG4gICAgcHJvamVjdHNMaXN0KHRydWUpO1xyXG4gICAgcGxhY2VDYXJkcygwKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZVByaW9yaXR5KCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICB0b2RvSGFuZGxlci5jaGFuZ2VQcmlvcml0eShwcm9qZWN0SWR4LCB0b2RvSWR4LCB0aGlzLnZhbHVlKTtcclxuICAgIGNvbnN0IHByaW9yaXR5ID0gdGhpcy52YWx1ZSA9PSBcIjBcIiA/IFwibG93XCIgOiB0aGlzLnZhbHVlID09IFwiMVwiID8gXCJtaWRkbGVcIiA6IFwiaGlnaFwiO1xyXG5cclxuICAgIGNvbnN0IHRoaXNDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdYCk7XHJcbiAgICB0aGlzQ2FyZC5kYXRhc2V0LnByaW9yaXR5ID0gcHJpb3JpdHlcclxuXHJcbiAgICBjb25zdCBwcmlvcml0eVBhcmEgPSB0aGlzQ2FyZC5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtcHJpb3JpdHkgcFwiKTtcclxuICAgIHByaW9yaXR5UGFyYS5pbm5lclRleHQgPSBgUHJpb3JpdHk6ICR7cHJpb3JpdHl9YDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVRvZG8oKXtcclxuICAgIHRvZG9IYW5kbGVyLmNyZWF0ZVRvZG8odGhpcy5kYXRhc2V0LnByb2plY3RJZHgpO1xyXG4gICAgcGxhY2VDYXJkcyhwYXJzZUludCh0aGlzLmRhdGFzZXQucHJvamVjdElkeCkpO1xyXG5cclxuICAgIGNvbnN0IGVkaXRCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5wcm9qZWN0LWl0ZW0gLmljb24tZWRpdFwiKTtcclxuICAgIGVkaXRCdG5zW2VkaXRCdG5zLmxlbmd0aCAtMV0uY2hlY2tlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnByb2plY3QtaXRlbSAuY2FyZFwiKTtcclxuICAgIGNhcmRzW2NhcmRzLmxlbmd0aCAtMl0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiLFwiZWRpdC1tb2RlXCIpO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlSW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5lZGl0LXRpdGxlXCIpO1xyXG4gICAgdGl0bGVJbnB1dHNbdGl0bGVJbnB1dHMubGVuZ3RoIC0xXS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlUHJvamVjdCgpe1xyXG4gICAgdG9kb0hhbmRsZXIuY3JlYXRlUHJvamVjdCgpO1xyXG4gICAgcHJvamVjdHNMaXN0KHRydWUpO1xyXG4gICAgcGxhY2VDYXJkcyhwYXJzZUludCh0b2RvSGFuZGxlci5nZXRQcm9qZWN0c1RpdGxlcygpLmxlbmd0aC0xKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9qZWN0RWRpdCgpe1xyXG4gICAgY29uc3QgYWxsRWRpdEJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZpZWxkc2V0LXRhc2tzIC5pY29uLWVkaXRcIik7XHJcbiAgICBhbGxFZGl0QnRucy5mb3JFYWNoKGVkaXRCdG4gPT4ge1xyXG4gICAgICBpZihlZGl0QnRuLmRhdGFzZXQucHJvamVjdElkeCAhPT0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHgpe1xyXG4gICAgICAgIGVkaXRCdG4uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFsbEVkaXRNb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5maWVsZHNldC10YXNrcyAuZWRpdC1tb2RlXCIpO1xyXG4gICAgYWxsRWRpdE1vZGUuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZShcImVkaXQtbW9kZVwiKSk7XHJcbiAgICBcclxuICAgIGNvbnN0IHByb2plY3RDbGFzcyA9IHRoaXMucGFyZW50Tm9kZS5jbGFzc0xpc3Q7XHJcbiAgICB0aGlzLmNoZWNrZWQgPyBwcm9qZWN0Q2xhc3MuYWRkKFwiZWRpdC1tb2RlXCIpIDogcHJvamVjdENsYXNzLnJlbW92ZShcImVkaXQtbW9kZVwiKTtcclxuXHJcbiAgICBjb25zdCB0aGlzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuZWRpdC1wcm9qZWN0W2RhdGEtcHJvamVjdC1pZHg9XCIke3RoaXMuZGF0YXNldC5wcm9qZWN0SWR4fVwiXWApO1xyXG4gICAgdGhpc0lucHV0LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlZGl0UHJvamVjdFRpdGxlKCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5tZW51LXRhc2tzLm1lbnUtaXRlbSBwW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdYCk7XHJcbiAgICB0aXRsZS5pbm5lclRleHQgPSB0aGlzLnZhbHVlO1xyXG4gICAgdGl0bGUudGl0bGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgdG9kb0hhbmRsZXIuZWRpdFByb2plY3RUaXRsZShwcm9qZWN0SWR4LCB0aGlzLnZhbHVlKTtcclxuICAgIC8vZWRpdCB0aXRsZSBvZiBhY3RpdmUgcHJvamVjdCBpZiB0aGUgZWRpdGluZyB0aXRsZSBpcyBmb3IgaXRcclxuICAgIGNvbnN0IHRpdGxlQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaDFcIik7XHJcbiAgICBpZihwcm9qZWN0SWR4ID09PSB0aXRsZUNhcmRzLmRhdGFzZXQucHJvamVjdElkeCkge1xyXG4gICAgICB0aXRsZUNhcmRzLmlubmVyVGV4dCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRpdGxlQ2FyZHMudGl0bGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZpbHRlclRvZG9zKCl7XHJcbiAgICB0b2dnbGVNZW51KCk7XHJcbiAgICBjYXJkc0NvbnRhaW5lci5yZXBsYWNlQ2hpbGRyZW4oKTtcclxuXHJcbiAgICBjb25zdCBwcm9qZWN0ID0gdG9kb0hhbmRsZXIuZ2V0UHJvamVjdCh0aGlzLmRhdGFzZXQuZmlsdGVyKTtcclxuXHJcbiAgICBcclxuICAgIGNvbnN0IHByb2plY3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHByb2plY3RJdGVtLmNsYXNzTGlzdC5hZGQoXCJwcm9qZWN0LWl0ZW1cIik7XHJcbiAgICBcclxuICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoZWFkZXJcIik7XHJcbiAgICBjb25zdCBoMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcclxuICAgIGgxLmlubmVyVGV4dCA9IHByb2plY3QudGl0bGU7XHJcbiAgICBoMS50aXRsZSA9IHByb2plY3QudGl0bGU7XHJcbiAgICBoZWFkZXIuYXBwZW5kKGgxKTtcclxuICAgIGNhcmRzQ29udGFpbmVyLmFwcGVuZChoZWFkZXIpO1xyXG5cclxuICAgIHByb2plY3QudG9kb3MuZm9yRWFjaCh0b2RvID0+IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgcmVzdWx0LmNsYXNzTGlzdC5hZGQoXCJjYXJkXCIsIFwic2VhcmNoLXJlc3VsdFwiLCBcImFjdGl2ZVwiKTtcclxuICAgICAgcmVzdWx0LmRhdGFzZXQucHJpb3JpdHkgPSB0b2RvLnByaW9yaXR5O1xyXG4gICAgICByZXN1bHQuZGF0YXNldC5wcm9qZWN0SWR4ID0gdG9kby5wcm9qZWN0SWR4O1xyXG4gICAgICByZXN1bHQuZGF0YXNldC50b2RvSWR4ID0gdG9kby50b2RvSWR4O1xyXG4gICAgICByZXN1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICBwbGFjZUNhcmRzKHBhcnNlSW50KHRvZG8ucHJvamVjdElkeCksIHRvZG8udG9kb0lkeCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDJcIik7XHJcbiAgICAgIHRpdGxlLmNsYXNzTGlzdC5hZGQoXCJ0aXRsZVwiKTtcclxuICAgICAgdGl0bGUuaW5uZXJUZXh0ID0gdG9kby50aXRsZTtcclxuXHJcbiAgICAgIGNvbnN0IHByb2dyZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgcHJvZ3Jlc3MuY2xhc3NMaXN0LmFkZChcInByb2dyZXNzXCIpO1xyXG4gICAgICBjb25zdCBjb21wbGV0ZWQgPSB0b2RvLmNoZWNrcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRG9uZSkubGVuZ3RoO1xyXG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gY29tcGxldGVkICogMTAwIC8gdG9kby5jaGVja3MubGVuZ3RoO1xyXG4gICAgICBwcm9ncmVzcy5zdHlsZS5iYWNrZ3JvdW5kID0gYGNvbmljLWdyYWRpZW50KCMyZTEwYzAgJHtwZXJjZW50YWdlfSUsIHRyYW5zcGFyZW50ICR7cGVyY2VudGFnZX0lLCB0cmFuc3BhcmVudCAxMDAlKWBcclxuICAgICAgcHJvZ3Jlc3Muc3R5bGUub3BhY2l0eSA9IHRvZG8uY2hlY2tzLmxlbmd0aCA9PT0gMCA/IFwiMCVcIiA6IFwiMTAwJVwiO1xyXG5cclxuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZChcImRlc2NyaXB0aW9uXCIpO1xyXG4gICAgICBkZXNjcmlwdGlvbi5pbm5lclRleHQgPSB0b2RvLmRlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgY29uc3QgZGF0ZUNyZWF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgIGRhdGVDcmVhdGlvbi5jbGFzc0xpc3QuYWRkKFwiZGF0ZS1jcmVhdGlvblwiKTtcclxuICAgICAgZGF0ZUNyZWF0aW9uLmlubmVyVGV4dCA9IGBDcmVhdGVkOiAke2Zvcm1hdChuZXcgRGF0ZShwYXJzZUlTTyh0b2RvLmRhdGVDcmVhdGlvbikpLCBkYXRlRm9ybWF0KX1gOztcclxuXHJcbiAgICAgIGNvbnN0IGRhdGVEdWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgICAgZGF0ZUR1ZS5jbGFzc0xpc3QuYWRkKFwiZGF0ZS1kdWVcIik7XHJcblxyXG4gICAgICBjb25zdCBkdWVEYXRlRm9ybWF0ID0gdG9kby5kYXRlRHVlLnNwbGl0KFwiLVwiKS5qb2luKFwiIFwiKTtcclxuICAgICAgZGF0ZUR1ZS5pbm5lclRleHQgPSB0b2RvLmRhdGVEdWUubGVuZ3RoID4gMCA/IGBEdWU6ICR7XHJcbiAgICAgICAgZm9ybWF0KG5ldyBEYXRlKHBhcnNlSVNPKHRvZG8uZGF0ZUR1ZSkpLCBkYXRlRm9ybWF0KX0gKCR7XHJcbiAgICAgICAgICBpc1RvZGF5KG5ldyBEYXRlKGR1ZURhdGVGb3JtYXQpKSA/IFwidG9kYXlcIiBcclxuICAgICAgICAgIDogaW50bEZvcm1hdERpc3RhbmNlKG5ldyBEYXRlKGR1ZURhdGVGb3JtYXQpLCBuZXcgRGF0ZSgpKVxyXG4gICAgICAgIH0pYCA6IFwiXCI7XHJcblxyXG4gICAgICByZXN1bHQuYXBwZW5kKHRpdGxlLCBwcm9ncmVzcywgZGVzY3JpcHRpb24sIGRhdGVDcmVhdGlvbiwgZGF0ZUR1ZSk7XHJcblxyXG4gICAgICBwcm9qZWN0SXRlbS5hcHBlbmQocmVzdWx0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNhcmRzQ29udGFpbmVyLmFwcGVuZENoaWxkKHByb2plY3RJdGVtKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gdGFza0NoZWNrKHByb2plY3RJZHhQYXJhbSwgdG9kb0lkeFBhcmFtLCB0YXNrSWR4UGFyYW0pe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXM/LmRhdGFzZXQ/LnByb2plY3RJZHggfHwgcHJvamVjdElkeFBhcmFtO1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRvZG9JZHggfHwgdG9kb0lkeFBhcmFtO1xyXG4gICAgY29uc3QgdGFza0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRhc2tJZHggfHwgdGFza0lkeFBhcmFtO1xyXG4gICAgdG9kb0hhbmRsZXIudGFza0NoZWNrKHByb2plY3RJZHgsIHRvZG9JZHgsIHRhc2tJZHgpO1xyXG5cclxuICAgIHVwZGF0ZVByb2dyZXNzKHByb2plY3RJZHgsIHRvZG9JZHgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MocHJvamVjdElkeCwgdG9kb0lkeCl7XHJcbiAgICBjb25zdCB0aGlzUHJvamVjdCA9IHRvZG9IYW5kbGVyLmdldFByb2plY3QocGFyc2VJbnQocHJvamVjdElkeCkpLnRvZG9zW3RvZG9JZHhdO1xyXG5cclxuICAgIGNvbnN0IHRoaXNDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmNhcmRbZGF0YS1wcm9qZWN0LWlkeD1cIiR7cHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl1gKTtcclxuICAgIGNvbnN0IHBlcmNlbnRhZ2VEaXYgPSB0aGlzQ2FyZC5xdWVyeVNlbGVjdG9yKFwiLnByb2dyZXNzXCIpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBsZXRlZCA9IHRoaXNQcm9qZWN0LmNoZWNrcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRG9uZSkubGVuZ3RoO1xyXG4gICAgY29uc3QgcGVyY2VudGFnZSA9IGNvbXBsZXRlZCAqIDEwMCAvIHRoaXNQcm9qZWN0LmNoZWNrcy5sZW5ndGg7XHJcbiAgICBwZXJjZW50YWdlRGl2LnN0eWxlLmJhY2tncm91bmQgPSBgY29uaWMtZ3JhZGllbnQoIzJlMTBjMCAke3BlcmNlbnRhZ2V9JSwgdHJhbnNwYXJlbnQgJHtwZXJjZW50YWdlfSUsIHRyYW5zcGFyZW50IDEwMCUpYFxyXG4gICAgcGVyY2VudGFnZURpdi5zdHlsZS5vcGFjaXR5ID0gdGhpc1Byb2plY3QuY2hlY2tzLmxlbmd0aCA9PT0gMCA/IFwiMCVcIiA6IFwiMTAwJVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgcGxhY2VDYXJkcywgbG9hZE1lbnUgfTtcclxufSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b0IsOENBQThDLEtBQUsscUNBQXFDLDhCQUE4QixNQUFNLFNBQVMsZ0ZBQWdGLFlBQVksTUFBTSxPQUFPLE1BQU0sT0FBTyxhQUFhLGFBQWEsU0FBUyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxNQUFNLE9BQU8sTUFBTSxPQUFPLGFBQWEsYUFBYSxTQUFTLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxZQUFZLDJDQUEyQywyQ0FBMkMscUJBQXFCLE1BQU0sWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxNQUFNLEtBQUssVUFBVSxVQUFVLEtBQUssdUJBQXVCLE1BQU0sVUFBVSxZQUFZLE1BQU0sS0FBSyxZQUFZLFdBQVcsT0FBTyxXQUFXLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLE1BQU0sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsS0FBSyxxQkFBcUIsTUFBTSxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxXQUFXLE9BQU8sS0FBSyxZQUFZLFdBQVcsTUFBTSxLQUFLLFlBQVksV0FBVyxZQUFZLE9BQU8sc0JBQXNCLE1BQU0sVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksTUFBTSxPQUFPLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxXQUFXLFdBQVcsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxZQUFZLGFBQWEsTUFBTSx1QkFBdUIsTUFBTSxZQUFZLFdBQVcsWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsTUFBTSxPQUFPLE1BQU0sS0FBSyxzQkFBc0IsTUFBTSxLQUFLLHNCQUFzQix1QkFBdUIsT0FBTyxhQUFhLHdCQUF3QixNQUFNLFlBQVksV0FBVyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxRQUFRLFdBQVcsS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsV0FBVyxPQUFPLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyx3QkFBd0IsMEJBQTBCLE1BQU0sWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFVBQVUsV0FBVyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxZQUFZLFVBQVUsWUFBWSxRQUFRLEtBQUssWUFBWSxXQUFXLEtBQUssS0FBSyxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxNQUFNLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FB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O0FBQ0E7QUFDQTtBQUNBLFdBQVcscUVBQWU7QUFDMUIsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxxRUFBZTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxxRUFBZTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFpQjtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUscUVBQWU7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGVBQWUsb0VBQVU7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLHFFQUFlO0FBQzFCLEdBQUc7QUFDSDtBQUNBO0FBQ0Esa0JBQWtCLHVFQUFhOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsV0FBVyxxRUFBZTtBQUMxQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxXQUFXLG1FQUFpQjtBQUM1QixHQUFHO0FBQ0g7QUFDQTtBQUNBLG9CQUFvQix5RUFBZTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBLFdBQVcscUVBQWU7QUFDMUIsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUscUVBQWU7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLHFFQUFlO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxxRUFBZTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1B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O0FBQ0E7O0FBRWU7QUFDZixFQUFFLHNFQUFZO0FBQ2Qsa0JBQWtCLDREQUFNO0FBQ3hCLGVBQWUsbUVBQVM7QUFDeEI7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxXQUFXLGlCQUFpQixXQUFXO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsb0RBQU0sVUFBVSxvREFBUSxrQ0FBa0M7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxvREFBTSxVQUFVLG9EQUFRLDhCQUE4QjtBQUM5RCxVQUFVLG9EQUFPO0FBQ2pCLFlBQVksb0RBQWtCO0FBQzlCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrRUFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtRUFBc0I7QUFDOUM7QUFDQSx1RUFBdUUsV0FBVyxvQkFBb0IsUUFBUTtBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxXQUFXLGlCQUFpQixXQUFXO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxxRUFBd0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlFQUFvQjtBQUN4QjtBQUNBO0FBQ0EsV0FBVztBQUNYLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9zcmMvc3R5bGUuY3NzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ1dlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9yb3VuZGluZ01ldGhvZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrWWVhci9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2NvbnN0YW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZGlmZmVyZW5jZUluSG91cnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5NaW51dGVzL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZGlmZmVyZW5jZUluU2Vjb25kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2Zvcm1hdC9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldFF1YXJ0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pbnRsRm9ybWF0RGlzdGFuY2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc0RhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc0Z1dHVyZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzU2FtZURheS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzU2FtZU1vbnRoL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNTYW1lV2Vlay9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzU2FtZVllYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1RoaXNNb250aC9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVGhpc1dlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1RoaXNZZWFyL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNUb2RheS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzVmFsaWQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXREaXN0YW5jZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdExvbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2xvY2FsaXplL2luZGV4LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvbWF0Y2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZUlTTy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N0YXJ0T2ZEYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdGFydE9mV2Vlay9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9zcmMvc3R5bGUuY3NzPzcxNjMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdG9kby1saXN0Ly4vc3JjL21vZHVsZXMvY2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9zcmMvbW9kdWxlcy90b2RvSGFuZGxlci5qcyIsIndlYnBhY2s6Ly90b2RvLWxpc3QvLi9zcmMvbW9kdWxlcy90b2RvU2FtcGxlLmpzIiwid2VicGFjazovL3RvZG8tbGlzdC8uL3NyYy9tb2R1bGVzL3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9tZW51LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2JhY2tncm91bmQvZ2l0aHViLW1hcmsuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18gPSBuZXcgVVJMKFwiLi9tZWRpYS9pbWFnZXMvaWNvbnMvZHVlLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL3JlbW92ZS10YXNrLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF80X19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL3Bpbi5zdmdcIiwgaW1wb3J0Lm1ldGEudXJsKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNV9fXyA9IG5ldyBVUkwoXCIuL21lZGlhL2ltYWdlcy9pY29ucy9waW4tYWN0aXZlLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF82X19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL2VkaXQuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzdfX18gPSBuZXcgVVJMKFwiLi9tZWRpYS9pbWFnZXMvaWNvbnMvZWRpdC1hY3RpdmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzhfX18gPSBuZXcgVVJMKFwiLi9tZWRpYS9pbWFnZXMvaWNvbnMvZmF2LnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF85X19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL2Zhdi1hY3RpdmUuc3ZnXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzEwX19fID0gbmV3IFVSTChcIi4vbWVkaWEvaW1hZ2VzL2ljb25zL2FkZC10YXNrLnN2Z1wiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8zX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzVfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzZfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF82X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF83X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfN19fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfOF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzhfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzlfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF85X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzEwX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIjpyb290IHtcXHJcXG4gIC0tYmdjLXBhZ2U6IGxhdmVuZGVyO1xcclxcbiAgLS1jYXJkLXNoYWRvdzogLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgwLDAsMCwuMSksXFxyXFxuICAgIGluc2V0IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMjU1LDI1NSwyNTUsLjUpO1xcclxcbiAgLS1jYXJkLXNoYWRvdy1pbnZlcnQ6IGluc2V0IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMCwwLDAsLjEpLFxcclxcbiAgICAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDI1NSwyNTUsMjU1LC41KTtcXHJcXG4gIC0tY2FyZC1zaGFkb3ctb3BlbjogaW5zZXQgMCAwIDVyZW0gaHNsKDI0MCwgNzAlLCA5MCUpO1xcclxcbiAgLS1jYXJkLWJnLWhvdmVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxyXFxuICAtLWxhYmVsLWJnLWFuaW06IGxpbmVhci1ncmFkaWVudChcXHJcXG4gICAgdG8gcmlnaHQsXFxyXFxuICAgIHRyYW5zcGFyZW50IDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksXFxyXFxuICAgIHRyYW5zcGFyZW50IDEwMCVcXHJcXG4gICkgbm8tcmVwZWF0O1xcclxcbiAgLS1pY29uLXNpemU6IDMwcHg7XFxyXFxuICAtLWljb24tbWVudS1zaXplOiA0MHB4O1xcclxcbiAgLS1pY29uLWNoZWNrLXNpemU6IDIwcHg7XFxyXFxuICAtLXR4dC1jb2wtMTogIzAwMDtcXHJcXG4gIC0tdHh0LWNvbC0yOiAjNDQ0O1xcclxcbiAgLS10eHQtY29sLTM6ICM2NjY7XFxyXFxuICAtLWZvbnQtc2l6ZS10aXRsZTogMS43NXJlbTtcXHJcXG4gIC0tY2FyZC1ib3JkZXItcmFkOiAuNzVyZW07XFxyXFxuICAtLWNhcmQtb3Blbi10cmFuc2l0aW9uOiAyNTBtcztcXHJcXG4gIC0tY2FyZC1wYWRkaW5nOiAuNXJlbTtcXHJcXG4gIC0tY2FyZC1kcmFnLXBhZGRpbmc6IGNhbGModmFyKC0tZm9udC1zaXplLXRpdGxlKSArIHZhcigtLWNhcmQtcGFkZGluZykgKiAyLjc1KTtcXHJcXG4gIC0taG92ZXItYW5pbS1kdXJhdGlvbjogMjUwbXM7XFxyXFxuICAtLW1lbnUtd2lkdGg6IDM1MHB4O1xcclxcbiAgLS1tZW51LXdpZHRoLXdpZGVzY3JlZW46IDQwMHB4O1xcclxcbiAgLS12aWV3cG9ydC1taW4td2lkdGg6IDYwMHB4O1xcclxcbiAgLS1kZWxldGlvbi1kZWxheTogMnM7IFxcclxcbiAgLS1ob3Zlci1kZWxheTogMTUwbXM7XFxyXFxuICAtLW1lbnUtYnRuLWJnLWNvbDogI2FhYTtcXHJcXG4gIC0tbWVudS1iZy1jb2w6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXHJcXG4gIC0tY2hrLWJnLWNvbDogbm9uZTtcXHJcXG4gIC0tcHJpb3JpdHktbG93OiBsaW1lO1xcclxcbiAgLS1wcmlvcml0eS1taWQ6IGdvbGRlbnJvZDtcXHJcXG4gIC0tcHJpb3JpdHktaGlnaDogb3JhbmdlcmVkO1xcclxcbn1cXHJcXG5cXHJcXG46cm9vdC5kYXJrIHtcXHJcXG4gIC0tYmdjLXBhZ2U6IGhzbCgyNDAsIDIwJSwgMzAlKTtcXHJcXG4gIC0tY2FyZC1zaGFkb3c6IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMCwwLDAsLjEpLFxcclxcbiAgICBpbnNldCAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTtcXHJcXG4gIC0tY2FyZC1zaGFkb3ctaW52ZXJ0OiBpbnNldCAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKSxcXHJcXG4gICAgLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgyNTUsMjU1LDI1NSwgLjEpO1xcclxcbiAgLS1jYXJkLXNoYWRvdy1vcGVuOiBpbnNldCAwIDAgNXJlbSBoc2woMjQwLCAyMCUsIDI1JSk7XFxyXFxuICAtLWNhcmQtYmctaG92ZXI6IHJnYmEoNzAsIDcwLCA3MCwgMC41KTtcXHJcXG4gIC0tbGFiZWwtYmctYW5pbTogbGluZWFyLWdyYWRpZW50KFxcclxcbiAgICB0byByaWdodCxcXHJcXG4gICAgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSxcXHJcXG4gICAgdHJhbnNwYXJlbnQgMTAwJVxcclxcbiAgKSBuby1yZXBlYXQ7XFxyXFxuICAtLXR4dC1jb2wtMTogI2NjYztcXHJcXG4gIC0tdHh0LWNvbC0yOiAjYWFhO1xcclxcbiAgLS10eHQtY29sLTM6ICM4ODg7XFxyXFxuICAtLW1lbnUtYnRuLWJnLWNvbDogIzU1NTtcXHJcXG4gIC0tbWVudS1iZy1jb2w6IHJnYmEoNjQsIDY0LCA2NCwgMC41KTtcXHJcXG4gIC0tY2hrLWJnLWNvbDogcmdiYSgwLCAwLCAwLCAwLjEpO1xcclxcbiAgLS1wcmlvcml0eS1sb3c6IGhzbCgxMjAsIDUwJSwgNDAlKTtcXHJcXG4gIC0tcHJpb3JpdHktbWlkOiBoc2woNDMsIDQwJSwgNDUlKTtcXHJcXG4gIC0tcHJpb3JpdHktaGlnaDogaHNsKDE2LCA1MCUsIDQwJSk7XFxyXFxufVxcclxcblxcclxcbi8qIGRlZmF1bHQgdmFsdWVzIHJlc2V0ICovXFxyXFxuYm9keSB7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgbWluLXdpZHRoOiB2YXIoLS12aWV3cG9ydC1taW4td2lkdGgpO31cXHJcXG5vbCwgdWwgeyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgfVxcclxcbmgxLCBoMiwgcCB7bWFyZ2luOiAwO31cXHJcXG5oMSB7XFxyXFxuICBjb2xvcjogdmFyKC0tdHh0LWNvbC0xKTtcXHJcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XFxyXFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggaHNsKDI0MCwgMzAlLCA1MCUpO1xcclxcbn1cXHJcXG5pbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0sIGlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSB7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbn1cXHJcXG4qIHtmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsIFRpbWVzLCBzZXJpZjt9XFxyXFxuXFxyXFxuaW5wdXQ6OnNlbGVjdGlvbiB7XFxyXFxuICBjb2xvcjogd2hpdGU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjQwLCA4MCUsIDcwJSk7XFxyXFxufVxcclxcbmlucHV0Om5vdChbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSk6Zm9jdXMge1xcclxcbiAgb3V0bGluZTogNHB4IHNvbGlkIHJnYmEoNDYsIDE2LCAxOTIsIC4yNSk7XFxyXFxuICB0cmFuc2l0aW9uOiAwbXM7XFxyXFxufVxcclxcblxcclxcbi8qIG1lbnUgKi9cXHJcXG5cXHJcXG4jbWVudS1idXR0b24ge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHotaW5kZXg6IDI7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgd2lkdGg6IHZhcigtLWljb24tbWVudS1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWVudS1idG4tYmctY29sKTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXM7XFxyXFxufVxcclxcbiNtZW51LWJ1dHRvbjpob3ZlciB7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUge1xcclxcbiAgei1pbmRleDogMjtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBwYWRkaW5nOiAuNXJlbTtcXHJcXG4gIHRvcDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1pY29uLW1lbnUtc2l6ZSkpO1xcclxcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcclxcbiAgb3ZlcmZsb3cteTogYXV0bztcXHJcXG4gIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoKTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpO1xcclxcbiAgY29sb3I6IHZhcigtLXR4dC1jb2wtMSk7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZW51LWJnLWNvbCk7XFxyXFxuICBmb250LXNpemU6IDEuNzVyZW07XFxyXFxuICBkaXNwbGF5OiBub25lO1xcclxcbn1cXHJcXG4jbWVudS5yZXZlYWwgeyBkaXNwbGF5OiBibG9jazsgfVxcclxcblxcclxcbiNtZW51IC5tZW51LWl0ZW0ge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG8gYXV0bztcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBoZWlnaHQ6IGNhbGModmFyKC0taWNvbi1tZW51LXNpemUpICogMS4yNSk7XFxyXFxufVxcclxcblxcclxcbiNtZW51IC5tZW51LWl0ZW0gcCB7XFxyXFxuICBtYXJnaW46IC41cmVtIDA7XFxyXFxuICB3aWR0aDogMjAwcHg7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAubWVudS1pdGVtIC5lZGl0LXByb2plY3Qge1xcclxcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcclxcbiAgd2lkdGg6IDIwMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uZmllbGRzZXQtbGlzdCBsaSB7XFxyXFxuICB0cmFuc2l0aW9uOiBwYWRkaW5nIDIwMG1zLCBiYWNrZ3JvdW5kLWNvbG9yIDM1MG1zO1xcclxcbn0uZmllbGRzZXQtbGlzdCBsaTpob3ZlciB7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxufVxcclxcblxcclxcbiNzY3JlZW4tY292ZXItbWVudSB7ZGlzcGxheTogbm9uZTt9XFxyXFxuI3NjcmVlbi1jb3Zlci1tZW51LnJldmVhbCB7XFxyXFxuICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB3aWR0aDogMTAwdnc7XFxyXFxuICBoZWlnaHQ6IDEwMHZoO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAucHJvamVjdC10aXRsZSB7XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgcCB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbiNtZW51IGEge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcbiAgY29sb3I6IGluaGVyaXQ7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5kYXJrLW1vZGUge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnI7XFxyXFxufVxcclxcblxcclxcbi5kYXJrLW1vZGUgaW5wdXQge1xcclxcbiAgLS10cmFuc2l0aW9uLWR1cjogMzUwbXM7XFxyXFxuICAtLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgY2FsYyh2YXIoLS10cmFuc2l0aW9uLWR1cikgKiAuNSkgZWFzZS1pbi1vdXQsXFxyXFxuICB0cmFuc2Zvcm0gdmFyKC0tdHJhbnNpdGlvbi1kdXIpIGN1YmljLWJlemllciguNjgsLTAuNTUsLjI3LDEuNTUpO1xcclxcbiAgYXBwZWFyYW5jZTogdW5zZXQ7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogY2FsYyh2YXIoLS1pY29uLXNpemUpICogMik7XFxyXFxuICBoZWlnaHQ6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IC41cmVtO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufS5kYXJrLW1vZGUgaW5wdXQ6OmJlZm9yZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYy1wYWdlKTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93LWludmVydCk7XFxyXFxuICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTtcXHJcXG59LmRhcmstbW9kZSBpbnB1dDo6YWZ0ZXIge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogXFxcIlxcXCI7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuICBhc3BlY3QtcmF0aW86IDEvMTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCg2MCwgODAlLCA3MCUpO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7XFxyXFxufS5kYXJrLW1vZGUgaW5wdXQ6Y2hlY2tlZDpiZWZvcmUge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0MCwgMjAlLCA0MCUpO1xcclxcbn0uZGFyay1tb2RlIGlucHV0OmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCgyNDAsIDMwJSwgNzUlKTtcXHJcXG59XFxyXFxuLmRhcmstbW9kZSBsYWJlbCB7IGN1cnNvcjogcG9pbnRlcjsgfVxcclxcblxcclxcbiNtZW51IC5maWVsZHNldC1vcHRpb25zIC5tZW51LWl0ZW0uYWJvdXQge1xcclxcbiAgLS1pY29uLXNpemU6IDUwcHg7XFxyXFxuICAtLWR1cmF0aW9uOiAzcztcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogNzAwJTtcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0O1xcclxcbn1cXHJcXG4jbWVudS5yZXZlYWwgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dCB7XFxyXFxuICBiYWNrZ3JvdW5kOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYW5pbWF0aW9uOiBiZy1hbmltIHZhcigtLWR1cmF0aW9uKSBjYWxjKHZhcigtLWR1cmF0aW9uKSAvIDUpIGluZmluaXRlIGxpbmVhcixcXHJcXG4gIGJnLXpvb20tb3V0IHZhcigtLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoLjA4LC44MiwuMTcsMSkgZm9yd2FyZHM7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgYmctYW5pbSB7XFxyXFxuICB0byB7IGJhY2tncm91bmQtcG9zaXRpb246IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDIpIGNhbGModmFyKC0taWNvbi1zaXplKSAqIC0xKTsgfVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGJnLXpvb20tb3V0IHtcXHJcXG4gIGZyb20geyBiYWNrZ3JvdW5kLXNpemU6IDcwMCU7IH1cXHJcXG4gIHRvIHsgYmFja2dyb3VuZC1zaXplOiB2YXIoLS1pY29uLXNpemUpOyB9XFxyXFxufVxcclxcblxcclxcbi8qIHBhZ2UgY29udGVudCAqL1xcclxcblxcclxcbmJvZHkge2JhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYy1wYWdlKTt9XFxyXFxuXFxyXFxuI2NhcmRzLWNvbnRhaW5lciB7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcclxcbiAgbWluLXdpZHRoOiB2YXIoLS12aWV3cG9ydC1taW4td2lkdGgpO1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XFxyXFxufVxcclxcblxcclxcbi5wcm9qZWN0LWl0ZW0ge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHBhZGRpbmc6IDFyZW07XFxyXFxuICBtYXJnaW46IDFyZW07XFxyXFxufVxcclxcblxcclxcbmhlYWRlciB7XFxyXFxuICBwb3NpdGlvbjogc3RpY2t5O1xcclxcbiAgdG9wOiAwO1xcclxcbiAgei1pbmRleDogMTtcXHJcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLW1lbnUtc2l6ZSk7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxufVxcclxcblxcclxcblxcclxcbi8qIGNhcmRzICovXFxyXFxuXFxyXFxuLmNhcmQge1xcclxcbiAgaXNvbGF0aW9uOiBpc29sYXRlO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgcGFkZGluZzogdmFyKC0tY2FyZC1wYWRkaW5nKTtcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG8gYXV0bztcXHJcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDYsIGF1dG8pO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcXHJcXG4gICAgXFxcIiBkcmFnICB0aXRsZSAgICBwcm9ncmVzcyBlZGl0ICAgICBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gZGVzY3IgICAgZGVzY3IgICAgZGVzY3IgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGNyZWF0ZWQgIHByaW9yaXR5IHByaW9yaXR5IFxcXCJcXHJcXG4gICAgXFxcIiAuLi4uLiBkdWUgICAgICBwcmlvcml0eSBwcmlvcml0eSBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gdGFza3MgICAgdGFza3MgICAgdGFza3MgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGFkZC10YXNrIGFkZC10YXNrIGFkZC10YXNrIFxcXCI7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG59IC5jYXJkLmFjdGl2ZSB7XFxyXFxuICBoZWlnaHQ6IGF1dG87XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdy1vcGVuKTtcXHJcXG59IC5jYXJkOm5vdCguYWN0aXZlKTpob3ZlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnLWhvdmVyKTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7IGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtYm9yZGVyLXJhZCkgdmFyKC0tY2FyZC1ib3JkZXItcmFkKSAwIDA7IH1cXHJcXG4uY2FyZDpsYXN0LW9mLXR5cGUgeyBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tY2FyZC1ib3JkZXItcmFkKSB2YXIoLS1jYXJkLWJvcmRlci1yYWQpOyB9XFxyXFxuXFxyXFxuLmNhcmQgLnRpdGxlIHtcXHJcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXRpdGxlKTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTEpO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAuNXJlbTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbn1cXHJcXG4uY2FyZCAucHJvZ3Jlc3Mge1xcclxcbiAgZ3JpZC1hcmVhOiBwcm9ncmVzcztcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbn0uY2FyZCAucHJvZ3Jlc3M6OmFmdGVyIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCIlXFxcIjtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTEpO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgZm9udC13ZWlnaHQ6IDkwMDtcXHJcXG4gIGluc2V0OiA1cHg7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcXHJcXG59XFxyXFxuLmNhcmQgLmRlc2NyaXB0aW9uIHtcXHJcXG4gIGdyaWQtYXJlYTogZGVzY3I7XFxyXFxuICBmb250LXNpemU6IDEuNXJlbTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTIpO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuLmNhcmQgLmRhdGUtY3JlYXRpb24ge1xcclxcbiAgZ3JpZC1hcmVhOiBjcmVhdGVkO1xcclxcbn1cXHJcXG4uY2FyZCAuZGF0ZS1kdWUge1xcclxcbiAgZ3JpZC1hcmVhOiBkdWU7XFxyXFxufS5jYXJkIC5kYXRlLWR1ZS5lZGl0LWRhdGUtZHVlIHtcXHJcXG4gIGJhY2tncm91bmQ6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gKyBcIikgbm8tcmVwZWF0O1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xcclxcbiAgZm9udC1zaXplOiAxcmVtO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxufVxcclxcblxcclxcbi8qYWRkaW5nIHRyYW5zcGFyZW5jeSBmb3Igb3ZlcmZsb3dlZCB0ZXh0Ki9cXHJcXG4uY2FyZCAudGl0bGU6bm90KC5lZGl0LXRpdGxlKSxcXHJcXG4uY2FyZCAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQgbGFiZWwsXFxyXFxuLnByb2plY3QtdGl0bGUsXFxyXFxuaDF7XFxyXFxuICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdHJhbnNwYXJlbnQsIHdoaXRlIDUwcHgpO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4uY2FyZCAuY2hlY2tsaXN0IHtcXHJcXG4gIGdyaWQtYXJlYTogdGFza3M7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbn1cXHJcXG4uY2FyZCAuZWRpdC1wcmlvcml0eSB7XFxyXFxuICBncmlkLWFyZWE6IHByaW9yaXR5O1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDIsIDFmcik7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxufVxcclxcbi5jYXJkIC5lZGl0LXByaW9yaXR5IGlucHV0W3R5cGU9XFxcInJhbmdlXFxcIl0ge1xcclxcbiAgd2lkdGg6IDgwJTtcXHJcXG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uY3JlYXRlLXRhc2stZGl2IHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAxLjQpO1xcclxcbn1cXHJcXG4uY3JlYXRlLXRhc2stZGl2IHAge1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3aWR0aDogMCU7XFxyXFxuICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKSBlYXNlLWluLW91dCB2YXIoLS1ob3Zlci1kZWxheSk7XFxyXFxufVxcclxcbi5jcmVhdGUtdGFzay1kaXY6aG92ZXIge1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbn1cXHJcXG4uY3JlYXRlLXRhc2stZGl2OmhvdmVyIHAge1xcclxcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIHZhcigtLWljb24tc2l6ZSkgKiAxLjMpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmNyZWF0ZS10YXNrLmNyZWF0ZS10b2RvIHtcXHJcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcclxcbn1cXHJcXG4uY2FyZC50b2RvLWFkZC1kaXY6aG92ZXIgLmNhcmQtaWNvbi5jcmVhdGUtdGFzay5jcmVhdGUtdG9kbyB7XFxyXFxuICBhbmltYXRpb246IGljb24tc2hha2UgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxufVxcclxcbi50b2RvLWFkZC1kaXYge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgcGFkZGluZzogLjVyZW0gLjI1cmVtO1xcclxcbiAgZ2FwOiAuNXJlbTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnRvZG8tYWRkLWRpdiBwIHtcXHJcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2lkdGg6IDByZW07XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbikgZWFzZS1pbi1vdXQgdmFyKC0taG92ZXItZGVsYXkpO1xcclxcbn1cXHJcXG5cXHJcXG4udG9kby1hZGQtZGl2OmhvdmVyIHAge1xcclxcbiAgd2lkdGg6IDE1cmVtO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIHByaW9yaXR5IGluZGljYXRvciAqL1xcclxcblxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImxvd1xcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1wcmlvcml0eS1sb3cpLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufSAuY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJsb3dcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx2YXIoLS1wcmlvcml0eS1sb3cpLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufVxcclxcbi5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcIm1pZGRsZVxcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdmFyKC0tcHJpb3JpdHktbWlkKSwgcmdiYSgwLCAxMjgsIDAsIDApIDYwcHgpO1xcclxcbn0gLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwibWlkZGxlXFxcIl0uYWN0aXZlIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLXByaW9yaXR5LW1pZCksIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59XFxyXFxuLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwiaGlnaFxcXCJdIHtcXHJcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdmFyKC0tcHJpb3JpdHktaGlnaCksIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59IC5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImhpZ2hcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tcHJpb3JpdHktaGlnaCksIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogY2FyZCBkZXRhaWxzIHRyYW5zaXRpb24gKi9cXHJcXG5cXHJcXG4uY2FyZCAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQgLmRhdGUtY3JlYXRpb24sXFxyXFxuLmNhcmQgLmRhdGUtZHVlLFxcclxcbi5jYXJkIHVsIGxpIHtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0cmFuc2l0aW9uOiB2YXIoLS1jYXJkLW9wZW4tdHJhbnNpdGlvbik7XFxyXFxuICBoZWlnaHQ6IDByZW07XFxyXFxufVxcclxcbi5jYXJkLmFjdGl2ZSAuZGVzY3JpcHRpb24sXFxyXFxuLmNhcmQuYWN0aXZlIC5kYXRlLWNyZWF0aW9uLFxcclxcbi5jYXJkLmFjdGl2ZSAuZGF0ZS1kdWUsXFxyXFxuLmNhcmQuYWN0aXZlIHVsIGxpIHtcXHJcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcclxcbiAgaGVpZ2h0OiAxLjc1cmVtO1xcclxcbn1cXHJcXG4vKmluZGl2aWR1YWwgc2V0dGluZ3MqL1xcclxcbi5jYXJkIC5kZXNjcmlwdGlvbiB7IG1hcmdpbi10b3A6IDByZW07IG1hcmdpbi1ib3R0b206IDByZW07fVxcclxcbi5jYXJkLmFjdGl2ZSAuZGVzY3JpcHRpb24geyBtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAuNXJlbTt9XFxyXFxuLmNhcmQuYWN0aXZlIHVsIGxpIHsgaGVpZ2h0OiAyLjVyZW07fVxcclxcbi5jYXJkIC5kYXRlLWR1ZSAge21hcmdpbi1ib3R0b206IDByZW07IH1cXHJcXG4uY2FyZC5hY3RpdmUgLmRhdGUtZHVlICB7bWFyZ2luLWJvdHRvbTogLjVyZW07IH1cXHJcXG5cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAyNW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDIpIHsgdHJhbnNpdGlvbi1kZWxheTogNTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgzKSB7IHRyYW5zaXRpb24tZGVsYXk6IDc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg1KSB7IHRyYW5zaXRpb24tZGVsYXk6IDEyNW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDYpIHsgdHJhbnNpdGlvbi1kZWxheTogMTUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNykgeyB0cmFuc2l0aW9uLWRlbGF5OiAxNzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg4KSB7IHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDkpIHsgdHJhbnNpdGlvbi1kZWxheTogMjI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTApIHsgdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTEpIHsgdHJhbnNpdGlvbi1kZWxheTogMjc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTIpIHsgdHJhbnNpdGlvbi1kZWxheTogMzAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTMpIHsgdHJhbnNpdGlvbi1kZWxheTogMzI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTQpIHsgdHJhbnNpdGlvbi1kZWxheTogMzUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTUpIHsgdHJhbnNpdGlvbi1kZWxheTogMzc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTYpIHsgdHJhbnNpdGlvbi1kZWxheTogNDAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTcpIHsgdHJhbnNpdGlvbi1kZWxheTogNDI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTgpIHsgdHJhbnNpdGlvbi1kZWxheTogNDUwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMTkpIHsgdHJhbnNpdGlvbi1kZWxheTogNDc1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMW4rMjApIHsgdHJhbnNpdGlvbi1kZWxheTogNTAwbXM7IH1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIGljb25zICovXFxyXFxuXFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcbi5jYXJkIGxpIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06OmJlZm9yZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDMpO1xcclxcbiAgYm94LXNoYWRvdzogLjFyZW0gLjFyZW0gLjFyZW0gd2hpdGUsXFxyXFxuICAgIGluc2V0IC4xcmVtIC4xcmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IC4yNXJlbTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNoay1iZy1jb2wpO1xcclxcbn1cXHJcXG4uY2FyZCBsaSBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOjphZnRlciB7XFxyXFxuICAtLWNoZWNrLWFuaW0tZHVyYXRpb246IDIwMG1zO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogXFxcIlxcXCI7XFxyXFxuICBpbnNldDogLTdweDtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXHJcXG4gIGNsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMTUlIDYxJSwgMTYlIDYyJSwgMTglIDY1JSwgNCUgNzglLCAxJSA3NSUpO1xcclxcbiAgYW5pbWF0aW9uOiBjaGVja21hcmstYmFja3dhcmRzIHZhcigtLWNoZWNrLWFuaW0tZHVyYXRpb24pIGVhc2Utb3V0IGZvcndhcmRzO1xcclxcbn1cXHJcXG4uY2FyZCBsaSBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIGFuaW1hdGlvbjogY2hlY2ttYXJrLWZvcndhcmRzIHZhcigtLWNoZWNrLWFuaW0tZHVyYXRpb24pIGVhc2UtaW4gZm9yd2FyZHM7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgY2hlY2ttYXJrLWZvcndhcmRzIHtcXHJcXG4gIDAlIHtvcGFjaXR5OiAwO31cXHJcXG4gIDElIHtvcGFjaXR5OiAxOyBjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDE1JSA2MSUsIDE2JSA2MiUsIDE4JSA2NSUsIDQlIDc4JSk7fVxcclxcbiAgMzAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDIxJSA2NiUsIDI2JSA3MCUsIDMxJSA3NiUsIDklIDg2JSk7fVxcclxcbiAgNTAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDM1JSA3NSUsIDQzJSA4MSUsIDQ5JSA4OCUsIDQwJSAxMDAlKTt9XFxyXFxuICAxMDAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDM1JSA3NSUsIDg1JSAwLCAxMDAlIDEwJSwgNDAlIDEwMCUpO31cXHJcXG59IEBrZXlmcmFtZXMgY2hlY2ttYXJrLWJhY2t3YXJkcyB7XFxyXFxuICAwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAzNSUgNzUlLCA4NSUgMCwgMTAwJSAxMCUsIDQwJSAxMDAlKTt9XFxyXFxuICA1MCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMzUlIDc1JSwgNDMlIDgxJSwgNDklIDg4JSwgNDAlIDEwMCUpO31cXHJcXG4gIDcwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAyMSUgNjYlLCAyNiUgNzAlLCAzMSUgNzYlLCA5JSA4NiUpO31cXHJcXG4gIDk5JSB7b3BhY2l0eTogMTsgY2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAxNSUgNjElLCAxNiUgNjIlLCAxOCUgNjUlLCA0JSA3OCUpO31cXHJcXG4gIDEwMCUge29wYWNpdHk6IDA7fVxcclxcbn1cXHJcXG5cXHJcXG4uY2FyZCBsYWJlbCxcXHJcXG4uY2FyZCAuZWRpdC1sYWJlbCB7XFxyXFxuICBmb250LXNpemU6IDEuMjVyZW07XFxyXFxuICBjb2xvcjogdmFyKC0tdHh0LWNvbC0yKTtcXHJcXG4gIGJhY2tncm91bmQ6IHZhcigtLWxhYmVsLWJnLWFuaW0pO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiA1MDBtcztcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb24teDogLTEwMHZ3O1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxufVxcclxcbi5jYXJkIGxpIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06Y2hlY2tlZCArIGxhYmVsIHtcXHJcXG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xcclxcbiAgY29sb3I6IHZhcigtLXR4dC1jb2wtMyk7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMHZ3O1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmNhcmQtaWNvbi5yZW1vdmUtdGFzayB7XFxyXFxuICBiYWNrZ3JvdW5kOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fICsgXCIpIGNlbnRlciBuby1yZXBlYXQ7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbiB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxyXFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcclxcbn1cXHJcXG4uY2FyZC1pY29uOjphZnRlciB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmljb24tZHJhZyB7XFxyXFxuICBjdXJzb3I6IG5zLXJlc2l6ZTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLXBpbjo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKTtcXHJcXG59IC5jYXJkLWljb24uaWNvbi1waW46Y2hlY2tlZDo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNV9fXyArIFwiKTtcXHJcXG59XFxyXFxuLmNhcmQtaWNvbi5pY29uLWVkaXQ6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzZfX18gKyBcIik7XFxyXFxufSAuY2FyZC1pY29uLmljb24tZWRpdDpjaGVja2VkOjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF83X19fICsgXCIpO1xcclxcbn1cXHJcXG4uY2FyZC1pY29uLmljb24tZmF2OjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF84X19fICsgXCIpO1xcclxcbn0uY2FyZC1pY29uLmljb24tZmF2OmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzlfX18gKyBcIik7XFxyXFxufVxcclxcblxcclxcbi5jYXJkIHVsIGxpIHtcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87XFxyXFxuICBnYXA6IC41cmVtO1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQgLmFkZC10YXNrIHtcXHJcXG4gIGdyaWQtYXJlYTogYWRkLXRhc2s7XFxyXFxuICAvKiBkaXNwbGF5OiBncmlkOyAqL1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1pY29uLXNpemUpIDFmcjtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFxcXCIuIHBsdXNcXFwiO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG59XFxyXFxuLmNhcmQgLmNyZWF0ZS10YXNrLFxcclxcbi5jcmVhdGUtdGFzayB7XFxyXFxuICBncmlkLWFyZWE6IHBsdXM7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xMF9fXyArIFwiKTtcXHJcXG4gIHdpZHRoOiBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAxLjEpIDtcXHJcXG4gIGhlaWdodDogY2FsYyh2YXIoLS1pY29uLXNpemUpICogMS4xKSA7XFxyXFxuICBtYXJnaW4tbGVmdDogN3B4O1xcclxcbn1cXHJcXG4uY2FyZCAuY3JlYXRlLXRhc2s6aG92ZXIge1xcclxcbiAgYW5pbWF0aW9uOiBpY29uLXNoYWtlIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGljb24tc3Bpbi05MCB7IHRvIHtyb3RhdGU6IDkwZGVnO319XFxyXFxuXFxyXFxuLmVkaXQtYnV0dG9ucyB7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgMWZyKTtcXHJcXG59XFxyXFxuLmRlbGV0ZS1pY29uIHtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgbWFyZ2luLXRvcDogYXV0bztcXHJcXG4gIG1hcmdpbi1ib3R0b206IGF1dG87XFxyXFxuICBtYXJnaW4tbGVmdDogNXB4O1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG59Lmljb24tdHJhc2gsXFxyXFxuLmljb24tdHJhc2gtbGlkIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIHRyYW5zaXRpb246IHJvdGF0ZSAzMDBtcztcXHJcXG59XFxyXFxuLmljb24tdHJhc2ggeyB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDAlO31cXHJcXG4uaWNvbi10cmFzaC1saWQgeyB0cmFuc2Zvcm0tb3JpZ2luOiAyNTAlIDAlO31cXHJcXG4uZGVsZXRlLWljb246aG92ZXIgLmljb24tdHJhc2ggeyByb3RhdGU6IC03ZGVnO31cXHJcXG4uZGVsZXRlLWljb246aG92ZXIgLmljb24tdHJhc2gtbGlkIHsgcm90YXRlOiA3ZGVnOyB9XFxyXFxuLmRlbGV0ZS1pY29uOmFjdGl2ZSAuaWNvbi10cmFzaCB7IHRyYW5zaXRpb246IHJvdGF0ZSAyczsgcm90YXRlOiAtMThkZWc7IH1cXHJcXG4uZGVsZXRlLWljb246YWN0aXZlIC5pY29uLXRyYXNoLWxpZCB7IHRyYW5zaXRpb246IHJvdGF0ZSAyczsgcm90YXRlOiAxMGRlZzsgfVxcclxcblxcclxcbi5kZWxldGUtaWNvbi5kZWxldGluZyB7XFxyXFxuICAvKml0ZW0gaXMgZGVsZXRlZCBhZnRlciBhbmltYXRpb24gZW5kcyovXFxyXFxuICBhbmltYXRpb246IGRlbGV0aW5nIHZhcigtLWRlbGV0aW9uLWRlbGF5KSBsaW5lYXI7XFxyXFxufVxcclxcbi5kZWxldGUtaWNvbi5kZWxldGluZzo6YWZ0ZXIsXFxyXFxuLmRlbGV0ZS1pY29uLmRlbGV0aW5nOjpiZWZvcmUge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogXFxcIuKaoO+4j0RlbGV0aW5nLi4u4pqg77iPXFxcIjtcXHJcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcclxcbiAgY29sb3I6IHZhcigtLWJnYy1wYWdlKTtcXHJcXG4gIHBhZGRpbmc6IC4yNXJlbTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC0xMCUpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDtcXHJcXG4gIGFuaW1hdGlvbjogZGVsZXRpbmctYmcgdmFyKC0tZGVsZXRpb24tZGVsYXkpIGVhc2Utb3V0O1xcclxcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMCAwLCAwIDEwMCUsIDAgMTAwJSk7XFxyXFxufVxcclxcbi5kZWxldGUtaWNvbi5kZWxldGluZzo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xcclxcbiAgYW5pbWF0aW9uOiBkZWxldGluZy10ZXh0IHZhcigtLWRlbGV0aW9uLWRlbGF5KSBlYXNlLW91dDtcXHJcXG5cXHJcXG59XFxyXFxuXFxyXFxuQGtleWZyYW1lcyBkZWxldGluZyB7XFxyXFxuICB0byB7XFxyXFxuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIC41cmVtIHJlZCk7XFxyXFxuICB9XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgZGVsZXRpbmctdGV4dCB7XFxyXFxuICBmcm9tIHtjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAwIDAsIDAgMTAwJSwgMCAxMDAlKTt9XFxyXFxuICB0byB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCAxMDAlIDEwMCUsIDAgMTAwJSk7fVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGRlbGV0aW5nLWJnIHsgLyogdGhpcyBkaXNhcHBlYXJzIHRoZSBiYXIgaWYgZmF2IGNhbmNlbHMgZGVsZXRpb24qL1xcclxcbiAgMCUsIDEwMCUge2NsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSAxMDAlLCAwIDEwMCUpO31cXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLWVkaXQ6aG92ZXIsXFxyXFxuLmNhcmQtaWNvbi5pY29uLXBpbjpob3ZlciB7XFxyXFxuICBhbmltYXRpb246IGljb24tc2hha2UgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxuICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAxMDAlO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGljb24tc2hha2Uge1xcclxcbiAgMCUsIDEwMCUgeyByb3RhdGU6IDBkZWc7fVxcclxcbiAgMTAlIHsgcm90YXRlOiA1ZGVnO31cXHJcXG4gIDIwJSB7IHJvdGF0ZTogLTVkZWc7fVxcclxcbiAgMzAlIHsgcm90YXRlOiA0ZGVnO31cXHJcXG4gIDQwJSB7IHJvdGF0ZTogLTRkZWc7fVxcclxcbiAgNTAlIHsgcm90YXRlOiAzZGVnO31cXHJcXG4gIDYwJSB7IHJvdGF0ZTogLTNkZWc7fVxcclxcbiAgNzAlIHsgcm90YXRlOiAyZGVnO31cXHJcXG4gIDgwJSB7IHJvdGF0ZTogLTJkZWc7fVxcclxcbiAgOTAlIHsgcm90YXRlOiAxZGVnO31cXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLWZhdjpob3ZlcntcXHJcXG4gIGFuaW1hdGlvbjogaWNvbi1zcGluLTcyIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pO1xcclxcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDU1JTtcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBpY29uLXNwaW4tNzIgeyB0byB7cm90YXRlOiA3MmRlZzt9IH1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmljb24tZmF2LnNoYWtlIHtcXHJcXG4gIGFuaW1hdGlvbjogaWNvbi1mYXYtc2hha2UgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgaWNvbi1mYXYtc2hha2Uge1xcclxcbiAgMCUsIDEwMCUge1xcclxcbiAgICByb3RhdGU6IDBkZWc7XFxyXFxuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDVweCBnb2xkZW5yb2QpXFxyXFxuICAgICAgYnJpZ2h0bmVzcygxNTAlKTtcXHJcXG4gIH1cXHJcXG4gIDEwJSB7IHJvdGF0ZTogMTBkZWc7fVxcclxcbiAgMjAlIHsgcm90YXRlOiAtMTBkZWc7fVxcclxcbiAgMzAlIHsgcm90YXRlOiA4ZGVnO31cXHJcXG4gIDQwJSB7IHJvdGF0ZTogLThkZWc7fVxcclxcbiAgNTAlIHsgcm90YXRlOiA2ZGVnO31cXHJcXG4gIDYwJSB7IHJvdGF0ZTogLTZkZWc7fVxcclxcbiAgNzAlIHsgcm90YXRlOiA0ZGVnO31cXHJcXG4gIDgwJSB7IHJvdGF0ZTogLTRkZWc7fVxcclxcbiAgOTAlIHsgcm90YXRlOiAyZGVnO31cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogZWRpdCBtb2RlIGNvbnRlbnQgc3RhdHVzICovXFxyXFxuXFxyXFxuaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLCBpbnB1dFt0eXBlPVxcXCJkYXRlXFxcIl0ge1xcclxcbiAgYm9yZGVyLXJhZGl1czogLjI1cmVtO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxuICBib3JkZXI6IG5vbmU7XFxyXFxuICBib3gtc2hhZG93OiBpbnNldCAuMTVyZW0gLjE1cmVtIC4xNXJlbSByZ2JhKDAsMCwwLC4yNSk7XFxyXFxufSBpbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0uZWRpdC1sYWJlbCB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIGlucHV0W3R5cGU9XFxcInRleHRcXFwiXSwgaW5wdXRbdHlwZT1cXFwiZGF0ZVxcXCJdIHtcXHJcXG4gIGN1cnNvcjogdGV4dDtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC50aXRsZSB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZCAuZWRpdC10aXRsZSB7IGRpc3BsYXk6IG5vbmU7IGZvbnQtd2VpZ2h0OiA2MDA7fVxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC10aXRsZSB7IGRpc3BsYXk6IGJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5kZXNjcmlwdGlvbiB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZCAuZWRpdC1kZXNjcmlwdGlvbiB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmVkaXQtZGVzY3JpcHRpb24geyBkaXNwbGF5OiBibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZGF0ZS1kdWUgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQgLmVkaXQtZGF0ZS1kdWUgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LWRhdGUtZHVlIHsgZGlzcGxheTogYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmVkaXQtcHJpb3JpdHkge2Rpc3BsYXk6IGdyaWQ7fVxcclxcbi5jYXJkIC5lZGl0LXByaW9yaXR5IHtkaXNwbGF5OiBub25lO31cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgbGkgbGFiZWwgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQgLmVkaXQtbGFiZWwgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LWxhYmVsIHsgZGlzcGxheTogYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXHJcXG4uY2FyZCBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmNoZWNrZWQgfiAuZWRpdC1sYWJlbCB7XFxyXFxuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCByZ2JhKDAsMCwwLC4yNSk7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAuYWRkLXRhc2sge2Rpc3BsYXk6IGdyaWQ7fVxcclxcbi5jYXJkIC5hZGQtdGFzayB7ZGlzcGxheTogbm9uZTt9XFxyXFxuXFxyXFxuI21lbnUgLm1lbnUtdGFza3MgLmVkaXQtcHJvamVjdCB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4jbWVudSAubWVudS10YXNrcy5lZGl0LW1vZGUgLmVkaXQtcHJvamVjdCB7IGRpc3BsYXk6IGJsb2NrOyB9XFxyXFxuI21lbnUgLm1lbnUtdGFza3MgLnByb2plY3QtdGl0bGUgeyBkaXNwbGF5OiBibG9jazsgfVxcclxcbiNtZW51IC5tZW51LXRhc2tzLmVkaXQtbW9kZSAucHJvamVjdC10aXRsZSB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBkcmFnZ2VkIGNhcmQgKi9cXHJcXG4uY2FyZC5kcmFnZ2luZy1jYXJkIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcclxcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1jYXJkLWJvcmRlci1yYWQpO1xcclxcbiAgdHJhbnNpdGlvbjogbm9uZTtcXHJcXG59XFxyXFxuLmNhcmQuZHJhZ2dpbmctY2FyZCAuZWRpdC1idXR0b25zIHtcXHJcXG4gIGZpbHRlcjogZ3JheXNjYWxlKDEwMCUpO1xcclxcbiAgLyogZGlzcGxheTogbm9uZTsgKi9cXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuXFxyXFxuLyogc2VhcmNoIHJlc3VsdHMgKi9cXHJcXG5cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IHtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtYXJlYXM6XFxyXFxuICAgIFxcXCIgdGl0bGUgICBwcm9ncmVzcyBcXFwiXFxyXFxuICAgIFxcXCIgZGVzY3IgICBkZXNjciAgICBcXFwiXFxyXFxuICAgIFxcXCIgY3JlYXRlZCBjcmVhdGVkICBcXFwiXFxyXFxuICAgIFxcXCIgZHVlICAgICBkdWUgICAgICBcXFwiO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0bztcXHJcXG4gIHBhZGRpbmctbGVmdDogMXJlbTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxyXFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNTBtcyBlYXNlLWluLW91dDtcXHJcXG59XFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdDpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IGhzbCgyNDAsIDY3JSwgOTglKTsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQ6YWN0aXZlIHsgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3ctaW52ZXJ0KTsgfVxcclxcblxcclxcblxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLmRlc2NyaXB0aW9uIHsgbWFyZ2luOiAuNXJlbSAwIDAgMDsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLmRhdGUtY3JlYXRpb24geyBtYXJnaW4tdG9wOiAuNXJlbTsgfVxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQgLmRhdGUtZHVlIHsgbWFyZ2luOiAwOyB9XFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCAuZGF0ZS1kdWU6ZW1wdHkgeyBkaXNwbGF5OiBub25lOyB9XFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCAudGl0bGUgeyBwYWRkaW5nLWxlZnQ6IDA7IH1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiByZXNwb25zaXZlbmVzcyAqL1xcclxcblxcclxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMDBweCkge1xcclxcbiAgYm9keXtcXHJcXG4gICAgZGlzcGxheTogZ3JpZDtcXHJcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1tZW51LXdpZHRoKSAxZnI7XFxyXFxuICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFxcXCJzaWRlYmFyIGNhcmRzXFxcIjtcXHJcXG4gIH1cXHJcXG4gICNtZW51LWJ1dHRvbixcXHJcXG4gICNzY3JlZW4tY292ZXItbWVudSB7XFxyXFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG4gICNtZW51IHtcXHJcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgZ3JpZC1hcmVhOiBzaWRlYmFyO1xcclxcbiAgICB0b3A6IDA7XFxyXFxuICAgIGhlaWdodDogMTAwdmg7XFxyXFxuICAgIG1heC1oZWlnaHQ6IG5vbmU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAjY2FyZHMtY29udGFpbmVyIHtcXHJcXG4gICAgZ3JpZC1hcmVhOiBjYXJkcztcXHJcXG4gICAgd2lkdGg6IDEwMCU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAjbWVudS5yZXZlYWwgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dCB7XFxyXFxuICAgIGFuaW1hdGlvbjogbm9uZTtcXHJcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXHJcXG4gIH1cXHJcXG4gICNtZW51IC5maWVsZHNldC1vcHRpb25zIC5tZW51LWl0ZW0uYWJvdXQ6aG92ZXIge1xcclxcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcclxcbiAgICBiYWNrZ3JvdW5kLXNpemU6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICAgIGFuaW1hdGlvbjogYmctYW5pbSB2YXIoLS1kdXJhdGlvbikgY2FsYyh2YXIoLS1kdXJhdGlvbikgLyA1KSBpbmZpbml0ZSBsaW5lYXIsXFxyXFxuICBiZy16b29tLW91dCB2YXIoLS1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKC4wOCwuODIsLjE3LDEpIGZvcndhcmRzO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxNTAwcHgpIHtcXHJcXG4gIGJvZHl7XFxyXFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tbWVudS13aWR0aC13aWRlc2NyZWVuKSAxZnI7XFxyXFxuICB9XFxyXFxuICAjbWVudSB7XFxyXFxuICAgIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoLXdpZGVzY3JlZW4pO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBmb3IgZ2VuZXJhbCB1c2UgKi9cXHJcXG5cXHJcXG4uaGlkZGVuIHtcXHJcXG4gIGRpc3BsYXk6IG5vbmU7XFxyXFxufVxcclxcblxcclxcbi5vcGFjaXR5LXplcm8ge1xcclxcbiAgb3BhY2l0eTogMDtcXHJcXG59XFxyXFxuXFxyXFxuLm1hcmdpbi10b3Age1xcclxcbiAgbWFyZ2luLXRvcDogdmFyKC0tY2FyZC1kcmFnLXBhZGRpbmcpO1xcclxcbn1cXHJcXG4ubWFyZ2luLWJvdHRvbSB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1jYXJkLWRyYWctcGFkZGluZyk7XFxyXFxufVxcclxcblxcclxcblxcclxcbi8qZm9yIHRlc3RpbmcqL1xcclxcbi8qICoge1xcclxcbiAgb3V0bGluZTogMXB4IHNvbGlkIGdyYXk7XFxyXFxufSAqL1wiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxvQkFBb0I7RUFDcEI7bURBQ2lEO0VBQ2pEOzZDQUMyQztFQUMzQyxxREFBcUQ7RUFDckQseUNBQXlDO0VBQ3pDOzs7O2FBSVc7RUFDWCxpQkFBaUI7RUFDakIsc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUN2QixpQkFBaUI7RUFDakIsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQiwwQkFBMEI7RUFDMUIseUJBQXlCO0VBQ3pCLDZCQUE2QjtFQUM3QixxQkFBcUI7RUFDckIsOEVBQThFO0VBQzlFLDRCQUE0QjtFQUM1QixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLDJCQUEyQjtFQUMzQixvQkFBb0I7RUFDcEIsb0JBQW9CO0VBQ3BCLHVCQUF1QjtFQUN2Qix1Q0FBdUM7RUFDdkMsa0JBQWtCO0VBQ2xCLG9CQUFvQjtFQUNwQix5QkFBeUI7RUFDekIsMEJBQTBCO0FBQzVCOztBQUVBO0VBQ0UsOEJBQThCO0VBQzlCO3NEQUNvRDtFQUNwRDs4Q0FDNEM7RUFDNUMscURBQXFEO0VBQ3JELHNDQUFzQztFQUN0Qzs7OzthQUlXO0VBQ1gsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsdUJBQXVCO0VBQ3ZCLG9DQUFvQztFQUNwQyxnQ0FBZ0M7RUFDaEMsa0NBQWtDO0VBQ2xDLGlDQUFpQztFQUNqQyxrQ0FBa0M7QUFDcEM7O0FBRUEseUJBQXlCO0FBQ3pCLE9BQU8sVUFBVSxFQUFFLFNBQVMsRUFBRSxvQ0FBb0MsQ0FBQztBQUNuRSxTQUFTLFVBQVUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7QUFDdkQsV0FBVyxTQUFTLENBQUM7QUFDckI7RUFDRSx1QkFB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QzVDLG9DQUFvQztFQUN0QztFQUNBOztJQUVFLHdCQUF3QjtFQUMxQjtFQUNBO0lBQ0Usa0JBQWtCO0lBQ2xCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsTUFBTTtJQUNOLGFBQWE7SUFDYixnQkFBZ0I7RUFDbEI7O0VBRUE7SUFDRSxnQkFBZ0I7SUFDaEIsV0FBVztFQUNiOztFQUVBO0lBQ0UsZUFBZTtJQUNmLGdCQUFnQjtFQUNsQjtFQUNBO0lBQ0UsbURBQTBEO0lBQzFELGlDQUFpQztJQUNqQztrRUFDOEQ7RUFDaEU7QUFDRjs7QUFFQTtFQUNFO0lBQ0UsdURBQXVEO0VBQ3pEO0VBQ0E7SUFDRSxtQ0FBbUM7RUFDckM7QUFDRjs7OztBQUlBLG9CQUFvQjs7QUFFcEI7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxVQUFVO0FBQ1o7O0FBRUE7RUFDRSxvQ0FBb0M7QUFDdEM7QUFDQTtFQUNFLHVDQUF1QztBQUN6Qzs7O0FBR0EsY0FBYztBQUNkOztHQUVHXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjpyb290IHtcXHJcXG4gIC0tYmdjLXBhZ2U6IGxhdmVuZGVyO1xcclxcbiAgLS1jYXJkLXNoYWRvdzogLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgwLDAsMCwuMSksXFxyXFxuICAgIGluc2V0IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMjU1LDI1NSwyNTUsLjUpO1xcclxcbiAgLS1jYXJkLXNoYWRvdy1pbnZlcnQ6IGluc2V0IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMCwwLDAsLjEpLFxcclxcbiAgICAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDI1NSwyNTUsMjU1LC41KTtcXHJcXG4gIC0tY2FyZC1zaGFkb3ctb3BlbjogaW5zZXQgMCAwIDVyZW0gaHNsKDI0MCwgNzAlLCA5MCUpO1xcclxcbiAgLS1jYXJkLWJnLWhvdmVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxyXFxuICAtLWxhYmVsLWJnLWFuaW06IGxpbmVhci1ncmFkaWVudChcXHJcXG4gICAgdG8gcmlnaHQsXFxyXFxuICAgIHRyYW5zcGFyZW50IDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksXFxyXFxuICAgIHRyYW5zcGFyZW50IDEwMCVcXHJcXG4gICkgbm8tcmVwZWF0O1xcclxcbiAgLS1pY29uLXNpemU6IDMwcHg7XFxyXFxuICAtLWljb24tbWVudS1zaXplOiA0MHB4O1xcclxcbiAgLS1pY29uLWNoZWNrLXNpemU6IDIwcHg7XFxyXFxuICAtLXR4dC1jb2wtMTogIzAwMDtcXHJcXG4gIC0tdHh0LWNvbC0yOiAjNDQ0O1xcclxcbiAgLS10eHQtY29sLTM6ICM2NjY7XFxyXFxuICAtLWZvbnQtc2l6ZS10aXRsZTogMS43NXJlbTtcXHJcXG4gIC0tY2FyZC1ib3JkZXItcmFkOiAuNzVyZW07XFxyXFxuICAtLWNhcmQtb3Blbi10cmFuc2l0aW9uOiAyNTBtcztcXHJcXG4gIC0tY2FyZC1wYWRkaW5nOiAuNXJlbTtcXHJcXG4gIC0tY2FyZC1kcmFnLXBhZGRpbmc6IGNhbGModmFyKC0tZm9udC1zaXplLXRpdGxlKSArIHZhcigtLWNhcmQtcGFkZGluZykgKiAyLjc1KTtcXHJcXG4gIC0taG92ZXItYW5pbS1kdXJhdGlvbjogMjUwbXM7XFxyXFxuICAtLW1lbnUtd2lkdGg6IDM1MHB4O1xcclxcbiAgLS1tZW51LXdpZHRoLXdpZGVzY3JlZW46IDQwMHB4O1xcclxcbiAgLS12aWV3cG9ydC1taW4td2lkdGg6IDYwMHB4O1xcclxcbiAgLS1kZWxldGlvbi1kZWxheTogMnM7IFxcclxcbiAgLS1ob3Zlci1kZWxheTogMTUwbXM7XFxyXFxuICAtLW1lbnUtYnRuLWJnLWNvbDogI2FhYTtcXHJcXG4gIC0tbWVudS1iZy1jb2w6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXHJcXG4gIC0tY2hrLWJnLWNvbDogbm9uZTtcXHJcXG4gIC0tcHJpb3JpdHktbG93OiBsaW1lO1xcclxcbiAgLS1wcmlvcml0eS1taWQ6IGdvbGRlbnJvZDtcXHJcXG4gIC0tcHJpb3JpdHktaGlnaDogb3JhbmdlcmVkO1xcclxcbn1cXHJcXG5cXHJcXG46cm9vdC5kYXJrIHtcXHJcXG4gIC0tYmdjLXBhZ2U6IGhzbCgyNDAsIDIwJSwgMzAlKTtcXHJcXG4gIC0tY2FyZC1zaGFkb3c6IC4yNXJlbSAuMjVyZW0gLjI1cmVtIHJnYmEoMCwwLDAsLjEpLFxcclxcbiAgICBpbnNldCAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTtcXHJcXG4gIC0tY2FyZC1zaGFkb3ctaW52ZXJ0OiBpbnNldCAuMjVyZW0gLjI1cmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4xKSxcXHJcXG4gICAgLjI1cmVtIC4yNXJlbSAuMjVyZW0gcmdiYSgyNTUsMjU1LDI1NSwgLjEpO1xcclxcbiAgLS1jYXJkLXNoYWRvdy1vcGVuOiBpbnNldCAwIDAgNXJlbSBoc2woMjQwLCAyMCUsIDI1JSk7XFxyXFxuICAtLWNhcmQtYmctaG92ZXI6IHJnYmEoNzAsIDcwLCA3MCwgMC41KTtcXHJcXG4gIC0tbGFiZWwtYmctYW5pbTogbGluZWFyLWdyYWRpZW50KFxcclxcbiAgICB0byByaWdodCxcXHJcXG4gICAgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSxcXHJcXG4gICAgdHJhbnNwYXJlbnQgMTAwJVxcclxcbiAgKSBuby1yZXBlYXQ7XFxyXFxuICAtLXR4dC1jb2wtMTogI2NjYztcXHJcXG4gIC0tdHh0LWNvbC0yOiAjYWFhO1xcclxcbiAgLS10eHQtY29sLTM6ICM4ODg7XFxyXFxuICAtLW1lbnUtYnRuLWJnLWNvbDogIzU1NTtcXHJcXG4gIC0tbWVudS1iZy1jb2w6IHJnYmEoNjQsIDY0LCA2NCwgMC41KTtcXHJcXG4gIC0tY2hrLWJnLWNvbDogcmdiYSgwLCAwLCAwLCAwLjEpO1xcclxcbiAgLS1wcmlvcml0eS1sb3c6IGhzbCgxMjAsIDUwJSwgNDAlKTtcXHJcXG4gIC0tcHJpb3JpdHktbWlkOiBoc2woNDMsIDQwJSwgNDUlKTtcXHJcXG4gIC0tcHJpb3JpdHktaGlnaDogaHNsKDE2LCA1MCUsIDQwJSk7XFxyXFxufVxcclxcblxcclxcbi8qIGRlZmF1bHQgdmFsdWVzIHJlc2V0ICovXFxyXFxuYm9keSB7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgbWluLXdpZHRoOiB2YXIoLS12aWV3cG9ydC1taW4td2lkdGgpO31cXHJcXG5vbCwgdWwgeyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgfVxcclxcbmgxLCBoMiwgcCB7bWFyZ2luOiAwO31cXHJcXG5oMSB7XFxyXFxuICBjb2xvcjogdmFyKC0tdHh0LWNvbC0xKTtcXHJcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XFxyXFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggaHNsKDI0MCwgMzAlLCA1MCUpO1xcclxcbn1cXHJcXG5pbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0sIGlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSB7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbn1cXHJcXG4qIHtmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsIFRpbWVzLCBzZXJpZjt9XFxyXFxuXFxyXFxuaW5wdXQ6OnNlbGVjdGlvbiB7XFxyXFxuICBjb2xvcjogd2hpdGU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjQwLCA4MCUsIDcwJSk7XFxyXFxufVxcclxcbmlucHV0Om5vdChbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSk6Zm9jdXMge1xcclxcbiAgb3V0bGluZTogNHB4IHNvbGlkIHJnYmEoNDYsIDE2LCAxOTIsIC4yNSk7XFxyXFxuICB0cmFuc2l0aW9uOiAwbXM7XFxyXFxufVxcclxcblxcclxcbi8qIG1lbnUgKi9cXHJcXG5cXHJcXG4jbWVudS1idXR0b24ge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHotaW5kZXg6IDI7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvbWVudS5zdmcpO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgd2lkdGg6IHZhcigtLWljb24tbWVudS1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWVudS1idG4tYmctY29sKTtcXHJcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXM7XFxyXFxufVxcclxcbiNtZW51LWJ1dHRvbjpob3ZlciB7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUge1xcclxcbiAgei1pbmRleDogMjtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBwYWRkaW5nOiAuNXJlbTtcXHJcXG4gIHRvcDogdmFyKC0taWNvbi1tZW51LXNpemUpO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1pY29uLW1lbnUtc2l6ZSkpO1xcclxcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcclxcbiAgb3ZlcmZsb3cteTogYXV0bztcXHJcXG4gIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoKTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93KTtcXHJcXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpO1xcclxcbiAgY29sb3I6IHZhcigtLXR4dC1jb2wtMSk7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZW51LWJnLWNvbCk7XFxyXFxuICBmb250LXNpemU6IDEuNzVyZW07XFxyXFxuICBkaXNwbGF5OiBub25lO1xcclxcbn1cXHJcXG4jbWVudS5yZXZlYWwgeyBkaXNwbGF5OiBibG9jazsgfVxcclxcblxcclxcbiNtZW51IC5tZW51LWl0ZW0ge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG8gYXV0bztcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBoZWlnaHQ6IGNhbGModmFyKC0taWNvbi1tZW51LXNpemUpICogMS4yNSk7XFxyXFxufVxcclxcblxcclxcbiNtZW51IC5tZW51LWl0ZW0gcCB7XFxyXFxuICBtYXJnaW46IC41cmVtIDA7XFxyXFxuICB3aWR0aDogMjAwcHg7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAubWVudS1pdGVtIC5lZGl0LXByb2plY3Qge1xcclxcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcclxcbiAgd2lkdGg6IDIwMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uZmllbGRzZXQtbGlzdCBsaSB7XFxyXFxuICB0cmFuc2l0aW9uOiBwYWRkaW5nIDIwMG1zLCBiYWNrZ3JvdW5kLWNvbG9yIDM1MG1zO1xcclxcbn0uZmllbGRzZXQtbGlzdCBsaTpob3ZlciB7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxufVxcclxcblxcclxcbiNzY3JlZW4tY292ZXItbWVudSB7ZGlzcGxheTogbm9uZTt9XFxyXFxuI3NjcmVlbi1jb3Zlci1tZW51LnJldmVhbCB7XFxyXFxuICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB3aWR0aDogMTAwdnc7XFxyXFxuICBoZWlnaHQ6IDEwMHZoO1xcclxcbn1cXHJcXG5cXHJcXG4jbWVudSAucHJvamVjdC10aXRsZSB7XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgcCB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbiNtZW51IGEge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcbiAgY29sb3I6IGluaGVyaXQ7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5kYXJrLW1vZGUge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnI7XFxyXFxufVxcclxcblxcclxcbi5kYXJrLW1vZGUgaW5wdXQge1xcclxcbiAgLS10cmFuc2l0aW9uLWR1cjogMzUwbXM7XFxyXFxuICAtLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgY2FsYyh2YXIoLS10cmFuc2l0aW9uLWR1cikgKiAuNSkgZWFzZS1pbi1vdXQsXFxyXFxuICB0cmFuc2Zvcm0gdmFyKC0tdHJhbnNpdGlvbi1kdXIpIGN1YmljLWJlemllciguNjgsLTAuNTUsLjI3LDEuNTUpO1xcclxcbiAgYXBwZWFyYW5jZTogdW5zZXQ7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogY2FsYyh2YXIoLS1pY29uLXNpemUpICogMik7XFxyXFxuICBoZWlnaHQ6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IC41cmVtO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufS5kYXJrLW1vZGUgaW5wdXQ6OmJlZm9yZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYy1wYWdlKTtcXHJcXG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtc2hhZG93LWludmVydCk7XFxyXFxuICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTtcXHJcXG59LmRhcmstbW9kZSBpbnB1dDo6YWZ0ZXIge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogXFxcIlxcXCI7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuICBhc3BlY3QtcmF0aW86IDEvMTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCg2MCwgODAlLCA3MCUpO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7XFxyXFxufS5kYXJrLW1vZGUgaW5wdXQ6Y2hlY2tlZDpiZWZvcmUge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0MCwgMjAlLCA0MCUpO1xcclxcbn0uZGFyay1tb2RlIGlucHV0OmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCgyNDAsIDMwJSwgNzUlKTtcXHJcXG59XFxyXFxuLmRhcmstbW9kZSBsYWJlbCB7IGN1cnNvcjogcG9pbnRlcjsgfVxcclxcblxcclxcbiNtZW51IC5maWVsZHNldC1vcHRpb25zIC5tZW51LWl0ZW0uYWJvdXQge1xcclxcbiAgLS1pY29uLXNpemU6IDUwcHg7XFxyXFxuICAtLWR1cmF0aW9uOiAzcztcXHJcXG4gIGJhY2tncm91bmQtc2l6ZTogNzAwJTtcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0O1xcclxcbn1cXHJcXG4jbWVudS5yZXZlYWwgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dCB7XFxyXFxuICBiYWNrZ3JvdW5kOiB1cmwoLi9tZWRpYS9pbWFnZXMvYmFja2dyb3VuZC9naXRodWItbWFyay5zdmcpO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYW5pbWF0aW9uOiBiZy1hbmltIHZhcigtLWR1cmF0aW9uKSBjYWxjKHZhcigtLWR1cmF0aW9uKSAvIDUpIGluZmluaXRlIGxpbmVhcixcXHJcXG4gIGJnLXpvb20tb3V0IHZhcigtLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoLjA4LC44MiwuMTcsMSkgZm9yd2FyZHM7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgYmctYW5pbSB7XFxyXFxuICB0byB7IGJhY2tncm91bmQtcG9zaXRpb246IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDIpIGNhbGModmFyKC0taWNvbi1zaXplKSAqIC0xKTsgfVxcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGJnLXpvb20tb3V0IHtcXHJcXG4gIGZyb20geyBiYWNrZ3JvdW5kLXNpemU6IDcwMCU7IH1cXHJcXG4gIHRvIHsgYmFja2dyb3VuZC1zaXplOiB2YXIoLS1pY29uLXNpemUpOyB9XFxyXFxufVxcclxcblxcclxcbi8qIHBhZ2UgY29udGVudCAqL1xcclxcblxcclxcbmJvZHkge2JhY2tncm91bmQtY29sb3I6IHZhcigtLWJnYy1wYWdlKTt9XFxyXFxuXFxyXFxuI2NhcmRzLWNvbnRhaW5lciB7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcclxcbiAgbWluLXdpZHRoOiB2YXIoLS12aWV3cG9ydC1taW4td2lkdGgpO1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XFxyXFxufVxcclxcblxcclxcbi5wcm9qZWN0LWl0ZW0ge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHBhZGRpbmc6IDFyZW07XFxyXFxuICBtYXJnaW46IDFyZW07XFxyXFxufVxcclxcblxcclxcbmhlYWRlciB7XFxyXFxuICBwb3NpdGlvbjogc3RpY2t5O1xcclxcbiAgdG9wOiAwO1xcclxcbiAgei1pbmRleDogMTtcXHJcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLW1lbnUtc2l6ZSk7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxufVxcclxcblxcclxcblxcclxcbi8qIGNhcmRzICovXFxyXFxuXFxyXFxuLmNhcmQge1xcclxcbiAgaXNvbGF0aW9uOiBpc29sYXRlO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgcGFkZGluZzogdmFyKC0tY2FyZC1wYWRkaW5nKTtcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG8gYXV0bztcXHJcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDYsIGF1dG8pO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcXHJcXG4gICAgXFxcIiBkcmFnICB0aXRsZSAgICBwcm9ncmVzcyBlZGl0ICAgICBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gZGVzY3IgICAgZGVzY3IgICAgZGVzY3IgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGNyZWF0ZWQgIHByaW9yaXR5IHByaW9yaXR5IFxcXCJcXHJcXG4gICAgXFxcIiAuLi4uLiBkdWUgICAgICBwcmlvcml0eSBwcmlvcml0eSBcXFwiXFxyXFxuICAgIFxcXCIgLi4uLi4gdGFza3MgICAgdGFza3MgICAgdGFza3MgICAgXFxcIlxcclxcbiAgICBcXFwiIC4uLi4uIGFkZC10YXNrIGFkZC10YXNrIGFkZC10YXNrIFxcXCI7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG59IC5jYXJkLmFjdGl2ZSB7XFxyXFxuICBoZWlnaHQ6IGF1dG87XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdy1vcGVuKTtcXHJcXG59IC5jYXJkOm5vdCguYWN0aXZlKTpob3ZlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnLWhvdmVyKTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7IGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtYm9yZGVyLXJhZCkgdmFyKC0tY2FyZC1ib3JkZXItcmFkKSAwIDA7IH1cXHJcXG4uY2FyZDpsYXN0LW9mLXR5cGUgeyBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tY2FyZC1ib3JkZXItcmFkKSB2YXIoLS1jYXJkLWJvcmRlci1yYWQpOyB9XFxyXFxuXFxyXFxuLmNhcmQgLnRpdGxlIHtcXHJcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXRpdGxlKTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTEpO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAuNXJlbTtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcclxcbn1cXHJcXG4uY2FyZCAucHJvZ3Jlc3Mge1xcclxcbiAgZ3JpZC1hcmVhOiBwcm9ncmVzcztcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbn0uY2FyZCAucHJvZ3Jlc3M6OmFmdGVyIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCIlXFxcIjtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTEpO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgZm9udC13ZWlnaHQ6IDkwMDtcXHJcXG4gIGluc2V0OiA1cHg7XFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MtcGFnZSk7XFxyXFxuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcXHJcXG59XFxyXFxuLmNhcmQgLmRlc2NyaXB0aW9uIHtcXHJcXG4gIGdyaWQtYXJlYTogZGVzY3I7XFxyXFxuICBmb250LXNpemU6IDEuNXJlbTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTIpO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuLmNhcmQgLmRhdGUtY3JlYXRpb24ge1xcclxcbiAgZ3JpZC1hcmVhOiBjcmVhdGVkO1xcclxcbn1cXHJcXG4uY2FyZCAuZGF0ZS1kdWUge1xcclxcbiAgZ3JpZC1hcmVhOiBkdWU7XFxyXFxufS5jYXJkIC5kYXRlLWR1ZS5lZGl0LWRhdGUtZHVlIHtcXHJcXG4gIGJhY2tncm91bmQ6IHVybCguL21lZGlhL2ltYWdlcy9pY29ucy9kdWUuc3ZnKSBuby1yZXBlYXQ7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XFxyXFxuICBwYWRkaW5nLWxlZnQ6IDEuNzVyZW07XFxyXFxuICBmb250LXNpemU6IDFyZW07XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG59XFxyXFxuXFxyXFxuLyphZGRpbmcgdHJhbnNwYXJlbmN5IGZvciBvdmVyZmxvd2VkIHRleHQqL1xcclxcbi5jYXJkIC50aXRsZTpub3QoLmVkaXQtdGl0bGUpLFxcclxcbi5jYXJkIC5kZXNjcmlwdGlvbixcXHJcXG4uY2FyZCBsYWJlbCxcXHJcXG4ucHJvamVjdC10aXRsZSxcXHJcXG5oMXtcXHJcXG4gIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCB0cmFuc3BhcmVudCwgd2hpdGUgNTBweCk7XFxyXFxufVxcclxcblxcclxcblxcclxcbi5jYXJkIC5jaGVja2xpc3Qge1xcclxcbiAgZ3JpZC1hcmVhOiB0YXNrcztcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxufVxcclxcbi5jYXJkIC5lZGl0LXByaW9yaXR5IHtcXHJcXG4gIGdyaWQtYXJlYTogcHJpb3JpdHk7XFxyXFxuICBkaXNwbGF5OiBncmlkO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMiwgMWZyKTtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG59XFxyXFxuLmNhcmQgLmVkaXQtcHJpb3JpdHkgaW5wdXRbdHlwZT1cXFwicmFuZ2VcXFwiXSB7XFxyXFxuICB3aWR0aDogODAlO1xcclxcbiAganVzdGlmeS1zZWxmOiBjZW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5jcmVhdGUtdGFzay1kaXYge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBoZWlnaHQ6IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDEuNCk7XFxyXFxufVxcclxcbi5jcmVhdGUtdGFzay1kaXYgcCB7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG4gIHdpZHRoOiAwJTtcXHJcXG4gIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLWhvdmVyLWFuaW0tZHVyYXRpb24pIGVhc2UtaW4tb3V0IHZhcigtLWhvdmVyLWRlbGF5KTtcXHJcXG59XFxyXFxuLmNyZWF0ZS10YXNrLWRpdjpob3ZlciB7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxufVxcclxcbi5jcmVhdGUtdGFzay1kaXY6aG92ZXIgcCB7XFxyXFxuICB3aWR0aDogY2FsYygxMDAlIC0gdmFyKC0taWNvbi1zaXplKSAqIDEuMyk7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLWljb24uY3JlYXRlLXRhc2suY3JlYXRlLXRvZG8ge1xcclxcbiAgbWFyZ2luLWxlZnQ6IDA7XFxyXFxufVxcclxcbi5jYXJkLnRvZG8tYWRkLWRpdjpob3ZlciAuY2FyZC1pY29uLmNyZWF0ZS10YXNrLmNyZWF0ZS10b2RvIHtcXHJcXG4gIGFuaW1hdGlvbjogaWNvbi1zaGFrZSB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG59XFxyXFxuLnRvZG8tYWRkLWRpdiB7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBwYWRkaW5nOiAuNXJlbSAuMjVyZW07XFxyXFxuICBnYXA6IC41cmVtO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4udG9kby1hZGQtZGl2IHAge1xcclxcbiAgZm9udC1zaXplOiAycmVtO1xcclxcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aWR0aDogMHJlbTtcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKSBlYXNlLWluLW91dCB2YXIoLS1ob3Zlci1kZWxheSk7XFxyXFxufVxcclxcblxcclxcbi50b2RvLWFkZC1kaXY6aG92ZXIgcCB7XFxyXFxuICB3aWR0aDogMTVyZW07XFxyXFxufVxcclxcblxcclxcblxcclxcbi8qIGNhcmQgcHJpb3JpdHkgaW5kaWNhdG9yICovXFxyXFxuXFxyXFxuLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwibG93XFxcIl0ge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXByaW9yaXR5LWxvdyksIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59IC5jYXJkW2RhdGEtcHJpb3JpdHk9XFxcImxvd1xcXCJdLmFjdGl2ZSB7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLXByaW9yaXR5LWxvdyksIHJnYmEoMCwgMTI4LCAwLCAwKSA2MHB4KTtcXHJcXG59XFxyXFxuLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwibWlkZGxlXFxcIl0ge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB2YXIoLS1wcmlvcml0eS1taWQpLCByZ2JhKDAsIDEyOCwgMCwgMCkgNjBweCk7XFxyXFxufSAuY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJtaWRkbGVcXFwiXS5hY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tcHJpb3JpdHktbWlkKSwgcmdiYSgwLCAxMjgsIDAsIDApIDYwcHgpO1xcclxcbn1cXHJcXG4uY2FyZFtkYXRhLXByaW9yaXR5PVxcXCJoaWdoXFxcIl0ge1xcclxcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB2YXIoLS1wcmlvcml0eS1oaWdoKSwgcmdiYSgwLCAxMjgsIDAsIDApIDYwcHgpO1xcclxcbn0gLmNhcmRbZGF0YS1wcmlvcml0eT1cXFwiaGlnaFxcXCJdLmFjdGl2ZSB7XFxyXFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1wcmlvcml0eS1oaWdoKSwgcmdiYSgwLCAxMjgsIDAsIDApIDYwcHgpO1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBjYXJkIGRldGFpbHMgdHJhbnNpdGlvbiAqL1xcclxcblxcclxcbi5jYXJkIC5kZXNjcmlwdGlvbixcXHJcXG4uY2FyZCAuZGF0ZS1jcmVhdGlvbixcXHJcXG4uY2FyZCAuZGF0ZS1kdWUsXFxyXFxuLmNhcmQgdWwgbGkge1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHRyYW5zaXRpb246IHZhcigtLWNhcmQtb3Blbi10cmFuc2l0aW9uKTtcXHJcXG4gIGhlaWdodDogMHJlbTtcXHJcXG59XFxyXFxuLmNhcmQuYWN0aXZlIC5kZXNjcmlwdGlvbixcXHJcXG4uY2FyZC5hY3RpdmUgLmRhdGUtY3JlYXRpb24sXFxyXFxuLmNhcmQuYWN0aXZlIC5kYXRlLWR1ZSxcXHJcXG4uY2FyZC5hY3RpdmUgdWwgbGkge1xcclxcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxyXFxuICBoZWlnaHQ6IDEuNzVyZW07XFxyXFxufVxcclxcbi8qaW5kaXZpZHVhbCBzZXR0aW5ncyovXFxyXFxuLmNhcmQgLmRlc2NyaXB0aW9uIHsgbWFyZ2luLXRvcDogMHJlbTsgbWFyZ2luLWJvdHRvbTogMHJlbTt9XFxyXFxuLmNhcmQuYWN0aXZlIC5kZXNjcmlwdGlvbiB7IG1hcmdpbi10b3A6IDFyZW07IG1hcmdpbi1ib3R0b206IC41cmVtO31cXHJcXG4uY2FyZC5hY3RpdmUgdWwgbGkgeyBoZWlnaHQ6IDIuNXJlbTt9XFxyXFxuLmNhcmQgLmRhdGUtZHVlICB7bWFyZ2luLWJvdHRvbTogMHJlbTsgfVxcclxcbi5jYXJkLmFjdGl2ZSAuZGF0ZS1kdWUgIHttYXJnaW4tYm90dG9tOiAuNXJlbTsgfVxcclxcblxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxKSB7IHRyYW5zaXRpb24tZGVsYXk6IDI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoMikgeyB0cmFuc2l0aW9uLWRlbGF5OiA1MG1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDMpIHsgdHJhbnNpdGlvbi1kZWxheTogNzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg0KSB7IHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDUpIHsgdHJhbnNpdGlvbi1kZWxheTogMTI1bXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoNikgeyB0cmFuc2l0aW9uLWRlbGF5OiAxNTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCg3KSB7IHRyYW5zaXRpb24tZGVsYXk6IDE3NW1zOyB9XFxyXFxuLmNhcmQgdWwgbGk6bnRoLWNoaWxkKDgpIHsgdHJhbnNpdGlvbi1kZWxheTogMjAwbXM7IH1cXHJcXG4uY2FyZCB1bCBsaTpudGgtY2hpbGQoOSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAyMjVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxMCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAyNTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxMSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAyNzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxMikgeyB0cmFuc2l0aW9uLWRlbGF5OiAzMDBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxMykgeyB0cmFuc2l0aW9uLWRlbGF5OiAzMjVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxNCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAzNTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxNSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAzNzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxNikgeyB0cmFuc2l0aW9uLWRlbGF5OiA0MDBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxNykgeyB0cmFuc2l0aW9uLWRlbGF5OiA0MjVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxOCkgeyB0cmFuc2l0aW9uLWRlbGF5OiA0NTBtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxOSkgeyB0cmFuc2l0aW9uLWRlbGF5OiA0NzVtczsgfVxcclxcbi5jYXJkIHVsIGxpOm50aC1jaGlsZCgxbisyMCkgeyB0cmFuc2l0aW9uLWRlbGF5OiA1MDBtczsgfVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGNhcmQgaWNvbnMgKi9cXHJcXG5cXHJcXG4uY2FyZCBsaSBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXHJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gIHdpZHRoOiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgaGVpZ2h0OiB2YXIoLS1pY29uLXNpemUpO1xcclxcbiAgYXBwZWFyYW5jZTogbm9uZTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTo6YmVmb3JlIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcbiAgaW5zZXQ6IDA7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4wMyk7XFxyXFxuICBib3gtc2hhZG93OiAuMXJlbSAuMXJlbSAuMXJlbSB3aGl0ZSxcXHJcXG4gICAgaW5zZXQgLjFyZW0gLjFyZW0gLjI1cmVtIHJnYmEoMCwwLDAsLjEpO1xcclxcbiAgYm9yZGVyLXJhZGl1czogLjI1cmVtO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2hrLWJnLWNvbCk7XFxyXFxufVxcclxcbi5jYXJkIGxpIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06OmFmdGVyIHtcXHJcXG4gIC0tY2hlY2stYW5pbS1kdXJhdGlvbjogMjAwbXM7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAtN3B4O1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xcclxcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAxNSUgNjElLCAxNiUgNjIlLCAxOCUgNjUlLCA0JSA3OCUsIDElIDc1JSk7XFxyXFxuICBhbmltYXRpb246IGNoZWNrbWFyay1iYWNrd2FyZHMgdmFyKC0tY2hlY2stYW5pbS1kdXJhdGlvbikgZWFzZS1vdXQgZm9yd2FyZHM7XFxyXFxufVxcclxcbi5jYXJkIGxpIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06Y2hlY2tlZDo6YWZ0ZXIge1xcclxcbiAgYW5pbWF0aW9uOiBjaGVja21hcmstZm9yd2FyZHMgdmFyKC0tY2hlY2stYW5pbS1kdXJhdGlvbikgZWFzZS1pbiBmb3J3YXJkcztcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBjaGVja21hcmstZm9yd2FyZHMge1xcclxcbiAgMCUge29wYWNpdHk6IDA7fVxcclxcbiAgMSUge29wYWNpdHk6IDE7IGNsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMTUlIDYxJSwgMTYlIDYyJSwgMTglIDY1JSwgNCUgNzglKTt9XFxyXFxuICAzMCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMjElIDY2JSwgMjYlIDcwJSwgMzElIDc2JSwgOSUgODYlKTt9XFxyXFxuICA1MCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMzUlIDc1JSwgNDMlIDgxJSwgNDklIDg4JSwgNDAlIDEwMCUpO31cXHJcXG4gIDEwMCUge2NsaXAtcGF0aDogcG9seWdvbigwIDc1JSwgMTUlIDYwJSwgMzUlIDc1JSwgODUlIDAsIDEwMCUgMTAlLCA0MCUgMTAwJSk7fVxcclxcbn0gQGtleWZyYW1lcyBjaGVja21hcmstYmFja3dhcmRzIHtcXHJcXG4gIDAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDM1JSA3NSUsIDg1JSAwLCAxMDAlIDEwJSwgNDAlIDEwMCUpO31cXHJcXG4gIDUwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgNzUlLCAxNSUgNjAlLCAzNSUgNzUlLCA0MyUgODElLCA0OSUgODglLCA0MCUgMTAwJSk7fVxcclxcbiAgNzAlIHtjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDIxJSA2NiUsIDI2JSA3MCUsIDMxJSA3NiUsIDklIDg2JSk7fVxcclxcbiAgOTklIHtvcGFjaXR5OiAxOyBjbGlwLXBhdGg6IHBvbHlnb24oMCA3NSUsIDE1JSA2MCUsIDE1JSA2MSUsIDE2JSA2MiUsIDE4JSA2NSUsIDQlIDc4JSk7fVxcclxcbiAgMTAwJSB7b3BhY2l0eTogMDt9XFxyXFxufVxcclxcblxcclxcbi5jYXJkIGxhYmVsLFxcclxcbi5jYXJkIC5lZGl0LWxhYmVsIHtcXHJcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXHJcXG4gIGNvbG9yOiB2YXIoLS10eHQtY29sLTIpO1xcclxcbiAgYmFja2dyb3VuZDogdmFyKC0tbGFiZWwtYmctYW5pbSk7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XFxyXFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIDUwMG1zO1xcclxcbiAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAtMTAwdnc7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG59XFxyXFxuLmNhcmQgbGkgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpjaGVja2VkICsgbGFiZWwge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XFxyXFxuICBjb2xvcjogdmFyKC0tdHh0LWNvbC0zKTtcXHJcXG4gIGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwdnc7XFxyXFxufVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAuY2FyZC1pY29uLnJlbW92ZS10YXNrIHtcXHJcXG4gIGJhY2tncm91bmQ6IHVybCguL21lZGlhL2ltYWdlcy9pY29ucy9yZW1vdmUtdGFzay5zdmcpIGNlbnRlciBuby1yZXBlYXQ7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDgwJTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbiB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICB3aWR0aDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGhlaWdodDogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxyXFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XFxyXFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxyXFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcclxcbn1cXHJcXG4uY2FyZC1pY29uOjphZnRlciB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwiXFxcIjtcXHJcXG4gIGluc2V0OiAwO1xcclxcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcclxcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmljb24tZHJhZyB7XFxyXFxuICBjdXJzb3I6IG5zLXJlc2l6ZTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQtaWNvbi5pY29uLXBpbjo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL3Bpbi5zdmcpO1xcclxcbn0gLmNhcmQtaWNvbi5pY29uLXBpbjpjaGVja2VkOjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvcGluLWFjdGl2ZS5zdmcpO1xcclxcbn1cXHJcXG4uY2FyZC1pY29uLmljb24tZWRpdDo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL2VkaXQuc3ZnKTtcXHJcXG59IC5jYXJkLWljb24uaWNvbi1lZGl0OmNoZWNrZWQ6OmFmdGVyIHtcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguL21lZGlhL2ltYWdlcy9pY29ucy9lZGl0LWFjdGl2ZS5zdmcpO1xcclxcbn1cXHJcXG4uY2FyZC1pY29uLmljb24tZmF2OjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi9tZWRpYS9pbWFnZXMvaWNvbnMvZmF2LnN2Zyk7XFxyXFxufS5jYXJkLWljb24uaWNvbi1mYXY6Y2hlY2tlZDo6YWZ0ZXIge1xcclxcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vbWVkaWEvaW1hZ2VzL2ljb25zL2Zhdi1hY3RpdmUuc3ZnKTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQgdWwgbGkge1xcclxcbiAgZGlzcGxheTogZ3JpZDtcXHJcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bztcXHJcXG4gIGdhcDogLjVyZW07XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZCAuYWRkLXRhc2sge1xcclxcbiAgZ3JpZC1hcmVhOiBhZGQtdGFzaztcXHJcXG4gIC8qIGRpc3BsYXk6IGdyaWQ7ICovXFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLWljb24tc2l6ZSkgMWZyO1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXFxcIi4gcGx1c1xcXCI7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbn1cXHJcXG4uY2FyZCAuY3JlYXRlLXRhc2ssXFxyXFxuLmNyZWF0ZS10YXNrIHtcXHJcXG4gIGdyaWQtYXJlYTogcGx1cztcXHJcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCguL21lZGlhL2ltYWdlcy9pY29ucy9hZGQtdGFzay5zdmcpO1xcclxcbiAgd2lkdGg6IGNhbGModmFyKC0taWNvbi1zaXplKSAqIDEuMSkgO1xcclxcbiAgaGVpZ2h0OiBjYWxjKHZhcigtLWljb24tc2l6ZSkgKiAxLjEpIDtcXHJcXG4gIG1hcmdpbi1sZWZ0OiA3cHg7XFxyXFxufVxcclxcbi5jYXJkIC5jcmVhdGUtdGFzazpob3ZlciB7XFxyXFxuICBhbmltYXRpb246IGljb24tc2hha2UgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgaWNvbi1zcGluLTkwIHsgdG8ge3JvdGF0ZTogOTBkZWc7fX1cXHJcXG5cXHJcXG4uZWRpdC1idXR0b25zIHtcXHJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpO1xcclxcbn1cXHJcXG4uZGVsZXRlLWljb24ge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgd2lkdGg6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBoZWlnaHQ6IHZhcigtLWljb24tc2l6ZSk7XFxyXFxuICBtYXJnaW4tdG9wOiBhdXRvO1xcclxcbiAgbWFyZ2luLWJvdHRvbTogYXV0bztcXHJcXG4gIG1hcmdpbi1sZWZ0OiA1cHg7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbn0uaWNvbi10cmFzaCxcXHJcXG4uaWNvbi10cmFzaC1saWQge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgdHJhbnNpdGlvbjogcm90YXRlIDMwMG1zO1xcclxcbn1cXHJcXG4uaWNvbi10cmFzaCB7IHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMCU7fVxcclxcbi5pY29uLXRyYXNoLWxpZCB7IHRyYW5zZm9ybS1vcmlnaW46IDI1MCUgMCU7fVxcclxcbi5kZWxldGUtaWNvbjpob3ZlciAuaWNvbi10cmFzaCB7IHJvdGF0ZTogLTdkZWc7fVxcclxcbi5kZWxldGUtaWNvbjpob3ZlciAuaWNvbi10cmFzaC1saWQgeyByb3RhdGU6IDdkZWc7IH1cXHJcXG4uZGVsZXRlLWljb246YWN0aXZlIC5pY29uLXRyYXNoIHsgdHJhbnNpdGlvbjogcm90YXRlIDJzOyByb3RhdGU6IC0xOGRlZzsgfVxcclxcbi5kZWxldGUtaWNvbjphY3RpdmUgLmljb24tdHJhc2gtbGlkIHsgdHJhbnNpdGlvbjogcm90YXRlIDJzOyByb3RhdGU6IDEwZGVnOyB9XFxyXFxuXFxyXFxuLmRlbGV0ZS1pY29uLmRlbGV0aW5nIHtcXHJcXG4gIC8qaXRlbSBpcyBkZWxldGVkIGFmdGVyIGFuaW1hdGlvbiBlbmRzKi9cXHJcXG4gIGFuaW1hdGlvbjogZGVsZXRpbmcgdmFyKC0tZGVsZXRpb24tZGVsYXkpIGxpbmVhcjtcXHJcXG59XFxyXFxuLmRlbGV0ZS1pY29uLmRlbGV0aW5nOjphZnRlcixcXHJcXG4uZGVsZXRlLWljb24uZGVsZXRpbmc6OmJlZm9yZSB7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiBcXFwi4pqg77iPRGVsZXRpbmcuLi7imqDvuI9cXFwiO1xcclxcbiAgZm9udC1zaXplOiAxLjVyZW07XFxyXFxuICBjb2xvcjogdmFyKC0tYmdjLXBhZ2UpO1xcclxcbiAgcGFkZGluZzogLjI1cmVtO1xcclxcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1zaGFkb3cpO1xcclxcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwJSwgLTEwJSk7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0O1xcclxcbiAgYW5pbWF0aW9uOiBkZWxldGluZy1iZyB2YXIoLS1kZWxldGlvbi1kZWxheSkgZWFzZS1vdXQ7XFxyXFxuICBjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAwIDAsIDAgMTAwJSwgMCAxMDAlKTtcXHJcXG59XFxyXFxuLmRlbGV0ZS1pY29uLmRlbGV0aW5nOjphZnRlciB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XFxyXFxuICBhbmltYXRpb246IGRlbGV0aW5nLXRleHQgdmFyKC0tZGVsZXRpb24tZGVsYXkpIGVhc2Utb3V0O1xcclxcblxcclxcbn1cXHJcXG5cXHJcXG5Aa2V5ZnJhbWVzIGRlbGV0aW5nIHtcXHJcXG4gIHRvIHtcXHJcXG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgLjVyZW0gcmVkKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuQGtleWZyYW1lcyBkZWxldGluZy10ZXh0IHtcXHJcXG4gIGZyb20ge2NsaXAtcGF0aDogcG9seWdvbigwIDAsIDAgMCwgMCAxMDAlLCAwIDEwMCUpO31cXHJcXG4gIHRvIHtjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCAxMDAlKTt9XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgZGVsZXRpbmctYmcgeyAvKiB0aGlzIGRpc2FwcGVhcnMgdGhlIGJhciBpZiBmYXYgY2FuY2VscyBkZWxldGlvbiovXFxyXFxuICAwJSwgMTAwJSB7Y2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCAxMDAlIDEwMCUsIDAgMTAwJSk7fVxcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmljb24tZWRpdDpob3ZlcixcXHJcXG4uY2FyZC1pY29uLmljb24tcGluOmhvdmVyIHtcXHJcXG4gIGFuaW1hdGlvbjogaWNvbi1zaGFrZSB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAlIDEwMCU7XFxyXFxufVxcclxcbkBrZXlmcmFtZXMgaWNvbi1zaGFrZSB7XFxyXFxuICAwJSwgMTAwJSB7IHJvdGF0ZTogMGRlZzt9XFxyXFxuICAxMCUgeyByb3RhdGU6IDVkZWc7fVxcclxcbiAgMjAlIHsgcm90YXRlOiAtNWRlZzt9XFxyXFxuICAzMCUgeyByb3RhdGU6IDRkZWc7fVxcclxcbiAgNDAlIHsgcm90YXRlOiAtNGRlZzt9XFxyXFxuICA1MCUgeyByb3RhdGU6IDNkZWc7fVxcclxcbiAgNjAlIHsgcm90YXRlOiAtM2RlZzt9XFxyXFxuICA3MCUgeyByb3RhdGU6IDJkZWc7fVxcclxcbiAgODAlIHsgcm90YXRlOiAtMmRlZzt9XFxyXFxuICA5MCUgeyByb3RhdGU6IDFkZWc7fVxcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC1pY29uLmljb24tZmF2OmhvdmVye1xcclxcbiAgYW5pbWF0aW9uOiBpY29uLXNwaW4tNzIgdmFyKC0taG92ZXItYW5pbS1kdXJhdGlvbik7XFxyXFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTUlO1xcclxcbn1cXHJcXG5Aa2V5ZnJhbWVzIGljb24tc3Bpbi03MiB7IHRvIHtyb3RhdGU6IDcyZGVnO30gfVxcclxcblxcclxcbi5jYXJkLWljb24uaWNvbi1mYXYuc2hha2Uge1xcclxcbiAgYW5pbWF0aW9uOiBpY29uLWZhdi1zaGFrZSB2YXIoLS1ob3Zlci1hbmltLWR1cmF0aW9uKTtcXHJcXG59XFxyXFxuQGtleWZyYW1lcyBpY29uLWZhdi1zaGFrZSB7XFxyXFxuICAwJSwgMTAwJSB7XFxyXFxuICAgIHJvdGF0ZTogMGRlZztcXHJcXG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgNXB4IGdvbGRlbnJvZClcXHJcXG4gICAgICBicmlnaHRuZXNzKDE1MCUpO1xcclxcbiAgfVxcclxcbiAgMTAlIHsgcm90YXRlOiAxMGRlZzt9XFxyXFxuICAyMCUgeyByb3RhdGU6IC0xMGRlZzt9XFxyXFxuICAzMCUgeyByb3RhdGU6IDhkZWc7fVxcclxcbiAgNDAlIHsgcm90YXRlOiAtOGRlZzt9XFxyXFxuICA1MCUgeyByb3RhdGU6IDZkZWc7fVxcclxcbiAgNjAlIHsgcm90YXRlOiAtNmRlZzt9XFxyXFxuICA3MCUgeyByb3RhdGU6IDRkZWc7fVxcclxcbiAgODAlIHsgcm90YXRlOiAtNGRlZzt9XFxyXFxuICA5MCUgeyByb3RhdGU6IDJkZWc7fVxcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBlZGl0IG1vZGUgY29udGVudCBzdGF0dXMgKi9cXHJcXG5cXHJcXG5pbnB1dFt0eXBlPVxcXCJ0ZXh0XFxcIl0sIGlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSB7XFxyXFxuICBib3JkZXItcmFkaXVzOiAuMjVyZW07XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJveC1zaGFkb3c6IGluc2V0IC4xNXJlbSAuMTVyZW0gLjE1cmVtIHJnYmEoMCwwLDAsLjI1KTtcXHJcXG59IGlucHV0W3R5cGU9XFxcInRleHRcXFwiXS5lZGl0LWxhYmVsIHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLCBpbnB1dFt0eXBlPVxcXCJkYXRlXFxcIl0ge1xcclxcbiAgY3Vyc29yOiB0ZXh0O1xcclxcbn1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLnRpdGxlIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkIC5lZGl0LXRpdGxlIHsgZGlzcGxheTogbm9uZTsgZm9udC13ZWlnaHQ6IDYwMDt9XFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5lZGl0LXRpdGxlIHsgZGlzcGxheTogYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cXHJcXG5cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmRlc2NyaXB0aW9uIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkIC5lZGl0LWRlc2NyaXB0aW9uIHsgZGlzcGxheTogbm9uZTsgfVxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC1kZXNjcmlwdGlvbiB7IGRpc3BsYXk6IGJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5kYXRlLWR1ZSB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZCAuZWRpdC1kYXRlLWR1ZSB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmVkaXQtZGF0ZS1kdWUgeyBkaXNwbGF5OiBibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSAuZWRpdC1wcmlvcml0eSB7ZGlzcGxheTogZ3JpZDt9XFxyXFxuLmNhcmQgLmVkaXQtcHJpb3JpdHkge2Rpc3BsYXk6IG5vbmU7fVxcclxcblxcclxcbi5jYXJkLmVkaXQtbW9kZSBsaSBsYWJlbCB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZCAuZWRpdC1sYWJlbCB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZC5lZGl0LW1vZGUgLmVkaXQtbGFiZWwgeyBkaXNwbGF5OiBibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxcclxcbi5jYXJkIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06Y2hlY2tlZCB+IC5lZGl0LWxhYmVsIHtcXHJcXG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIHJnYmEoMCwwLDAsLjI1KTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhcmQuZWRpdC1tb2RlIC5hZGQtdGFzayB7ZGlzcGxheTogZ3JpZDt9XFxyXFxuLmNhcmQgLmFkZC10YXNrIHtkaXNwbGF5OiBub25lO31cXHJcXG5cXHJcXG4jbWVudSAubWVudS10YXNrcyAuZWRpdC1wcm9qZWN0IHsgZGlzcGxheTogbm9uZTsgfVxcclxcbiNtZW51IC5tZW51LXRhc2tzLmVkaXQtbW9kZSAuZWRpdC1wcm9qZWN0IHsgZGlzcGxheTogYmxvY2s7IH1cXHJcXG4jbWVudSAubWVudS10YXNrcyAucHJvamVjdC10aXRsZSB7IGRpc3BsYXk6IGJsb2NrOyB9XFxyXFxuI21lbnUgLm1lbnUtdGFza3MuZWRpdC1tb2RlIC5wcm9qZWN0LXRpdGxlIHsgZGlzcGxheTogbm9uZTsgfVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGRyYWdnZWQgY2FyZCAqL1xcclxcbi5jYXJkLmRyYWdnaW5nLWNhcmQge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtYm9yZGVyLXJhZCk7XFxyXFxuICB0cmFuc2l0aW9uOiBub25lO1xcclxcbn1cXHJcXG4uY2FyZC5kcmFnZ2luZy1jYXJkIC5lZGl0LWJ1dHRvbnMge1xcclxcbiAgZmlsdGVyOiBncmF5c2NhbGUoMTAwJSk7XFxyXFxuICAvKiBkaXNwbGF5OiBub25lOyAqL1xcclxcbn1cXHJcXG5cXHJcXG5cXHJcXG5cXHJcXG4vKiBzZWFyY2ggcmVzdWx0cyAqL1xcclxcblxcclxcbi5jYXJkLnNlYXJjaC1yZXN1bHQge1xcclxcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcXHJcXG4gICAgXFxcIiB0aXRsZSAgIHByb2dyZXNzIFxcXCJcXHJcXG4gICAgXFxcIiBkZXNjciAgIGRlc2NyICAgIFxcXCJcXHJcXG4gICAgXFxcIiBjcmVhdGVkIGNyZWF0ZWQgIFxcXCJcXHJcXG4gICAgXFxcIiBkdWUgICAgIGR1ZSAgICAgIFxcXCI7XFxyXFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvO1xcclxcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcclxcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXHJcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdyk7XFxyXFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0O1xcclxcbn1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0OmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0MCwgNjclLCA5OCUpOyB9XFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdDphY3RpdmUgeyBib3gtc2hhZG93OiB2YXIoLS1jYXJkLXNoYWRvdy1pbnZlcnQpOyB9XFxyXFxuXFxyXFxuXFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCAuZGVzY3JpcHRpb24geyBtYXJnaW46IC41cmVtIDAgMCAwOyB9XFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCAuZGF0ZS1jcmVhdGlvbiB7IG1hcmdpbi10b3A6IC41cmVtOyB9XFxyXFxuLmNhcmQuc2VhcmNoLXJlc3VsdCAuZGF0ZS1kdWUgeyBtYXJnaW46IDA7IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC5kYXRlLWR1ZTplbXB0eSB7IGRpc3BsYXk6IG5vbmU7IH1cXHJcXG4uY2FyZC5zZWFyY2gtcmVzdWx0IC50aXRsZSB7IHBhZGRpbmctbGVmdDogMDsgfVxcclxcblxcclxcblxcclxcblxcclxcbi8qIHJlc3BvbnNpdmVuZXNzICovXFxyXFxuXFxyXFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwMHB4KSB7XFxyXFxuICBib2R5e1xcclxcbiAgICBkaXNwbGF5OiBncmlkO1xcclxcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW1lbnUtd2lkdGgpIDFmcjtcXHJcXG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXFxcInNpZGViYXIgY2FyZHNcXFwiO1xcclxcbiAgfVxcclxcbiAgI21lbnUtYnV0dG9uLFxcclxcbiAgI3NjcmVlbi1jb3Zlci1tZW51IHtcXHJcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcbiAgI21lbnUge1xcclxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICBncmlkLWFyZWE6IHNpZGViYXI7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gICAgbWF4LWhlaWdodDogbm9uZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICNjYXJkcy1jb250YWluZXIge1xcclxcbiAgICBncmlkLWFyZWE6IGNhcmRzO1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICNtZW51LnJldmVhbCAuZmllbGRzZXQtb3B0aW9ucyAubWVudS1pdGVtLmFib3V0IHtcXHJcXG4gICAgYW5pbWF0aW9uOiBub25lO1xcclxcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcclxcbiAgfVxcclxcbiAgI21lbnUgLmZpZWxkc2V0LW9wdGlvbnMgLm1lbnUtaXRlbS5hYm91dDpob3ZlciB7XFxyXFxuICAgIGJhY2tncm91bmQ6IHVybCguL21lZGlhL2ltYWdlcy9iYWNrZ3JvdW5kL2dpdGh1Yi1tYXJrLnN2Zyk7XFxyXFxuICAgIGJhY2tncm91bmQtc2l6ZTogdmFyKC0taWNvbi1zaXplKTtcXHJcXG4gICAgYW5pbWF0aW9uOiBiZy1hbmltIHZhcigtLWR1cmF0aW9uKSBjYWxjKHZhcigtLWR1cmF0aW9uKSAvIDUpIGluZmluaXRlIGxpbmVhcixcXHJcXG4gIGJnLXpvb20tb3V0IHZhcigtLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoLjA4LC44MiwuMTcsMSkgZm9yd2FyZHM7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE1MDBweCkge1xcclxcbiAgYm9keXtcXHJcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1tZW51LXdpZHRoLXdpZGVzY3JlZW4pIDFmcjtcXHJcXG4gIH1cXHJcXG4gICNtZW51IHtcXHJcXG4gICAgd2lkdGg6IHZhcigtLW1lbnUtd2lkdGgtd2lkZXNjcmVlbik7XFxyXFxuICB9XFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8qIGZvciBnZW5lcmFsIHVzZSAqL1xcclxcblxcclxcbi5oaWRkZW4ge1xcclxcbiAgZGlzcGxheTogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuLm9wYWNpdHktemVybyB7XFxyXFxuICBvcGFjaXR5OiAwO1xcclxcbn1cXHJcXG5cXHJcXG4ubWFyZ2luLXRvcCB7XFxyXFxuICBtYXJnaW4tdG9wOiB2YXIoLS1jYXJkLWRyYWctcGFkZGluZyk7XFxyXFxufVxcclxcbi5tYXJnaW4tYm90dG9tIHtcXHJcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLWNhcmQtZHJhZy1wYWRkaW5nKTtcXHJcXG59XFxyXFxuXFxyXFxuXFxyXFxuLypmb3IgdGVzdGluZyovXFxyXFxuLyogKiB7XFxyXFxuICBvdXRsaW5lOiAxcHggc29saWQgZ3JheTtcXHJcXG59ICovXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHVybCA9IFN0cmluZyh1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsKTtcblxuICAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cbiAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gdXJsLnNsaWNlKDEsIC0xKTtcbiAgfVxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfVxuXG4gIC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcbiAgaWYgKC9bXCInKCkgXFx0XFxuXXwoJTIwKS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuXG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59IiwiaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uLy4uL2xvY2FsZS9lbi1VUy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTsiLCJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSAnRyc6XG4gICAgICBjYXNlICdHRyc6XG4gICAgICBjYXNlICdHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQSwgQlxuXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcblxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpOyAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcblxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyOyAvLyBUd28gZGlnaXQgeWVhclxuXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfSAvLyBPcmRpbmFsIG51bWJlclxuXG5cbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfSAvLyBQYWRkaW5nXG5cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTsgLy8gUGFkZGluZ1xuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gdShkYXRlLCB0b2tlbikge1xuICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiBRKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuXG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcblxuICAgICAgY2FzZSAnUW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcblxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgY2FzZSAnUVFRUSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIHEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG5cbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuXG4gICAgICBjYXNlICdxbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuXG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG5cbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuXG4gICAgICBjYXNlICdxcXFxJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG5cbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuXG4gICAgICBjYXNlICdNTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcblxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcblxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSAnTCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcblxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG5cbiAgICAgIGNhc2UgJ0xMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRva2VuID09PSAnd28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnZG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0RhdGUoKSwge1xuICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gRShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcblxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuXG4gICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuXG4gICAgICBjYXNlICdlZSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG5cbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG5cbiAgICAgIGNhc2UgJ2VlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcblxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG5cbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcblxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcblxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuXG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIGkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcblxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuXG4gICAgICBjYXNlICdpbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlXG5cbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG5cbiAgICAgIGNhc2UgJ2lpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuXG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG5cbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjYXNlICdiYmJiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuXG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnQic6XG4gICAgICBjYXNlICdCQic6XG4gICAgICBjYXNlICdCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdIbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG5cbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gayhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuXG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ3NvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcblxuICAgICAgY2FzZSAnWFhYWCc6XG4gICAgICBjYXNlICdYWCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuXG4gICAgICBjYXNlICdYWFhYWCc6XG4gICAgICBjYXNlICdYWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG5cbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiBPKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ3onOlxuICAgICAgY2FzZSAnenonOlxuICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcblxuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG5cbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsImltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpOyAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuXG4gICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSAneXknID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSAnTScgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDRGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0VVRDSG91cnMoKSAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG5cbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcblxuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsInZhciBkYXRlTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCd7e2RhdGV9fScsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSkucmVwbGFjZSgne3t0aW1lfX0nLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcblxudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG5cbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG5cbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwidmFyIHByb3RlY3RlZERheU9mWWVhclRva2VucyA9IFsnRCcsICdERCddO1xudmFyIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zID0gWydZWScsICdZWVlZJ107XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZFdlZWtZZWFyVG9rZW5zLmluZGV4T2YodG9rZW4pICE9PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGlmICh0b2tlbiA9PT0gJ1lZWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0QnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ0REJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIChpbiBgXCIuY29uY2F0KGZvcm1hdCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQoaW5wdXQsIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsInZhciByb3VuZGluZ01hcCA9IHtcbiAgY2VpbDogTWF0aC5jZWlsLFxuICByb3VuZDogTWF0aC5yb3VuZCxcbiAgZmxvb3I6IE1hdGguZmxvb3IsXG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA8IDAgPyBNYXRoLmNlaWwodmFsdWUpIDogTWF0aC5mbG9vcih2YWx1ZSk7XG4gIH0gLy8gTWF0aC50cnVuYyBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cbn07XG52YXIgZGVmYXVsdFJvdW5kaW5nTWV0aG9kID0gJ3RydW5jJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCA/IHJvdW5kaW5nTWFwW21ldGhvZF0gOiByb3VuZGluZ01hcFtkZWZhdWx0Um91bmRpbmdNZXRob2RdO1xufSIsImltcG9ydCBnZXRVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcblxuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuXG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwiLyoqXG4gKiBEYXlzIGluIDEgd2Vlay5cbiAqXG4gKiBAbmFtZSBkYXlzSW5XZWVrXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5leHBvcnQgdmFyIGRheXNJbldlZWsgPSA3O1xuLyoqXG4gKiBEYXlzIGluIDEgeWVhclxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cmVzIGV2ZXJ5IDQgeWVhcnMsIGV4Y2VwdCBmb3IgeWVhcnMgdGhhdCBhcmUgZGl2aXNhYmxlIGJ5IDEwMCBhbmQgbm90IGRpdmlzYWJsZSBieSA0MDAuXG4gKiA+IDEgbWVhbiB5ZWFyID0gKDM2NSsxLzQtMS8xMDArMS80MDApIGRheXMgPSAzNjUuMjQyNSBkYXlzXG4gKlxuICogQG5hbWUgZGF5c0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIGRheXNJblllYXIgPSAzNjUuMjQyNTtcbi8qKlxuICogTWF4aW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQG5hbWUgbWF4VGltZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBtaW51dGVcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbk1pbnV0ZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kc0luTWludXRlID0gNjAwMDA7XG4vKipcbiAqIE1pbGxpc2Vjb25kcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkhvdXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJblNlY29uZFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMTAwMDtcbi8qKlxuICogTWluaW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQG5hbWUgbWluVGltZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pblRpbWUgPSAtbWF4VGltZTtcbi8qKlxuICogTWludXRlcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaW51dGVzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgbWludXRlc0luSG91ciA9IDYwO1xuLyoqXG4gKiBNb250aHMgaW4gMSBxdWFydGVyXG4gKlxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgbW9udGhzSW5RdWFydGVyID0gMztcbi8qKlxuICogTW9udGhzIGluIDEgeWVhclxuICpcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1vbnRoc0luWWVhciA9IDEyO1xuLyoqXG4gKiBRdWFydGVycyBpbiAxIHllYXJcbiAqXG4gKiBAbmFtZSBxdWFydGVyc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHF1YXJ0ZXJzSW5ZZWFyID0gNDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgc2Vjb25kc0luSG91ciA9IDM2MDA7XG4vKipcbiAqIFNlY29uZHMgaW4gMSBtaW51dGVcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5NaW51dGVcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBzZWNvbmRzSW5NaW51dGUgPSA2MDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIGRheVxuICpcbiAqIEBuYW1lIHNlY29uZHNJbkRheVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIHdlZWtcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5XZWVrXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7XG4vKipcbiAqIFNlY29uZHMgaW4gMSB5ZWFyXG4gKlxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5EYXkgKiBkYXlzSW5ZZWFyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgbW9udGhcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgcXVhcnRlclxuICpcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBzZWNvbmRzSW5RdWFydGVyID0gc2Vjb25kc0luTW9udGggKiAzOyIsImltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mRGF5IGZyb20gXCIuLi9zdGFydE9mRGF5L2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHRpbWVzIGFyZSByZW1vdmVkXG4gKiBmcm9tIHRoZSBkYXRlcyBhbmQgdGhlbiB0aGUgZGlmZmVyZW5jZSBpbiBkYXlzIGlzIGNhbGN1bGF0ZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMiwgNiwgMiwgMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCAwKVxuICogKVxuICogLy89PiAzNjZcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjU5OjAwIGFuZCAzIEp1bHkgMjAxMSAwMDowMTowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHN0YXJ0T2ZEYXlMZWZ0ID0gc3RhcnRPZkRheShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIHN0YXJ0T2ZEYXlSaWdodCA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlUmlnaHQpO1xuICB2YXIgdGltZXN0YW1wTGVmdCA9IHN0YXJ0T2ZEYXlMZWZ0LmdldFRpbWUoKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZkRheUxlZnQpO1xuICB2YXIgdGltZXN0YW1wUmlnaHQgPSBzdGFydE9mRGF5UmlnaHQuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mRGF5UmlnaHQpOyAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgZGF5IGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgZGF5IG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIE1JTExJU0VDT05EU19JTl9EQVkpO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBtb250aHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBtb250aHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciBtb250aHNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgbW9udGhzIGFyZSBiZXR3ZWVuIDMxIEphbnVhcnkgMjAxNCBhbmQgMSBTZXB0ZW1iZXIgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA4LCAxKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgMCwgMzEpXG4gKiApXG4gKiAvLz0+IDhcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgdmFyIHllYXJEaWZmID0gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xuICB2YXIgbW9udGhEaWZmID0gZGF0ZUxlZnQuZ2V0TW9udGgoKSAtIGRhdGVSaWdodC5nZXRNb250aCgpO1xuICByZXR1cm4geWVhckRpZmYgKiAxMiArIG1vbnRoRGlmZjtcbn0iLCJpbXBvcnQgZ2V0UXVhcnRlciBmcm9tIFwiLi4vZ2V0UXVhcnRlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBxdWFydGVycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHF1YXJ0ZXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgcXVhcnRlcnNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgcXVhcnRlcnMgYXJlIGJldHdlZW4gMzEgRGVjZW1iZXIgMjAxMyBhbmQgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMjAxMywgMTEsIDMxKVxuICogKVxuICogLy89PiAzXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgdmFyIHllYXJEaWZmID0gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xuICB2YXIgcXVhcnRlckRpZmYgPSBnZXRRdWFydGVyKGRhdGVMZWZ0KSAtIGdldFF1YXJ0ZXIoZGF0ZVJpZ2h0KTtcbiAgcmV0dXJuIHllYXJEaWZmICogNCArIHF1YXJ0ZXJEaWZmO1xufSIsImltcG9ydCBzdGFydE9mV2VlayBmcm9tIFwiLi4vc3RhcnRPZldlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHdlZWtzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgd2Vla3MgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHdlZWtzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIHdlZWtzIGFyZSBiZXR3ZWVuIDUgSnVseSAyMDE0IGFuZCAyMCBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDUpXG4gKiApXG4gKiAvLz0+IDNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSxcbiAqIC8vIGhvdyBtYW55IGNhbGVuZGFyIHdlZWtzIGFyZSBiZXR3ZWVuIDUgSnVseSAyMDE0IGFuZCAyMCBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDUpLFxuICogICB7IHdlZWtTdGFydHNPbjogMSB9XG4gKiApXG4gKiAvLz0+IDJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0LCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgc3RhcnRPZldlZWtMZWZ0ID0gc3RhcnRPZldlZWsoZGlydHlEYXRlTGVmdCwgb3B0aW9ucyk7XG4gIHZhciBzdGFydE9mV2Vla1JpZ2h0ID0gc3RhcnRPZldlZWsoZGlydHlEYXRlUmlnaHQsIG9wdGlvbnMpO1xuICB2YXIgdGltZXN0YW1wTGVmdCA9IHN0YXJ0T2ZXZWVrTGVmdC5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZXZWVrTGVmdCk7XG4gIHZhciB0aW1lc3RhbXBSaWdodCA9IHN0YXJ0T2ZXZWVrUmlnaHQuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mV2Vla1JpZ2h0KTsgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIE1JTExJU0VDT05EU19JTl9XRUVLKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnNcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHllYXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgeWVhcnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBjYWxlbmRhciB5ZWFyc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciB5ZWFycyBhcmUgYmV0d2VlbiAzMSBEZWNlbWJlciAyMDEzIGFuZCAxMSBGZWJydWFyeSAyMDE1P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhcbiAqICAgbmV3IERhdGUoMjAxNSwgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgyMDEzLCAxMSwgMzEpXG4gKiApXG4gKiAvLz0+IDJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnQgPSB0b0RhdGUoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHQgPSB0b0RhdGUoZGlydHlEYXRlUmlnaHQpO1xuICByZXR1cm4gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xufSIsImltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuLi9jb25zdGFudHMvaW5kZXguanNcIjtcbmltcG9ydCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4uL19saWIvcm91bmRpbmdNZXRob2RzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGhvdXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnJvdW5kaW5nTWV0aG9kPSd0cnVuYyddIC0gYSByb3VuZGluZyBtZXRob2QgKGBjZWlsYCwgYGZsb29yYCwgYHJvdW5kYCBvciBgdHJ1bmNgKVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBob3Vyc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBob3VycyBhcmUgYmV0d2VlbiAyIEp1bHkgMjAxNCAwNjo1MDowMCBhbmQgMiBKdWx5IDIwMTQgMTk6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5Ib3VycyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTksIDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCA2LCA1MClcbiAqIClcbiAqIC8vPT4gMTJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5Ib3VycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGlmZiA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luSG91cjtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIGVhcmxpZXIgZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWlsbGlzZWNvbmRzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxNCAxMjozMDoyMC42MDAgYW5kIDIgSnVseSAyMDE0IDEyOjMwOjIxLjcwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMSwgNzAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMCwgNjAwKVxuICogKVxuICogLy89PiAxMTAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB0b0RhdGUoZGF0ZUxlZnQpLmdldFRpbWUoKSAtIHRvRGF0ZShkYXRlUmlnaHQpLmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbk1pbnV0ZSB9IGZyb20gXCIuLi9jb25zdGFudHMvaW5kZXguanNcIjtcbmltcG9ydCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4uL19saWIvcm91bmRpbmdNZXRob2RzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1pbnV0ZXNcbiAqIEBjYXRlZ29yeSBNaW51dGUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgbWludXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgc2lnbmVkIG51bWJlciBvZiBmdWxsIChyb3VuZGVkIHRvd2FyZHMgMCkgbWludXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yb3VuZGluZ01ldGhvZD0ndHJ1bmMnXSAtIGEgcm91bmRpbmcgbWV0aG9kIChgY2VpbGAsIGBmbG9vcmAsIGByb3VuZGAgb3IgYHRydW5jYClcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgbWludXRlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBtaW51dGVzIGFyZSBiZXR3ZWVuIDIgSnVseSAyMDE0IDEyOjA3OjU5IGFuZCAyIEp1bHkgMjAxNCAxMjoyMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAyMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCA3LCA1OSlcbiAqIClcbiAqIC8vPT4gMTJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWludXRlcyBhcmUgYmV0d2VlbiAxMDowMTo1OSBhbmQgMTA6MDA6MDBcbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gKiAgIG5ldyBEYXRlKDIwMDAsIDAsIDEsIDEwLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAwMCwgMCwgMSwgMTAsIDEsIDU5KVxuICogKVxuICogLy89PiAtMVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZUxlZnQsIGRhdGVSaWdodCwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59IiwiaW1wb3J0IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0Um91bmRpbmdNZXRob2QgfSBmcm9tIFwiLi4vX2xpYi9yb3VuZGluZ01ldGhvZHMvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluU2Vjb25kc1xuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yb3VuZGluZ01ldGhvZD0ndHJ1bmMnXSAtIGEgcm91bmRpbmcgbWV0aG9kIChgY2VpbGAsIGBmbG9vcmAsIGByb3VuZGAgb3IgYHRydW5jYClcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2Ygc2Vjb25kc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBzZWNvbmRzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxNCAxMjozMDowNy45OTkgYW5kIDIgSnVseSAyMDE0IDEyOjMwOjIwLjAwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJblNlY29uZHMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAzMCwgMjAsIDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDcsIDk5OSlcbiAqIClcbiAqIC8vPT4gMTJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5TZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkaWZmID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gMTAwMDtcbiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59IiwiaW1wb3J0IGlzVmFsaWQgZnJvbSBcIi4uL2lzVmFsaWQvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5cbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOyAvLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG5cbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuXG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmNSA9IChfcmVmNiA9IChfcmVmNyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9IF9vcHRpb25zJGxvY2FsZTMub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlMyRvcHRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUzJG9wdGkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNyAhPT0gdm9pZCAwID8gX3JlZjcgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY2ICE9PSB2b2lkIDAgPyBfcmVmNiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsNC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY1ICE9PSB2b2lkIDAgPyBfcmVmNSA6IDApOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuXG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cblxuICB2YXIgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG5cbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH0gLy8gQ29udmVydCB0aGUgZGF0ZSBpbiBzeXN0ZW0gdGltZXpvbmUgdG8gdGhlIHNhbWUgZGF0ZSBpbiBVVEMrMDA6MDAgdGltZXpvbmUuXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gVVRDIGZ1bmN0aW9ucyB3aWxsIGJlIGltcGxlbWVudGVkLCBsb2NhbGVzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZW0uXG4gIC8vIFNlZSBhbiBpc3N1ZSBhYm91dCBVVEMgZnVuY3Rpb25zOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM3NlxuXG5cbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAncCcgfHwgZmlyc3RDaGFyYWN0ZXIgPT09ICdQJykge1xuICAgICAgdmFyIGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG5cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICByZXR1cm4gY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuXG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZ2V0UXVhcnRlclxuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSB5ZWFyIHF1YXJ0ZXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIHllYXIgcXVhcnRlciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBxdWFydGVyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggcXVhcnRlciBpcyAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFF1YXJ0ZXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDNcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRRdWFydGVyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcbiAgcmV0dXJuIHF1YXJ0ZXI7XG59IiwiaW1wb3J0IHsgc2Vjb25kc0luRGF5LCBzZWNvbmRzSW5Ib3VyLCBzZWNvbmRzSW5NaW51dGUsIHNlY29uZHNJbk1vbnRoLCBzZWNvbmRzSW5RdWFydGVyLCBzZWNvbmRzSW5XZWVrLCBzZWNvbmRzSW5ZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9pbmRleC5qc1wiO1xuaW1wb3J0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MvaW5kZXguanNcIjtcbmltcG9ydCBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzIGZyb20gXCIuLi9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluSG91cnMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJbkhvdXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZGlmZmVyZW5jZUluTWludXRlcyBmcm9tIFwiLi4vZGlmZmVyZW5jZUluTWludXRlcy9pbmRleC5qc1wiO1xuaW1wb3J0IGRpZmZlcmVuY2VJblNlY29uZHMgZnJvbSBcIi4uL2RpZmZlcmVuY2VJblNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpbnRsRm9ybWF0RGlzdGFuY2VcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0cyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdFxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBhbmQgZm9ybWF0cyBpdCBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gd2lsbCBwaWNrIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHVuaXQgZGVwZW5kaW5nIG9uIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGRhdGVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGRpc3RhbmNlIGlzIGEgZmV3IGhvdXJzLCBpdCBtaWdodCByZXR1cm4gYHggaG91cnNgLiBJZiB0aGUgZGlzdGFuY2UgaXMgYSBmZXcgbW9udGhzLCBpdCBtaWdodCByZXR1cm4gYHggbW9udGhzYC5cbiAqXG4gKiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHVuaXQgdG8gZm9yY2UgdXNpbmcgaXQgcmVnYXJkbGVzcyBvZiB0aGUgZGlzdGFuY2UgdG8gZ2V0IGEgcmVzdWx0IGxpa2UgYDEyMzQ1NiBob3Vyc2AuXG4gKlxuICogU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIHVuaXQgcGlja2luZyBsb2dpYzpcbiAqXG4gKiB8IERpc3RhbmNlIGJldHdlZW4gZGF0ZXMgfCBSZXN1bHQgKHBhc3QpICB8IFJlc3VsdCAoZnV0dXJlKSB8XG4gKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8XG4gKiB8IDAgc2Vjb25kcyAgICAgICAgICAgICAgfCBub3cgICAgICAgICAgICB8IG5vdyAgICAgICAgICAgICB8XG4gKiB8IDEtNTkgc2Vjb25kcyAgICAgICAgICAgfCBYIHNlY29uZHMgYWdvICB8IGluIFggc2Vjb25kcyAgICB8XG4gKiB8IDEtNTkgbWludXRlcyAgICAgICAgICAgfCBYIG1pbnV0ZXMgYWdvICB8IGluIFggbWludXRlcyAgICB8XG4gKiB8IDEtMjMgaG91cnMgICAgICAgICAgICAgfCBYIGhvdXJzIGFnbyAgICB8IGluIFggaG91cnMgICAgICB8XG4gKiB8IDEgZGF5ICAgICAgICAgICAgICAgICAgfCB5ZXN0ZXJkYXkgICAgICB8IHRvbW9ycm93ICAgICAgICB8XG4gKiB8IDItNiBkYXlzICAgICAgICAgICAgICAgfCBYIGRheXMgYWdvICAgICB8IGluIFggZGF5cyAgICAgICB8XG4gKiB8IDcgZGF5cyAgICAgICAgICAgICAgICAgfCBsYXN0IHdlZWsgICAgICB8IG5leHQgd2VlayAgICAgICB8XG4gKiB8IDggZGF5cy0xIG1vbnRoICAgICAgICAgfCBYIHdlZWtzIGFnbyAgICB8IGluIFggd2Vla3MgICAgICB8XG4gKiB8IDEgbW9udGggICAgICAgICAgICAgICAgfCBsYXN0IG1vbnRoICAgICB8IG5leHQgbW9udGggICAgICB8XG4gKiB8IDItMyBtb250aHMgICAgICAgICAgICAgfCBYIG1vbnRocyBhZ28gICB8IGluIFggbW9udGhzICAgICB8XG4gKiB8IDEgcXVhcnRlciAgICAgICAgICAgICAgfCBsYXN0IHF1YXJ0ZXIgICB8IG5leHQgcXVhcnRlciAgICB8XG4gKiB8IDItMyBxdWFydGVycyAgICAgICAgICAgfCBYIHF1YXJ0ZXJzIGFnbyB8IGluIFggcXVhcnRlcnMgICB8XG4gKiB8IDEgeWVhciAgICAgICAgICAgICAgICAgfCBsYXN0IHllYXIgICAgICB8IG5leHQgeWVhciAgICAgICB8XG4gKiB8IDIrIHllYXJzICAgICAgICAgICAgICAgfCBYIHllYXJzIGFnbyAgICB8IGluIFggeWVhcnMgICAgICB8XG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBiYXNlRGF0ZSAtIHRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnVuaXRdIC0gZm9ybWF0cyB0aGUgZGlzdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gdW5pdCAoJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnKS5cbiAqIEBwYXJhbSB7U3RyaW5nfFN0cmluZ1tdfSBbb3B0aW9ucy5sb2NhbGVdIC0gdGhlIGxvY2FsZSB0byB1c2UuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubG9jYWxlTWF0Y2hlcj0nYmVzdCBmaXQnXSAtIHRoZSBsb2NhbGUgbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIHVzZS4gT3RoZXIgdmFsdWU6ICdsb29rdXAnLlxuICogU2VlIE1ETiBmb3IgZGV0YWlscyBbTG9jYWxlIGlkZW50aWZpY2F0aW9uIGFuZCBuZWdvdGlhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNsb2NhbGVfaWRlbnRpZmljYXRpb25fYW5kX25lZ290aWF0aW9uKVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLm51bWVyaWM9J2F1dG8nXSAtIHRoZSBvdXRwdXQgbWVzc2FnZSBmb3JtYXQuIFRoZSB2YWx1ZXMgYXJlICdhdXRvJyAoZS5nLiBgeWVzdGVyZGF5YCksICdhbHdheXMnKGUuZy4gYDEgZGF5IGFnb2ApLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnN0eWxlPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQuIFRoZSB2YWx1ZXMgYXJlOiAnbG9uZycgKGUuZy4gYDEgbW9udGhgKSwgJ3Nob3J0JyAoZS5nLiAnaW4gMSBtby4nKSwgJ25hcnJvdycgKGUuZy4gJ2luIDEgbW8uJykuXG4gKiBUaGUgbmFycm93IG9uZSBjb3VsZCBiZSBzaW1pbGFyIHRvIHRoZSBzaG9ydCBvbmUgZm9yIHNvbWUgbG9jYWxlcy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBkaXN0YW5jZSBpbiB3b3JkcyBhY2NvcmRpbmcgdG8gbGFuZ3VhZ2Utc2Vuc2l0aXZlIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBiYXNlRGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy51bml0YCBtdXN0IG5vdCBiZSBpbnZhbGlkIFVuaXRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBub3QgYmUgaW52YWxpZCBsb2NhbGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZU1hdGNoZXJgIG11c3Qgbm90IGJlIGludmFsaWQgbG9jYWxlTWF0Y2hlclxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubnVtZXJpY2AgbXVzdCBub3QgYmUgaW52YWxpZCBudW1lcmljXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5zdHlsZWAgbXVzdCBub3QgYmUgaW52YWxpZCBzdHlsZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBkYXRlcyB3aGVuIHRoZSBmaXN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZD9cbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTEsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKVxuICogKVxuICogLy89PiAnaW4gMSBob3VyJ1xuICpcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGRhdGVzIHdoZW4gdGhlIGZpc3QgZGF0ZSBpcyBiZWZvcmUgdGhlIHNlY29uZD9cbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTEsIDMwLCAwKVxuICogKVxuICogLy89PiAnMSBob3VyIGFnbydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNlIHRoZSB1bml0IG9wdGlvbiB0byBmb3JjZSB0aGUgZnVuY3Rpb24gdG8gb3V0cHV0IHRoZSByZXN1bHQgaW4gcXVhcnRlcnMuIFdpdGhvdXQgc2V0dGluZyBpdCwgdGhlIGV4YW1wbGUgd291bGQgcmV0dXJuIFwibmV4dCB5ZWFyXCJcbiAqIGludGxGb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMTk4NywgNiwgNCwgMTAsIDMwLCAwKSxcbiAqICAgbmV3IERhdGUoMTk4NiwgMywgNCwgMTAsIDMwLCAwKSxcbiAqICAgeyB1bml0OiAncXVhcnRlcicgfVxuICogKVxuICogLy89PiAnaW4gNSBxdWFydGVycydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNlIHRoZSBsb2NhbGUgb3B0aW9uIHRvIGdldCB0aGUgcmVzdWx0IGluIFNwYW5pc2guIFdpdGhvdXQgc2V0dGluZyBpdCwgdGhlIGV4YW1wbGUgd291bGQgcmV0dXJuIFwiaW4gMSBob3VyXCIuXG4gKiBpbnRsRm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDEwLCAzMCwgMCksXG4gKiAgIHsgbG9jYWxlOiAnZXMnIH1cbiAqIClcbiAqIC8vPT4gJ2RlbnRybyBkZSAxIGhvcmEnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVzZSB0aGUgbnVtZXJpYyBvcHRpb24gdG8gZm9yY2UgdGhlIGZ1bmN0aW9uIHRvIHVzZSBudW1lcmljIHZhbHVlcy4gV2l0aG91dCBzZXR0aW5nIGl0LCB0aGUgZXhhbXBsZSB3b3VsZCByZXR1cm4gXCJ0b21vcnJvd1wiLlxuICogaW50bEZvcm1hdERpc3RhbmNlKFxuICogICBuZXcgRGF0ZSgxOTg2LCAzLCA1LCAxMSwgMzAsIDApLFxuICogICBuZXcgRGF0ZSgxOTg2LCAzLCA0LCAxMSwgMzAsIDApLFxuICogICB7IG51bWVyaWM6ICdhbHdheXMnIH1cbiAqIClcbiAqIC8vPT4gJ2luIDEgZGF5J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2UgdGhlIHN0eWxlIG9wdGlvbiB0byBmb3JjZSB0aGUgZnVuY3Rpb24gdG8gdXNlIHNob3J0IHZhbHVlcy4gV2l0aG91dCBzZXR0aW5nIGl0LCB0aGUgZXhhbXBsZSB3b3VsZCByZXR1cm4gXCJpbiAyIHllYXJzXCIuXG4gKiBpbnRsRm9ybWF0RGlzdGFuY2UoXG4gKiAgIG5ldyBEYXRlKDE5ODgsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIG5ldyBEYXRlKDE5ODYsIDMsIDQsIDExLCAzMCwgMCksXG4gKiAgIHsgc3R5bGU6ICdzaG9ydCcgfVxuICogKVxuICogLy89PiAnaW4gMiB5cidcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW50bEZvcm1hdERpc3RhbmNlKGRhdGUsIGJhc2VEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdmFsdWUgPSAwO1xuICB2YXIgdW5pdDtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRhdGUpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGJhc2VEYXRlKTtcblxuICBpZiAoIShvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLnVuaXQpKSB7XG4gICAgLy8gR2V0IHRoZSB1bml0IGJhc2VkIG9uIGRpZmZJblNlY29uZHMgY2FsY3VsYXRpb25zIGlmIG5vIHVuaXQgaXMgc3BlY2lmaWVkXG4gICAgdmFyIGRpZmZJblNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpOyAvLyBUaGUgc21hbGxlc3QgdW5pdFxuXG4gICAgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luTWludXRlKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJblNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICB1bml0ID0gJ3NlY29uZCc7XG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkhvdXIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluTWludXRlcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICAgIHVuaXQgPSAnbWludXRlJztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luRGF5ICYmIE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSkgPCAxKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkhvdXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpO1xuICAgICAgdW5pdCA9ICdob3VyJztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJiAodmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZUxlZnQsIGRhdGVSaWdodCkpICYmIE1hdGguYWJzKHZhbHVlKSA8IDcpIHtcbiAgICAgIHVuaXQgPSAnZGF5JztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luTW9udGgpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICAgIHVuaXQgPSAnd2Vlayc7XG4gICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJblF1YXJ0ZXIpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICB1bml0ID0gJ21vbnRoJztcbiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luWWVhcikge1xuICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgPCA0KSB7XG4gICAgICAgIC8vIFRvIGZpbHRlciBvdXQgY2FzZXMgdGhhdCBhcmUgbGVzcyB0aGFuIGEgeWVhciBidXQgbWF0Y2ggNCBxdWFydGVyc1xuICAgICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICAgIHVuaXQgPSAncXVhcnRlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgdmFsdWUgaWYgdW5pdCBpcyBzcGVjaWZpZWRcbiAgICB1bml0ID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnVuaXQ7XG5cbiAgICBpZiAodW5pdCA9PT0gJ3NlY29uZCcpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluU2Vjb25kcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdtaW51dGUnKSB7XG4gICAgICB2YWx1ZSA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnaG91cicpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluSG91cnMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnZGF5Jykge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnd2VlaycpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdtb250aCcpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoZGF0ZUxlZnQsIGRhdGVSaWdodCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAncXVhcnRlcicpIHtcbiAgICAgIHZhbHVlID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICd5ZWFyJykge1xuICAgICAgdmFsdWUgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBydGYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSwge1xuICAgIGxvY2FsZU1hdGNoZXI6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGVNYXRjaGVyLFxuICAgIG51bWVyaWM6IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubnVtZXJpYykgfHwgJ2F1dG8nLFxuICAgIHN0eWxlOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc3R5bGVcbiAgfSk7XG4gIHJldHVybiBydGYuZm9ybWF0KHZhbHVlLCB1bml0KTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0Z1dHVyZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgZnV0dXJlP1xuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBmdXR1cmU/XG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwcmVzZW50IGluIHRoZSBGUCBzdWJtb2R1bGUgYXNcbiAqID4gaXQgdXNlcyBgRGF0ZS5ub3coKWAgaW50ZXJuYWxseSBoZW5jZSBpbXB1cmUgYW5kIGNhbid0IGJlIHNhZmVseSBjdXJyaWVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIGluIHRoZSBmdXR1cmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNCwgaXMgMzEgRGVjZW1iZXIgMjAxNCBpbiB0aGUgZnV0dXJlP1xuICogY29uc3QgcmVzdWx0ID0gaXNGdXR1cmUobmV3IERhdGUoMjAxNCwgMTEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRnV0dXJlKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKSA+IERhdGUubm93KCk7XG59IiwiaW1wb3J0IHN0YXJ0T2ZEYXkgZnJvbSBcIi4uL3N0YXJ0T2ZEYXkvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZURheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIGRheSAoYW5kIHllYXIgYW5kIG1vbnRoKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAwNjowMDowMCBhbmQgNCBTZXB0ZW1iZXIgMTg6MDA6MDAgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQsIDYsIDApLCBuZXcgRGF0ZSgyMDE0LCA4LCA0LCAxOCwgMCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyIGFuZCA0IE9jdG9iZXIgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQpLCBuZXcgRGF0ZSgyMDE0LCA5LCA0KSlcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyLCAyMDE0IGFuZCA0IFNlcHRlbWJlciwgMjAxNSBpbiB0aGUgc2FtZSBkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVEYXkobmV3IERhdGUoMjAxNCwgOCwgNCksIG5ldyBEYXRlKDIwMTUsIDgsIDQpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2FtZURheShkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0U3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHRTdGFydE9mRGF5ID0gc3RhcnRPZkRheShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdFN0YXJ0T2ZEYXkuZ2V0VGltZSgpID09PSBkYXRlUmlnaHRTdGFydE9mRGF5LmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZU1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgbW9udGggKGFuZCB5ZWFyKVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMiBTZXB0ZW1iZXIgMjAxNCBhbmQgMjUgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgbW9udGg/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVNb250aChuZXcgRGF0ZSgyMDE0LCA4LCAyKSwgbmV3IERhdGUoMjAxNCwgOCwgMjUpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNSBpbiB0aGUgc2FtZSBtb250aD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZU1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCBuZXcgRGF0ZSgyMDE1LCA4LCAyNSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTYW1lTW9udGgoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdC5nZXRGdWxsWWVhcigpID09PSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKSAmJiBkYXRlTGVmdC5nZXRNb250aCgpID09PSBkYXRlUmlnaHQuZ2V0TW9udGgoKTtcbn0iLCJpbXBvcnQgc3RhcnRPZldlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzU2FtZVdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgd2VlayAoYW5kIG1vbnRoIGFuZCB5ZWFyKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgd2VlayAoYW5kIG1vbnRoIGFuZCB5ZWFyKT9cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBmaXJzdCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgc2Vjb25kIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgd2VlayAoYW5kIG1vbnRoIGFuZCB5ZWFyKVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMzEgQXVndXN0IDIwMTQgYW5kIDQgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVdlZWsobmV3IERhdGUoMjAxNCwgNywgMzEpLCBuZXcgRGF0ZSgyMDE0LCA4LCA0KSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB3ZWVrIHN0YXJ0cyB3aXRoIE1vbmRheSxcbiAqIC8vIGFyZSAzMSBBdWd1c3QgMjAxNCBhbmQgNCBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lV2VlayhuZXcgRGF0ZSgyMDE0LCA3LCAzMSksIG5ldyBEYXRlKDIwMTQsIDgsIDQpLCB7XG4gKiAgIHdlZWtTdGFydHNPbjogMVxuICogfSlcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDEgSmFudWFyeSAyMDE0IGFuZCAxIEphbnVhcnkgMjAxNSBpbiB0aGUgc2FtZSB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lV2VlayhuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNSwgMCwgMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2FtZVdlZWsoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdFN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsoZGlydHlEYXRlTGVmdCwgb3B0aW9ucyk7XG4gIHZhciBkYXRlUmlnaHRTdGFydE9mV2VlayA9IHN0YXJ0T2ZXZWVrKGRpcnR5RGF0ZVJpZ2h0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGVMZWZ0U3RhcnRPZldlZWsuZ2V0VGltZSgpID09PSBkYXRlUmlnaHRTdGFydE9mV2Vlay5nZXRUaW1lKCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1NhbWVZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHllYXI/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHllYXI/XG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZUxlZnQgLSB0aGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNCBpbiB0aGUgc2FtZSB5ZWFyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyKSwgbmV3IERhdGUoMjAxNCwgOCwgMjUpKVxuICogLy89PiB0cnVlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTYW1lWWVhcihkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgcmV0dXJuIGRhdGVMZWZ0LmdldEZ1bGxZZWFyKCkgPT09IGRhdGVSaWdodC5nZXRGdWxsWWVhcigpO1xufSIsImltcG9ydCBpc1NhbWVNb250aCBmcm9tIFwiLi4vaXNTYW1lTW9udGgvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVGhpc01vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgbW9udGggYXMgdGhlIGN1cnJlbnQgZGF0ZT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSBtb250aCBhcyB0aGUgY3VycmVudCBkYXRlP1xuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGUgRlAgc3VibW9kdWxlIGFzXG4gKiA+IGl0IHVzZXMgYERhdGUubm93KClgIGludGVybmFsbHkgaGVuY2UgaW1wdXJlIGFuZCBjYW4ndCBiZSBzYWZlbHkgY3VycmllZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyBpbiB0aGlzIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMjUgU2VwdGVtYmVyIDIwMTQsIGlzIDE1IFNlcHRlbWJlciAyMDE0IGluIHRoaXMgbW9udGg/XG4gKiBjb25zdCByZXN1bHQgPSBpc1RoaXNNb250aChuZXcgRGF0ZSgyMDE0LCA4LCAxNSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RoaXNNb250aChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiBpc1NhbWVNb250aChEYXRlLm5vdygpLCBkaXJ0eURhdGUpO1xufSIsImltcG9ydCBpc1NhbWVXZWVrIGZyb20gXCIuLi9pc1NhbWVXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzVGhpc1dlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIGluIHRoZSBzYW1lIHdlZWsgYXMgdGhlIGN1cnJlbnQgZGF0ZT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSB3ZWVrIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwcmVzZW50IGluIHRoZSBGUCBzdWJtb2R1bGUgYXNcbiAqID4gaXQgdXNlcyBgRGF0ZS5ub3coKWAgaW50ZXJuYWxseSBoZW5jZSBpbXB1cmUgYW5kIGNhbid0IGJlIHNhZmVseSBjdXJyaWVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgaW4gdGhpcyB3ZWVrXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMjUgU2VwdGVtYmVyIDIwMTQsIGlzIDIxIFNlcHRlbWJlciAyMDE0IGluIHRoaXMgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVGhpc1dlZWsobmV3IERhdGUoMjAxNCwgOCwgMjEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDI1IFNlcHRlbWJlciAyMDE0IGFuZCB3ZWVrIHN0YXJ0cyB3aXRoIE1vbmRheVxuICogLy8gaXMgMjEgU2VwdGVtYmVyIDIwMTQgaW4gdGhpcyB3ZWVrP1xuICogY29uc3QgcmVzdWx0ID0gaXNUaGlzV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyMSksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGhpc1dlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gaXNTYW1lV2VlayhkaXJ0eURhdGUsIERhdGUubm93KCksIG9wdGlvbnMpO1xufSIsImltcG9ydCBpc1NhbWVZZWFyIGZyb20gXCIuLi9pc1NhbWVZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1RoaXNZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgc2FtZSB5ZWFyIGFzIHRoZSBjdXJyZW50IGRhdGU/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgaW4gdGhlIHNhbWUgeWVhciBhcyB0aGUgY3VycmVudCBkYXRlP1xuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGUgRlAgc3VibW9kdWxlIGFzXG4gKiA+IGl0IHVzZXMgYERhdGUubm93KClgIGludGVybmFsbHkgaGVuY2UgaW1wdXJlIGFuZCBjYW4ndCBiZSBzYWZlbHkgY3VycmllZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyBpbiB0aGlzIHllYXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAyNSBTZXB0ZW1iZXIgMjAxNCwgaXMgMiBKdWx5IDIwMTQgaW4gdGhpcyB5ZWFyP1xuICogY29uc3QgcmVzdWx0ID0gaXNUaGlzWWVhcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGhpc1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gaXNTYW1lWWVhcihkaXJ0eURhdGUsIERhdGUubm93KCkpO1xufSIsImltcG9ydCBpc1NhbWVEYXkgZnJvbSBcIi4uL2lzU2FtZURheS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNUb2RheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB0b2RheT9cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSB0b2RheT9cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IHByZXNlbnQgaW4gdGhlIEZQIHN1Ym1vZHVsZSBhc1xuICogPiBpdCB1c2VzIGBEYXRlLm5vdygpYCBpbnRlcm5hbGx5IGhlbmNlIGltcHVyZSBhbmQgY2FuJ3QgYmUgc2FmZWx5IGN1cnJpZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdG9kYXlcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyA2IE9jdG9iZXIgMjAxNCwgaXMgNiBPY3RvYmVyIDE0OjAwOjAwIHRvZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNUb2RheShuZXcgRGF0ZSgyMDE0LCA5LCA2LCAxNCwgMCkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RvZGF5KGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIGlzU2FtZURheShkaXJ0eURhdGUsIERhdGUubm93KCkpO1xufSIsImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVmFsaWQoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuXG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuXG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDsgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcblxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG5cbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xuXG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG5cbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoJ3t7Y291bnR9fScsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlOyIsImltcG9ydCBidWlsZEZvcm1hdExvbmdGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qc1wiO1xudmFyIGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiAnRUVFRSwgTU1NTSBkbywgeScsXG4gIGxvbmc6ICdNTU1NIGRvLCB5JyxcbiAgbWVkaXVtOiAnTU1NIGQsIHknLFxuICBzaG9ydDogJ01NL2RkL3l5eXknXG59O1xudmFyIHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiAnaDptbTpzcyBhIHp6enonLFxuICBsb25nOiAnaDptbTpzcyBhIHonLFxuICBtZWRpdW06ICdoOm1tOnNzIGEnLFxuICBzaG9ydDogJ2g6bW0gYSdcbn07XG52YXIgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogJ3t7ZGF0ZX19LCB7e3RpbWV9fScsXG4gIHNob3J0OiAne3tkYXRlfX0sIHt7dGltZX19J1xufTtcbnZhciBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXRMb25nOyIsInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcblxudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRSZWxhdGl2ZTsiLCJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07IC8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cblxudmFyIG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcbiAgd2lkZTogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ11cbn07XG52YXIgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLFxuICBzaG9ydDogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICBhYmJyZXZpYXRlZDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgd2lkZTogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddXG59O1xudmFyIGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9XG59O1xudmFyIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfVxufTtcblxudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTsgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICB2YXIgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuXG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdyZCc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xuXG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCJpbXBvcnQgYnVpbGRNYXRjaEZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qc1wiO1xuaW1wb3J0IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qc1wiO1xudmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG52YXIgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG52YXIgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pXG59O1xudmFyIHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59O1xudmFyIG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2lcbn07XG52YXIgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldXG59O1xudmFyIG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pXG59O1xudmFyIHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15qL2ksIC9eZi9pLCAvXm0vaSwgL15hL2ksIC9ebS9pLCAvXmovaSwgL15qL2ksIC9eYS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV0sXG4gIGFueTogWy9eamEvaSwgL15mL2ksIC9ebWFyL2ksIC9eYXAvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hdS9pLCAvXnMvaSwgL15vL2ksIC9ebi9pLCAvXmQvaV1cbn07XG52YXIgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaVxufTtcbnZhciBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn07XG52YXIgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2lcbn07XG52YXIgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pXG4gIH1cbn07XG52YXIgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICB9KSxcbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55JyxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnYW55JyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IG1hdGNoOyIsImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMFxuICAgIC8qIFN1bmRheSAqL1xuICAgICxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDFcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGxvY2FsZTsiLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbkhvdXIsIG1pbGxpc2Vjb25kc0luTWludXRlIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHBhcnNlSVNPXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFBhcnNlIElTTyBzdHJpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0IGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzbid0IGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3JcbiAqIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gcGFyc2VJU08oJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnKzAyMDE0MTAxJywgeyBhZGRpdGlvbmFsRGlnaXRzOiAxIH0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7XG4gIHZhciBfb3B0aW9ucyRhZGRpdGlvbmFsRGk7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID0gdG9JbnRlZ2VyKChfb3B0aW9ucyRhZGRpdGlvbmFsRGkgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cykgIT09IG51bGwgJiYgX29wdGlvbnMkYWRkaXRpb25hbERpICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRhZGRpdGlvbmFsRGkgOiAyKTtcblxuICBpZiAoYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJiBhZGRpdGlvbmFsRGlnaXRzICE9PSAxICYmIGFkZGl0aW9uYWxEaWdpdHMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYWRkaXRpb25hbERpZ2l0cyBtdXN0IGJlIDAsIDEgb3IgMicpO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIHZhciBkYXRlU3RyaW5ncyA9IHNwbGl0RGF0ZVN0cmluZyhhcmd1bWVudCk7XG4gIHZhciBkYXRlO1xuXG4gIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7XG4gICAgdmFyIHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTtcbiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpO1xuICB9XG5cbiAgaWYgKCFkYXRlIHx8IGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgdGltZSA9IDA7XG4gIHZhciBvZmZzZXQ7XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHtcbiAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpO1xuXG4gICAgaWYgKGlzTmFOKHRpbWUpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHtcbiAgICBvZmZzZXQgPSBwYXJzZVRpbWV6b25lKGRhdGVTdHJpbmdzLnRpbWV6b25lKTtcblxuICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpcnR5RGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpOyAvLyBqcyBwYXJzZWQgc3RyaW5nIGFzc3VtaW5nIGl0J3MgaW4gVVRDIHRpbWV6b25lXG4gICAgLy8gYnV0IHdlIG5lZWQgaXQgdG8gYmUgcGFyc2VkIGluIG91ciB0aW1lem9uZVxuICAgIC8vIHNvIHdlIHVzZSB1dGMgdmFsdWVzIHRvIGJ1aWxkIGRhdGUgaW4gb3VyIHRpbWV6b25lLlxuICAgIC8vIFllYXIgdmFsdWVzIGZyb20gMCB0byA5OSBtYXAgdG8gdGhlIHllYXJzIDE5MDAgdG8gMTk5OVxuICAgIC8vIHNvIHNldCB5ZWFyIGV4cGxpY2l0bHkgd2l0aCBzZXRGdWxsWWVhci5cblxuICAgIHZhciByZXN1bHQgPSBuZXcgRGF0ZSgwKTtcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoZGlydHlEYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRpcnR5RGF0ZS5nZXRVVENNb250aCgpLCBkaXJ0eURhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICByZXN1bHQuc2V0SG91cnMoZGlydHlEYXRlLmdldFVUQ0hvdXJzKCksIGRpcnR5RGF0ZS5nZXRVVENNaW51dGVzKCksIGRpcnR5RGF0ZS5nZXRVVENTZWNvbmRzKCksIGRpcnR5RGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KTtcbn1cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLyxcbiAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksXG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC9cbn07XG52YXIgZGF0ZVJlZ2V4ID0gL14tPyg/OihcXGR7M30pfChcXGR7Mn0pKD86LT8oXFxkezJ9KSk/fFcoXFxkezJ9KSg/Oi0/KFxcZHsxfSkpP3wpJC87XG52YXIgdGltZVJlZ2V4ID0gL14oXFxkezJ9KD86Wy4sXVxcZCopPykoPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/KD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyQvO1xudmFyIHRpbWV6b25lUmVnZXggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9O1xuICB2YXIgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTtcbiAgdmFyIHRpbWVTdHJpbmc7IC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG5cbiAgaWYgKGFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZGF0ZVN0cmluZ3M7XG4gIH1cblxuICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV07XG5cbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJyk7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ14oPzooXFxcXGR7NH18WystXVxcXFxkeycgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgJ30pfChcXFxcZHsyfXxbKy1dXFxcXGR7JyArICgyICsgYWRkaXRpb25hbERpZ2l0cykgKyAnfSkkKScpO1xuICB2YXIgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcblxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4ge1xuICAgIHllYXI6IE5hTixcbiAgICByZXN0RGF0ZVN0cmluZzogJydcbiAgfTtcbiAgdmFyIHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7XG4gIHZhciBjZW50dXJ5ID0gY2FwdHVyZXNbMl0gPyBwYXJzZUludChjYXB0dXJlc1syXSkgOiBudWxsOyAvLyBlaXRoZXIgeWVhciBvciBjZW50dXJ5IGlzIG51bGwsIG5vdCBib3RoXG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBjZW50dXJ5ID09PSBudWxsID8geWVhciA6IGNlbnR1cnkgKiAxMDAsXG4gICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgdmFyIGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChkYXRlUmVnZXgpOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgc3RyaW5nXG5cbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIHZhciBpc1dlZWtEYXRlID0gISFjYXB0dXJlc1s0XTtcbiAgdmFyIGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pO1xuICB2YXIgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7XG4gIHZhciBkYXkgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzNdKTtcbiAgdmFyIHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTtcbiAgdmFyIGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTtcblxuICBpZiAoaXNXZWVrRGF0ZSkge1xuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspO1xuICB9IGVsc2Uge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIE1hdGgubWF4KGRheU9mWWVhciwgZGF5KSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSkgOiAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgY2FwdHVyZXMgPSB0aW1lU3RyaW5nLm1hdGNoKHRpbWVSZWdleCk7XG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47IC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB0aW1lXG5cbiAgdmFyIGhvdXJzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1sxXSk7XG4gIHZhciBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7XG4gIHZhciBzZWNvbmRzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1szXSk7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHJldHVybiBob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSArIHNlY29uZHMgKiAxMDAwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWVVbml0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoJywnLCAnLicpKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nKSB7XG4gIGlmICh0aW1lem9uZVN0cmluZyA9PT0gJ1onKSByZXR1cm4gMDtcbiAgdmFyIGNhcHR1cmVzID0gdGltZXpvbmVTdHJpbmcubWF0Y2godGltZXpvbmVSZWdleCk7XG4gIGlmICghY2FwdHVyZXMpIHJldHVybiAwO1xuICB2YXIgc2lnbiA9IGNhcHR1cmVzWzFdID09PSAnKycgPyAtMSA6IDE7XG4gIHZhciBob3VycyA9IHBhcnNlSW50KGNhcHR1cmVzWzJdKTtcbiAgdmFyIG1pbnV0ZXMgPSBjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkgfHwgMDtcblxuICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHJldHVybiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlKTtcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3O1xuICB2YXIgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZik7XG4gIHJldHVybiBkYXRlO1xufSAvLyBWYWxpZGF0aW9uIGZ1bmN0aW9uc1xuLy8gRmVicnVhcnkgaXMgbnVsbCB0byBoYW5kbGUgdGhlIGxlYXAgeWVhciAodXNpbmcgfHwpXG5cblxudmFyIGRheXNJbk1vbnRocyA9IFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgcmV0dXJuIG1vbnRoID49IDAgJiYgbW9udGggPD0gMTEgJiYgZGF0ZSA+PSAxICYmIGRhdGUgPD0gKGRheXNJbk1vbnRoc1ttb250aF0gfHwgKGlzTGVhcFllYXJJbmRleCh5ZWFyKSA/IDI5IDogMjgpKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAzNjYgOiAzNjUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgcmV0dXJuIHdlZWsgPj0gMSAmJiB3ZWVrIDw9IDUzICYmIGRheSA+PSAwICYmIGRheSA8PSA2O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgIHJldHVybiBtaW51dGVzID09PSAwICYmIHNlY29uZHMgPT09IDA7XG4gIH1cblxuICByZXR1cm4gc2Vjb25kcyA+PSAwICYmIHNlY29uZHMgPCA2MCAmJiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8IDYwICYmIGhvdXJzID49IDAgJiYgaG91cnMgPCAyNTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHtcbiAgcmV0dXJuIG1pbnV0ZXMgPj0gMCAmJiBtaW51dGVzIDw9IDU5O1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3RhcnRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgc3RhcnQgb2YgYSBkYXlcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMDIgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHJldHVybnMge0RhdGV9IHRoZSBzdGFydCBvZiBhIHdlZWtcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksIHRoZSBzdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG5cbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMCk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJpbXBvcnQgXCIuL3N0eWxlLmNzc1wiO1xyXG5pbXBvcnQgeyB1aSB9IGZyb20gXCIuL21vZHVsZXMvdWkuanNcIjtcclxuXHJcbi8vcnVuIG9uIGxvYWRcclxudWkubG9hZE1lbnUoKTtcclxudWkucGxhY2VDYXJkcygwKTtcclxuXHJcbi8vVE9ETzpcclxuXHJcbi8vc2VhcmNoIHdpdGggZGF0YWxpc3QgaWYgcG9zc2libGVcclxuXHJcbi8vZW1wdHkgc3RhdGUgKG9yIG1haW4gcGFnZSwgbm90ZXMgaW5jbHVkZWQpXHJcblxyXG4vL2FkZCBvcHRpb25zIG1lbnUvbW9kYWwgKGhvdGtleXMsIHRoZW1lLCApXHJcblxyXG4vL2RhcmsgbW9kZSIsImV4cG9ydCBjbGFzcyBUb2RvIHtcclxuICBjb25zdHJ1Y3Rvcih0aXRsZSwgZGVzY3JpcHRpb24sIGRhdGVDcmVhdGlvbiwgZGF0ZUR1ZSwgLy90eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxyXG4gICAgY2hlY2tzLCBwcmlvcml0eSwgaXNGYXZvcml0ZSwgaXNQaW5uZWQpe1xyXG4gICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xyXG4gICAgdGhpcy5kYXRlQ3JlYXRpb24gPSBkYXRlQ3JlYXRpb247XHJcbiAgICB0aGlzLmRhdGVEdWUgPSBkYXRlRHVlO1xyXG4gICAgdGhpcy5jaGVja3MgPSBjaGVja3M7XHJcbiAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7XHJcbiAgICB0aGlzLmlzRmF2b3JpdGUgPSBpc0Zhdm9yaXRlO1xyXG4gICAgdGhpcy5pc1Bpbm5lZCA9IGlzUGlubmVkO1xyXG4gIH07XHJcbn07IiwiaW1wb3J0IHsgdG9kb1NhbXBsZSB9IGZyb20gXCIuL3RvZG9TYW1wbGUuanNcIjtcclxuaW1wb3J0IHsgVG9kbyB9IGZyb20gXCIuL2NsYXNzZXMuanNcIjtcclxuaW1wb3J0IHsgZm9ybWF0LCBpc1RvZGF5LCBpc1RoaXNXZWVrLCBpc1RoaXNNb250aCwgaXNUaGlzWWVhciwgaXNGdXR1cmUsIH0gZnJvbSBcImRhdGUtZm5zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgdG9kb0hhbmRsZXIgPSAoKCkgPT4ge1xyXG4gIGZ1bmN0aW9uIHRvZ2dsZUZhdigpe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXMuZGF0YXNldC50b2RvSWR4O1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGNvbnN0IHZhbHVlID0gbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uaXNGYXZvcml0ZTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmlzRmF2b3JpdGUgPSAhdmFsdWU7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdG9nZ2xlUGluKCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uaXNQaW5uZWQ7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5pc1Bpbm5lZCA9ICF2YWx1ZTtcclxuICAgIFxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJ0b2RvXCIsIEpTT04uc3RyaW5naWZ5KGxvY2FsKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRGYXZTdGF0dXMocHJvamVjdElkeCwgdG9kb0lkeCl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgcmV0dXJuIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmlzRmF2b3JpdGU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWxldGVUb2RvKHByb2plY3RJZHgsIHRvZG9JZHgpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zLnNwbGljZSh0b2RvSWR4LDEpO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRhc2tDaGVjayhwcm9qZWN0SWR4LCB0b2RvSWR4LCB0YXNrSWR4KXtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmNoZWNrc1t0YXNrSWR4XS5pc0RvbmU7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5jaGVja3NbdGFza0lkeF0uaXNEb25lID0gIXZhbHVlO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlbGV0ZVRhc2socHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uY2hlY2tzLnNwbGljZSh0YXNrSWR4LCAxKTtcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGVkaXRUaXRsZShwcm9qZWN0SWR4LCB0b2RvSWR4LCBzdHJpbmcpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLnRpdGxlID0gc3RyaW5nO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZWRpdERlc2NyaXB0aW9uKHByb2plY3RJZHgsIHRvZG9JZHgsIHN0cmluZyl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uZGVzY3JpcHRpb24gPSBzdHJpbmc7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBlZGl0RGF0ZUR1ZShwcm9qZWN0SWR4LCB0b2RvSWR4LCBzdHJpbmcpe1xyXG4gICAgY29uc3QgbG9jYWwgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zW3RvZG9JZHhdLmRhdGVEdWUgPSBzdHJpbmc7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBlZGl0TGFiZWwocHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCwgc3RyaW5nKXtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvc1t0b2RvSWR4XS5jaGVja3NbdGFza0lkeF0udGFzayA9IHN0cmluZztcclxuICAgIHNldExvY2FsU3RvcmFnZShsb2NhbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVRhc2socHJvamVjdElkeCwgdG9kb0lkeCl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0uY2hlY2tzLnB1c2goeyB0YXNrOiBcIlwiLCBpc0RvbmU6IGZhbHNlIH0pXHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0UHJvamVjdHNUaXRsZXMoKXtcclxuICAgIGxldCBwcm9qZWN0TGlzdCA9IFtdXHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWwuZm9yRWFjaChwcm9qZWN0ID0+IHtcclxuICAgICAgcHJvamVjdExpc3QucHVzaChwcm9qZWN0LnRpdGxlKTtcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHByb2plY3RMaXN0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVsZXRlUHJvamVjdChwcm9qZWN0SWR4KXtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBsb2NhbC5zcGxpY2UocHJvamVjdElkeCwgMSk7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBjaGFuZ2VQcmlvcml0eShwcm9qZWN0SWR4LCB0b2RvSWR4LCBwcmlvcml0eSl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3NbdG9kb0lkeF0ucHJpb3JpdHkgPSBwcmlvcml0eSA9PT0gXCIwXCIgPyBcImxvd1wiIDogcHJpb3JpdHkgPT09IFwiMVwiID8gXCJtaWRkbGVcIiA6IFwiaGlnaFwiO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZ2V0UHJvamVjdChyZXF1ZXN0KXtcclxuICAgIFxyXG4gICAgaWYodHlwZW9mIHJlcXVlc3QgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICByZXR1cm4gbG9jYWxbcmVxdWVzdF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHJlcXVlc3QgPT09IFwicGlubmVkXCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHsgdGl0bGU6IFwiUGlubmVkXCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIGxvY2FsLmZvckVhY2goKHRoaXNQcm9qZWN0LCBwcm9qZWN0SWR4KSA9PiB0aGlzUHJvamVjdC50b2Rvcy5mb3JFYWNoKCh0aGlzVG9kbywgdG9kb0lkeCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXNUb2RvLmlzUGlubmVkKXtcclxuICAgICAgICAgIHRoaXNUb2RvLnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgICAgICAgdGhpc1RvZG8udG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICAgICAgICBmaWx0ZXJlZC50b2Rvcy5wdXNoKHRoaXNUb2RvKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KSk7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVxdWVzdCA9PT0gXCJmYXZvcml0ZXNcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJGYXZvcml0ZXNcIiwgdG9kb3M6IFtdfTtcclxuICAgICAgbG9jYWwuZm9yRWFjaCgodGhpc1Byb2plY3QsIHByb2plY3RJZHgpID0+IHRoaXNQcm9qZWN0LnRvZG9zLmZvckVhY2goKHRoaXNUb2RvLCB0b2RvSWR4KSA9PiB7XHJcbiAgICAgICAgaWYodGhpc1RvZG8uaXNGYXZvcml0ZSl7XHJcbiAgICAgICAgICB0aGlzVG9kby5wcm9qZWN0SWR4ID0gcHJvamVjdElkeDtcclxuICAgICAgICAgIHRoaXNUb2RvLnRvZG9JZHggPSB0b2RvSWR4O1xyXG4gICAgICAgICAgZmlsdGVyZWQudG9kb3MucHVzaCh0aGlzVG9kbyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSkpO1xyXG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHJlcXVlc3QgPT09IFwidG9kYXlcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJUYXNrcyBmb3IgdG9kYXlcIiwgdG9kb3M6IFtdfTtcclxuICAgICAgbG9jYWwuZm9yRWFjaCgodGhpc1Byb2plY3QsIHByb2plY3RJZHgpID0+IHRoaXNQcm9qZWN0LnRvZG9zLmZvckVhY2goKHRoaXNUb2RvLCB0b2RvSWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0RGF0ZSA9IHRoaXNUb2RvLmRhdGVEdWUuc3BsaXQoXCItXCIpLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgIGlmKGlzVG9kYXkobmV3IERhdGUoZm9ybWF0RGF0ZSkpKXtcclxuICAgICAgICAgIHRoaXNUb2RvLnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgICAgICAgdGhpc1RvZG8udG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICAgICAgICBmaWx0ZXJlZC50b2Rvcy5wdXNoKHRoaXNUb2RvKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KSk7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVxdWVzdCA9PT0gXCJ0aGlzLXdlZWtcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJUYXNrcyBmb3IgdGhpcyB3ZWVrXCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIGxvY2FsLmZvckVhY2goKHRoaXNQcm9qZWN0LCBwcm9qZWN0SWR4KSA9PiB0aGlzUHJvamVjdC50b2Rvcy5mb3JFYWNoKCh0aGlzVG9kbywgdG9kb0lkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdERhdGUgPSB0aGlzVG9kby5kYXRlRHVlLnNwbGl0KFwiLVwiKS5qb2luKFwiLFwiKTtcclxuICAgICAgICBpZihpc0Z1dHVyZShuZXcgRGF0ZShmb3JtYXREYXRlKSlcclxuICAgICAgICAmJmlzVGhpc1dlZWsobmV3IERhdGUoZm9ybWF0RGF0ZSkpKXtcclxuICAgICAgICAgIHRoaXNUb2RvLnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgICAgICAgdGhpc1RvZG8udG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICAgICAgICBmaWx0ZXJlZC50b2Rvcy5wdXNoKHRoaXNUb2RvKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KSk7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVxdWVzdCA9PT0gXCJ0aGlzLW1vbnRoXCIpe1xyXG4gICAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHsgdGl0bGU6IFwiVGFza3MgZm9yIHRoaXMgbW9udGhcIiwgdG9kb3M6IFtdfTtcclxuICAgICAgbG9jYWwuZm9yRWFjaCgodGhpc1Byb2plY3QsIHByb2plY3RJZHgpID0+IHRoaXNQcm9qZWN0LnRvZG9zLmZvckVhY2goKHRoaXNUb2RvLCB0b2RvSWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0RGF0ZSA9IHRoaXNUb2RvLmRhdGVEdWUuc3BsaXQoXCItXCIpLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgIGlmKGlzRnV0dXJlKG5ldyBEYXRlKGZvcm1hdERhdGUpKVxyXG4gICAgICAgICYmaXNUaGlzTW9udGgobmV3IERhdGUoZm9ybWF0RGF0ZSkpKXtcclxuICAgICAgICAgIHRoaXNUb2RvLnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgICAgICAgdGhpc1RvZG8udG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICAgICAgICBmaWx0ZXJlZC50b2Rvcy5wdXNoKHRoaXNUb2RvKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KSk7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYocmVxdWVzdCA9PT0gXCJ0aGlzLXllYXJcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJUYXNrcyBmb3IgdGhpcyB5ZWFyXCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIFxyXG4gICAgICBsb2NhbC5mb3JFYWNoKCh0aGlzUHJvamVjdCwgcHJvamVjdElkeCkgPT4gdGhpc1Byb2plY3QudG9kb3MuZm9yRWFjaCgodGhpc1RvZG8sIHRvZG9JZHgpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gdGhpc1RvZG8uZGF0ZUR1ZS5zcGxpdChcIi1cIikuam9pbihcIixcIik7XHJcbiAgICAgICAgaWYoaXNGdXR1cmUobmV3IERhdGUoZm9ybWF0RGF0ZSkpXHJcbiAgICAgICAgJiZpc1RoaXNZZWFyKG5ldyBEYXRlKGZvcm1hdERhdGUpKSl7XHJcbiAgICAgICAgICB0aGlzVG9kby5wcm9qZWN0SWR4ID0gcHJvamVjdElkeDtcclxuICAgICAgICAgIHRoaXNUb2RvLnRvZG9JZHggPSB0b2RvSWR4O1xyXG4gICAgICAgICAgZmlsdGVyZWQudG9kb3MucHVzaCh0aGlzVG9kbyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihyZXF1ZXN0ID09PSBcImV4cGlyZWRcIil7XHJcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0geyB0aXRsZTogXCJFeHBpcmVkIHRhc2tzXCIsIHRvZG9zOiBbXX07XHJcbiAgICAgIFxyXG4gICAgICBsb2NhbC5mb3JFYWNoKCh0aGlzUHJvamVjdCwgcHJvamVjdElkeCkgPT4gdGhpc1Byb2plY3QudG9kb3MuZm9yRWFjaCgodGhpc1RvZG8sIHRvZG9JZHgpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gdGhpc1RvZG8uZGF0ZUR1ZS5zcGxpdChcIi1cIikuam9pbihcIixcIik7XHJcbiAgICAgICAgaWYoIWlzRnV0dXJlKG5ldyBEYXRlKGZvcm1hdERhdGUpKVxyXG4gICAgICAgICYmICFpc1RvZGF5KG5ldyBEYXRlKGZvcm1hdERhdGUpKVxyXG4gICAgICAgICYmIHRoaXNUb2RvLmRhdGVEdWUubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICB0aGlzVG9kby5wcm9qZWN0SWR4ID0gcHJvamVjdElkeDtcclxuICAgICAgICAgIHRoaXNUb2RvLnRvZG9JZHggPSB0b2RvSWR4O1xyXG4gICAgICAgICAgZmlsdGVyZWQudG9kb3MucHVzaCh0aGlzVG9kbyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBjcmVhdGVUb2RvKHByb2plY3RJZHgpe1xyXG4gICAgbGV0IHJlcGVhdGVkID0gMDtcclxuICAgIGNvbnN0IGxvY2FsID0gZ2V0TG9jYWxTdG9yYWdlKCk7XHJcbiAgICBsb2NhbFtwcm9qZWN0SWR4XS50b2Rvcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZihpdGVtLnRpdGxlLmluY2x1ZGVzKFwibmV3IHRvLWRvXCIpKSByZXBlYXRlZCsrO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0b2RvTmFtZSA9IHJlcGVhdGVkID09PSAwID8gXCJuZXcgdG8tZG9cIiA6IGBuZXcgdG8tZG8oJHtyZXBlYXRlZH0pYDtcclxuICAgIFxyXG4gICAgY29uc3QgZGF0ZSA9IGZvcm1hdChuZXcgRGF0ZSgpLCBcInl5eXktTU0tZGRcIik7XHJcbiAgICBcclxuICAgIGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zLnB1c2goXHJcbiAgICAgIG5ldyBUb2RvKHRvZG9OYW1lLCBcIlwiLCBkYXRlLCBcIlwiLCBbXSwgXCJsb3dcIiwgZmFsc2UsIGZhbHNlKVxyXG4gICAgICApO1xyXG4gICAgc2V0TG9jYWxTdG9yYWdlKGxvY2FsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb2plY3QoKXtcclxuICAgIGxldCByZXBlYXRlZCA9IDA7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWwuZm9yRWFjaChwcm9qZWN0ID0+IHtcclxuICAgICAgaWYocHJvamVjdC50aXRsZS5pbmNsdWRlcyhcIm5ldyBwcm9qZWN0XCIpKSByZXBlYXRlZCsrO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0aXRsZSA9IHJlcGVhdGVkID09PSAwID8gXCJuZXcgcHJvamVjdFwiIDogYG5ldyBwcm9qZWN0KCR7cmVwZWF0ZWR9KWA7XHJcbiAgICBcclxuICAgIGxvY2FsLnB1c2goe3RpdGxlLCB0b2RvczpbXSwgfSk7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBlZGl0UHJvamVjdFRpdGxlKHByb2plY3RJZHgsIHZhbCl7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udGl0bGUgPSB2YWw7XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbG9hZFNhbXBsZSgpe1xyXG4gICAgaWYobG9jYWxTdG9yYWdlLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidG9kb1wiLCBKU09OLnN0cmluZ2lmeSh0b2RvU2FtcGxlKSk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5kYXJrID0gSlNPTi5zdHJpbmdpZnkoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKCl7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRvZG9cIikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TG9jYWxTdG9yYWdlKHZhbCl7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInRvZG9cIiwgSlNPTi5zdHJpbmdpZnkodmFsKSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1vdmVEcmFnZ2VkQ2FyZChwcm9qZWN0SWR4LCBmcm9tVG9kbywgdG9Ub2RvLCBwb3NpdGlvbil7XHJcbiAgICBjb25zdCBsb2NhbCA9IGdldExvY2FsU3RvcmFnZSgpO1xyXG5cclxuICAgIGNvbnN0IHNhbWVQb3N1cFRvRG93biA9IHBhcnNlSW50KGZyb21Ub2RvKSsxID09IHRvVG9kbztcclxuICAgIGNvbnN0IHNhbWVQb3Nkb3duVG9VcCA9IHBhcnNlSW50KGZyb21Ub2RvKS0xID09IHRvVG9kbzsgXHJcbiAgICBcclxuICAgIGlmKChzYW1lUG9zdXBUb0Rvd24gJiYgcG9zaXRpb24gPT0gXCJiZWZvcmVcIilcclxuICAgIHx8IChzYW1lUG9zZG93blRvVXAgJiYgcG9zaXRpb24gPT0gXCJhZnRlclwiKSl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vZml4IHVwIHRvIGRvd24gYW5kIGJlZm9yZSBpbnZlcnNpb24sIHNhbWUgZm9yIGRvd24gdG8gdXAgYW5kIGFmdGVyXHJcbiAgICBjb25zdCBtb3Zlc0Rvd24gPSBmcm9tVG9kbyA8IHRvVG9kbztcclxuICAgIGNvbnN0IGN1dCA9IG1vdmVzRG93biAmJiBwb3NpdGlvbiA9PSBcImJlZm9yZVwiID8gcGFyc2VJbnQodG9Ub2RvKS0xXHJcbiAgICA6ICFtb3Zlc0Rvd24gJiYgcG9zaXRpb24gPT0gXCJhZnRlclwiID8gcGFyc2VJbnQodG9Ub2RvKSsxXHJcbiAgICA6IHRvVG9kbztcclxuXHJcbiAgICBjb25zdCBmcm9tQ2FyZCA9IGxvY2FsW3Byb2plY3RJZHhdLnRvZG9zLnNwbGljZShmcm9tVG9kbywgMSk7XHJcbiAgICBjb25zdCBmaXJzdEhhbGYgPSBsb2NhbFtwcm9qZWN0SWR4XS50b2RvcztcclxuICAgIGNvbnN0IHNlY29uZEhhbGYgPSBmaXJzdEhhbGYuc3BsaWNlKGN1dCwgZmlyc3RIYWxmLmxlbmd0aCk7XHJcblxyXG4gICAgbG9jYWxbcHJvamVjdElkeF0udG9kb3MgPSBbLi4uZmlyc3RIYWxmLCAuLi5mcm9tQ2FyZCwgLi4uc2Vjb25kSGFsZl07XHJcbiAgICBzZXRMb2NhbFN0b3JhZ2UobG9jYWwpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGFya01vZGUoaXNBY3RpdmUpe1xyXG4gICAgbG9jYWxTdG9yYWdlLmRhcmsgPSBKU09OLnN0cmluZ2lmeShpc0FjdGl2ZSk7XHJcbiAgICBjb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2UuZGFyayk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpc09uRGFya01vZGUoKXtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZT8uZGFyayk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyB0b2dnbGVGYXYsIHRvZ2dsZVBpbiwgZ2V0RmF2U3RhdHVzLCBkZWxldGVUb2RvLCB0YXNrQ2hlY2ssXHJcbiAgICBkZWxldGVUYXNrLCBlZGl0VGl0bGUsIGVkaXREZXNjcmlwdGlvbiwgZWRpdERhdGVEdWUsIGVkaXRMYWJlbCxcclxuICAgIGNyZWF0ZVRhc2ssIGdldFByb2plY3RzVGl0bGVzLCBkZWxldGVQcm9qZWN0LCBjaGFuZ2VQcmlvcml0eSxcclxuICAgIGdldFByb2plY3QsIGNyZWF0ZVRvZG8sIGNyZWF0ZVByb2plY3QsIGVkaXRQcm9qZWN0VGl0bGUsIGxvYWRTYW1wbGUsXHJcbiAgICBtb3ZlRHJhZ2dlZENhcmQsIGRhcmtNb2RlLCBpc09uRGFya01vZGUgfVxyXG59KSgpOyIsImltcG9ydCB7VG9kb30gZnJvbSBcIi4vY2xhc3Nlcy5qc1wiO1xyXG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcclxuXHJcbmNvbnN0IGRhdGUgPSBmb3JtYXQobmV3IERhdGUoKSwgXCJ5eXl5LU1NLWRkXCIpO1xyXG4gICAgXHJcbmV4cG9ydCBjb25zdCB0b2RvU2FtcGxlID0gW1xyXG4gIHtcclxuICAgIHRpdGxlOiBcIkhvdyB0byB1c2VcIixcclxuICAgIHRvZG9zOiBbXHJcbiAgICAgIG5ldyBUb2RvKFwiMSkgQ3JlYXRpbmcgYSBwcm9qZWN0XCIsIFwiVGhlc2UgYXJlIHRoZSBzdGVwcyB0byBjcmVhdGUgYSBuZXcgcHJvamVjdFwiLCBkYXRlLFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFRvdWNoIHRoZSBidXJnZXIgYnV0dG9uIFwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIm9yIGxvb2sgYXQgdGhlIHNpZGViYXIgYXQgdGhlIGxlZnRcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgVG91Y2ggdGhlIHBsdXMgYnV0dG9uXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFlvdXIgbmV3IHByb2plY3Qgd2lsbCBvcGVuXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFRvdWNoIHRoZSBwZW5jaWwgYnV0dG9uIG9uIHRoZSBtZW51XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFdyaXRlIGEgcHJvcGVyIHRpdGxlIGZvciB0aGUgbmV3IHByb2plY3RcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgVGhlIG5ldyB0aXRsZSBhdXRvc2F2ZXMgd2hpbGUgd3JpdGluZ1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBDb25ncmF0dWxhdGlvbnMhIFlvdSBjcmVhdGVkIHlvdXIgZmlyc3QgcHJvamVjdCFcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgSWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgcHJvamVjdCwgaG9sZCBvbiB0aGUgYmluXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwibmV4dCB0byBpdCdzIHRpdGxlIG9uIHRoZSBtZW51XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgXSwgXCJsb3dcIiwgdHJ1ZSwgdHJ1ZSksXHJcblxyXG4gICAgICBuZXcgVG9kbyhcIjIpIEFkZGluZyBhIHRvLWRvXCIsIFwiVGhpcyBpcyBob3cgeW91IGNyZWF0ZSBhIG5ldyB0by1kb1wiLCBkYXRlLFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFRvdWNoIHRoZSBwbHVzIGJ1dHRvbiBhdCB0aGUgYm90dG9tXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFRoaXMgd2lsbCBvcGVuIHRoZSB0by1kbyBvbiBlZGl0IG1vZGVcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgWW91IGNhbiBjaGFuZ2UgdGhlIG5hbWUgYW5kIGFkZCBhIGRlc2NyaXB0aW9uXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIENoYW5nZXMgYXJlIHNhdmVkIG9uIGVhY2gga2V5IHByZXNzXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIFlvdSBjYW4gYWRkIGEgZHVlIGRhdGUgYW5kIGNoYW5nZSBwcmlvcml0eVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBUaGUgcGx1cyBidXR0b24gYXQgdGhlIGJvdHRvbSB3aWxsIGNyZWF0ZSB0YXNrc1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBXcml0ZSBhIGRlc2NyaXB0aW9uIGZvciB5b3VyIG5ldyB0YXNrXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIE5leHQgdG8gaXQgdGhlcmUncyBhIGNoZWNrYm94XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwidXNlIGl0IG9uY2UgdGhlIHRhc2sgaXMgZG9uZVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBZb3UgY2FuIGRlbGV0ZSBhIHRhc2sgd2l0aCB0aGUgY3Jvc3MgYnV0dG9uXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwi4oCiIERpc2FibGUgdGhlIGVkaXQgbW9kZSB3aXRoIHRoZSBibHVlIHBlbmNpbCBidXR0b25cIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgWW91IGNhbiB1c2UgdGhlIGNoZWNrYm94IGV2ZW4gd2l0aG91dCBlZGl0IG1vZGVcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCLigKIgQ3JlYXRlIGFzIG1hbnkgdG8tZG9zIGFzIHlvdSBuZWVkIVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgIF0sIFwibG93XCIsIHRydWUsIHRydWUpLFxyXG5cclxuICAgICAgbmV3IFRvZG8oXCIzKSBNYW5hZ2luZyBhIHRvLWRvXCIsIFwiSGVyZSdzIHdoYXQgeW91IGNhbiBkbyB3aXRoIHlvdXIgdG8tZG9zXCIsIGRhdGUsXCJcIiwgW1xyXG4gICAgICAgIHsgdGFzazogXCLigKIgQXQgdGhlIHJpZ2h0IG9mIHRoZSB0aXRsZSB0aGVyZSdzIDQgYnV0dG9uczpcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCIxLiBUaGUgcGluIGJ1dHRvbiB3aWxsIHNob3cgdGhlIHRvLWRvIGluIHRoZSBwaW5uZWQgZmlsdGVyXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiMi4gVGhlIHBlbmNpbCBidXR0b24gd2lsbCB0b2dnbGUgdGhlIGVkaXQgbW9kZVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjMuIFRoZSBzdGFyIGJ1dHRvbiB3aWxsIG1hcmsgdGhlIHRvLWRvIGFzIGZhdm9yaXRlXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwidGhpcyB3aWxsIGFsc28gcHJldmVudCBkZWxldGlvbiwgdW5saWtlIHRoZSBwaW5cIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCJhbmQgd2lsbCBhbHNvIHNob3cgb24gdGhlIGZhdm9yaXRlcyBmaWx0ZXJcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCI0LiBUaGUgYmluIGJ1dHRvbiB3aWxsIGRlbGV0ZSB0aGUgdG8tZG9cIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCJvbmx5IGlmIGl0J3Mgbm90IGZhdmVkIGJ5IHRoZSBzdGFyXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiaG9sZCBvbiBpdCBmb3IgYSBmZXcgc2Vjb25kcyB0byBkZWxldGVcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCJvciByZWxlYXNlIGJlZm9yZSB0aGUgYmFyIGZpbGxzIHRvIGNhbmNlbFwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIuKAoiBBdCB0aGUgbGVmdCB0aGVyZSdzIGEgaGFuZGxlIGljb246XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiMS4gaG9sZCBkb3duIG9uIGl0IHRvIGRyYWcgYSB0by1kb1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjIuIHJlbGVhc2UgaXQgd2hlcmUgeW91IHdhbnQgdG8gbW92ZSBpdFwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgIF0sIFwibG93XCIsIHRydWUsIHRydWUpLFxyXG5cclxuICAgICAgbmV3IFRvZG8oXCI0KSBIb3RrZXlzXCIsIFwiVGhlIGhvdGtleXMgeW91IGNhbiB1c2Ugb24gZWRpdCBtb2RlXCIsIGRhdGUsXCJcIiwgW1xyXG4gICAgICAgIHsgdGFzazogXCLigKIgWW91IGNhbiB1c2Ugc29tZSBob3RrZXlzIHdoZW4gd29ya2luZyBvbiB0YXNrc1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIndoaWxlIHRoZSBjdXJzb3IgaXMgb24gdGhlIHRleHQgZmllbGQ6XCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiMS4gRW50ZXI6IGNyZWF0ZSBhIG5ldyB0YXNrXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiMi4gVXAvZG93biBhcnJvd3M6IG1vdmUgYmV0d2VlbiBpbnB1dHNcIiwgaXNEb25lOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGFzazogXCIzLiBDVFJMK3NwYWNlYmFyOiBjaGVja3MvdW5jaGVja3MgaXQncyByZXNwZWN0aXZlIGJveFwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcIjQuIEFMVCtEZWxldGU6IGRlbGV0ZXMgY3VycmVudCB0YXNrXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgXSwgXCJsb3dcIiwgdHJ1ZSwgdHJ1ZSksXHJcblxyXG4gICAgICBuZXcgVG9kbyhcIkFib3V0XCIsIFwiVG8tZG8gcHJvamVjdCBjcmVhdGVkIGJ5IEhlY3RvciBWaWxhc1wiLCBkYXRlLFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwiRmluZCBtZSBvbiBHaXRIdWIgYXMgSGVjdG9yVmlsYXMhXCIsIGlzRG9uZTogZmFsc2UgfSxcclxuICAgICAgICB7IHRhc2s6IFwiZ2l0aHViLmNvbS9IZWN0b3JWaWxhc1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgIF0sIFwiXCIsIHRydWUsIHRydWUpLFxyXG4gICAgXSxcclxuICB9LFxyXG5cclxuICB7XHJcbiAgICB0aXRsZTogXCJFeGFtcGxlIHByb2plY3RcIixcclxuICAgIHRvZG9zOiBbXHJcbiAgICAgIG5ldyBUb2RvKFwiZXhlcmNpc2VcIiwgXCJJdCdzIGxlZyBkYXkhXCIsIGRhdGUsIFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwicnVuIDNrbVwiLCBpc0RvbmU6IHRydWUgfSxcclxuICAgICAgICB7IHRhc2s6IFwiYmljeWNsZVwiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgICAgeyB0YXNrOiBcInNxdWF0c1wiLCBpc0RvbmU6IGZhbHNlIH0sXHJcbiAgICAgIF0sIFwibWlkZGxlXCIsIGZhbHNlLCB0cnVlKSxcclxuXHJcbiAgICAgIG5ldyBUb2RvKFwiY29kaW5nXCIsIFwiXCIsIGRhdGUsIFwiXCIsIFtcclxuICAgICAgICB7IHRhc2s6IFwiY2hlY2sgY3NzLXRyaWNrc1wiLCBpc0RvbmU6IHRydWUgfSxcclxuICAgICAgICB7IHRhc2s6IFwiY29udGludWUgVE9QIHByYWN0aWNlXCIsIGlzRG9uZTogdHJ1ZSB9LFxyXG4gICAgICBdLCBcImhpZ2hcIiwgdHJ1ZSwgZmFsc2UpLFxyXG4gICAgXSxcclxuICB9LFxyXG5dOyIsImltcG9ydCB7dG9kb0hhbmRsZXJ9IGZyb20gXCIuL3RvZG9IYW5kbGVyLmpzXCJcclxuXHJcbmltcG9ydCBpY29uRHJhZyBmcm9tIFwiLi4vbWVkaWEvaW1hZ2VzL2ljb25zL2RyYWcuc3ZnXCI7XHJcbmltcG9ydCBpY29uVHJhc2ggZnJvbSBcIi4uL21lZGlhL2ltYWdlcy9pY29ucy90cmFzaC5zdmdcIjtcclxuaW1wb3J0IGljb25UcmFzaExpZCBmcm9tIFwiLi4vbWVkaWEvaW1hZ2VzL2ljb25zL3RyYXNoLWxpZC5zdmdcIjtcclxuXHJcbmltcG9ydCB7IGZvcm1hdCwgcGFyc2VJU08sIGludGxGb3JtYXREaXN0YW5jZSwgaXNUb2RheSB9IGZyb20gXCJkYXRlLWZuc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHVpID0gKCgpID0+IHtcclxuICBjb25zdCBtb3VzZSA9IHsgeDowLCB5OjAgfTsgLy90cmFjayBtb3VzZSBmb3IgZHJhZ1xyXG4gIGxldCBjdXJzb3JJbnRlcnZhbDtcclxuICBjb25zdCBjYXJkTW92ZSA9IHsgLy9mb3IgZHJhZyBhbmQgZHJvcFxyXG4gICAgZnJvbToge3Byb2plY3Q6IHVuZGVmaW5lZCwgdG9kbzogdW5kZWZpbmVkfSxcclxuICAgIHRvOiB7cHJvamVjdDogdW5kZWZpbmVkLCB0b2RvOiB1bmRlZmluZWR9LFxyXG4gICAgcG9zaXRpb246IHVuZGVmaW5lZCxcclxuICB9XHJcblxyXG4gIGNvbnN0IGNhcmRzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjYXJkcy1jb250YWluZXJcIik7XHJcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xyXG5cclxuICBjb25zdCBkYXRlRm9ybWF0ID0gXCJFRScsJyBNTU1NIGRvIHl5eXlcIjtcclxuXHJcbiAgZnVuY3Rpb24gbG9hZE1lbnUoKXtcclxuICAgIC8vY3JlYXRlIGV4YW1wbGUgcHJvamVjdHMgaWYgdGhlcmUncyBubyBsb2NhbFN0b3JhZ2VcclxuICAgIHRvZG9IYW5kbGVyLmxvYWRTYW1wbGUoKTtcclxuXHJcbiAgICAvL3NldCBkYXJrIG1vZGUgaWYgbGVmdCBhY3RpdmVcclxuICAgIGxvYWREYXJrTW9kZSgpO1xyXG5cclxuICAgIGNvbnN0IG1lbnVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbWVudUJ0bi5pZCA9IFwibWVudS1idXR0b25cIjtcclxuICAgIG1lbnVCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRvZ2dsZU1lbnUpO1xyXG5cclxuICAgIGNvbnN0IG1lbnUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbWVudS5pZCA9IFwibWVudVwiO1xyXG5cclxuICAgIGNvbnN0IHNjcmVlbkNvdmVyTWVudSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBzY3JlZW5Db3Zlck1lbnUuaWQgPSBcInNjcmVlbi1jb3Zlci1tZW51XCI7XHJcbiAgICBzY3JlZW5Db3Zlck1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRvZ2dsZU1lbnUpO1xyXG5cclxuICAgIC8vZmlsdGVyIGxpc3RcclxuICAgIGNvbnN0IGZpZWxkc2V0RmlsdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO1xyXG4gICAgZmllbGRzZXRGaWx0ZXIuY2xhc3NMaXN0LmFkZChcIm1lbnUtZmllbGRzZXRcIiwgXCJmaWVsZHNldC1maWx0ZXJcIik7XHJcbiAgICBjb25zdCBsZWdlbmREdWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGVnZW5kXCIpO1xyXG4gICAgbGVnZW5kRHVlLmlubmVyVGV4dCA9IFwiRmlsdGVyXCI7XHJcblxyXG4gICAgY29uc3QgbGlzdER1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiKTtcclxuICAgIGxpc3REdWUuY2xhc3NMaXN0LmFkZChcImZpZWxkc2V0LWxpc3RcIiwgXCJkdWUtbGlzdFwiKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJzID0gW1wiVG9kYXlcIiwgXCJUaGlzIHdlZWtcIiwgXCJUaGlzIG1vbnRoXCIsIFwiVGhpcyB5ZWFyXCIsIFwiRXhwaXJlZFwiLCBcIlBpbm5lZFwiLCBcIkZhdm9yaXRlc1wiXTtcclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XHJcbiAgICAgIGxpLmNsYXNzTGlzdC5hZGQoXCJtZW51LWZpbHRlclwiLCBcIm1lbnUtaXRlbVwiKTtcclxuICAgICAgbGkuZGF0YXNldC5maWx0ZXIgPSBmaWx0ZXJzW2ldLnNwbGl0KFwiIFwiKS5qb2luKFwiLVwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZmlsdGVyVG9kb3MpO1xyXG5cclxuICAgICAgY29uc3QgcGFyYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgICBwYXJhLmlubmVyVGV4dCA9IGZpbHRlcnNbaV07XHJcblxyXG4gICAgICBsaS5hcHBlbmRDaGlsZChwYXJhKTtcclxuICAgICAgbGlzdER1ZS5hcHBlbmRDaGlsZChsaSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGZpZWxkc2V0RmlsdGVyLmFwcGVuZChsZWdlbmREdWUsIGxpc3REdWUpO1xyXG5cclxuICAgIC8vdGFza3MgbGlzdFxyXG4gICAgY29uc3QgZmllbGRzZXRUYXNrcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKTtcclxuICAgIGZpZWxkc2V0VGFza3MuY2xhc3NMaXN0LmFkZChcIm1lbnUtZmllbGRzZXRcIiwgXCJmaWVsZHNldC10YXNrc1wiKTtcclxuICAgIGNvbnN0IGxlZ2VuZFByb2plY3RzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxlZ2VuZFwiKTtcclxuICAgIGxlZ2VuZFByb2plY3RzLmlubmVyVGV4dCA9IFwiUHJvamVjdHNcIjtcclxuXHJcbiAgICBjb25zdCBuZXdQcm9qZWN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIG5ld1Byb2plY3REaXYuY2xhc3NMaXN0LmFkZChcImNyZWF0ZS10YXNrLWRpdlwiKTtcclxuICAgIG5ld1Byb2plY3REaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNyZWF0ZVByb2plY3QpO1xyXG4gICAgY29uc3QgbmV3UHJvamVjdFBhcmEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIG5ld1Byb2plY3RQYXJhLmlubmVyVGV4dCA9IFwiQ3JlYXRlIHByb2plY3RcIjtcclxuICAgIGNvbnN0IG5ld1Byb2plY3RJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIG5ld1Byb2plY3RJY29uLmNsYXNzTGlzdC5hZGQoXCJjYXJkLWljb25cIiwgXCJjcmVhdGUtdGFza1wiKTtcclxuXHJcbiAgICBuZXdQcm9qZWN0RGl2LmFwcGVuZChuZXdQcm9qZWN0UGFyYSwgbmV3UHJvamVjdEljb24pO1xyXG4gICAgZmllbGRzZXRUYXNrcy5hcHBlbmQobGVnZW5kUHJvamVjdHMsIHByb2plY3RzTGlzdCgpLCBuZXdQcm9qZWN0RGl2KTtcclxuXHJcbiAgICAvL29wdGlvbnMgYW5kIG90aGVyc1xyXG4gICAgY29uc3QgZmllbGRzZXRPcHRpb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO1xyXG4gICAgZmllbGRzZXRPcHRpb25zLmNsYXNzTGlzdC5hZGQoXCJtZW51LWZpZWxkc2V0XCIsIFwiZmllbGRzZXQtb3B0aW9uc1wiKTtcclxuICAgIGNvbnN0IGxlZ2VuZE9wdGlvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGVnZW5kXCIpO1xyXG4gICAgbGVnZW5kT3B0aW9ucy5pbm5lclRleHQgPSBcIk9wdGlvbnNcIjtcclxuXHJcbiAgICBcclxuICAgIGNvbnN0IG9wdGlvbnNMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO1xyXG4gICAgb3B0aW9uc0xpc3QuY2xhc3NMaXN0LmFkZChcImZpZWxkc2V0LWxpc3RcIik7XHJcblxyXG4gICAgY29uc3QgZGFya01vZGVMaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcclxuICAgIGRhcmtNb2RlTGkuY2xhc3NMaXN0LmFkZChcIm1lbnUtaXRlbVwiLCBcImRhcmstbW9kZVwiKTtcclxuICAgIGNvbnN0IGRhcmtNb2RlQ2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICBkYXJrTW9kZUNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBkYXJrTW9kZUNoZWNrYm94LmlkID0gXCJkYXJrLW1vZGVcIjtcclxuICAgIGRhcmtNb2RlQ2hlY2tib3guY2hlY2tlZCA9IHRvZG9IYW5kbGVyLmlzT25EYXJrTW9kZSgpO1xyXG4gICAgZGFya01vZGVDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRvZ2dsZURhcmtNb2RlKTtcclxuICAgIGNvbnN0IGRhcmtNb2RlTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIik7XHJcbiAgICBkYXJrTW9kZUxhYmVsLmlubmVyVGV4dCA9IFwiRGFyayBtb2RlXCI7XHJcbiAgICBkYXJrTW9kZUxhYmVsLmh0bWxGb3IgPSBkYXJrTW9kZUNoZWNrYm94LmlkO1xyXG4gICAgZGFya01vZGVMaS5hcHBlbmQoZGFya01vZGVDaGVja2JveCwgZGFya01vZGVMYWJlbCk7XHJcblxyXG4gICAgY29uc3QgYWJvdXRMaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcclxuICAgIGFib3V0TGkuY2xhc3NMaXN0LmFkZChcIm1lbnUtaXRlbVwiLCBcImFib3V0XCIpO1xyXG4gICAgY29uc3QgYWJvdXREaXZQYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBjb25zdCBhYm91dExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGFib3V0TGluay5pbm5lclRleHQgPSBcIkhlY3RvciBWaWxhcycgR2l0aHViXCJcclxuICAgIGFib3V0TGluay5ocmVmID0gXCJodHRwczovL2dpdGh1Yi5jb20vSGVjdG9yVmlsYXNcIjtcclxuICAgIGFib3V0TGluay50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG4gICAgXHJcbiAgICBhYm91dERpdlBhcmEuYXBwZW5kKGFib3V0TGluayk7XHJcbiAgICBhYm91dExpLmFwcGVuZChhYm91dERpdlBhcmEpO1xyXG4gICAgb3B0aW9uc0xpc3QuYXBwZW5kKGRhcmtNb2RlTGksIGFib3V0TGkpO1xyXG4gICAgZmllbGRzZXRPcHRpb25zLmFwcGVuZChvcHRpb25zTGlzdCk7XHJcbiAgICBcclxuICAgIGZpZWxkc2V0T3B0aW9ucy5hcHBlbmQobGVnZW5kT3B0aW9ucyk7XHJcbiAgICBtZW51LmFwcGVuZChmaWVsZHNldEZpbHRlciwgZmllbGRzZXRUYXNrcywgZmllbGRzZXRPcHRpb25zKTtcclxuICAgIGJvZHkuYXBwZW5kKG1lbnVCdG4sIG1lbnUsIHNjcmVlbkNvdmVyTWVudSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9qZWN0c0xpc3QocmVkcmF3ID0gZmFsc2Upe1xyXG4gICAgbGV0IGZpZWxkc2V0VWwsIGZpZWxkc2V0TGk7XHJcbiAgICBpZihyZWRyYXcpe1xyXG4gICAgICBmaWVsZHNldFVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tZW51LWZpZWxkc2V0LmZpZWxkc2V0LXRhc2tzIHVsXCIpO1xyXG4gICAgICBmaWVsZHNldExpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tZW51LWZpZWxkc2V0LmZpZWxkc2V0LXRhc2tzIHVsIGxpXCIpO1xyXG4gICAgICBmaWVsZHNldExpLmZvckVhY2gobGkgPT4ge1xyXG4gICAgICAgIGxpLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGkpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbGlzdFRhc2tzVWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XHJcbiAgICBsaXN0VGFza3NVbC5jbGFzc0xpc3QuYWRkKFwiZmllbGRzZXQtbGlzdFwiLCBcImR1ZS1saXN0XCIpO1xyXG5cclxuICAgIGNvbnN0IHByb2plY3RzTGlzdCA9IHRvZG9IYW5kbGVyLmdldFByb2plY3RzVGl0bGVzKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2plY3RzTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcclxuICAgICAgbGkuY2xhc3NMaXN0LmFkZChcIm1lbnUtdGFza3NcIiwgXCJtZW51LWl0ZW1cIiwgYHByb2plY3QtJHtwcm9qZWN0c0xpc3RbaV0uc3BsaXQoXCIgXCIpLmpvaW4oXCItXCIpfWApO1xyXG4gICAgICBsaS5kYXRhc2V0LnByb2plY3RJZHggPSBpO1xyXG4gICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgIHBhcmEuaW5uZXJUZXh0ID0gcHJvamVjdHNMaXN0W2ldO1xyXG4gICAgICBwYXJhLnRpdGxlID0gcHJvamVjdHNMaXN0W2ldO1xyXG4gICAgICBwYXJhLmNsYXNzTGlzdC5hZGQoXCJwcm9qZWN0LXRpdGxlXCIpO1xyXG4gICAgICBwYXJhLmRhdGFzZXQucHJvamVjdElkeCA9IGk7XHJcbiAgICAgIHBhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNoYW5nZVBSb2plY3QpO1xyXG5cclxuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIGlucHV0LnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZChcImVkaXQtcHJvamVjdFwiKTtcclxuICAgICAgaW5wdXQuZGF0YXNldC5wcm9qZWN0SWR4ID0gaTtcclxuICAgICAgaW5wdXQudmFsdWUgPSBwcm9qZWN0c0xpc3RbaV07XHJcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBlZGl0UHJvamVjdFRpdGxlKTtcclxuICAgICAgY29uc3QgZWRpdEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgZWRpdEJ0bi50eXBlID0gXCJjaGVja2JveFwiO1xyXG4gICAgICBlZGl0QnRuLmNsYXNzTGlzdC5hZGQoXCJjYXJkLWljb25cIiwgXCJpY29uLWVkaXRcIik7XHJcbiAgICAgIGVkaXRCdG4uZGF0YXNldC5wcm9qZWN0SWR4ID0gaTtcclxuICAgICAgZWRpdEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcHJvamVjdEVkaXQpO1xyXG5cclxuICAgICAgY29uc3QgZGVsZXRlQnRuID0gdHJhc2hJY29uKGRlbGV0ZVByb2plY3QpO1xyXG5cclxuXHJcbiAgICAgIGxpLmFwcGVuZChwYXJhLCBpbnB1dCwgZWRpdEJ0biwgZGVsZXRlQnRuKTtcclxuICAgICAgaWYocmVkcmF3KXtcclxuICAgICAgICBmaWVsZHNldFVsLmFwcGVuZChsaSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGlzdFRhc2tzVWwuYXBwZW5kQ2hpbGQobGkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmKCFyZWRyYXcpIHJldHVybiBsaXN0VGFza3NVbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2FyZCh0b2RvLCBwcm9qZWN0SWR4LCB0b2RvSWR4KXtcclxuICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgY2FyZC5jbGFzc0xpc3QuYWRkKFwiY2FyZFwiKTtcclxuICAgIGNhcmQuZGF0YXNldC5wcmlvcml0eSA9IHRvZG8ucHJpb3JpdHk7XHJcbiAgICAvLyBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHNwYWNlQ2FyZHMpO1xyXG4gICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHNwYWNlQ2FyZHMpO1xyXG5cclxuICAgIGNvbnN0IGRyYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgZHJhZy5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwiaWNvbi1kcmFnXCIpO1xyXG4gICAgZHJhZy5zcmMgPSBpY29uRHJhZztcclxuICAgIGRyYWcuZHJhZ2dhYmxlID0gZmFsc2U7XHJcbiAgICBkcmFnLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgY2FyZERyYWcpO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgyXCIpO1xyXG4gICAgdGl0bGUuY2xhc3NMaXN0LmFkZChcInRpdGxlXCIpO1xyXG4gICAgdGl0bGUuaW5uZXJUZXh0ID0gdG9kby50aXRsZTtcclxuICAgIHRpdGxlLnRpdGxlID0gdG9kby50aXRsZTtcclxuICAgIHRpdGxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2dnbGVDYXJkKTtcclxuICAgIGNvbnN0IGVkaXRUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgIGVkaXRUaXRsZS50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICBlZGl0VGl0bGUuY2xhc3NMaXN0LmFkZChcInRpdGxlXCIsIFwiZWRpdC10aXRsZVwiKTtcclxuICAgIGVkaXRUaXRsZS52YWx1ZSA9IHRvZG8udGl0bGU7XHJcbiAgICBlZGl0VGl0bGUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGVkaXRGaWVsZCk7XHJcblxyXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcHJvZ3Jlc3MuY2xhc3NMaXN0LmFkZChcInByb2dyZXNzXCIpO1xyXG4gICAgXHJcbiAgICBjb25zdCBjb21wbGV0ZWQgPSB0b2RvLmNoZWNrcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRG9uZSkubGVuZ3RoO1xyXG4gICAgY29uc3QgcGVyY2VudGFnZSA9IGNvbXBsZXRlZCAqIDEwMCAvIHRvZG8uY2hlY2tzLmxlbmd0aDtcclxuICAgIHByb2dyZXNzLnN0eWxlLmJhY2tncm91bmQgPSBgY29uaWMtZ3JhZGllbnQoIzJlMTBjMCAke3BlcmNlbnRhZ2V9JSwgdHJhbnNwYXJlbnQgJHtwZXJjZW50YWdlfSUsIHRyYW5zcGFyZW50IDEwMCUpYFxyXG4gICAgcHJvZ3Jlc3Muc3R5bGUub3BhY2l0eSA9IHRvZG8uY2hlY2tzLmxlbmd0aCA9PT0gMCA/IFwiMCVcIiA6IFwiMTAwJVwiO1xyXG4gICAgXHJcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZChcImRlc2NyaXB0aW9uXCIpO1xyXG4gICAgZGVzY3JpcHRpb24uaW5uZXJUZXh0ID0gdG9kby5kZXNjcmlwdGlvbjtcclxuICAgIGRlc2NyaXB0aW9uLnRpdGxlID0gdG9kby5kZXNjcmlwdGlvbjtcclxuICAgIGNvbnN0IGVkaXREZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgIGVkaXREZXNjcmlwdGlvbi50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICBlZGl0RGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZChcImRlc2NyaXB0aW9uXCIsIFwiZWRpdC1kZXNjcmlwdGlvblwiKTtcclxuICAgIGVkaXREZXNjcmlwdGlvbi52YWx1ZSA9IHRvZG8uZGVzY3JpcHRpb247XHJcbiAgICBlZGl0RGVzY3JpcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGVkaXRGaWVsZCk7XHJcblxyXG4gICAgY29uc3QgZGF0ZUNyZWF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICBkYXRlQ3JlYXRpb24uY2xhc3NMaXN0LmFkZChcImRhdGUtY3JlYXRpb25cIik7XHJcbiAgICBkYXRlQ3JlYXRpb24uaW5uZXJUZXh0ID0gYENyZWF0ZWQ6ICR7Zm9ybWF0KG5ldyBEYXRlKHBhcnNlSVNPKHRvZG8uZGF0ZUNyZWF0aW9uKSksIGRhdGVGb3JtYXQpfWA7XHJcblxyXG4gICAgY29uc3QgZGF0ZUR1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgZGF0ZUR1ZS5jbGFzc0xpc3QuYWRkKFwiZGF0ZS1kdWVcIik7XHJcbiAgICBjb25zdCBkdWVEYXRlRm9ybWF0ID0gdG9kby5kYXRlRHVlLnNwbGl0KFwiLVwiKS5qb2luKFwiIFwiKTtcclxuICAgIGRhdGVEdWUuaW5uZXJUZXh0ID0gdG9kby5kYXRlRHVlLmxlbmd0aCA+IDAgPyBgRHVlOiAke1xyXG4gICAgICBmb3JtYXQobmV3IERhdGUocGFyc2VJU08odG9kby5kYXRlRHVlKSksIGRhdGVGb3JtYXQpfSAoJHtcclxuICAgICAgICBpc1RvZGF5KG5ldyBEYXRlKGR1ZURhdGVGb3JtYXQpKSA/IFwidG9kYXlcIiBcclxuICAgICAgICA6IGludGxGb3JtYXREaXN0YW5jZShuZXcgRGF0ZShkdWVEYXRlRm9ybWF0KSwgbmV3IERhdGUoKSlcclxuICAgICAgfSlgIDogXCJcIjtcclxuICAgIGNvbnN0IGVkaXREYXRlRHVlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgZWRpdERhdGVEdWUudHlwZSA9IFwiZGF0ZVwiO1xyXG4gICAgZWRpdERhdGVEdWUuY2xhc3NMaXN0LmFkZChcImRhdGUtZHVlXCIsIFwiZWRpdC1kYXRlLWR1ZVwiKTtcclxuICAgIGVkaXREYXRlRHVlLnZhbHVlID0gdG9kby5kYXRlRHVlO1xyXG4gICAgZWRpdERhdGVEdWUudGl0bGUgPSBcIkR1ZSBkYXRlXCI7XHJcbiAgICBlZGl0RGF0ZUR1ZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZWRpdEZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBjaGVja3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XHJcbiAgICBjaGVja3MuY2xhc3NMaXN0LmFkZChcImNoZWNrbGlzdFwiKTtcclxuXHJcbiAgICAvL2FkZCBkYXRhc2V0IHRvIGVhY2ggaXRlbVxyXG4gICAgW2NhcmQsZWRpdFRpdGxlLGRyYWcsZWRpdERlc2NyaXB0aW9uLGVkaXREYXRlRHVlXS5mb3JFYWNoKGljb24gPT4ge1xyXG4gICAgICBpY29uLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgIGljb24uZGF0YXNldC50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRvZG8uY2hlY2tzLmZvckVhY2goKGNoZWNrLGkpID0+IHtcclxuICAgICAgY2hlY2tzLmFwcGVuZENoaWxkKGNyZWF0ZVRhc2tMaSh0b2RvLCBjaGVjaywgcHJvamVjdElkeCwgdG9kb0lkeCwgaSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWRkVGFza0xpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGFkZFRhc2tMaS5jbGFzc0xpc3QuYWRkKFwiYWRkLXRhc2tcIik7XHJcbiAgICBjb25zdCBhZGRUYXNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGFkZFRhc2suY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImNyZWF0ZS10YXNrXCIpO1xyXG4gICAgYWRkVGFzay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlVGFzayk7XHJcbiAgICBhZGRUYXNrLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICBhZGRUYXNrLmRhdGFzZXQudG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICBhZGRUYXNrLmRhdGFzZXQudG9kbyA9IHRvZG8udGl0bGU7XHJcbiAgICBhZGRUYXNrTGkuYXBwZW5kQ2hpbGQoYWRkVGFzayk7XHJcbiAgICBcclxuXHJcbiAgICBjYXJkLmFwcGVuZChhZGRUYXNrTGkpO1xyXG5cclxuICAgIGNhcmQuYXBwZW5kKGRyYWcsIHRpdGxlLCBlZGl0VGl0bGUsIHByb2dyZXNzLCBkYXRlQ3JlYXRpb24sIGRhdGVEdWUsIGVkaXREYXRlRHVlLFxyXG4gICAgICBwcmlvcml0eURpdih0b2RvLCB0b2RvSWR4LCBwcm9qZWN0SWR4KSwgZWRpdEJ1dHRvbnNEaXYodG9kbywgcHJvamVjdElkeCwgdG9kb0lkeCksXHJcbiAgICAgIGRlc2NyaXB0aW9uLCBlZGl0RGVzY3JpcHRpb24sIGNoZWNrcyk7XHJcblxyXG4gICAgcmV0dXJuIGNhcmQ7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlZGl0QnV0dG9uc0Rpdih0b2RvLCBwcm9qZWN0SWR4LCB0b2RvSWR4KXtcclxuICAgIGNvbnN0IGVkaXRCdG5zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGVkaXRCdG5zLmNsYXNzTGlzdC5hZGQoXCJlZGl0LWJ1dHRvbnNcIik7XHJcblxyXG4gICAgY29uc3QgcGluID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgcGluLnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBwaW4uY2hlY2tlZCA9IHRvZG8uaXNQaW5uZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBwaW4uY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImljb24tcGluXCIpO1xyXG4gICAgcGluLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2RvSGFuZGxlci50b2dnbGVQaW4pO1xyXG5cclxuICAgIGNvbnN0IGVkaXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICBlZGl0LnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBlZGl0LmNsYXNzTGlzdC5hZGQoXCJjYXJkLWljb25cIiwgXCJpY29uLWVkaXRcIik7XHJcbiAgICBlZGl0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjYXJkRWRpdCk7XHJcblxyXG4gICAgY29uc3QgZmF2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgZmF2LnR5cGUgPSBcImNoZWNrYm94XCI7XHJcbiAgICBmYXYuY2hlY2tlZCA9IHRvZG8uaXNGYXZvcml0ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGZhdi5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwiaWNvbi1mYXZcIik7XHJcbiAgICBmYXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRvZG9IYW5kbGVyLnRvZ2dsZUZhdik7XHJcbiAgICBmYXYuYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCAoZSkgPT4ge1xyXG4gICAgICBpZihlLmFuaW1hdGlvbk5hbWUgPT09IFwiaWNvbi1mYXYtc2hha2VcIikge1xyXG4gICAgICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoXCJzaGFrZVwiKTtcclxuICAgICAgfTtcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgZGVsZXRlSWNvbiA9IHRyYXNoSWNvbihjYXJkRGVsZXRlKTtcclxuXHJcbiAgICAvL2FkZCBkYXRhc2V0IHRvIGVhY2ggaXRlbVxyXG4gICAgW3BpbixlZGl0LGZhdixkZWxldGVJY29uXS5mb3JFYWNoKGljb24gPT4ge1xyXG4gICAgICBpY29uLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgIGljb24uZGF0YXNldC50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgIH0pO1xyXG5cclxuICAgIGVkaXRCdG5zLmFwcGVuZChwaW4sIGVkaXQsIGZhdiwgZGVsZXRlSWNvbik7XHJcblxyXG4gICAgcmV0dXJuIGVkaXRCdG5zO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdHJhc2hJY29uKGNsaWNrRnVuY3Rpb24pe1xyXG4gICAgY29uc3QgZGVsZXRlSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBkZWxldGVJY29uLmNsYXNzTGlzdC5hZGQoXCJkZWxldGUtaWNvblwiKTtcclxuICAgIFxyXG4gICAgLy9zdGFydCBkZWxldGlvbiBvbiBjbGljayBvciB0b3VjaFxyXG4gICAgZGVsZXRlSWNvbi5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uKCl7XHJcbiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZChcImRlbGV0aW5nXCIpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uKCl7XHJcbiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZChcImRlbGV0aW5nXCIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy9jYW5jZWwgZGVsZXRpb24gb24gbW91c2Ugb3V0LCB0b3VjaCBzdG9wIG9yIHRvdWNoIG1vdmVcclxuICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24oKXtcclxuICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKFwiZGVsZXRpbmdcIik7XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGZ1bmN0aW9uKCl7XHJcbiAgICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZShcImRlbGV0aW5nXCIpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCBmdW5jdGlvbigpe1xyXG4gICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoXCJkZWxldGluZ1wiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vc3RhcnQgZGVsZXRpb25cclxuICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBmdW5jdGlvbihlKXtcclxuICAgICAgaWYoZS5hbmltYXRpb25OYW1lID09PSBcImRlbGV0aW5nXCIpe1xyXG4gICAgICAgIGNvbnN0IHByb2plY3RJZHggPSB0aGlzLmRhdGFzZXQucHJvamVjdElkeDtcclxuICAgICAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICAgICAgaWYgKGNsaWNrRnVuY3Rpb24gPT0gZGVsZXRlUHJvamVjdCkge1xyXG4gICAgICAgICAgZGVsZXRlUHJvamVjdChwcm9qZWN0SWR4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2FyZERlbGV0ZShwcm9qZWN0SWR4LCB0b2RvSWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0cmFzaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcbiAgICB0cmFzaC5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwiaWNvbi10cmFzaFwiKTtcclxuICAgIHRyYXNoLnNyYyA9IGljb25UcmFzaDtcclxuICAgIHRyYXNoLmRyYWdnYWJsZSA9IGZhbHNlO1xyXG4gICAgY29uc3QgdHJhc2hMaWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgdHJhc2hMaWQuY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImljb24tdHJhc2gtbGlkXCIpO1xyXG4gICAgdHJhc2hMaWQuc3JjID0gaWNvblRyYXNoTGlkO1xyXG4gICAgdHJhc2hMaWQuZHJhZ2dhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgZGVsZXRlSWNvbi5hcHBlbmQodHJhc2gsIHRyYXNoTGlkKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlSWNvbjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByaW9yaXR5RGl2KHRvZG8sIHRvZG9JZHgsIHByb2plY3RJZHgpe1xyXG4gICAgY29uc3QgcHJpb3JpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcHJpb3JpdHlEaXYuY2xhc3NMaXN0LmFkZChcImVkaXQtcHJpb3JpdHlcIik7XHJcbiAgICBcclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjtcclxuICAgIHJhbmdlLmRhdGFzZXQudG9kb0lkeCA9IHRvZG9JZHg7XHJcbiAgICByYW5nZS5kYXRhc2V0LnByb2plY3RJZHggPSBwcm9qZWN0SWR4O1xyXG4gICAgcmFuZ2UubWluID0gMDtcclxuICAgIHJhbmdlLm1heCA9IDI7XHJcbiAgICByYW5nZS5zdGVwID0gMTtcclxuICAgIHJhbmdlLnZhbHVlID0gdG9kby5wcmlvcml0eSA9PT0gXCJsb3dcIj8gMCA6IHRvZG8ucHJpb3JpdHkgPT09IFwibWlkZGxlXCIgPyAxIDogMjtcclxuICAgIHJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgY2hhbmdlUHJpb3JpdHkpXHJcblxyXG4gICAgY29uc3QgcGFyYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgcGFyYS5pbm5lclRleHQgPSBgUHJpb3JpdHk6ICR7dG9kby5wcmlvcml0eX1gO1xyXG5cclxuICAgIHByaW9yaXR5RGl2LmFwcGVuZChwYXJhLCByYW5nZSk7XHJcblxyXG4gICAgcmV0dXJuIHByaW9yaXR5RGl2O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGxhY2VDYXJkcyhpZHhPckZpbHRlciwgYWN0aXZhdGVUb2RvKXtcclxuICAgIGNhcmRzQ29udGFpbmVyLnJlcGxhY2VDaGlsZHJlbigpXHJcbiAgICBcclxuICAgIGNvbnN0IHByb2plY3QgPSB0b2RvSGFuZGxlci5nZXRQcm9qZWN0KGlkeE9yRmlsdGVyKTtcclxuICAgIFxyXG4gICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImhlYWRlclwiKTtcclxuXHJcbiAgICBjb25zdCBwcm9qZWN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBwcm9qZWN0SXRlbS5kYXRhc2V0LmlkeCA9IGlkeE9yRmlsdGVyO1xyXG4gICAgcHJvamVjdEl0ZW0uY2xhc3NMaXN0LmFkZChcInByb2plY3QtaXRlbVwiKTtcclxuXHJcbiAgICBjb25zdCBoMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcclxuICAgIGgxLmRhdGFzZXQucHJvamVjdElkeCA9IGlkeE9yRmlsdGVyO1xyXG4gICAgaDEuaW5uZXJUZXh0ID0gcHJvamVjdC50aXRsZTtcclxuICAgIGgxLnRpdGxlID0gcHJvamVjdC50aXRsZTtcclxuICAgIGhlYWRlci5hcHBlbmRDaGlsZChoMSk7XHJcblxyXG4gICAgcHJvamVjdC50b2Rvcy5mb3JFYWNoKCh0b2RvLCB0b2RvSWR4KSA9PiB7XHJcbiAgICAgIHByb2plY3RJdGVtLmFwcGVuZENoaWxkKHBsYWNlU2luZ2xlQ2FyZCh0b2RvLCBpZHhPckZpbHRlciwgdG9kb0lkeCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWRkVG9kb0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBhZGRUb2RvRGl2LmNsYXNzTGlzdC5hZGQoXCJjYXJkXCIsIFwidG9kby1hZGQtZGl2XCIpO1xyXG4gICAgYWRkVG9kb0Rpdi5kYXRhc2V0LnByb2plY3RJZHggPSBpZHhPckZpbHRlcjtcclxuICAgIGFkZFRvZG9EaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNyZWF0ZVRvZG8pO1xyXG4gICAgXHJcbiAgICBjb25zdCBhZGRUb2RvQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGFkZFRvZG9CdG4uY2xhc3NMaXN0LmFkZChcImNhcmQtaWNvblwiLCBcImNyZWF0ZS10YXNrXCIsIFwiY3JlYXRlLXRvZG9cIik7XHJcblxyXG4gICAgY29uc3QgYWRkVG9kb1BhcmEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGFkZFRvZG9QYXJhLmlubmVyVGV4dCA9IFwiQ3JlYXRlIG5ldyB0by1kb1wiO1xyXG5cclxuICAgIGFkZFRvZG9EaXYuYXBwZW5kKGFkZFRvZG9CdG4sIGFkZFRvZG9QYXJhKTtcclxuICAgIHByb2plY3RJdGVtLmFwcGVuZENoaWxkKGFkZFRvZG9EaXYpO1xyXG4gICAgY2FyZHNDb250YWluZXIuYXBwZW5kKGhlYWRlciwgcHJvamVjdEl0ZW0pO1xyXG5cclxuICAgIGlmKGFjdGl2YXRlVG9kbyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXRvZG8taWR4PVwiJHthY3RpdmF0ZVRvZG99XCJdYCk7XHJcbiAgICAgICAgYWN0aXZlQ2FyZC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYWN0aXZlQ2FyZC5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gdG9nZ2xlQ2FyZCgpIHtcclxuICAgIGNvbnN0IGNhcmQgPSB0aGlzLnBhcmVudE5vZGU7XHJcbiAgICBjYXJkLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgaWYoIWNhcmQuY2xhc3NOYW1lLmluY2x1ZGVzKFwiYWN0aXZlXCIpKSB7XHJcbiAgICAgIGNhcmQucXVlcnlTZWxlY3RvcihcIi5pY29uLWVkaXRcIikuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICBjYXJkLmNsYXNzTGlzdC5yZW1vdmUoXCJlZGl0LW1vZGVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYXJkRHJhZygpe1xyXG4gICAgY2FyZE1vdmUuZnJvbS5wcm9qZWN0ID0gdGhpcy5jbG9zZXN0KFwiLmNhcmRcIikuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgY2FyZE1vdmUuZnJvbS50b2RvID0gdGhpcy5jbG9zZXN0KFwiLmNhcmRcIikuZGF0YXNldC50b2RvSWR4O1xyXG4gICAgXHJcbiAgICAvL2FkZCB0ZW1wb3JhbCBldmVudCBsaXN0ZW5lciwgcmVtb3ZlZCBvbiBleGVjdXRpb25cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYXJkUGxhY2UpO1xyXG4gICAgYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gXCJub25lXCI7XHJcblxyXG4gICAgLy9kaXNhYmxpbmcgZWRpdCBtb2RlIG9uIGFsbCBjYXJkc1xyXG4gICAgY29uc3QgYWxsQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcmRcIik7XHJcbiAgICBhbGxDYXJkcy5mb3JFYWNoKGNhcmQgPT4gY2FyZC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIsIFwiZWRpdC1tb2RlXCIpKTtcclxuXHJcbiAgICBjb25zdCBpY29uRWRpdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaWNvbi1lZGl0XCIpO1xyXG4gICAgaWNvbkVkaXQuZm9yRWFjaChpY29uID0+IGljb24uY2hlY2tlZCA9IGZhbHNlKTtcclxuXHJcbiAgICAvL2NyZWF0aW5nIGRyYWdnZWQgY2FyZFxyXG4gICAgY29uc3QgdGFyZ2V0Q2FyZCA9IHRoaXMuY2xvc2VzdChcIi5jYXJkXCIpO1xyXG4gICAgY29uc3QgZHJhZ2dpbmdDYXJkID0gdGFyZ2V0Q2FyZC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICBkcmFnZ2luZ0NhcmQuY2xhc3NMaXN0LmFkZChcImRyYWdnaW5nLWNhcmRcIik7XHJcbiAgICBkcmFnZ2luZ0NhcmQuc3R5bGUud2lkdGggPSBgJHt0YXJnZXRDYXJkLmNsaWVudFdpZHRofXB4YDtcclxuICAgIHRhcmdldENhcmQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgIFxyXG4gICAgLy9hZGQgbWFyZ2luIGJlZm9yZSBkcmFnZ2luZywgcHJldmVudHMgdmlzdWFsIGFubm95YW5jZVxyXG4gICAgY29uc3QgbmV4dENhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgdGFyZ2V0Q2FyZC5kYXRhc2V0LnByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3BhcnNlSW50KHRhcmdldENhcmQuZGF0YXNldC50b2RvSWR4KSsxfVwiXWApXHJcbiAgICBpZihuZXh0Q2FyZCkgbmV4dENhcmQuY2xhc3NMaXN0LmFkZChcIm1hcmdpbi10b3BcIik7XHJcblxyXG4gICAgLy9hZGQgdGVtcG9yYWwgbGlzdGVuZXIgYW5kIGludGVydmFsLCByZW1vdmVkIGJ5IGNhcmRQbGFjZSgpIGFmdGVyIHVzZVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgXHJcbiAgICBjdXJzb3JJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgZHJhZ2dpbmdDYXJkLnN0eWxlLmxlZnQgPSBgJHttb3VzZS54IC0gMjV9cHhgO1xyXG4gICAgICBkcmFnZ2luZ0NhcmQuc3R5bGUudG9wID0gYCR7bW91c2UueSAtIChkcmFnZ2luZ0NhcmQuY2xpZW50SGVpZ2h0IC8gMil9cHhgO1xyXG4gICAgfSwgMTAwMC82MCk7IC8vZGl2aWRlZCBieSBkZXNpcmVkIEZQU1xyXG4gICAgXHJcbiAgICBib2R5LmFwcGVuZChkcmFnZ2luZ0NhcmQpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlTW91c2VQb3MoZSl7XHJcbiAgICBtb3VzZS54ID0gZS5jbGllbnRYO1xyXG4gICAgbW91c2UueSA9IGUuY2xpZW50WTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNwYWNlQ2FyZHMoZSl7XHJcbiAgICBpZihlLmJ1dHRvbnMgIT09IDEgfHwgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZHJhZ2dpbmctY2FyZFwiKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXMuZGF0YXNldC50b2RvSWR4O1xyXG5cclxuICAgIGNhcmRNb3ZlLnRvLnByb2plY3QgPSBwcm9qZWN0SWR4O1xyXG4gICAgY2FyZE1vdmUudG8udG9kbyA9IHRvZG9JZHg7XHJcbiAgICBcclxuICAgIGNvbnN0IHdpdGhTZXBhcmF0aW9uID0gZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIubWFyZ2luLXRvcFwiKSB8fCBkb2N1bWVudD8ucXVlcnlTZWxlY3RvcihcIi5tYXJnaW4tYm90dG9tXCIpO1xyXG4gICAgd2l0aFNlcGFyYXRpb24/LmNsYXNzTGlzdC5yZW1vdmUoXCJtYXJnaW4tdG9wXCIsIFwibWFyZ2luLWJvdHRvbVwiKTtcclxuXHJcbiAgICBjb25zdCBjYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY2FyZDpub3QoLnNlcGFyYXRvcik6bm90KC5kcmFnZ2luZy1jYXJkKTpub3QoLmhpZGRlbilbZGF0YS1wcm9qZWN0LWlkeF1bZGF0YS10b2RvLWlkeF1cIik7XHJcbiAgICBjYXJkcy5mb3JFYWNoKGNhcmQgPT4ge1xyXG4gICAgICBpZihjYXJkLmRhdGFzZXQucHJvamVjdElkeCA9PT0gcHJvamVjdElkeFxyXG4gICAgICAgICYmIGNhcmQuZGF0YXNldC50b2RvSWR4ID09PSB0b2RvSWR4KXtcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvamVjdC1pdGVtXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjYXJkSGVpZ2h0ID0gdGhpcy5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgbW91c2VQb3NDYXJkID0gZS5sYXllclk7XHJcblxyXG4gICAgICAgIGlmKG1vdXNlUG9zQ2FyZCA8IGNhcmRIZWlnaHQgLyAyKXtcclxuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZChcIm1hcmdpbi10b3BcIik7XHJcbiAgICAgICAgICBjYXJkTW92ZS5wb3NpdGlvbiA9IFwiYmVmb3JlXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZChcIm1hcmdpbi1ib3R0b21cIik7XHJcbiAgICAgICAgICBjYXJkTW92ZS5wb3NpdGlvbiA9IFwiYWZ0ZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYXJkUGxhY2UoKXtcclxuICAgIC8vcmVtb3ZlIHRlbXBvcmFsIGV2ZW50IGxpc3RlbmVyLCBpbnRlcnZhbCBhbmQgb3BhY2l0eSBhZGRlZCBieSBjYXJkRHJhZygpXHJcbiAgICBjbGVhckludGVydmFsKGN1cnNvckludGVydmFsKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYXJkUGxhY2UpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdXBkYXRlTW91c2VQb3MpO1xyXG4gICAgYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gXCJ0ZXh0XCI7XHJcblxyXG4gICAgY29uc3QgaW52aXNpYmxlQ2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaGlkZGVuXCIpO1xyXG4gICAgaW52aXNpYmxlQ2FyZC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgXHJcbiAgICBjb25zdCBkcmFnZ2luZ0NhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmRyYWdnaW5nLWNhcmRcIik7XHJcbiAgICBib2R5LnJlbW92ZUNoaWxkKGRyYWdnaW5nQ2FyZCk7XHJcblxyXG4gICAgY29uc3Qgd2l0aFNlcGFyYXRpb24gPSBkb2N1bWVudD8ucXVlcnlTZWxlY3RvcihcIi5tYXJnaW4tdG9wXCIpIHx8IGRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKFwiLm1hcmdpbi1ib3R0b21cIik7XHJcbiAgICB3aXRoU2VwYXJhdGlvbj8uY2xhc3NMaXN0LnJlbW92ZShcIm1hcmdpbi10b3BcIiwgXCJtYXJnaW4tYm90dG9tXCIpO1xyXG5cclxuICAgIC8vbW92ZSB0by1kb3NcclxuICAgIGlmKGNhcmRNb3ZlLmZyb20ucHJvamVjdCAmJiBjYXJkTW92ZS5mcm9tLnRvZG9cclxuICAgICAgJiYgY2FyZE1vdmUudG8ucHJvamVjdCAmJiBjYXJkTW92ZS50by50b2RvKXtcclxuICAgICAgXHJcbiAgICAgIHRvZG9IYW5kbGVyLm1vdmVEcmFnZ2VkQ2FyZChjYXJkTW92ZS5mcm9tLnByb2plY3QsIGNhcmRNb3ZlLmZyb20udG9kbywgY2FyZE1vdmUudG8udG9kbywgY2FyZE1vdmUucG9zaXRpb24pO1xyXG4gICAgICBwbGFjZUNhcmRzKHBhcnNlSW50KGNhcmRNb3ZlLmZyb20ucHJvamVjdCkpO1xyXG4gICAgICBcclxuICAgICAgLy9jbGVhciBkcmFnIHZhbHVlc1xyXG4gICAgICBjYXJkTW92ZS5mcm9tLnByb2plY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgIGNhcmRNb3ZlLmZyb20udG9kbyA9IHVuZGVmaW5lZDtcclxuICAgICAgY2FyZE1vdmUudG8ucHJvamVjdCA9IHVuZGVmaW5lZDtcclxuICAgICAgY2FyZE1vdmUudG8udG9kbyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNhcmRFZGl0KCl7XHJcbiAgICBjb25zdCBjYXJkQ2xhc3MgPSB0aGlzLmNsb3Nlc3QoXCIuY2FyZFwiKS5jbGFzc0xpc3Q7XHJcbiAgICB0aGlzLmNoZWNrZWQgPyBjYXJkQ2xhc3MuYWRkKFwiZWRpdC1tb2RlXCIpIDogY2FyZENsYXNzLnJlbW92ZShcImVkaXQtbW9kZVwiKTtcclxuICAgIHRoaXMuY2xvc2VzdChcIi5jYXJkXCIpLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYXJkRGVsZXRlKHByb2plY3RJZHhQYXJhbSwgdG9kb0lkeFBhcmFtKXtcclxuICAgIGNvbnN0IHByb2plY3RJZHggPSB0aGlzPy5kYXRhc2V0Py5wcm9qZWN0SWR4IHx8IHByb2plY3RJZHhQYXJhbTtcclxuICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzPy5kYXRhc2V0Py50b2RvSWR4IHx8IHRvZG9JZHhQYXJhbTtcclxuXHJcbiAgICBpZih0b2RvSGFuZGxlci5nZXRGYXZTdGF0dXMocHJvamVjdElkeCwgdG9kb0lkeCkpIHtcclxuICAgICAgY29uc3QgdGhpc0NhcmRTdGFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIC5pY29uLWZhdmApO1xyXG4gICAgICB0aGlzQ2FyZFN0YXIuY2xhc3NMaXN0LmFkZChcInNoYWtlXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9O1xyXG5cclxuICAgIHRvZG9IYW5kbGVyLmRlbGV0ZVRvZG8ocHJvamVjdElkeCwgdG9kb0lkeCk7XHJcbiAgICBwbGFjZUNhcmRzKHBhcnNlSW50KHByb2plY3RJZHgpKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVRhc2tMaSh0b2RvLCBjaGVjaywgcHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCl7XHJcbiAgICBjb25zdCB0YXNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG4gICAgY2hlY2tib3gudHlwZSA9IFwiY2hlY2tib3hcIjtcclxuICAgIGNoZWNrYm94LmlkID0gYCR7cHJvamVjdElkeH0tJHt0b2RvSWR4fS0ke3Rhc2tJZHh9YDsgLy9mb3IgbGFiZWwgb25seVxyXG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGNoZWNrPy5pc0RvbmUgfHwgZmFsc2U7XHJcbiAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGFza0NoZWNrKTtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiKTtcclxuICAgIGxhYmVsLmh0bWxGb3IgPSBjaGVja2JveC5pZDtcclxuICAgIGxhYmVsLmRhdGFzZXQudG9kb1RpdGxlID0gdG9kby50aXRsZTtcclxuICAgIGxhYmVsLmlubmVyVGV4dCA9IGNoZWNrPy50YXNrIHx8IFwiXCI7XHJcbiAgICBsYWJlbC50aXRsZSA9IGNoZWNrPy50YXNrIHx8IFwiXCI7XHJcbiAgICBjb25zdCBlZGl0TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICBlZGl0TGFiZWwudHlwZSA9IFwidGV4dFwiO1xyXG4gICAgZWRpdExhYmVsLmNsYXNzTGlzdC5hZGQoXCJlZGl0LWxhYmVsXCIpO1xyXG4gICAgZWRpdExhYmVsLnR5cGUgPSBcInRleHRcIjtcclxuICAgIGVkaXRMYWJlbC5odG1sRm9yID0gY2hlY2tib3guaWQ7XHJcbiAgICBlZGl0TGFiZWwudmFsdWUgPSBjaGVjaz8udGFzayB8fCBcIlwiO1xyXG4gICAgZWRpdExhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBlZGl0RmllbGQpO1xyXG4gICAgZWRpdExhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGxhYmVsS2V5cHJlc3MpO1xyXG5cclxuICAgIGNvbnN0IHJlbW92ZVRhc2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcmVtb3ZlVGFzay5jbGFzc0xpc3QuYWRkKFwiY2FyZC1pY29uXCIsIFwicmVtb3ZlLXRhc2tcIik7XHJcbiAgICByZW1vdmVUYXNrLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkZWxldGVUYXNrKTtcclxuXHJcbiAgICAvL2FkZCBkYXRhc2V0XHJcbiAgICBbY2hlY2tib3gsZWRpdExhYmVsLCByZW1vdmVUYXNrXS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLmRhdGFzZXQucHJvamVjdElkeCA9IHByb2plY3RJZHg7XHJcbiAgICAgIGl0ZW0uZGF0YXNldC50b2RvSWR4ID0gdG9kb0lkeDtcclxuICAgICAgaXRlbS5kYXRhc2V0LnRhc2tJZHggPSB0YXNrSWR4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGFzay5hcHBlbmQoY2hlY2tib3gsIGxhYmVsLCBlZGl0TGFiZWwsIHJlbW92ZVRhc2spO1xyXG5cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGFiZWxLZXlwcmVzcyhlKXtcclxuICAgIGlmKGUua2V5ID09PSBcIkVudGVyXCIpe1xyXG4gICAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzLmRhdGFzZXQudG9kb0lkeDtcclxuICAgICAgY29uc3QgdG9kbyA9IHRoaXMuY2xvc2VzdChcIi5jYXJkXCIpLnF1ZXJ5U2VsZWN0b3IoXCIuY3JlYXRlLXRhc2tcIikuZGF0YXNldC50b2RvO1xyXG4gICAgICBjcmVhdGVUYXNrKHByb2plY3RJZHgsIHRvZG9JZHgsIHRvZG8pXHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmKGUua2V5ID09PSBcIkFycm93VXBcIiB8fCBlLmtleSA9PT0gXCJBcnJvd0Rvd25cIil7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICAgIGNvbnN0IHRhc2tJZHggPSBwYXJzZUludCh0aGlzLmRhdGFzZXQudGFza0lkeCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBtb3ZlID0gZS5rZXkgPT09IFwiQXJyb3dVcFwiID8gLTEgOiArMTtcclxuICAgICAgY29uc3QgbWF4ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLmVkaXQtbGFiZWxbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgICAgcHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl1gKS5sZW5ndGgtMTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IG5ld0FjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5lZGl0LWxhYmVsW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdW2RhdGEtdGFzay1pZHg9XCIke01hdGgubWF4KDAsIE1hdGgubWluKHRhc2tJZHgrbW92ZSwgbWF4KSl9XCJdYCk7XHJcbiAgICAgIFxyXG4gICAgICBuZXdBY3RpdmUuZm9jdXMoKTtcclxuICAgIH0gZWxzZSBpZihlLmtleSA9PT0gXCIgXCIgJiYgZS5jdHJsS2V5KXtcclxuICAgICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXMuZGF0YXNldC5wcm9qZWN0SWR4O1xyXG4gICAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICAgIGNvbnN0IHRhc2tJZHggPSBwYXJzZUludCh0aGlzLmRhdGFzZXQudGFza0lkeCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgICBwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXVtkYXRhLXRhc2staWR4PVwiJHt0YXNrSWR4fVwiXWApO1xyXG4gICAgICBjaGVja2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7XHJcbiAgICAgIHRhc2tDaGVjayhwcm9qZWN0SWR4LCB0b2RvSWR4LCB0YXNrSWR4KTtcclxuICAgIH0gZWxzZSBpZihlLmtleSA9PT0gXCJEZWxldGVcIiAmJiBlLmFsdEtleSkge1xyXG4gICAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICAgIGNvbnN0IHRvZG9JZHggPSB0aGlzLmRhdGFzZXQudG9kb0lkeDtcclxuICAgICAgY29uc3QgdGFza0lkeCA9IHBhcnNlSW50KHRoaXMuZGF0YXNldC50YXNrSWR4KTtcclxuXHJcbiAgICAgIGRlbGV0ZVRhc2socHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVhdGVUYXNrKHByb2plY3RJZHhQYXJhbSwgdG9kb0lkeFBhcmFtLCB0b2RvUGFyYW0pe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXM/LmRhdGFzZXQ/LnByb2plY3RJZHggfHwgcHJvamVjdElkeFBhcmFtO1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRvZG9JZHggfHwgdG9kb0lkeFBhcmFtO1xyXG4gICAgY29uc3QgdG9kbyA9IHRoaXM/LmRhdGFzZXQ/LnRvZG8gfHwgdG9kb1BhcmFtO1xyXG4gICAgXHJcbiAgICB0b2RvSGFuZGxlci5jcmVhdGVUYXNrKHByb2plY3RJZHgsIHRvZG9JZHgpO1xyXG4gICAgXHJcbiAgICBjb25zdCBuZXdUYXNrSWR4ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICBwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXSBsaWApXHJcbiAgICAgIC5sZW5ndGg7XHJcblxyXG4gICAgY29uc3QgdGhpc0NhcmRVbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgcHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl0gdWxgKTtcclxuICAgICAgXHJcbiAgICB0aGlzQ2FyZFVsLmFwcGVuZENoaWxkKGNyZWF0ZVRhc2tMaSh0b2RvLCBmYWxzZSwgcHJvamVjdElkeCwgdG9kb0lkeCwgbmV3VGFza0lkeCkpO1xyXG4gICAgXHJcbiAgICBjb25zdCB0aGlzQ2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5jYXJkW2RhdGEtcHJvamVjdC1pZHg9XCIke1xyXG4gICAgICBwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXWApO1xyXG4gICAgY29uc3QgbmV3SW5wdXQgPSB0aGlzQ2FyZC5xdWVyeVNlbGVjdG9yQWxsKFwiLmVkaXQtbGFiZWxcIik7XHJcbiAgICBuZXdJbnB1dFtuZXdJbnB1dC5sZW5ndGggLTFdLmZvY3VzKCk7XHJcblxyXG4gICAgdXBkYXRlUHJvZ3Jlc3MocHJvamVjdElkeCwgdG9kb0lkeCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWxldGVUYXNrKHBhcmFtUHJvamVjdElkeCwgcGFyYW1Ub2RvSWR4LCBwYXJhbVRhc2tJZHgpe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXM/LmRhdGFzZXQ/LnByb2plY3RJZHggfHwgcGFyYW1Qcm9qZWN0SWR4O1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRvZG9JZHggfHwgcGFyYW1Ub2RvSWR4O1xyXG4gICAgY29uc3QgdGFza0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRhc2tJZHggfHwgcGFyYW1UYXNrSWR4O1xyXG5cclxuICAgIHRvZG9IYW5kbGVyLmRlbGV0ZVRhc2socHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCk7XHJcbiAgICBpZih0aGlzKXtcclxuICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGhpc1Rhc2sgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGBpbnB1dFt0eXBlPVwidGV4dFwiXVtkYXRhLXByb2plY3QtaWR4PVwiJHtwcm9qZWN0SWR4XHJcbiAgICAgICAgfVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXVtkYXRhLXRhc2staWR4PVwiJHt0YXNrSWR4XHJcbiAgICAgICAgfVwiXWBcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGhpc0xpID0gdGhpc1Rhc2sucGFyZW50Tm9kZTtcclxuICAgICAgdGhpc0xpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc0xpKTtcclxuXHJcbiAgICAgIC8vXHJcbiAgICAgIGNvbnN0IG5leHRJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgYGlucHV0W3R5cGU9XCJ0ZXh0XCJdW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHhcclxuICAgICAgICB9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdW2RhdGEtdGFzay1pZHg9XCIke3BhcnNlSW50KHRhc2tJZHgpKzFcclxuICAgICAgICB9XCJdYFxyXG4gICAgICApO1xyXG4gICAgICBpZihuZXh0SW5wdXQpIHtcclxuICAgICAgICBuZXh0SW5wdXQuZm9jdXMoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxhc3RJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC5jYXJkLmFjdGl2ZSAuZWRpdC1sYWJlbGApO1xyXG4gICAgICAgIGlmKGxhc3RJbnB1dC5sZW5ndGggPiAwKSBsYXN0SW5wdXRbbGFzdElucHV0Lmxlbmd0aCAtMV0uZm9jdXMoKTtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IHRoaXNUYXNrTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXByb2plY3QtaWR4PVwiJHtcclxuICAgICAgcHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl0gbGkgLnJlbW92ZS10YXNrYCk7XHJcbiAgICBjb25zdCB0aGlzVGFza0NoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIGxpIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXWApO1xyXG4gICAgY29uc3QgdGhpc1Rhc2tMYWJlbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIGxpIGxhYmVsYCk7XHJcbiAgICBjb25zdCB0aGlzVGFza1RleHRJbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1wcm9qZWN0LWlkeD1cIiR7XHJcbiAgICAgIHByb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIGxpIGlucHV0W3R5cGU9XCJ0ZXh0XCJdYCk7XHJcbiAgICBcclxuICAgIFt0aGlzVGFza0xpc3QsIHRoaXNUYXNrQ2hlY2tib3hlcywgdGhpc1Rhc2tUZXh0SW5wdXRzXVxyXG4gICAgLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICBncm91cC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgaXRlbS5kYXRhc2V0LnRhc2tJZHggPSBpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpc1Rhc2tMYWJlbHMuZm9yRWFjaCgobGFiZWwsIGkpID0+IHtcclxuICAgICAgbGFiZWwuaHRtbEZvciA9IGAke2xhYmVsLmRhdGFzZXQudG9kb1RpdGxlfS0ke2l9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHVwZGF0ZVByb2dyZXNzKHByb2plY3RJZHgsIHRvZG9JZHgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZWRpdEZpZWxkKCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICBjb25zdCB0YXNrSWR4ID0gdGhpcz8uZGF0YXNldD8udGFza0lkeDtcclxuXHJcbiAgICBpZih0aGlzLmNsYXNzTmFtZS5pbmNsdWRlcyhcImVkaXQtdGl0bGVcIikpe1xyXG4gICAgICB0b2RvSGFuZGxlci5lZGl0VGl0bGUocHJvamVjdElkeCwgdG9kb0lkeCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IHRoaXNUaXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5jYXJkW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdIC50aXRsZWApO1xyXG4gICAgICB0aGlzVGl0bGUuaW5uZXJUZXh0ID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpc1RpdGxlLnRpdGxlID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB9IGVsc2UgaWYodGhpcy5jbGFzc05hbWUuaW5jbHVkZXMoXCJlZGl0LWRlc2NyaXB0aW9uXCIpKXtcclxuICAgICAgdG9kb0hhbmRsZXIuZWRpdERlc2NyaXB0aW9uKHByb2plY3RJZHgsIHRvZG9JZHgsIHRoaXMudmFsdWUpO1xyXG4gICAgICBjb25zdCB0aGlzRGVzY3JpcHRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2FyZFtkYXRhLXByb2plY3QtaWR4PVwiJHtwcm9qZWN0SWR4fVwiXVtkYXRhLXRvZG8taWR4PVwiJHt0b2RvSWR4fVwiXSAuZGVzY3JpcHRpb25gKTtcclxuICAgICAgdGhpc0Rlc2NyaXB0aW9uLmlubmVyVGV4dCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRoaXNEZXNjcmlwdGlvbi50aXRsZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmKHRoaXMuY2xhc3NOYW1lLmluY2x1ZGVzKFwiZWRpdC1kYXRlLWR1ZVwiKSl7XHJcbiAgICAgIHRvZG9IYW5kbGVyLmVkaXREYXRlRHVlKHByb2plY3RJZHgsIHRvZG9JZHgsIHRoaXMudmFsdWUpXHJcbiAgICAgIGNvbnN0IHRoaXNEYXRlRHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmNhcmRbZGF0YS1wcm9qZWN0LWlkeD1cIiR7cHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl0gLmRhdGUtZHVlYCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBkdWVEYXRlRm9ybWF0ID0gdGhpcy52YWx1ZS5zcGxpdChcIi1cIikuam9pbihcIiBcIik7XHJcbiAgICAgIHRoaXNEYXRlRHVlLmlubmVyVGV4dCA9IHRoaXMudmFsdWUubGVuZ3RoID4gMCA/IGBEdWU6ICR7XHJcbiAgICAgICAgZm9ybWF0KG5ldyBEYXRlKHBhcnNlSVNPKHRoaXMudmFsdWUpKSwgZGF0ZUZvcm1hdCl9ICgke1xyXG4gICAgICAgICAgaXNUb2RheShuZXcgRGF0ZShkdWVEYXRlRm9ybWF0KSkgPyBcInRvZGF5XCIgXHJcbiAgICAgICAgICA6IGludGxGb3JtYXREaXN0YW5jZShuZXcgRGF0ZShkdWVEYXRlRm9ybWF0KSwgbmV3IERhdGUoKSlcclxuICAgICAgICB9KWAgOiBcIlwiO1xyXG4gICAgICBcclxuICAgIH0gZWxzZSBpZih0aGlzLmNsYXNzTmFtZS5pbmNsdWRlcyhcImVkaXQtbGFiZWxcIikpe1xyXG4gICAgICB0b2RvSGFuZGxlci5lZGl0TGFiZWwocHJvamVjdElkeCwgdG9kb0lkeCwgdGFza0lkeCwgdGhpcy52YWx1ZSk7XHJcbiAgICAgIGNvbnN0IHRoaXNUYXNrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdW2RhdGEtdGFzay1pZHg9XCIke3Rhc2tJZHh9XCJdIH4gbGFiZWxgKTtcclxuICAgICAgdGhpc1Rhc2suaW5uZXJUZXh0ID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpc1Rhc2sudGl0bGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdG9nZ2xlTWVudSgpe1xyXG4gICAgY29uc3QgbWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWVudVwiKTtcclxuICAgIGNvbnN0IG1lbnVCZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2NyZWVuLWNvdmVyLW1lbnVcIik7XHJcbiAgICBbbWVudSxtZW51QmddLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC50b2dnbGUoXCJyZXZlYWxcIikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2hhbmdlUFJvamVjdCgpe1xyXG4gICAgdG9nZ2xlTWVudSgpO1xyXG4gICAgcGxhY2VDYXJkcyhwYXJzZUludCh0aGlzLmRhdGFzZXQucHJvamVjdElkeCkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVsZXRlUHJvamVjdChwcm9qZWN0SWR4KXtcclxuICAgIHRvZG9IYW5kbGVyLmRlbGV0ZVByb2plY3QocHJvamVjdElkeCk7XHJcblxyXG4gICAgcHJvamVjdHNMaXN0KHRydWUpO1xyXG4gICAgcGxhY2VDYXJkcygwKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNoYW5nZVByaW9yaXR5KCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0b2RvSWR4ID0gdGhpcy5kYXRhc2V0LnRvZG9JZHg7XHJcbiAgICB0b2RvSGFuZGxlci5jaGFuZ2VQcmlvcml0eShwcm9qZWN0SWR4LCB0b2RvSWR4LCB0aGlzLnZhbHVlKTtcclxuICAgIGNvbnN0IHByaW9yaXR5ID0gdGhpcy52YWx1ZSA9PSBcIjBcIiA/IFwibG93XCIgOiB0aGlzLnZhbHVlID09IFwiMVwiID8gXCJtaWRkbGVcIiA6IFwiaGlnaFwiO1xyXG5cclxuICAgIGNvbnN0IHRoaXNDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdW2RhdGEtdG9kby1pZHg9XCIke3RvZG9JZHh9XCJdYCk7XHJcbiAgICB0aGlzQ2FyZC5kYXRhc2V0LnByaW9yaXR5ID0gcHJpb3JpdHlcclxuXHJcbiAgICBjb25zdCBwcmlvcml0eVBhcmEgPSB0aGlzQ2FyZC5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtcHJpb3JpdHkgcFwiKTtcclxuICAgIHByaW9yaXR5UGFyYS5pbm5lclRleHQgPSBgUHJpb3JpdHk6ICR7cHJpb3JpdHl9YDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVRvZG8oKXtcclxuICAgIHRvZG9IYW5kbGVyLmNyZWF0ZVRvZG8odGhpcy5kYXRhc2V0LnByb2plY3RJZHgpO1xyXG4gICAgcGxhY2VDYXJkcyhwYXJzZUludCh0aGlzLmRhdGFzZXQucHJvamVjdElkeCkpO1xyXG5cclxuICAgIGNvbnN0IGVkaXRCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5wcm9qZWN0LWl0ZW0gLmljb24tZWRpdFwiKTtcclxuICAgIGVkaXRCdG5zW2VkaXRCdG5zLmxlbmd0aCAtMV0uY2hlY2tlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnByb2plY3QtaXRlbSAuY2FyZFwiKTtcclxuICAgIGNhcmRzW2NhcmRzLmxlbmd0aCAtMl0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiLFwiZWRpdC1tb2RlXCIpO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlSW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5lZGl0LXRpdGxlXCIpO1xyXG4gICAgdGl0bGVJbnB1dHNbdGl0bGVJbnB1dHMubGVuZ3RoIC0xXS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlUHJvamVjdCgpe1xyXG4gICAgdG9kb0hhbmRsZXIuY3JlYXRlUHJvamVjdCgpO1xyXG4gICAgcHJvamVjdHNMaXN0KHRydWUpO1xyXG4gICAgcGxhY2VDYXJkcyhwYXJzZUludCh0b2RvSGFuZGxlci5nZXRQcm9qZWN0c1RpdGxlcygpLmxlbmd0aC0xKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9qZWN0RWRpdCgpe1xyXG4gICAgY29uc3QgYWxsRWRpdEJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZpZWxkc2V0LXRhc2tzIC5pY29uLWVkaXRcIik7XHJcbiAgICBhbGxFZGl0QnRucy5mb3JFYWNoKGVkaXRCdG4gPT4ge1xyXG4gICAgICBpZihlZGl0QnRuLmRhdGFzZXQucHJvamVjdElkeCAhPT0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHgpe1xyXG4gICAgICAgIGVkaXRCdG4uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFsbEVkaXRNb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5maWVsZHNldC10YXNrcyAuZWRpdC1tb2RlXCIpO1xyXG4gICAgYWxsRWRpdE1vZGUuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZShcImVkaXQtbW9kZVwiKSk7XHJcbiAgICBcclxuICAgIGNvbnN0IHByb2plY3RDbGFzcyA9IHRoaXMucGFyZW50Tm9kZS5jbGFzc0xpc3Q7XHJcbiAgICB0aGlzLmNoZWNrZWQgPyBwcm9qZWN0Q2xhc3MuYWRkKFwiZWRpdC1tb2RlXCIpIDogcHJvamVjdENsYXNzLnJlbW92ZShcImVkaXQtbW9kZVwiKTtcclxuXHJcbiAgICBjb25zdCB0aGlzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuZWRpdC1wcm9qZWN0W2RhdGEtcHJvamVjdC1pZHg9XCIke3RoaXMuZGF0YXNldC5wcm9qZWN0SWR4fVwiXWApO1xyXG4gICAgdGhpc0lucHV0LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlZGl0UHJvamVjdFRpdGxlKCl7XHJcbiAgICBjb25zdCBwcm9qZWN0SWR4ID0gdGhpcy5kYXRhc2V0LnByb2plY3RJZHg7XHJcbiAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5tZW51LXRhc2tzLm1lbnUtaXRlbSBwW2RhdGEtcHJvamVjdC1pZHg9XCIke3Byb2plY3RJZHh9XCJdYCk7XHJcbiAgICB0aXRsZS5pbm5lclRleHQgPSB0aGlzLnZhbHVlO1xyXG4gICAgdGl0bGUudGl0bGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgdG9kb0hhbmRsZXIuZWRpdFByb2plY3RUaXRsZShwcm9qZWN0SWR4LCB0aGlzLnZhbHVlKTtcclxuICAgIC8vZWRpdCB0aXRsZSBvZiBhY3RpdmUgcHJvamVjdCBpZiB0aGUgZWRpdGluZyB0aXRsZSBpcyBmb3IgaXRcclxuICAgIGNvbnN0IHRpdGxlQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaDFcIik7XHJcbiAgICBpZihwcm9qZWN0SWR4ID09PSB0aXRsZUNhcmRzLmRhdGFzZXQucHJvamVjdElkeCkge1xyXG4gICAgICB0aXRsZUNhcmRzLmlubmVyVGV4dCA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHRpdGxlQ2FyZHMudGl0bGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZpbHRlclRvZG9zKCl7XHJcbiAgICB0b2dnbGVNZW51KCk7XHJcbiAgICBjYXJkc0NvbnRhaW5lci5yZXBsYWNlQ2hpbGRyZW4oKTtcclxuXHJcbiAgICBjb25zdCBwcm9qZWN0ID0gdG9kb0hhbmRsZXIuZ2V0UHJvamVjdCh0aGlzLmRhdGFzZXQuZmlsdGVyKTtcclxuXHJcbiAgICBcclxuICAgIGNvbnN0IHByb2plY3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHByb2plY3RJdGVtLmNsYXNzTGlzdC5hZGQoXCJwcm9qZWN0LWl0ZW1cIik7XHJcbiAgICBcclxuICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoZWFkZXJcIik7XHJcbiAgICBjb25zdCBoMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcclxuICAgIGgxLmlubmVyVGV4dCA9IHByb2plY3QudGl0bGU7XHJcbiAgICBoMS50aXRsZSA9IHByb2plY3QudGl0bGU7XHJcbiAgICBoZWFkZXIuYXBwZW5kKGgxKTtcclxuICAgIGNhcmRzQ29udGFpbmVyLmFwcGVuZChoZWFkZXIpO1xyXG5cclxuICAgIHByb2plY3QudG9kb3MuZm9yRWFjaCh0b2RvID0+IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgcmVzdWx0LmNsYXNzTGlzdC5hZGQoXCJjYXJkXCIsIFwic2VhcmNoLXJlc3VsdFwiLCBcImFjdGl2ZVwiKTtcclxuICAgICAgcmVzdWx0LmRhdGFzZXQucHJpb3JpdHkgPSB0b2RvLnByaW9yaXR5O1xyXG4gICAgICByZXN1bHQuZGF0YXNldC5wcm9qZWN0SWR4ID0gdG9kby5wcm9qZWN0SWR4O1xyXG4gICAgICByZXN1bHQuZGF0YXNldC50b2RvSWR4ID0gdG9kby50b2RvSWR4O1xyXG4gICAgICByZXN1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICBwbGFjZUNhcmRzKHBhcnNlSW50KHRvZG8ucHJvamVjdElkeCksIHRvZG8udG9kb0lkeCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDJcIik7XHJcbiAgICAgIHRpdGxlLmNsYXNzTGlzdC5hZGQoXCJ0aXRsZVwiKTtcclxuICAgICAgdGl0bGUuaW5uZXJUZXh0ID0gdG9kby50aXRsZTtcclxuXHJcbiAgICAgIGNvbnN0IHByb2dyZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgcHJvZ3Jlc3MuY2xhc3NMaXN0LmFkZChcInByb2dyZXNzXCIpO1xyXG4gICAgICBjb25zdCBjb21wbGV0ZWQgPSB0b2RvLmNoZWNrcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRG9uZSkubGVuZ3RoO1xyXG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gY29tcGxldGVkICogMTAwIC8gdG9kby5jaGVja3MubGVuZ3RoO1xyXG4gICAgICBwcm9ncmVzcy5zdHlsZS5iYWNrZ3JvdW5kID0gYGNvbmljLWdyYWRpZW50KCMyZTEwYzAgJHtwZXJjZW50YWdlfSUsIHRyYW5zcGFyZW50ICR7cGVyY2VudGFnZX0lLCB0cmFuc3BhcmVudCAxMDAlKWBcclxuICAgICAgcHJvZ3Jlc3Muc3R5bGUub3BhY2l0eSA9IHRvZG8uY2hlY2tzLmxlbmd0aCA9PT0gMCA/IFwiMCVcIiA6IFwiMTAwJVwiO1xyXG5cclxuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZChcImRlc2NyaXB0aW9uXCIpO1xyXG4gICAgICBkZXNjcmlwdGlvbi5pbm5lclRleHQgPSB0b2RvLmRlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgY29uc3QgZGF0ZUNyZWF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XHJcbiAgICAgIGRhdGVDcmVhdGlvbi5jbGFzc0xpc3QuYWRkKFwiZGF0ZS1jcmVhdGlvblwiKTtcclxuICAgICAgZGF0ZUNyZWF0aW9uLmlubmVyVGV4dCA9IGBDcmVhdGVkOiAke2Zvcm1hdChuZXcgRGF0ZShwYXJzZUlTTyh0b2RvLmRhdGVDcmVhdGlvbikpLCBkYXRlRm9ybWF0KX1gOztcclxuXHJcbiAgICAgIGNvbnN0IGRhdGVEdWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgICAgZGF0ZUR1ZS5jbGFzc0xpc3QuYWRkKFwiZGF0ZS1kdWVcIik7XHJcblxyXG4gICAgICBjb25zdCBkdWVEYXRlRm9ybWF0ID0gdG9kby5kYXRlRHVlLnNwbGl0KFwiLVwiKS5qb2luKFwiIFwiKTtcclxuICAgICAgZGF0ZUR1ZS5pbm5lclRleHQgPSB0b2RvLmRhdGVEdWUubGVuZ3RoID4gMCA/IGBEdWU6ICR7XHJcbiAgICAgICAgZm9ybWF0KG5ldyBEYXRlKHBhcnNlSVNPKHRvZG8uZGF0ZUR1ZSkpLCBkYXRlRm9ybWF0KX0gKCR7XHJcbiAgICAgICAgICBpc1RvZGF5KG5ldyBEYXRlKGR1ZURhdGVGb3JtYXQpKSA/IFwidG9kYXlcIiBcclxuICAgICAgICAgIDogaW50bEZvcm1hdERpc3RhbmNlKG5ldyBEYXRlKGR1ZURhdGVGb3JtYXQpLCBuZXcgRGF0ZSgpKVxyXG4gICAgICAgIH0pYCA6IFwiXCI7XHJcblxyXG4gICAgICByZXN1bHQuYXBwZW5kKHRpdGxlLCBwcm9ncmVzcywgZGVzY3JpcHRpb24sIGRhdGVDcmVhdGlvbiwgZGF0ZUR1ZSk7XHJcblxyXG4gICAgICBwcm9qZWN0SXRlbS5hcHBlbmQocmVzdWx0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNhcmRzQ29udGFpbmVyLmFwcGVuZENoaWxkKHByb2plY3RJdGVtKTtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gdGFza0NoZWNrKHByb2plY3RJZHhQYXJhbSwgdG9kb0lkeFBhcmFtLCB0YXNrSWR4UGFyYW0pe1xyXG4gICAgY29uc3QgcHJvamVjdElkeCA9IHRoaXM/LmRhdGFzZXQ/LnByb2plY3RJZHggfHwgcHJvamVjdElkeFBhcmFtO1xyXG4gICAgY29uc3QgdG9kb0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRvZG9JZHggfHwgdG9kb0lkeFBhcmFtO1xyXG4gICAgY29uc3QgdGFza0lkeCA9IHRoaXM/LmRhdGFzZXQ/LnRhc2tJZHggfHwgdGFza0lkeFBhcmFtO1xyXG4gICAgdG9kb0hhbmRsZXIudGFza0NoZWNrKHByb2plY3RJZHgsIHRvZG9JZHgsIHRhc2tJZHgpO1xyXG5cclxuICAgIHVwZGF0ZVByb2dyZXNzKHByb2plY3RJZHgsIHRvZG9JZHgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MocHJvamVjdElkeCwgdG9kb0lkeCl7XHJcbiAgICBjb25zdCB0aGlzUHJvamVjdCA9IHRvZG9IYW5kbGVyLmdldFByb2plY3QocGFyc2VJbnQocHJvamVjdElkeCkpLnRvZG9zW3RvZG9JZHhdO1xyXG5cclxuICAgIGNvbnN0IHRoaXNDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmNhcmRbZGF0YS1wcm9qZWN0LWlkeD1cIiR7cHJvamVjdElkeH1cIl1bZGF0YS10b2RvLWlkeD1cIiR7dG9kb0lkeH1cIl1gKTtcclxuICAgIGNvbnN0IHBlcmNlbnRhZ2VEaXYgPSB0aGlzQ2FyZC5xdWVyeVNlbGVjdG9yKFwiLnByb2dyZXNzXCIpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBsZXRlZCA9IHRoaXNQcm9qZWN0LmNoZWNrcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzRG9uZSkubGVuZ3RoO1xyXG4gICAgY29uc3QgcGVyY2VudGFnZSA9IGNvbXBsZXRlZCAqIDEwMCAvIHRoaXNQcm9qZWN0LmNoZWNrcy5sZW5ndGg7XHJcbiAgICBwZXJjZW50YWdlRGl2LnN0eWxlLmJhY2tncm91bmQgPSBgY29uaWMtZ3JhZGllbnQoIzJlMTBjMCAke3BlcmNlbnRhZ2V9JSwgdHJhbnNwYXJlbnQgJHtwZXJjZW50YWdlfSUsIHRyYW5zcGFyZW50IDEwMCUpYFxyXG4gICAgcGVyY2VudGFnZURpdi5zdHlsZS5vcGFjaXR5ID0gdGhpc1Byb2plY3QuY2hlY2tzLmxlbmd0aCA9PT0gMCA/IFwiMCVcIiA6IFwiMTAwJVwiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbG9hZERhcmtNb2RlKCl7XHJcbiAgICBpZih0b2RvSGFuZGxlci5pc09uRGFya01vZGUoKSkge1xyXG4gICAgICBjb25zdCByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIjpyb290XCIpO1xyXG4gICAgICByb290LmNsYXNzTGlzdC5hZGQoXCJkYXJrXCIpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRvZ2dsZURhcmtNb2RlKCl7XHJcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIjpyb290XCIpO1xyXG5cclxuICAgIHRoaXMuY2hlY2tlZCA/IHJvb3QuY2xhc3NMaXN0LmFkZChcImRhcmtcIilcclxuICAgIDogcm9vdC5jbGFzc0xpc3QucmVtb3ZlKFwiZGFya1wiKTtcclxuICAgIHRvZG9IYW5kbGVyLmRhcmtNb2RlKHRoaXMuY2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBwbGFjZUNhcmRzLCBsb2FkTWVudSB9O1xyXG59KSgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file