tide-design-system 2.2.11 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/style.css +1 -1
- package/dist/tide-design-system.cjs +2 -2
- package/dist/tide-design-system.esm.js +415 -406
- package/package.json +1 -1
- package/src/components/TideCarousel.vue +4 -3
- package/src/components/TideInputCheckbox.vue +1 -0
- package/src/components/TideInputRadio.vue +1 -0
- package/src/components/TideModal.vue +13 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as C, openBlock as E, createElementBlock as p, createElementVNode as v, normalizeClass as c, unref as e, ref as _, watch as K, defineAsyncComponent as xt, markRaw as
|
|
1
|
+
import { defineComponent as C, openBlock as E, createElementBlock as p, createElementVNode as v, normalizeClass as c, unref as e, ref as _, watch as K, defineAsyncComponent as xt, markRaw as kt, createBlock as P, resolveDynamicComponent as Oe, createCommentVNode as F, toDisplayString as D, createVNode as M, renderSlot as V, withCtx as Le, Fragment as ee, renderList as le, createTextVNode as Mt, onMounted as Ge, onUnmounted as It, onUpdated as Yt, computed as U, normalizeStyle as Ke, withModifiers as Ie, withDirectives as we, vModelSelect as Wt, vModelDynamic as Xt, vModelText as Vt, nextTick as Tt, withKeys as $t, shallowRef as Kt, getCurrentScope as zt, onScopeDispose as Qt, shallowReadonly as ve, watchEffect as Zt, onBeforeMount as gt, Teleport as mt, Transition as qt, vShow as jt } from "vue";
|
|
2
2
|
const it = {
|
|
3
3
|
HORIZONTAL: "horizontal",
|
|
4
4
|
VERTICAL: "vertical"
|
|
@@ -505,16 +505,16 @@ const it = {
|
|
|
505
505
|
INITIAL: "tide-z-index-initial",
|
|
506
506
|
ONE: "tide-z-index-1"
|
|
507
507
|
}
|
|
508
|
-
},
|
|
508
|
+
}, Jt = {
|
|
509
509
|
class: /* @__PURE__ */ c(["tide-divider"])
|
|
510
|
-
},
|
|
510
|
+
}, es = /* @__PURE__ */ C({
|
|
511
511
|
__name: "TideDivider",
|
|
512
512
|
props: {
|
|
513
513
|
orientation: { default: it.HORIZONTAL }
|
|
514
514
|
},
|
|
515
515
|
setup(i) {
|
|
516
516
|
const s = i;
|
|
517
|
-
return (o, n) => (E(), p("div",
|
|
517
|
+
return (o, n) => (E(), p("div", Jt, [
|
|
518
518
|
v("div", {
|
|
519
519
|
class: c([
|
|
520
520
|
e(t).BORDER.COLOR.LOW,
|
|
@@ -529,12 +529,12 @@ const w = (i, s) => {
|
|
|
529
529
|
for (const [n, a] of s)
|
|
530
530
|
o[n] = a;
|
|
531
531
|
return o;
|
|
532
|
-
}, Ve = /* @__PURE__ */ w(
|
|
532
|
+
}, Ve = /* @__PURE__ */ w(es, [["__scopeId", "data-v-c2dc7d09"]]), nt = (i, s) => {
|
|
533
533
|
const o = i[s];
|
|
534
534
|
return o ? typeof o == "function" ? o() : Promise.resolve(o) : new Promise((n, a) => {
|
|
535
535
|
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(a.bind(null, new Error("Unknown variable dynamic import: " + s)));
|
|
536
536
|
});
|
|
537
|
-
},
|
|
537
|
+
}, ts = {
|
|
538
538
|
AERO: "aero",
|
|
539
539
|
ATV: "atv",
|
|
540
540
|
BOATMART: "boatmart",
|
|
@@ -547,13 +547,13 @@ const w = (i, s) => {
|
|
|
547
547
|
}, Y = {
|
|
548
548
|
LARGE: "large",
|
|
549
549
|
SMALL: "small"
|
|
550
|
-
},
|
|
550
|
+
}, me = {
|
|
551
551
|
LARGE: "large",
|
|
552
552
|
SMALL: "small"
|
|
553
553
|
}, ze = (i) => {
|
|
554
554
|
let s = i && typeof i == "number" ? new Intl.NumberFormat().format(i) : String(i || ""), o = s;
|
|
555
555
|
return i && typeof i == "string" && (o = o.replace(/\D/g, ""), Number(o) ? s = new Intl.NumberFormat().format(Number(o)) : s = "0"), s;
|
|
556
|
-
},
|
|
556
|
+
}, ss = (i) => i && typeof i == "string" ? i.replace(/([a-z]{1})([A-Z]{1})/g, "$1 $2").replace(/[\s_-]/g, " ").toLowerCase().split(" ").map((s) => s.slice(0, 1).toUpperCase() + s.slice(1)).join("") : i, os = (i) => {
|
|
557
557
|
let s = String(i && typeof i == "number" ? i : i || ""), o = s;
|
|
558
558
|
switch (o = o.replace(/\D/g, ""), o.length) {
|
|
559
559
|
case 7:
|
|
@@ -570,7 +570,7 @@ const w = (i, s) => {
|
|
|
570
570
|
break;
|
|
571
571
|
}
|
|
572
572
|
return s;
|
|
573
|
-
},
|
|
573
|
+
}, is = (i) => `$${i ? ze(i) : String(i || "0")}`, H = /* @__PURE__ */ C({
|
|
574
574
|
__name: "TideIcon",
|
|
575
575
|
props: {
|
|
576
576
|
icon: {},
|
|
@@ -581,8 +581,8 @@ const w = (i, s) => {
|
|
|
581
581
|
return K(
|
|
582
582
|
() => s.icon,
|
|
583
583
|
async () => {
|
|
584
|
-
const n = s.icon, a = ts(n), [d] = n.split("-"), r = es[d == null ? void 0 : d.toUpperCase()], l = xt(() => r ? nt(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/realm/atv/IconAtvAtv.svg": () => import("./IconAtvAtv-d10d11c0.js"), "../assets/svg/icons/realm/atv/IconAtvDuneBuggy.svg": () => import("./IconAtvDuneBuggy-458e7a9c.js"), "../assets/svg/icons/realm/atv/IconAtvGoKart.svg": () => import("./IconAtvGoKart-0eab678e.js"), "../assets/svg/icons/realm/atv/IconAtvGolfCart.svg": () => import("./IconAtvGolfCart-c549f7f3.js"), "../assets/svg/icons/realm/atv/IconAtvSandRail.svg": () => import("./IconAtvSandRail-e8913dd9.js"), "../assets/svg/icons/realm/atv/IconAtvSideBySide.svg": () => import("./IconAtvSideBySide-50377701.js"), "../assets/svg/icons/realm/atv/IconAtvTrailer.svg": () => import("./IconAtvTrailer-062da3ab.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartPwc.svg": () => import("./IconBoatmartPwc-7a3c368a.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartTrailer.svg": () => import("./IconBoatmartTrailer-68276601.js"), "../assets/svg/icons/realm/rv/IconRvClassA.svg": () => import("./IconRvClassA-e2335760.js"), "../assets/svg/icons/realm/rv/IconRvClassB.svg": () => import("./IconRvClassB-ae8261fe.js"), "../assets/svg/icons/realm/rv/IconRvClassC.svg": () => import("./IconRvClassC-c1ff2a5a.js"), "../assets/svg/icons/realm/rv/IconRvFifthWheel.svg": () => import("./IconRvFifthWheel-d201d502.js"), "../assets/svg/icons/realm/rv/IconRvFishHouse.svg": () => import("./IconRvFishHouse-b35e6ac1.js"), "../assets/svg/icons/realm/rv/IconRvParkModel.svg": () => import("./IconRvParkModel-20bf39bc.js"), "../assets/svg/icons/realm/rv/IconRvPopUpCamper.svg": () => import("./IconRvPopUpCamper-14ac6a8d.js"), "../assets/svg/icons/realm/rv/IconRvTravelTrailer.svg": () => import("./IconRvTravelTrailer-e7c21b4c.js"), "../assets/svg/icons/realm/rv/IconRvTruckCamper.svg": () => import("./IconRvTruckCamper-661b0c28.js") }), `../assets/svg/icons/realm/${r}/Icon${a}.svg`) : nt(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/IconAccountBalance.svg": () => import("./IconAccountBalance-ad4f4a95.js"), "../assets/svg/icons/IconAcute.svg": () => import("./IconAcute-ad6bc5da.js"), "../assets/svg/icons/IconAdd.svg": () => import("./IconAdd-917e055b.js"), "../assets/svg/icons/IconAiDescription.svg": () => import("./IconAiDescription-e6f8ed46.js"), "../assets/svg/icons/IconAlignSpaceEven.svg": () => import("./IconAlignSpaceEven-a1d90758.js"), "../assets/svg/icons/IconApplePay.svg": () => import("./IconApplePay-7742e162.js"), "../assets/svg/icons/IconArrowBack.svg": () => import("./IconArrowBack-1810092d.js"), "../assets/svg/icons/IconArrowCycle.svg": () => import("./IconArrowCycle-f8d882fe.js"), "../assets/svg/icons/IconArrowForward.svg": () => import("./IconArrowForward-ddabefc9.js"), "../assets/svg/icons/IconArrowRight.svg": () => import("./IconArrowRight-d93347c3.js"), "../assets/svg/icons/IconArrowUp.svg": () => import("./IconArrowUp-75edebad.js"), "../assets/svg/icons/IconAssignment.svg": () => import("./IconAssignment-b1d2ffa2.js"), "../assets/svg/icons/IconAttachMoney.svg": () => import("./IconAttachMoney-1360c507.js"), "../assets/svg/icons/IconAutoRenew.svg": () => import("./IconAutoRenew-00afcc33.js"), "../assets/svg/icons/IconAwardStar.svg": () => import("./IconAwardStar-8128aca1.js"), "../assets/svg/icons/IconBed.svg": () => import("./IconBed-3b1fa670.js"), "../assets/svg/icons/IconBolt.svg": () => import("./IconBolt-83121ee2.js"), "../assets/svg/icons/IconBookmark.svg": () => import("./IconBookmark-7d88d664.js"), "../assets/svg/icons/IconBunkhouse.svg": () => import("./IconBunkhouse-e7cb965d.js"), "../assets/svg/icons/IconCalendarMonth.svg": () => import("./IconCalendarMonth-2fd1e713.js"), "../assets/svg/icons/IconCall.svg": () => import("./IconCall-8aa582d9.js"), "../assets/svg/icons/IconCallQuality.svg": () => import("./IconCallQuality-1edf4c35.js"), "../assets/svg/icons/IconCarRental.svg": () => import("./IconCarRental-7709e091.js"), "../assets/svg/icons/IconCheck.svg": () => import("./IconCheck-cf7470ee.js"), "../assets/svg/icons/IconChevronLeft.svg": () => import("./IconChevronLeft-558206bb.js"), "../assets/svg/icons/IconChevronRight.svg": () => import("./IconChevronRight-28930a0b.js"), "../assets/svg/icons/IconClear.svg": () => import("./IconClear-5cf9e8be.js"), "../assets/svg/icons/IconClose.svg": () => import("./IconClose-abfb6177.js"), "../assets/svg/icons/IconContract.svg": () => import("./IconContract-289a7094.js"), "../assets/svg/icons/IconCrash.svg": () => import("./IconCrash-d87f6517.js"), "../assets/svg/icons/IconDashboardCustomize.svg": () => import("./IconDashboardCustomize-f74fde35.js"), "../assets/svg/icons/IconDelete.svg": () => import("./IconDelete-67b69553.js"), "../assets/svg/icons/IconDiamond.svg": () => import("./IconDiamond-93af488a.js"), "../assets/svg/icons/IconDirectionsBoat.svg": () => import("./IconDirectionsBoat-4d41fb87.js"), "../assets/svg/icons/IconDomain.svg": () => import("./IconDomain-377b91aa.js"), "../assets/svg/icons/IconDraft.svg": () => import("./IconDraft-6e70e48f.js"), "../assets/svg/icons/IconEdit.svg": () => import("./IconEdit-16d34325.js"), "../assets/svg/icons/IconEngine.svg": () => import("./IconEngine-ee5f92d4.js"), "../assets/svg/icons/IconEngineering.svg": () => import("./IconEngineering-e18db558.js"), "../assets/svg/icons/IconError.svg": () => import("./IconError-a2922b95.js"), "../assets/svg/icons/IconExpandContent.svg": () => import("./IconExpandContent-7e144d1c.js"), "../assets/svg/icons/IconExpandLess.svg": () => import("./IconExpandLess-3a8a0552.js"), "../assets/svg/icons/IconExpandMore.svg": () => import("./IconExpandMore-c600148e.js"), "../assets/svg/icons/IconFacebook.svg": () => import("./IconFacebook-fb3f93e3.js"), "../assets/svg/icons/IconFavorite.svg": () => import("./IconFavorite-d23faefe.js"), "../assets/svg/icons/IconFavoriteFilled.svg": () => import("./IconFavoriteFilled-aa0d6d5e.js"), "../assets/svg/icons/IconFlag.svg": () => import("./IconFlag-8bafa50c.js"), "../assets/svg/icons/IconFormatBold.svg": () => import("./IconFormatBold-70a5cacf.js"), "../assets/svg/icons/IconFormatItalic.svg": () => import("./IconFormatItalic-c06504d7.js"), "../assets/svg/icons/IconFormatListBulleted.svg": () => import("./IconFormatListBulleted-9493858a.js"), "../assets/svg/icons/IconForum.svg": () => import("./IconForum-ae4ad63f.js"), "../assets/svg/icons/IconGas.svg": () => import("./IconGas-198d529d.js"), "../assets/svg/icons/IconGavel.svg": () => import("./IconGavel-44c29036.js"), "../assets/svg/icons/IconGears.svg": () => import("./IconGears-a52f8ce9.js"), "../assets/svg/icons/IconGlobeLocationPin.svg": () => import("./IconGlobeLocationPin-4b7fb00b.js"), "../assets/svg/icons/IconGoogle.svg": () => import("./IconGoogle-febad0d8.js"), "../assets/svg/icons/IconGooglePay.svg": () => import("./IconGooglePay-8cf0286e.js"), "../assets/svg/icons/IconGrid.svg": () => import("./IconGrid-25f665e0.js"), "../assets/svg/icons/IconHandshake.svg": () => import("./IconHandshake-7c9f1e84.js"), "../assets/svg/icons/IconHandyman.svg": () => import("./IconHandyman-73c7c329.js"), "../assets/svg/icons/IconHeight.svg": () => import("./IconHeight-4fae7545.js"), "../assets/svg/icons/IconHelp.svg": () => import("./IconHelp-340ee4fb.js"), "../assets/svg/icons/IconInfo.svg": () => import("./IconInfo-efead10b.js"), "../assets/svg/icons/IconInformation.svg": () => import("./IconInformation-790c598a.js"), "../assets/svg/icons/IconInsertText.svg": () => import("./IconInsertText-00236a65.js"), "../assets/svg/icons/IconInstagram.svg": () => import("./IconInstagram-db345e15.js"), "../assets/svg/icons/IconIosShare.svg": () => import("./IconIosShare-167aa8c4.js"), "../assets/svg/icons/IconLayout.svg": () => import("./IconLayout-6963184f.js"), "../assets/svg/icons/IconLevellingJack.svg": () => import("./IconLevellingJack-04860178.js"), "../assets/svg/icons/IconLinkedIn.svg": () => import("./IconLinkedIn-9c4740a6.js"), "../assets/svg/icons/IconLocalShipping.svg": () => import("./IconLocalShipping-901a3e4c.js"), "../assets/svg/icons/IconLock.svg": () => import("./IconLock-47669e20.js"), "../assets/svg/icons/IconMail.svg": () => import("./IconMail-9b85058a.js"), "../assets/svg/icons/IconMenu.svg": () => import("./IconMenu-4bed57f3.js"), "../assets/svg/icons/IconMoneyBag.svg": () => import("./IconMoneyBag-4a01a10a.js"), "../assets/svg/icons/IconMoreHoriz.svg": () => import("./IconMoreHoriz-2aabe29f.js"), "../assets/svg/icons/IconNotifications.svg": () => import("./IconNotifications-bcbf1d8c.js"), "../assets/svg/icons/IconOdometer.svg": () => import("./IconOdometer-709f4f00.js"), "../assets/svg/icons/IconOpenInNew.svg": () => import("./IconOpenInNew-78fffcfe.js"), "../assets/svg/icons/IconPalette.svg": () => import("./IconPalette-22865300.js"), "../assets/svg/icons/IconPaypal.svg": () => import("./IconPaypal-c28e6dbe.js"), "../assets/svg/icons/IconPerson.svg": () => import("./IconPerson-7ada8b07.js"), "../assets/svg/icons/IconPersonSearch.svg": () => import("./IconPersonSearch-1ccccee1.js"), "../assets/svg/icons/IconPhotoCamera.svg": () => import("./IconPhotoCamera-31a58b85.js"), "../assets/svg/icons/IconPinterest.svg": () => import("./IconPinterest-fe5cc414.js"), "../assets/svg/icons/IconPlayArrow.svg": () => import("./IconPlayArrow-1ed5d884.js"), "../assets/svg/icons/IconPolicy.svg": () => import("./IconPolicy-0a3a02bc.js"), "../assets/svg/icons/IconPower.svg": () => import("./IconPower-bfe4f81a.js"), "../assets/svg/icons/IconPowerOff.svg": () => import("./IconPowerOff-dbade32b.js"), "../assets/svg/icons/IconPriorityHigh.svg": () => import("./IconPriorityHigh-ab1b4a95.js"), "../assets/svg/icons/IconRemove.svg": () => import("./IconRemove-bab221ba.js"), "../assets/svg/icons/IconRequestQuote.svg": () => import("./IconRequestQuote-f6364b1e.js"), "../assets/svg/icons/IconResetWrench.svg": () => import("./IconResetWrench-8791a5a9.js"), "../assets/svg/icons/IconRoad.svg": () => import("./IconRoad-efce130e.js"), "../assets/svg/icons/IconRoundedCorner.svg": () => import("./IconRoundedCorner-adbcfd09.js"), "../assets/svg/icons/IconRuler.svg": () => import("./IconRuler-0ceea80a.js"), "../assets/svg/icons/IconSailing.svg": () => import("./IconSailing-19762955.js"), "../assets/svg/icons/IconSchool.svg": () => import("./IconSchool-2f3ff8d7.js"), "../assets/svg/icons/IconSearch.svg": () => import("./IconSearch-f8faefb4.js"), "../assets/svg/icons/IconSeating.svg": () => import("./IconSeating-2ca8921d.js"), "../assets/svg/icons/IconSell.svg": () => import("./IconSell-b011ac2d.js"), "../assets/svg/icons/IconSensors.svg": () => import("./IconSensors-c4387bc9.js"), "../assets/svg/icons/IconSettings.svg": () => import("./IconSettings-32dd2125.js"), "../assets/svg/icons/IconShare.svg": () => import("./IconShare-57f28ce3.js"), "../assets/svg/icons/IconShieldCheck.svg": () => import("./IconShieldCheck-0c47755d.js"), "../assets/svg/icons/IconShoppingCart.svg": () => import("./IconShoppingCart-b532dab0.js"), "../assets/svg/icons/IconSleeps.svg": () => import("./IconSleeps-b994bd2f.js"), "../assets/svg/icons/IconSms.svg": () => import("./IconSms-378f373a.js"), "../assets/svg/icons/IconSnowflake.svg": () => import("./IconSnowflake-9d956143.js"), "../assets/svg/icons/IconStar.svg": () => import("./IconStar-1b8ad0f9.js"), "../assets/svg/icons/IconStarFilled.svg": () => import("./IconStarFilled-b73e12dc.js"), "../assets/svg/icons/IconStarHalf.svg": () => import("./IconStarHalf-0b663cd6.js"), "../assets/svg/icons/IconSummarize.svg": () => import("./IconSummarize-69ab122a.js"), "../assets/svg/icons/IconSwapHoriz.svg": () => import("./IconSwapHoriz-2d9550c3.js"), "../assets/svg/icons/IconSwapVert.svg": () => import("./IconSwapVert-8085e942.js"), "../assets/svg/icons/IconThreeDRotation.svg": () => import("./IconThreeDRotation-33f086a7.js"), "../assets/svg/icons/IconThumbUp.svg": () => import("./IconThumbUp-72caf64e.js"), "../assets/svg/icons/IconTrendingDown.svg": () => import("./IconTrendingDown-ff3969c7.js"), "../assets/svg/icons/IconTrophy.svg": () => import("./IconTrophy-f4be8b54.js"), "../assets/svg/icons/IconTune.svg": () => import("./IconTune-0913ba01.js"), "../assets/svg/icons/IconTwitter.svg": () => import("./IconTwitter-9acefb07.js"), "../assets/svg/icons/IconUmbrella.svg": () => import("./IconUmbrella-775b11b8.js"), "../assets/svg/icons/IconVerified.svg": () => import("./IconVerified-000f615f.js"), "../assets/svg/icons/IconVideocam.svg": () => import("./IconVideocam-33650e6f.js"), "../assets/svg/icons/IconViewInAr.svg": () => import("./IconViewInAr-d1534ef2.js"), "../assets/svg/icons/IconVisibility.svg": () => import("./IconVisibility-a1c21dd0.js"), "../assets/svg/icons/IconVolumeOff.svg": () => import("./IconVolumeOff-8e121ef3.js"), "../assets/svg/icons/IconVolumeOn.svg": () => import("./IconVolumeOn-992e16dd.js"), "../assets/svg/icons/IconWarehouse.svg": () => import("./IconWarehouse-764da944.js"), "../assets/svg/icons/IconWarning.svg": () => import("./IconWarning-6f490acf.js"), "../assets/svg/icons/IconWater.svg": () => import("./IconWater-a5f94879.js"), "../assets/svg/icons/IconWeight.svg": () => import("./IconWeight-e3b3daa6.js"), "../assets/svg/icons/IconWidth.svg": () => import("./IconWidth-c81dbc7a.js"), "../assets/svg/icons/IconWorkspacePremium.svg": () => import("./IconWorkspacePremium-efd0a531.js"), "../assets/svg/icons/IconWrench.svg": () => import("./IconWrench-6c52ef4f.js"), "../assets/svg/icons/IconYoutube.svg": () => import("./IconYoutube-a6224033.js") }), `../assets/svg/icons/Icon${a}.svg`));
|
|
585
|
-
o.value =
|
|
584
|
+
const n = s.icon, a = ss(n), [d] = n.split("-"), r = ts[d == null ? void 0 : d.toUpperCase()], l = xt(() => r ? nt(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/realm/atv/IconAtvAtv.svg": () => import("./IconAtvAtv-d10d11c0.js"), "../assets/svg/icons/realm/atv/IconAtvDuneBuggy.svg": () => import("./IconAtvDuneBuggy-458e7a9c.js"), "../assets/svg/icons/realm/atv/IconAtvGoKart.svg": () => import("./IconAtvGoKart-0eab678e.js"), "../assets/svg/icons/realm/atv/IconAtvGolfCart.svg": () => import("./IconAtvGolfCart-c549f7f3.js"), "../assets/svg/icons/realm/atv/IconAtvSandRail.svg": () => import("./IconAtvSandRail-e8913dd9.js"), "../assets/svg/icons/realm/atv/IconAtvSideBySide.svg": () => import("./IconAtvSideBySide-50377701.js"), "../assets/svg/icons/realm/atv/IconAtvTrailer.svg": () => import("./IconAtvTrailer-062da3ab.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartPwc.svg": () => import("./IconBoatmartPwc-7a3c368a.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartTrailer.svg": () => import("./IconBoatmartTrailer-68276601.js"), "../assets/svg/icons/realm/rv/IconRvClassA.svg": () => import("./IconRvClassA-e2335760.js"), "../assets/svg/icons/realm/rv/IconRvClassB.svg": () => import("./IconRvClassB-ae8261fe.js"), "../assets/svg/icons/realm/rv/IconRvClassC.svg": () => import("./IconRvClassC-c1ff2a5a.js"), "../assets/svg/icons/realm/rv/IconRvFifthWheel.svg": () => import("./IconRvFifthWheel-d201d502.js"), "../assets/svg/icons/realm/rv/IconRvFishHouse.svg": () => import("./IconRvFishHouse-b35e6ac1.js"), "../assets/svg/icons/realm/rv/IconRvParkModel.svg": () => import("./IconRvParkModel-20bf39bc.js"), "../assets/svg/icons/realm/rv/IconRvPopUpCamper.svg": () => import("./IconRvPopUpCamper-14ac6a8d.js"), "../assets/svg/icons/realm/rv/IconRvTravelTrailer.svg": () => import("./IconRvTravelTrailer-e7c21b4c.js"), "../assets/svg/icons/realm/rv/IconRvTruckCamper.svg": () => import("./IconRvTruckCamper-661b0c28.js") }), `../assets/svg/icons/realm/${r}/Icon${a}.svg`) : nt(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/IconAccountBalance.svg": () => import("./IconAccountBalance-ad4f4a95.js"), "../assets/svg/icons/IconAcute.svg": () => import("./IconAcute-ad6bc5da.js"), "../assets/svg/icons/IconAdd.svg": () => import("./IconAdd-917e055b.js"), "../assets/svg/icons/IconAiDescription.svg": () => import("./IconAiDescription-e6f8ed46.js"), "../assets/svg/icons/IconAlignSpaceEven.svg": () => import("./IconAlignSpaceEven-a1d90758.js"), "../assets/svg/icons/IconApplePay.svg": () => import("./IconApplePay-7742e162.js"), "../assets/svg/icons/IconArrowBack.svg": () => import("./IconArrowBack-1810092d.js"), "../assets/svg/icons/IconArrowCycle.svg": () => import("./IconArrowCycle-f8d882fe.js"), "../assets/svg/icons/IconArrowForward.svg": () => import("./IconArrowForward-ddabefc9.js"), "../assets/svg/icons/IconArrowRight.svg": () => import("./IconArrowRight-d93347c3.js"), "../assets/svg/icons/IconArrowUp.svg": () => import("./IconArrowUp-75edebad.js"), "../assets/svg/icons/IconAssignment.svg": () => import("./IconAssignment-b1d2ffa2.js"), "../assets/svg/icons/IconAttachMoney.svg": () => import("./IconAttachMoney-1360c507.js"), "../assets/svg/icons/IconAutoRenew.svg": () => import("./IconAutoRenew-00afcc33.js"), "../assets/svg/icons/IconAwardStar.svg": () => import("./IconAwardStar-8128aca1.js"), "../assets/svg/icons/IconBed.svg": () => import("./IconBed-3b1fa670.js"), "../assets/svg/icons/IconBolt.svg": () => import("./IconBolt-83121ee2.js"), "../assets/svg/icons/IconBookmark.svg": () => import("./IconBookmark-7d88d664.js"), "../assets/svg/icons/IconBunkhouse.svg": () => import("./IconBunkhouse-e7cb965d.js"), "../assets/svg/icons/IconCalendarMonth.svg": () => import("./IconCalendarMonth-2fd1e713.js"), "../assets/svg/icons/IconCall.svg": () => import("./IconCall-8aa582d9.js"), "../assets/svg/icons/IconCallQuality.svg": () => import("./IconCallQuality-1edf4c35.js"), "../assets/svg/icons/IconCarRental.svg": () => import("./IconCarRental-7709e091.js"), "../assets/svg/icons/IconCheck.svg": () => import("./IconCheck-cf7470ee.js"), "../assets/svg/icons/IconChevronLeft.svg": () => import("./IconChevronLeft-558206bb.js"), "../assets/svg/icons/IconChevronRight.svg": () => import("./IconChevronRight-28930a0b.js"), "../assets/svg/icons/IconClear.svg": () => import("./IconClear-5cf9e8be.js"), "../assets/svg/icons/IconClose.svg": () => import("./IconClose-abfb6177.js"), "../assets/svg/icons/IconContract.svg": () => import("./IconContract-289a7094.js"), "../assets/svg/icons/IconCrash.svg": () => import("./IconCrash-d87f6517.js"), "../assets/svg/icons/IconDashboardCustomize.svg": () => import("./IconDashboardCustomize-f74fde35.js"), "../assets/svg/icons/IconDelete.svg": () => import("./IconDelete-67b69553.js"), "../assets/svg/icons/IconDiamond.svg": () => import("./IconDiamond-93af488a.js"), "../assets/svg/icons/IconDirectionsBoat.svg": () => import("./IconDirectionsBoat-4d41fb87.js"), "../assets/svg/icons/IconDomain.svg": () => import("./IconDomain-377b91aa.js"), "../assets/svg/icons/IconDraft.svg": () => import("./IconDraft-6e70e48f.js"), "../assets/svg/icons/IconEdit.svg": () => import("./IconEdit-16d34325.js"), "../assets/svg/icons/IconEngine.svg": () => import("./IconEngine-ee5f92d4.js"), "../assets/svg/icons/IconEngineering.svg": () => import("./IconEngineering-e18db558.js"), "../assets/svg/icons/IconError.svg": () => import("./IconError-a2922b95.js"), "../assets/svg/icons/IconExpandContent.svg": () => import("./IconExpandContent-7e144d1c.js"), "../assets/svg/icons/IconExpandLess.svg": () => import("./IconExpandLess-3a8a0552.js"), "../assets/svg/icons/IconExpandMore.svg": () => import("./IconExpandMore-c600148e.js"), "../assets/svg/icons/IconFacebook.svg": () => import("./IconFacebook-fb3f93e3.js"), "../assets/svg/icons/IconFavorite.svg": () => import("./IconFavorite-d23faefe.js"), "../assets/svg/icons/IconFavoriteFilled.svg": () => import("./IconFavoriteFilled-aa0d6d5e.js"), "../assets/svg/icons/IconFlag.svg": () => import("./IconFlag-8bafa50c.js"), "../assets/svg/icons/IconFormatBold.svg": () => import("./IconFormatBold-70a5cacf.js"), "../assets/svg/icons/IconFormatItalic.svg": () => import("./IconFormatItalic-c06504d7.js"), "../assets/svg/icons/IconFormatListBulleted.svg": () => import("./IconFormatListBulleted-9493858a.js"), "../assets/svg/icons/IconForum.svg": () => import("./IconForum-ae4ad63f.js"), "../assets/svg/icons/IconGas.svg": () => import("./IconGas-198d529d.js"), "../assets/svg/icons/IconGavel.svg": () => import("./IconGavel-44c29036.js"), "../assets/svg/icons/IconGears.svg": () => import("./IconGears-a52f8ce9.js"), "../assets/svg/icons/IconGlobeLocationPin.svg": () => import("./IconGlobeLocationPin-4b7fb00b.js"), "../assets/svg/icons/IconGoogle.svg": () => import("./IconGoogle-febad0d8.js"), "../assets/svg/icons/IconGooglePay.svg": () => import("./IconGooglePay-8cf0286e.js"), "../assets/svg/icons/IconGrid.svg": () => import("./IconGrid-25f665e0.js"), "../assets/svg/icons/IconHandshake.svg": () => import("./IconHandshake-7c9f1e84.js"), "../assets/svg/icons/IconHandyman.svg": () => import("./IconHandyman-73c7c329.js"), "../assets/svg/icons/IconHeight.svg": () => import("./IconHeight-4fae7545.js"), "../assets/svg/icons/IconHelp.svg": () => import("./IconHelp-340ee4fb.js"), "../assets/svg/icons/IconInfo.svg": () => import("./IconInfo-efead10b.js"), "../assets/svg/icons/IconInformation.svg": () => import("./IconInformation-790c598a.js"), "../assets/svg/icons/IconInsertText.svg": () => import("./IconInsertText-00236a65.js"), "../assets/svg/icons/IconInstagram.svg": () => import("./IconInstagram-db345e15.js"), "../assets/svg/icons/IconIosShare.svg": () => import("./IconIosShare-167aa8c4.js"), "../assets/svg/icons/IconLayout.svg": () => import("./IconLayout-6963184f.js"), "../assets/svg/icons/IconLevellingJack.svg": () => import("./IconLevellingJack-04860178.js"), "../assets/svg/icons/IconLinkedIn.svg": () => import("./IconLinkedIn-9c4740a6.js"), "../assets/svg/icons/IconLocalShipping.svg": () => import("./IconLocalShipping-901a3e4c.js"), "../assets/svg/icons/IconLock.svg": () => import("./IconLock-47669e20.js"), "../assets/svg/icons/IconMail.svg": () => import("./IconMail-9b85058a.js"), "../assets/svg/icons/IconMenu.svg": () => import("./IconMenu-4bed57f3.js"), "../assets/svg/icons/IconMoneyBag.svg": () => import("./IconMoneyBag-4a01a10a.js"), "../assets/svg/icons/IconMoreHoriz.svg": () => import("./IconMoreHoriz-2aabe29f.js"), "../assets/svg/icons/IconNotifications.svg": () => import("./IconNotifications-bcbf1d8c.js"), "../assets/svg/icons/IconOdometer.svg": () => import("./IconOdometer-709f4f00.js"), "../assets/svg/icons/IconOpenInNew.svg": () => import("./IconOpenInNew-78fffcfe.js"), "../assets/svg/icons/IconPalette.svg": () => import("./IconPalette-22865300.js"), "../assets/svg/icons/IconPaypal.svg": () => import("./IconPaypal-c28e6dbe.js"), "../assets/svg/icons/IconPerson.svg": () => import("./IconPerson-7ada8b07.js"), "../assets/svg/icons/IconPersonSearch.svg": () => import("./IconPersonSearch-1ccccee1.js"), "../assets/svg/icons/IconPhotoCamera.svg": () => import("./IconPhotoCamera-31a58b85.js"), "../assets/svg/icons/IconPinterest.svg": () => import("./IconPinterest-fe5cc414.js"), "../assets/svg/icons/IconPlayArrow.svg": () => import("./IconPlayArrow-1ed5d884.js"), "../assets/svg/icons/IconPolicy.svg": () => import("./IconPolicy-0a3a02bc.js"), "../assets/svg/icons/IconPower.svg": () => import("./IconPower-bfe4f81a.js"), "../assets/svg/icons/IconPowerOff.svg": () => import("./IconPowerOff-dbade32b.js"), "../assets/svg/icons/IconPriorityHigh.svg": () => import("./IconPriorityHigh-ab1b4a95.js"), "../assets/svg/icons/IconRemove.svg": () => import("./IconRemove-bab221ba.js"), "../assets/svg/icons/IconRequestQuote.svg": () => import("./IconRequestQuote-f6364b1e.js"), "../assets/svg/icons/IconResetWrench.svg": () => import("./IconResetWrench-8791a5a9.js"), "../assets/svg/icons/IconRoad.svg": () => import("./IconRoad-efce130e.js"), "../assets/svg/icons/IconRoundedCorner.svg": () => import("./IconRoundedCorner-adbcfd09.js"), "../assets/svg/icons/IconRuler.svg": () => import("./IconRuler-0ceea80a.js"), "../assets/svg/icons/IconSailing.svg": () => import("./IconSailing-19762955.js"), "../assets/svg/icons/IconSchool.svg": () => import("./IconSchool-2f3ff8d7.js"), "../assets/svg/icons/IconSearch.svg": () => import("./IconSearch-f8faefb4.js"), "../assets/svg/icons/IconSeating.svg": () => import("./IconSeating-2ca8921d.js"), "../assets/svg/icons/IconSell.svg": () => import("./IconSell-b011ac2d.js"), "../assets/svg/icons/IconSensors.svg": () => import("./IconSensors-c4387bc9.js"), "../assets/svg/icons/IconSettings.svg": () => import("./IconSettings-32dd2125.js"), "../assets/svg/icons/IconShare.svg": () => import("./IconShare-57f28ce3.js"), "../assets/svg/icons/IconShieldCheck.svg": () => import("./IconShieldCheck-0c47755d.js"), "../assets/svg/icons/IconShoppingCart.svg": () => import("./IconShoppingCart-b532dab0.js"), "../assets/svg/icons/IconSleeps.svg": () => import("./IconSleeps-b994bd2f.js"), "../assets/svg/icons/IconSms.svg": () => import("./IconSms-378f373a.js"), "../assets/svg/icons/IconSnowflake.svg": () => import("./IconSnowflake-9d956143.js"), "../assets/svg/icons/IconStar.svg": () => import("./IconStar-1b8ad0f9.js"), "../assets/svg/icons/IconStarFilled.svg": () => import("./IconStarFilled-b73e12dc.js"), "../assets/svg/icons/IconStarHalf.svg": () => import("./IconStarHalf-0b663cd6.js"), "../assets/svg/icons/IconSummarize.svg": () => import("./IconSummarize-69ab122a.js"), "../assets/svg/icons/IconSwapHoriz.svg": () => import("./IconSwapHoriz-2d9550c3.js"), "../assets/svg/icons/IconSwapVert.svg": () => import("./IconSwapVert-8085e942.js"), "../assets/svg/icons/IconThreeDRotation.svg": () => import("./IconThreeDRotation-33f086a7.js"), "../assets/svg/icons/IconThumbUp.svg": () => import("./IconThumbUp-72caf64e.js"), "../assets/svg/icons/IconTrendingDown.svg": () => import("./IconTrendingDown-ff3969c7.js"), "../assets/svg/icons/IconTrophy.svg": () => import("./IconTrophy-f4be8b54.js"), "../assets/svg/icons/IconTune.svg": () => import("./IconTune-0913ba01.js"), "../assets/svg/icons/IconTwitter.svg": () => import("./IconTwitter-9acefb07.js"), "../assets/svg/icons/IconUmbrella.svg": () => import("./IconUmbrella-775b11b8.js"), "../assets/svg/icons/IconVerified.svg": () => import("./IconVerified-000f615f.js"), "../assets/svg/icons/IconVideocam.svg": () => import("./IconVideocam-33650e6f.js"), "../assets/svg/icons/IconViewInAr.svg": () => import("./IconViewInAr-d1534ef2.js"), "../assets/svg/icons/IconVisibility.svg": () => import("./IconVisibility-a1c21dd0.js"), "../assets/svg/icons/IconVolumeOff.svg": () => import("./IconVolumeOff-8e121ef3.js"), "../assets/svg/icons/IconVolumeOn.svg": () => import("./IconVolumeOn-992e16dd.js"), "../assets/svg/icons/IconWarehouse.svg": () => import("./IconWarehouse-764da944.js"), "../assets/svg/icons/IconWarning.svg": () => import("./IconWarning-6f490acf.js"), "../assets/svg/icons/IconWater.svg": () => import("./IconWater-a5f94879.js"), "../assets/svg/icons/IconWeight.svg": () => import("./IconWeight-e3b3daa6.js"), "../assets/svg/icons/IconWidth.svg": () => import("./IconWidth-c81dbc7a.js"), "../assets/svg/icons/IconWorkspacePremium.svg": () => import("./IconWorkspacePremium-efd0a531.js"), "../assets/svg/icons/IconWrench.svg": () => import("./IconWrench-6c52ef4f.js"), "../assets/svg/icons/IconYoutube.svg": () => import("./IconYoutube-a6224033.js") }), `../assets/svg/icons/Icon${a}.svg`));
|
|
585
|
+
o.value = kt(l);
|
|
586
586
|
},
|
|
587
587
|
{ immediate: !0 }
|
|
588
588
|
), (n, a) => (E(), p("div", {
|
|
@@ -731,7 +731,7 @@ const G = {
|
|
|
731
731
|
WORKSPACE_PREMIUM: "workspace-premium",
|
|
732
732
|
WRENCH: "wrench",
|
|
733
733
|
YOUTUBE: "youtube"
|
|
734
|
-
},
|
|
734
|
+
}, jo = {
|
|
735
735
|
ATV: {
|
|
736
736
|
ATV: "atv-atv",
|
|
737
737
|
DUNE_BUGGY: "atv-dune-buggy",
|
|
@@ -756,7 +756,7 @@ const G = {
|
|
|
756
756
|
TRAVEL_TRAILER: "rv-travel-trailer",
|
|
757
757
|
TRUCK_CAMPER: "rv-truck-camper"
|
|
758
758
|
}
|
|
759
|
-
},
|
|
759
|
+
}, ns = { class: "tide-accordion-item" }, as = /* @__PURE__ */ C({
|
|
760
760
|
__name: "TideAccordionItem",
|
|
761
761
|
props: {
|
|
762
762
|
hasBottomDivider: { type: Boolean, default: !1 },
|
|
@@ -770,7 +770,7 @@ const G = {
|
|
|
770
770
|
const o = i, n = () => {
|
|
771
771
|
s("toggle");
|
|
772
772
|
};
|
|
773
|
-
return (a, d) => (E(), p("div",
|
|
773
|
+
return (a, d) => (E(), p("div", ns, [
|
|
774
774
|
o.hasTopDivider ? (E(), P(Ve, { key: 0 })) : F("", !0),
|
|
775
775
|
v("div", {
|
|
776
776
|
class: c(["tide-accordion-head", e(t).DISPLAY.FLEX, e(t).AXIS1.BETWEEN, e(t).PADDING.Y.HALF, e(t).CURSOR.POINTER]),
|
|
@@ -785,7 +785,7 @@ const G = {
|
|
|
785
785
|
class: c([e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
786
786
|
}, " (optional) ", 2)) : F("", !0)
|
|
787
787
|
], 2),
|
|
788
|
-
|
|
788
|
+
M(H, {
|
|
789
789
|
icon: a.isExpanded ? e(G).EXPAND_LESS : e(G).EXPAND_MORE,
|
|
790
790
|
size: e(Y).LARGE
|
|
791
791
|
}, null, 8, ["icon", "size"])
|
|
@@ -803,7 +803,7 @@ const G = {
|
|
|
803
803
|
]));
|
|
804
804
|
}
|
|
805
805
|
});
|
|
806
|
-
const
|
|
806
|
+
const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
807
807
|
BUTTON: "button",
|
|
808
808
|
LINK: "a"
|
|
809
809
|
}, re = {
|
|
@@ -823,7 +823,7 @@ const qo = /* @__PURE__ */ w(ns, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
|
823
823
|
__name: "TideButtonIcon",
|
|
824
824
|
props: {
|
|
825
825
|
disabled: { type: Boolean, default: !1 },
|
|
826
|
-
element: { default:
|
|
826
|
+
element: { default: k.BUTTON },
|
|
827
827
|
href: { default: void 0 },
|
|
828
828
|
icon: { default: void 0 },
|
|
829
829
|
isNewTab: { type: Boolean, default: !1 },
|
|
@@ -831,17 +831,17 @@ const qo = /* @__PURE__ */ w(ns, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
|
831
831
|
},
|
|
832
832
|
setup(i) {
|
|
833
833
|
const s = i;
|
|
834
|
-
return (o, n) => (E(), P(Oe(s.element === e(
|
|
834
|
+
return (o, n) => (E(), P(Oe(s.element === e(k).LINK ? "a" : "button"), {
|
|
835
835
|
"aria-label": s.icon,
|
|
836
836
|
class: c([
|
|
837
|
-
s.element === e(
|
|
837
|
+
s.element === e(k).LINK ? "tide-link-as-button-icon" : "tide-button-icon",
|
|
838
838
|
s.priority && `tide-button-${s.priority}`,
|
|
839
839
|
[e(t).DISPLAY.FLEX, e(t).AXIS1.CENTER, e(t).AXIS2.CENTER, e(t).BORDER.RADIUS.FULL, e(t).PADDING.FULL.HALF],
|
|
840
|
-
s.element === e(
|
|
840
|
+
s.element === e(k).LINK ? [e(t).UNDERLINE.REST.OFF] : ""
|
|
841
841
|
]),
|
|
842
|
-
disabled: s.element === e(
|
|
843
|
-
href: s.element === e(
|
|
844
|
-
target: s.element === e(
|
|
842
|
+
disabled: s.element === e(k).BUTTON && s.disabled,
|
|
843
|
+
href: s.element === e(k).LINK && s.href ? s.href : void 0,
|
|
844
|
+
target: s.element === e(k).LINK && s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
845
845
|
}, {
|
|
846
846
|
default: Le(() => [
|
|
847
847
|
s.icon ? (E(), P(H, {
|
|
@@ -858,7 +858,7 @@ const qo = /* @__PURE__ */ w(ns, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
|
858
858
|
INFO: "info",
|
|
859
859
|
SUCCESS: "success",
|
|
860
860
|
WARNING: "warning"
|
|
861
|
-
},
|
|
861
|
+
}, rs = /* @__PURE__ */ C({
|
|
862
862
|
__name: "TideAlert",
|
|
863
863
|
props: {
|
|
864
864
|
heading: { default: void 0 },
|
|
@@ -897,7 +897,7 @@ const qo = /* @__PURE__ */ w(ns, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
|
897
897
|
o.type === e(ae).WARNING && e(t).BG.GLOBAL.PRIMARY.WARNING
|
|
898
898
|
])
|
|
899
899
|
}, [
|
|
900
|
-
|
|
900
|
+
M(H, {
|
|
901
901
|
icon: e(G).INFORMATION,
|
|
902
902
|
size: e(Y).SMALL
|
|
903
903
|
}, null, 8, ["icon", "size"])
|
|
@@ -925,7 +925,7 @@ const qo = /* @__PURE__ */ w(ns, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
|
925
925
|
], 2));
|
|
926
926
|
}
|
|
927
927
|
});
|
|
928
|
-
const
|
|
928
|
+
const ei = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
929
929
|
BLACK: "black",
|
|
930
930
|
BLUE: "blue",
|
|
931
931
|
GREEN: "green",
|
|
@@ -977,11 +977,11 @@ const jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
977
977
|
borderColor: t.BORDER.COLOR.GLOBAL.YELLOW,
|
|
978
978
|
iconColor: t.FONT.COLOR.GLOBAL.PRIMARY.YELLOW
|
|
979
979
|
}
|
|
980
|
-
},
|
|
980
|
+
}, ls = {
|
|
981
981
|
YEARS_10: "10",
|
|
982
982
|
YEARS_15: "15",
|
|
983
983
|
YEARS_5: "5"
|
|
984
|
-
},
|
|
984
|
+
}, ti = /* @__PURE__ */ C({
|
|
985
985
|
__name: "TideBadge",
|
|
986
986
|
props: {
|
|
987
987
|
color: { default: void 0 },
|
|
@@ -1017,10 +1017,10 @@ const jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1017
1017
|
}, D(s.label), 3)
|
|
1018
1018
|
], 2));
|
|
1019
1019
|
}
|
|
1020
|
-
}),
|
|
1020
|
+
}), si = /* @__PURE__ */ C({
|
|
1021
1021
|
__name: "TideBadgeTrustedPartner",
|
|
1022
1022
|
props: {
|
|
1023
|
-
years: { default:
|
|
1023
|
+
years: { default: ls.YEARS_5 }
|
|
1024
1024
|
},
|
|
1025
1025
|
setup(i) {
|
|
1026
1026
|
const s = i;
|
|
@@ -1038,7 +1038,7 @@ const jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1038
1038
|
e(t).WHITESPACE_WRAP.OFF
|
|
1039
1039
|
])
|
|
1040
1040
|
}, [
|
|
1041
|
-
|
|
1041
|
+
M(H, {
|
|
1042
1042
|
class: c([e(t).FLEX.SHRINK.OFF]),
|
|
1043
1043
|
icon: e(G).AWARD_STAR
|
|
1044
1044
|
}, null, 8, ["class", "icon"]),
|
|
@@ -1049,7 +1049,7 @@ const jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1049
1049
|
], 2)
|
|
1050
1050
|
], 2));
|
|
1051
1051
|
}
|
|
1052
|
-
}),
|
|
1052
|
+
}), cs = /* @__PURE__ */ C({
|
|
1053
1053
|
__name: "TideBadgeVerifiedVehicle",
|
|
1054
1054
|
setup(i) {
|
|
1055
1055
|
return (s, o) => (E(), p("div", {
|
|
@@ -1068,7 +1068,7 @@ const jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1068
1068
|
e(t).WHITESPACE_WRAP.OFF
|
|
1069
1069
|
])
|
|
1070
1070
|
}, [
|
|
1071
|
-
|
|
1071
|
+
M(H, {
|
|
1072
1072
|
class: c([e(t).FLEX.SHRINK.OFF]),
|
|
1073
1073
|
icon: e(G).VERIFIED
|
|
1074
1074
|
}, null, 8, ["class", "icon"]),
|
|
@@ -1078,7 +1078,7 @@ const jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1078
1078
|
], 2));
|
|
1079
1079
|
}
|
|
1080
1080
|
});
|
|
1081
|
-
const
|
|
1081
|
+
const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["data-track", "href"], us = ["data-track"], Es = { key: 0 }, ii = /* @__PURE__ */ C({
|
|
1082
1082
|
__name: "TideBreadCrumbs",
|
|
1083
1083
|
props: {
|
|
1084
1084
|
breadCrumbs: { default: void 0 }
|
|
@@ -1099,14 +1099,14 @@ const ti = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-c6d1b806"]]), cs = ["dat
|
|
|
1099
1099
|
class: c([e(t).FONT.ROLE.LINK_2, e(t).FONT.COLOR.SURFACE.DEFAULT]),
|
|
1100
1100
|
"data-track": a.dataTrack || void 0,
|
|
1101
1101
|
href: a.url
|
|
1102
|
-
}, D(a.label), 11,
|
|
1102
|
+
}, D(a.label), 11, ds)) : (E(), p("span", {
|
|
1103
1103
|
key: 1,
|
|
1104
1104
|
class: c([e(t).FONT.ROLE.LABEL_2, e(t).FONT.COLOR.SURFACE.VARIANT]),
|
|
1105
1105
|
"data-track": a.dataTrack || void 0
|
|
1106
|
-
}, D(a.label), 11,
|
|
1106
|
+
}, D(a.label), 11, us))
|
|
1107
1107
|
], 2),
|
|
1108
|
-
s.breadCrumbs && d < s.breadCrumbs.length - 1 ? (E(), p("li",
|
|
1109
|
-
|
|
1108
|
+
s.breadCrumbs && d < s.breadCrumbs.length - 1 ? (E(), p("li", Es, [
|
|
1109
|
+
M(H, {
|
|
1110
1110
|
icon: e(G).ARROW_RIGHT,
|
|
1111
1111
|
size: e(Y).SMALL
|
|
1112
1112
|
}, null, 8, ["icon", "size"])
|
|
@@ -1114,56 +1114,56 @@ const ti = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-c6d1b806"]]), cs = ["dat
|
|
|
1114
1114
|
], 64))), 128))
|
|
1115
1115
|
], 2));
|
|
1116
1116
|
}
|
|
1117
|
-
}),
|
|
1117
|
+
}), ni = /* @__PURE__ */ C({
|
|
1118
1118
|
__name: "TideButton",
|
|
1119
1119
|
props: {
|
|
1120
1120
|
disabled: { type: Boolean, default: !1 },
|
|
1121
|
-
element: { default:
|
|
1121
|
+
element: { default: k.BUTTON },
|
|
1122
1122
|
href: { default: void 0 },
|
|
1123
1123
|
iconLeading: { default: void 0 },
|
|
1124
1124
|
iconTrailing: { default: void 0 },
|
|
1125
1125
|
isNewTab: { type: Boolean, default: !1 },
|
|
1126
1126
|
label: { default: void 0 },
|
|
1127
1127
|
priority: { default: $.PRIMARY },
|
|
1128
|
-
size: { default:
|
|
1128
|
+
size: { default: me.LARGE }
|
|
1129
1129
|
},
|
|
1130
1130
|
setup(i) {
|
|
1131
1131
|
const s = i;
|
|
1132
|
-
return (o, n) => (E(), P(Oe(s.element === e(
|
|
1132
|
+
return (o, n) => (E(), P(Oe(s.element === e(k).LINK ? e(k).LINK : e(k).BUTTON), {
|
|
1133
1133
|
class: c([
|
|
1134
1134
|
"tide-button",
|
|
1135
1135
|
s.priority && `tide-button-${s.priority}`,
|
|
1136
|
-
s.element === e(
|
|
1137
|
-
s.element === e(
|
|
1138
|
-
o.size === e(
|
|
1139
|
-
o.size === e(
|
|
1136
|
+
s.element === e(k).LINK ? [e(t).DISPLAY.INLINE_FLEX] : [e(t).DISPLAY.FLEX],
|
|
1137
|
+
s.element === e(k).LINK ? e(t).UNDERLINE.REST.OFF : "",
|
|
1138
|
+
o.size === e(me).SMALL && [e(t).FONT.ROLE.BUTTON_2, e(t).PADDING.X.ONE, e(t).PADDING.Y.HALF],
|
|
1139
|
+
o.size === e(me).LARGE && [e(t).FONT.ROLE.BUTTON_1, e(t).PADDING.X.TWO, e(t).PADDING.Y.ONE],
|
|
1140
1140
|
e(t).AXIS1.CENTER,
|
|
1141
1141
|
e(t).AXIS2.CENTER,
|
|
1142
1142
|
e(t).GAP.HALF,
|
|
1143
1143
|
e(t).BORDER.RADIUS.HALF,
|
|
1144
1144
|
e(t).FONT.ROLE.LABEL_1_SEMIBOLD
|
|
1145
1145
|
]),
|
|
1146
|
-
disabled: s.element === e(
|
|
1147
|
-
href: s.element === e(
|
|
1148
|
-
target: s.element === e(
|
|
1146
|
+
disabled: s.element === e(k).BUTTON && s.disabled,
|
|
1147
|
+
href: s.element === e(k).LINK && s.href ? s.href : void 0,
|
|
1148
|
+
target: s.element === e(k).LINK && s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
1149
1149
|
}, {
|
|
1150
1150
|
default: Le(() => [
|
|
1151
1151
|
s.iconLeading ? (E(), P(H, {
|
|
1152
1152
|
key: 0,
|
|
1153
1153
|
icon: s.iconLeading,
|
|
1154
|
-
size: o.size === e(
|
|
1154
|
+
size: o.size === e(me).LARGE ? e(Y).LARGE : e(Y).SMALL
|
|
1155
1155
|
}, null, 8, ["icon", "size"])) : F("", !0),
|
|
1156
|
-
|
|
1156
|
+
Mt(" " + D(s.label) + " ", 1),
|
|
1157
1157
|
s.iconTrailing ? (E(), P(H, {
|
|
1158
1158
|
key: 1,
|
|
1159
1159
|
icon: s.iconTrailing,
|
|
1160
|
-
size: o.size === e(
|
|
1160
|
+
size: o.size === e(me).LARGE ? e(Y).LARGE : e(Y).SMALL
|
|
1161
1161
|
}, null, 8, ["icon", "size"])) : F("", !0)
|
|
1162
1162
|
]),
|
|
1163
1163
|
_: 1
|
|
1164
1164
|
}, 8, ["class", "disabled", "href", "target"]));
|
|
1165
1165
|
}
|
|
1166
|
-
}),
|
|
1166
|
+
}), Os = /* @__PURE__ */ C({
|
|
1167
1167
|
__name: "TideButtonPagination",
|
|
1168
1168
|
props: {
|
|
1169
1169
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -1195,7 +1195,7 @@ const ti = /* @__PURE__ */ w(ls, [["__scopeId", "data-v-c6d1b806"]]), cs = ["dat
|
|
|
1195
1195
|
}, 8, ["class", "disabled", "href"]));
|
|
1196
1196
|
}
|
|
1197
1197
|
});
|
|
1198
|
-
const
|
|
1198
|
+
const Ls = /* @__PURE__ */ w(Os, [["__scopeId", "data-v-0e4f62c0"]]), Rs = ["data-track", "onClick"], ps = /* @__PURE__ */ C({
|
|
1199
1199
|
__name: "TideButtonSegmented",
|
|
1200
1200
|
props: {
|
|
1201
1201
|
activeTab: { default: 0 },
|
|
@@ -1241,15 +1241,15 @@ const Os = /* @__PURE__ */ w(Es, [["__scopeId", "data-v-0e4f62c0"]]), Ls = ["dat
|
|
|
1241
1241
|
key: 0,
|
|
1242
1242
|
class: c([e(t).FONT.ROLE.LABEL_2_SEMIBOLD])
|
|
1243
1243
|
}, " (" + D(r.count) + ") ", 3)) : F("", !0)
|
|
1244
|
-
], 10,
|
|
1244
|
+
], 10, Rs))), 128))
|
|
1245
1245
|
], 2));
|
|
1246
1246
|
}
|
|
1247
1247
|
});
|
|
1248
|
-
const
|
|
1248
|
+
const ai = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-4e385d0b"]]), ye = {
|
|
1249
1249
|
ACTIONABLE: "action",
|
|
1250
1250
|
INFORMATIONAL: "informational",
|
|
1251
1251
|
SELECTABLE: "select"
|
|
1252
|
-
},
|
|
1252
|
+
}, vs = /* @__PURE__ */ C({
|
|
1253
1253
|
__name: "TideCard",
|
|
1254
1254
|
props: {
|
|
1255
1255
|
description: { default: void 0 },
|
|
@@ -1300,7 +1300,7 @@ const ii = /* @__PURE__ */ w(Rs, [["__scopeId", "data-v-4e385d0b"]]), ye = {
|
|
|
1300
1300
|
}, 8, ["class", "href"]));
|
|
1301
1301
|
}
|
|
1302
1302
|
});
|
|
1303
|
-
const
|
|
1303
|
+
const ri = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @__PURE__ */ C({
|
|
1304
1304
|
__name: "TideCarousel",
|
|
1305
1305
|
props: {
|
|
1306
1306
|
bleed: { default: void 0 },
|
|
@@ -1313,7 +1313,7 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1313
1313
|
},
|
|
1314
1314
|
emits: ["slideChange", "slidesAddedToView"],
|
|
1315
1315
|
setup(i, { emit: s }) {
|
|
1316
|
-
const o = i, n = _(null), a = _(null), d = _(null), r = _(), l = _(), u = _(0), O = _(),
|
|
1316
|
+
const o = i, n = _(null), a = _(null), d = _(null), r = _(), l = _(), u = _(0), O = _(), L = _(), R = _(), A = _(), f = _(), m = _(), N = () => {
|
|
1317
1317
|
o.bleed != null && n.value !== null && (A.value && m.value ? (n.value.style.margin = `-${o.bleed}px -${o.bleed}px -${o.bleed}px 0`, n.value.style.padding = `${o.bleed}px ${o.bleed}px ${o.bleed}px 0`) : (n.value.style.margin = `-${o.bleed}px 0 -${o.bleed}px -${o.bleed}px`, n.value.style.padding = `${o.bleed}px 0 ${o.bleed}px ${o.bleed}px`));
|
|
1318
1318
|
}, I = () => {
|
|
1319
1319
|
const B = n.value;
|
|
@@ -1329,7 +1329,7 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1329
1329
|
);
|
|
1330
1330
|
u.value = X.indexOf(Q), N();
|
|
1331
1331
|
}, T = () => {
|
|
1332
|
-
n.value !== null && (r.value = n.value.scrollLeft + n.value.clientWidth, l.value = n.value.scrollWidth, O.value = n.value.clientWidth,
|
|
1332
|
+
n.value !== null && (r.value = Math.round(n.value.scrollLeft + n.value.clientWidth), l.value = n.value.scrollWidth, O.value = n.value.clientWidth, L.value = l.value > O.value, R.value = u.value === 0, A.value = r.value === l.value, f.value = n.value.scrollWidth - n.value.clientWidth, m.value = L.value && !o.isTouchscreen, I());
|
|
1333
1333
|
}, g = () => {
|
|
1334
1334
|
T();
|
|
1335
1335
|
}, h = (B) => {
|
|
@@ -1343,7 +1343,7 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1343
1343
|
left: l.value
|
|
1344
1344
|
}) : A.value || h(u.value + 1));
|
|
1345
1345
|
}, S = () => {
|
|
1346
|
-
|
|
1346
|
+
R.value || h(u.value - 1);
|
|
1347
1347
|
}, x = () => {
|
|
1348
1348
|
var X;
|
|
1349
1349
|
const B = {
|
|
@@ -1382,7 +1382,7 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1382
1382
|
e(t).POSITION.RELATIVE,
|
|
1383
1383
|
e(t).DISPLAY.FLEX,
|
|
1384
1384
|
e(t).FLEX.DIRECTION.COLUMN,
|
|
1385
|
-
e(t).GAP.
|
|
1385
|
+
e(t).GAP.ONE,
|
|
1386
1386
|
e(t).WIDTH.MAX_FULL
|
|
1387
1387
|
]),
|
|
1388
1388
|
ref: "carouselRef"
|
|
@@ -1408,13 +1408,13 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1408
1408
|
key: 1,
|
|
1409
1409
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.ONE])
|
|
1410
1410
|
}, [
|
|
1411
|
-
|
|
1411
|
+
M(Z, {
|
|
1412
1412
|
disabled: u.value === 0,
|
|
1413
1413
|
icon: e(G).CHEVRON_LEFT,
|
|
1414
1414
|
priority: e($).TERTIARY,
|
|
1415
1415
|
onClick: S
|
|
1416
1416
|
}, null, 8, ["disabled", "icon", "priority"]),
|
|
1417
|
-
|
|
1417
|
+
M(Z, {
|
|
1418
1418
|
disabled: A.value,
|
|
1419
1419
|
icon: e(G).CHEVRON_RIGHT,
|
|
1420
1420
|
priority: e($).TERTIARY,
|
|
@@ -1429,6 +1429,7 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1429
1429
|
v("ul", {
|
|
1430
1430
|
class: c([
|
|
1431
1431
|
"tide-carousel-container",
|
|
1432
|
+
o.bleed && "bleed",
|
|
1432
1433
|
e(t).DISPLAY.FLEX,
|
|
1433
1434
|
e(t).GAP.ONE,
|
|
1434
1435
|
e(t).LIST_BULLETS.OFF,
|
|
@@ -1458,14 +1459,14 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1458
1459
|
o.isHideawayButtons ? "hideaway" : ""
|
|
1459
1460
|
])
|
|
1460
1461
|
}, [
|
|
1461
|
-
|
|
1462
|
+
M(Z, {
|
|
1462
1463
|
class: c([e(t).MARGIN.LEFT.ONE, e(t).POINTER_EVENTS.ON]),
|
|
1463
1464
|
disabled: u.value === 0,
|
|
1464
1465
|
icon: e(G).CHEVRON_LEFT,
|
|
1465
1466
|
priority: e($).QUATERNARY,
|
|
1466
1467
|
onClick: S
|
|
1467
1468
|
}, null, 8, ["class", "disabled", "icon", "priority"]),
|
|
1468
|
-
|
|
1469
|
+
M(Z, {
|
|
1469
1470
|
class: c([e(t).MARGIN.RIGHT.ONE, e(t).POINTER_EVENTS.ON]),
|
|
1470
1471
|
disabled: A.value,
|
|
1471
1472
|
icon: e(G).CHEVRON_RIGHT,
|
|
@@ -1476,10 +1477,10 @@ const ni = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-98f24c4f"]]), vs = /* @_
|
|
|
1476
1477
|
], 2));
|
|
1477
1478
|
}
|
|
1478
1479
|
});
|
|
1479
|
-
const
|
|
1480
|
+
const li = /* @__PURE__ */ w(fs, [["__scopeId", "data-v-f6e14c22"]]), As = /* @__PURE__ */ C({
|
|
1480
1481
|
__name: "TideChipAction",
|
|
1481
1482
|
props: {
|
|
1482
|
-
element: { default:
|
|
1483
|
+
element: { default: k.LINK },
|
|
1483
1484
|
href: { default: void 0 },
|
|
1484
1485
|
isNewTab: { type: Boolean, default: !1 },
|
|
1485
1486
|
label: {}
|
|
@@ -1505,7 +1506,7 @@ const ai = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-5b3b562f"]]), fs = /* @_
|
|
|
1505
1506
|
target: s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
1506
1507
|
}, {
|
|
1507
1508
|
default: Le(() => [
|
|
1508
|
-
|
|
1509
|
+
M(H, {
|
|
1509
1510
|
icon: e(G).SEARCH
|
|
1510
1511
|
}, null, 8, ["icon"]),
|
|
1511
1512
|
v("span", null, D(s.label), 1)
|
|
@@ -1514,7 +1515,7 @@ const ai = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-5b3b562f"]]), fs = /* @_
|
|
|
1514
1515
|
}, 8, ["class", "href", "target"]));
|
|
1515
1516
|
}
|
|
1516
1517
|
});
|
|
1517
|
-
const
|
|
1518
|
+
const ci = /* @__PURE__ */ w(As, [["__scopeId", "data-v-2f57438d"]]), Is = /* @__PURE__ */ C({
|
|
1518
1519
|
__name: "TideChipFilter",
|
|
1519
1520
|
props: {
|
|
1520
1521
|
isActive: { type: Boolean },
|
|
@@ -1548,7 +1549,7 @@ const ri = /* @__PURE__ */ w(fs, [["__scopeId", "data-v-2f57438d"]]), As = /* @_
|
|
|
1548
1549
|
], 2));
|
|
1549
1550
|
}
|
|
1550
1551
|
});
|
|
1551
|
-
const
|
|
1552
|
+
const di = /* @__PURE__ */ w(Is, [["__scopeId", "data-v-6ddce1c2"]]), Ts = /* @__PURE__ */ C({
|
|
1552
1553
|
__name: "TideChipInput",
|
|
1553
1554
|
props: {
|
|
1554
1555
|
label: {}
|
|
@@ -1571,47 +1572,47 @@ const li = /* @__PURE__ */ w(As, [["__scopeId", "data-v-6ddce1c2"]]), Is = /* @_
|
|
|
1571
1572
|
])
|
|
1572
1573
|
}, [
|
|
1573
1574
|
v("span", null, D(s.label), 1),
|
|
1574
|
-
|
|
1575
|
+
M(H, {
|
|
1575
1576
|
icon: e(G).CLOSE
|
|
1576
1577
|
}, null, 8, ["icon"])
|
|
1577
1578
|
], 2));
|
|
1578
1579
|
}
|
|
1579
1580
|
});
|
|
1580
|
-
const
|
|
1581
|
+
const ui = /* @__PURE__ */ w(Ts, [["__scopeId", "data-v-42611a29"]]), gs = { class: "tide-columns" }, ms = { class: "tide-columns-column" }, Ns = { class: "tide-columns-column" }, _s = { class: "tide-columns-column" }, Fs = { class: "tide-columns-column" }, Ss = /* @__PURE__ */ C({
|
|
1581
1582
|
__name: "TideColumns",
|
|
1582
1583
|
props: {
|
|
1583
1584
|
heading: { default: "" }
|
|
1584
1585
|
},
|
|
1585
1586
|
setup(i) {
|
|
1586
1587
|
const s = i;
|
|
1587
|
-
return (o, n) => (E(), p("section",
|
|
1588
|
+
return (o, n) => (E(), p("section", gs, [
|
|
1588
1589
|
v("h2", {
|
|
1589
1590
|
class: c([e(t).MARGIN.BOTTOM.HALF])
|
|
1590
1591
|
}, D(s.heading), 3),
|
|
1591
1592
|
v("ul", {
|
|
1592
1593
|
class: c([e(t).DISPLAY.FLEX, e(t).FLEX.WRAP, e(t).GAP.TWO, e(t).LIST_BULLETS.OFF])
|
|
1593
1594
|
}, [
|
|
1594
|
-
v("li",
|
|
1595
|
+
v("li", ms, [
|
|
1595
1596
|
V(o.$slots, "section1", {}, void 0, !0)
|
|
1596
1597
|
]),
|
|
1597
|
-
v("li",
|
|
1598
|
+
v("li", Ns, [
|
|
1598
1599
|
V(o.$slots, "section2", {}, void 0, !0)
|
|
1599
1600
|
]),
|
|
1600
|
-
v("li",
|
|
1601
|
+
v("li", _s, [
|
|
1601
1602
|
V(o.$slots, "section3", {}, void 0, !0)
|
|
1602
1603
|
]),
|
|
1603
|
-
v("li",
|
|
1604
|
+
v("li", Fs, [
|
|
1604
1605
|
V(o.$slots, "section4", {}, void 0, !0)
|
|
1605
1606
|
])
|
|
1606
1607
|
], 2)
|
|
1607
1608
|
]));
|
|
1608
1609
|
}
|
|
1609
1610
|
});
|
|
1610
|
-
const
|
|
1611
|
+
const Ei = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
1611
1612
|
CONTAIN: "contain",
|
|
1612
1613
|
COVER: "cover",
|
|
1613
1614
|
SCALE_DOWN: "scale-down"
|
|
1614
|
-
},
|
|
1615
|
+
}, hs = ["media", "srcset"], Ds = ["alt", "fetchpriority", "loading", "src"], We = "https://cdn-static.tilabs.io/marketplace/common/image-coming-soon.svg", ys = /* @__PURE__ */ C({
|
|
1615
1616
|
__name: "TideImage",
|
|
1616
1617
|
props: {
|
|
1617
1618
|
alt: { default: "" },
|
|
@@ -1654,7 +1655,7 @@ const di = /* @__PURE__ */ w(Fs, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1654
1655
|
key: u.srcset,
|
|
1655
1656
|
media: `(min-width:${u.media}px)`,
|
|
1656
1657
|
srcset: u.srcset
|
|
1657
|
-
}, null, 8,
|
|
1658
|
+
}, null, 8, hs))), 128)),
|
|
1658
1659
|
v("img", {
|
|
1659
1660
|
alt: r.alt,
|
|
1660
1661
|
class: c([e(t).WIDTH.FULL, e(t).HEIGHT.FULL, e(t).OBJECT.CENTER, a.value]),
|
|
@@ -1664,10 +1665,10 @@ const di = /* @__PURE__ */ w(Fs, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1664
1665
|
ref: n,
|
|
1665
1666
|
src: r.src ?? We,
|
|
1666
1667
|
onError: d
|
|
1667
|
-
}, null, 42,
|
|
1668
|
+
}, null, 42, Ds)
|
|
1668
1669
|
], 6));
|
|
1669
1670
|
}
|
|
1670
|
-
}),
|
|
1671
|
+
}), Cs = /* @__PURE__ */ C({
|
|
1671
1672
|
__name: "TideImageBackground",
|
|
1672
1673
|
props: {
|
|
1673
1674
|
alt: { default: "" },
|
|
@@ -1690,7 +1691,7 @@ const di = /* @__PURE__ */ w(Fs, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1690
1691
|
e(t).AXIS2.CENTER
|
|
1691
1692
|
])
|
|
1692
1693
|
}, [
|
|
1693
|
-
|
|
1694
|
+
M(ys, {
|
|
1694
1695
|
alt: s.alt,
|
|
1695
1696
|
class: c([e(t).WIDTH.FULL, e(t).HEIGHT.FULL]),
|
|
1696
1697
|
"is-lazy": s.isLazy,
|
|
@@ -1703,10 +1704,10 @@ const di = /* @__PURE__ */ w(Fs, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1703
1704
|
], 2));
|
|
1704
1705
|
}
|
|
1705
1706
|
});
|
|
1706
|
-
const
|
|
1707
|
+
const Oi = /* @__PURE__ */ w(Cs, [["__scopeId", "data-v-0d40d1c6"]]), bs = {
|
|
1707
1708
|
key: 0,
|
|
1708
1709
|
class: /* @__PURE__ */ c(["tide-indicator-label"])
|
|
1709
|
-
},
|
|
1710
|
+
}, Bs = /* @__PURE__ */ C({
|
|
1710
1711
|
__name: "TideIndicator",
|
|
1711
1712
|
props: {
|
|
1712
1713
|
label: { default: void 0 }
|
|
@@ -1725,11 +1726,11 @@ const ui = /* @__PURE__ */ w(ys, [["__scopeId", "data-v-0d40d1c6"]]), Cs = {
|
|
|
1725
1726
|
s.label ? [e(t).POSITION.RELATIVE, e(t).FONT.ROLE.LABEL_3, e(t).FONT.COLOR.SURFACE.INVERSE] : [e(t).BORDER.FULL.ONE]
|
|
1726
1727
|
])
|
|
1727
1728
|
}, [
|
|
1728
|
-
s.label ? (E(), p("div",
|
|
1729
|
+
s.label ? (E(), p("div", bs, D(s.label), 1)) : F("", !0)
|
|
1729
1730
|
], 2));
|
|
1730
1731
|
}
|
|
1731
1732
|
});
|
|
1732
|
-
const
|
|
1733
|
+
const Li = /* @__PURE__ */ w(Bs, [["__scopeId", "data-v-d402ac82"]]), Us = ["data-track"], Ps = ["checked", "disabled", "name", "id"], Gs = ["for"], ws = /* @__PURE__ */ C({
|
|
1733
1734
|
__name: "TideInputCheckbox",
|
|
1734
1735
|
props: {
|
|
1735
1736
|
checked: { type: Boolean, default: !1 },
|
|
@@ -1751,7 +1752,8 @@ const Ei = /* @__PURE__ */ w(bs, [["__scopeId", "data-v-d402ac82"]]), Bs = ["che
|
|
|
1751
1752
|
e(t).GAP.HALF,
|
|
1752
1753
|
e(t).FONT.ROLE.BODY_1,
|
|
1753
1754
|
n.disabled ? ["disabled", e(t).POINTER_EVENTS.OFF] : e(t).CURSOR.POINTER
|
|
1754
|
-
])
|
|
1755
|
+
]),
|
|
1756
|
+
"data-track": s.dataTrack
|
|
1755
1757
|
}, [
|
|
1756
1758
|
v("input", {
|
|
1757
1759
|
checked: o.value,
|
|
@@ -1759,11 +1761,11 @@ const Ei = /* @__PURE__ */ w(bs, [["__scopeId", "data-v-d402ac82"]]), Bs = ["che
|
|
|
1759
1761
|
disabled: s.disabled,
|
|
1760
1762
|
name: s.name,
|
|
1761
1763
|
ref: "input",
|
|
1762
|
-
onClick: a[0] || (a[0] =
|
|
1764
|
+
onClick: a[0] || (a[0] = Ie(() => {
|
|
1763
1765
|
}, ["prevent"])),
|
|
1764
1766
|
id: s.inputId,
|
|
1765
1767
|
type: "checkbox"
|
|
1766
|
-
}, null, 10,
|
|
1768
|
+
}, null, 10, Ps),
|
|
1767
1769
|
v("div", {
|
|
1768
1770
|
class: c([
|
|
1769
1771
|
"tide-input-checkbox-custom",
|
|
@@ -1795,7 +1797,7 @@ const Ei = /* @__PURE__ */ w(bs, [["__scopeId", "data-v-d402ac82"]]), Bs = ["che
|
|
|
1795
1797
|
n.disabled ? e(t).CURSOR.NOT_ALLOWED : e(t).CURSOR.POINTER
|
|
1796
1798
|
]),
|
|
1797
1799
|
for: s.inputId,
|
|
1798
|
-
onClick: a[1] || (a[1] =
|
|
1800
|
+
onClick: a[1] || (a[1] = Ie(() => {
|
|
1799
1801
|
}, ["prevent"]))
|
|
1800
1802
|
}, [
|
|
1801
1803
|
v("span", null, D(n.label), 1),
|
|
@@ -1803,11 +1805,11 @@ const Ei = /* @__PURE__ */ w(bs, [["__scopeId", "data-v-d402ac82"]]), Bs = ["che
|
|
|
1803
1805
|
key: 0,
|
|
1804
1806
|
class: c([e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
1805
1807
|
}, " (" + D(e(ze)(s.number)) + ") ", 3)) : F("", !0)
|
|
1806
|
-
], 10,
|
|
1807
|
-
],
|
|
1808
|
+
], 10, Gs)) : F("", !0)
|
|
1809
|
+
], 10, Us));
|
|
1808
1810
|
}
|
|
1809
1811
|
});
|
|
1810
|
-
const
|
|
1812
|
+
const Ri = /* @__PURE__ */ w(ws, [["__scopeId", "data-v-1a2e222c"]]), Hs = ["checked", "data-track", "id"], xs = ["for"], ks = /* @__PURE__ */ C({
|
|
1811
1813
|
__name: "TideInputRadio",
|
|
1812
1814
|
props: {
|
|
1813
1815
|
checked: { type: Boolean, default: !1 },
|
|
@@ -1837,11 +1839,12 @@ const Oi = /* @__PURE__ */ w(Ps, [["__scopeId", "data-v-4e880909"]]), Gs = ["che
|
|
|
1837
1839
|
v("input", {
|
|
1838
1840
|
checked: o.value,
|
|
1839
1841
|
class: c([e(t).DISPLAY.NONE]),
|
|
1842
|
+
"data-track": s.dataTrack,
|
|
1840
1843
|
id: s.inputId,
|
|
1841
1844
|
name: "",
|
|
1842
1845
|
type: "radio",
|
|
1843
1846
|
value: ""
|
|
1844
|
-
}, null, 10,
|
|
1847
|
+
}, null, 10, Hs),
|
|
1845
1848
|
v("div", {
|
|
1846
1849
|
class: c([
|
|
1847
1850
|
"tide-input-radio-custom",
|
|
@@ -1865,20 +1868,20 @@ const Oi = /* @__PURE__ */ w(Ps, [["__scopeId", "data-v-4e880909"]]), Gs = ["che
|
|
|
1865
1868
|
v("label", {
|
|
1866
1869
|
class: c([e(t).FONT.ROLE.BODY_1, e(t).CURSOR.POINTER, e(t).POINTER_EVENTS.ON]),
|
|
1867
1870
|
for: s.inputId
|
|
1868
|
-
}, D(s.label), 11,
|
|
1871
|
+
}, D(s.label), 11, xs)
|
|
1869
1872
|
], 2));
|
|
1870
1873
|
}
|
|
1871
1874
|
});
|
|
1872
|
-
const
|
|
1875
|
+
const pi = /* @__PURE__ */ w(ks, [["__scopeId", "data-v-3310d547"]]), Qe = "Please enter a valid value.", Ms = {
|
|
1873
1876
|
message: "",
|
|
1874
1877
|
valid: !0
|
|
1875
|
-
},
|
|
1876
|
-
let o =
|
|
1878
|
+
}, Ne = (i) => (s) => {
|
|
1879
|
+
let o = Ms;
|
|
1877
1880
|
return s.trim().match(i) || (o = {
|
|
1878
1881
|
message: Qe,
|
|
1879
1882
|
valid: !1
|
|
1880
1883
|
}), o;
|
|
1881
|
-
}, Ze = (i, s) => typeof i == "string" && i.length > 0 ? i : typeof s == "string" && s.length > 0 ? s : Qe, qe = (i, s) => i !== !1 || s !== !1,
|
|
1884
|
+
}, Ze = (i, s) => typeof i == "string" && i.length > 0 ? i : typeof s == "string" && s.length > 0 ? s : Qe, qe = (i, s) => i !== !1 || s !== !1, Ys = ({ maxlength: i, minlength: s, required: o, value: n }) => {
|
|
1882
1885
|
const a = n.length === 0 && !o, d = i && n.length > i;
|
|
1883
1886
|
return !(!a && s && n.length < s) && !d;
|
|
1884
1887
|
}, Nt = ({
|
|
@@ -1891,11 +1894,11 @@ const Li = /* @__PURE__ */ w(Hs, [["__scopeId", "data-v-4fd02dd8"]]), Qe = "Plea
|
|
|
1891
1894
|
value: r
|
|
1892
1895
|
}) => {
|
|
1893
1896
|
if (i.value = s || !1, !i.value && d) {
|
|
1894
|
-
const l =
|
|
1897
|
+
const l = Xs((r == null ? void 0 : r.value) || "", d);
|
|
1895
1898
|
l.valid || (i.value = l.message);
|
|
1896
1899
|
}
|
|
1897
1900
|
if (!i.value && (o || n)) {
|
|
1898
|
-
const l =
|
|
1901
|
+
const l = Ws({
|
|
1899
1902
|
maxlength: o,
|
|
1900
1903
|
minlength: n,
|
|
1901
1904
|
required: a,
|
|
@@ -1903,7 +1906,7 @@ const Li = /* @__PURE__ */ w(Hs, [["__scopeId", "data-v-4fd02dd8"]]), Qe = "Plea
|
|
|
1903
1906
|
});
|
|
1904
1907
|
l.valid || (i.value = l.message);
|
|
1905
1908
|
}
|
|
1906
|
-
},
|
|
1909
|
+
}, Ws = ({
|
|
1907
1910
|
maxlength: i,
|
|
1908
1911
|
minlength: s,
|
|
1909
1912
|
required: o = !1,
|
|
@@ -1913,14 +1916,14 @@ const Li = /* @__PURE__ */ w(Hs, [["__scopeId", "data-v-4fd02dd8"]]), Qe = "Plea
|
|
|
1913
1916
|
message: "",
|
|
1914
1917
|
valid: !0
|
|
1915
1918
|
};
|
|
1916
|
-
return a.valid =
|
|
1919
|
+
return a.valid = Ys({
|
|
1917
1920
|
maxlength: i,
|
|
1918
1921
|
minlength: s,
|
|
1919
1922
|
required: o,
|
|
1920
1923
|
value: n
|
|
1921
1924
|
}), a.valid || (a.message = Qe, i && s ? a.message = `Please enter a value between ${s} and ${i} characters in length.` : i ? a.message = `Please enter a value no more than ${i} characters in length.` : s && (a.message = `Please enter a value no less than ${s} characters in length.`)), a;
|
|
1922
1925
|
};
|
|
1923
|
-
function
|
|
1926
|
+
function Xs(i, s) {
|
|
1924
1927
|
for (const o of s) {
|
|
1925
1928
|
const n = o(i);
|
|
1926
1929
|
if (!n.valid)
|
|
@@ -1931,7 +1934,7 @@ function Ys(i, s) {
|
|
|
1931
1934
|
valid: !0
|
|
1932
1935
|
};
|
|
1933
1936
|
}
|
|
1934
|
-
const
|
|
1937
|
+
const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"], zs = ["value"], Qs = ["selected", "value"], Zs = ["selected", "value"], qs = /* @__PURE__ */ C({
|
|
1935
1938
|
__name: "TideInputSelect",
|
|
1936
1939
|
props: {
|
|
1937
1940
|
inputId: { default: void 0 },
|
|
@@ -1946,7 +1949,7 @@ const Ws = ["for"], Xs = ["disabled", "name", "required", "id"], Vs = ["label"],
|
|
|
1946
1949
|
value: { default: void 0 }
|
|
1947
1950
|
},
|
|
1948
1951
|
setup(i, { expose: s }) {
|
|
1949
|
-
const o = i, n = _(o.error), a = _(!1), d = _(null), r = _(o.required), l = _(o.value), u = U(() => Ze(o.error, n.value)), O = U(() => o.required ? `${o.label} *` : o.label),
|
|
1952
|
+
const o = i, n = _(o.error), a = _(!1), d = _(null), r = _(o.required), l = _(o.value), u = U(() => Ze(o.error, n.value)), O = U(() => o.required ? `${o.label} *` : o.label), L = U(() => o.required && !l.value || qe(n.value, o.error)), R = U(() => a.value || !A.value), A = U(() => l.value === void 0), f = () => {
|
|
1950
1953
|
var T;
|
|
1951
1954
|
const I = new MouseEvent("mousedown");
|
|
1952
1955
|
(T = d == null ? void 0 : d.value) == null || T.dispatchEvent(I);
|
|
@@ -1967,7 +1970,7 @@ const Ws = ["for"], Xs = ["disabled", "name", "required", "id"], Vs = ["label"],
|
|
|
1967
1970
|
e(t).FLEX.DIRECTION.COLUMN,
|
|
1968
1971
|
e(t).GAP.QUARTER,
|
|
1969
1972
|
I.disabled && "disabled",
|
|
1970
|
-
|
|
1973
|
+
L.value && "error"
|
|
1971
1974
|
])
|
|
1972
1975
|
}, [
|
|
1973
1976
|
v("div", {
|
|
@@ -1990,16 +1993,16 @@ const Ws = ["for"], Xs = ["disabled", "name", "required", "id"], Vs = ["label"],
|
|
|
1990
1993
|
I.label ? (E(), p("label", {
|
|
1991
1994
|
key: 0,
|
|
1992
1995
|
class: c([
|
|
1993
|
-
|
|
1996
|
+
R.value ? ["minilabel", e(t).FONT.ROLE.LABEL_3] : e(t).FONT.ROLE.LABEL_1,
|
|
1994
1997
|
e(t).POSITION.ABSOLUTE,
|
|
1995
1998
|
e(t).POSITIONING.LEFT,
|
|
1996
1999
|
e(t).MARGIN.TOP.HALF,
|
|
1997
2000
|
e(t).MARGIN.LEFT.ONE,
|
|
1998
|
-
!
|
|
2001
|
+
!L.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
1999
2002
|
e(t).POINTER_EVENTS.OFF
|
|
2000
2003
|
]),
|
|
2001
2004
|
for: o.inputId
|
|
2002
|
-
}, D(O.value), 11,
|
|
2005
|
+
}, D(O.value), 11, Vs)) : F("", !0),
|
|
2003
2006
|
we(v("select", {
|
|
2004
2007
|
class: c([
|
|
2005
2008
|
e(t).PADDING.BOTTOM.HALF,
|
|
@@ -2028,35 +2031,35 @@ const Ws = ["for"], Xs = ["disabled", "name", "required", "id"], Vs = ["label"],
|
|
|
2028
2031
|
class: c([e(t).WIDTH.FULL, e(t).BG.SURFACE.DEFAULT]),
|
|
2029
2032
|
key: h.value,
|
|
2030
2033
|
value: h.value
|
|
2031
|
-
}, D(h.label), 11,
|
|
2032
|
-
], 10,
|
|
2034
|
+
}, D(h.label), 11, zs))), 128))
|
|
2035
|
+
], 10, Ks)) : (E(), p("option", {
|
|
2033
2036
|
class: c([e(t).WIDTH.FULL, e(t).BG.SURFACE.DEFAULT]),
|
|
2034
2037
|
key: g.value,
|
|
2035
2038
|
selected: l.value === g.value ? !0 : void 0,
|
|
2036
2039
|
value: g.value
|
|
2037
|
-
}, D(g.label), 11,
|
|
2040
|
+
}, D(g.label), 11, Qs))
|
|
2038
2041
|
], 64))), 256)),
|
|
2039
2042
|
(E(!0), p(ee, null, le(I.options, (g) => (E(), p("option", {
|
|
2040
2043
|
class: c([e(t).WIDTH.FULL, e(t).BG.SURFACE.DEFAULT]),
|
|
2041
2044
|
key: g.value,
|
|
2042
2045
|
selected: l.value === g.value ? !0 : void 0,
|
|
2043
2046
|
value: g.value
|
|
2044
|
-
}, D(g.label), 11,
|
|
2045
|
-
], 42,
|
|
2047
|
+
}, D(g.label), 11, Zs))), 128))
|
|
2048
|
+
], 42, $s), [
|
|
2046
2049
|
[Wt, l.value]
|
|
2047
2050
|
])
|
|
2048
2051
|
], 2),
|
|
2049
|
-
|
|
2052
|
+
M(H, {
|
|
2050
2053
|
class: c([e(t).POSITION.ABSOLUTE, e(t).POSITIONING.RIGHT, e(t).MARGIN.RIGHT.ONE, e(t).POINTER_EVENTS.OFF]),
|
|
2051
2054
|
icon: e(G).EXPAND_MORE,
|
|
2052
2055
|
size: e(Y).SMALL
|
|
2053
2056
|
}, null, 8, ["class", "icon", "size"])
|
|
2054
2057
|
], 2),
|
|
2055
|
-
o.supportingText ||
|
|
2058
|
+
o.supportingText || L.value ? (E(), p("div", {
|
|
2056
2059
|
key: 0,
|
|
2057
2060
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.QUARTER])
|
|
2058
2061
|
}, [
|
|
2059
|
-
|
|
2062
|
+
L.value ? (E(), P(H, {
|
|
2060
2063
|
key: 0,
|
|
2061
2064
|
class: c([]),
|
|
2062
2065
|
icon: e(G).ERROR,
|
|
@@ -2064,12 +2067,12 @@ const Ws = ["for"], Xs = ["disabled", "name", "required", "id"], Vs = ["label"],
|
|
|
2064
2067
|
}, null, 8, ["icon", "size"])) : F("", !0),
|
|
2065
2068
|
v("div", {
|
|
2066
2069
|
class: c([e(t).FONT.ROLE.LABEL_3])
|
|
2067
|
-
}, D(
|
|
2070
|
+
}, D(L.value ? u.value : o.supportingText), 3)
|
|
2068
2071
|
], 2)) : F("", !0)
|
|
2069
2072
|
], 2));
|
|
2070
2073
|
}
|
|
2071
2074
|
});
|
|
2072
|
-
const
|
|
2075
|
+
const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
2073
2076
|
DATE: "date",
|
|
2074
2077
|
DATETIME_LOCAL: "datetime-local",
|
|
2075
2078
|
EMAIL: "email",
|
|
@@ -2082,7 +2085,7 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2082
2085
|
TIME: "time",
|
|
2083
2086
|
URL: "url",
|
|
2084
2087
|
WEEK: "week"
|
|
2085
|
-
},
|
|
2088
|
+
}, js = ["for"], Js = ["autocomplete", "data-track", "disabled", "maxlength", "minlength", "name", "required", "type", "id"], eo = /* @__PURE__ */ C({
|
|
2086
2089
|
__name: "TideInputText",
|
|
2087
2090
|
props: {
|
|
2088
2091
|
autocomplete: { type: Boolean, default: !1 },
|
|
@@ -2101,15 +2104,15 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2101
2104
|
suffix: { default: void 0 },
|
|
2102
2105
|
supportingText: { default: void 0 },
|
|
2103
2106
|
transformValue: { type: Function, default: void 0 },
|
|
2104
|
-
type: { default:
|
|
2107
|
+
type: { default: _e.TEXT },
|
|
2105
2108
|
validators: { default: void 0 },
|
|
2106
2109
|
value: { default: void 0 }
|
|
2107
2110
|
},
|
|
2108
2111
|
setup(i, { expose: s }) {
|
|
2109
|
-
const o = i, n = _(o.error), a = _(!1), d = _(null), r = _(!1), l = _(o.value), u = U(() => Ze(o.error, n.value)), O = U(() => o.required && o.label ? `${o.label} *` : o.label),
|
|
2112
|
+
const o = i, n = _(o.error), a = _(!1), d = _(null), r = _(!1), l = _(o.value), u = U(() => Ze(o.error, n.value)), O = U(() => o.required && o.label ? `${o.label} *` : o.label), L = U(() => o.hasClear && l.value), R = U(
|
|
2110
2113
|
() => o.required && l.value !== void 0 && !l.value || qe(n.value, o.error)
|
|
2111
2114
|
), A = U(() => a.value || !f.value), f = U(() => l.value === "" || l.value === void 0), m = U(
|
|
2112
|
-
() => o.type ===
|
|
2115
|
+
() => o.type === _e.PASSWORD && r.value === !0 ? _e.TEXT : o.type
|
|
2113
2116
|
), N = () => {
|
|
2114
2117
|
var S;
|
|
2115
2118
|
l.value = "", (S = d.value) == null || S.focus();
|
|
@@ -2153,7 +2156,7 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2153
2156
|
e(t).FLEX.DIRECTION.COLUMN,
|
|
2154
2157
|
e(t).GAP.QUARTER,
|
|
2155
2158
|
S.disabled && "disabled",
|
|
2156
|
-
|
|
2159
|
+
R.value && "error"
|
|
2157
2160
|
])
|
|
2158
2161
|
}, [
|
|
2159
2162
|
v("div", {
|
|
@@ -2165,7 +2168,7 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2165
2168
|
e(t).POSITION.RELATIVE,
|
|
2166
2169
|
e(t).BORDER.RADIUS.HALF,
|
|
2167
2170
|
e(t).BG.SURFACE.DEFAULT,
|
|
2168
|
-
|
|
2171
|
+
L.value ? [e(t).PADDING.RIGHT.HALF, e(t).PADDING.LEFT.ONE] : [e(t).PADDING.X.ONE],
|
|
2169
2172
|
e(t).PADDING.Y.HALF,
|
|
2170
2173
|
o.disabled ? e(t).CURSOR.NOT_ALLOWED : e(t).CURSOR.TEXT
|
|
2171
2174
|
])
|
|
@@ -2185,13 +2188,13 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2185
2188
|
"tide-input-text-prefix",
|
|
2186
2189
|
e(t).FONT.ROLE.BODY_1,
|
|
2187
2190
|
,
|
|
2188
|
-
!
|
|
2191
|
+
!R.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
2189
2192
|
A.value ? "" : "offset"
|
|
2190
2193
|
])
|
|
2191
2194
|
}, D(o.prefix), 3)) : F("", !0),
|
|
2192
2195
|
v("div", {
|
|
2193
2196
|
class: c([e(t).DISPLAY.FLEX, e(t).FLEX.DIRECTION.COLUMN, e(t).WIDTH.FULL]),
|
|
2194
|
-
onClick: x[1] || (x[1] =
|
|
2197
|
+
onClick: x[1] || (x[1] = Ie((y) => {
|
|
2195
2198
|
var B;
|
|
2196
2199
|
return (B = d.value) == null ? void 0 : B.focus();
|
|
2197
2200
|
}, ["prevent"]))
|
|
@@ -2200,12 +2203,12 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2200
2203
|
key: 0,
|
|
2201
2204
|
class: c([
|
|
2202
2205
|
A.value ? ["minilabel", e(t).FONT.ROLE.LABEL_3] : e(t).FONT.ROLE.LABEL_1,
|
|
2203
|
-
!
|
|
2206
|
+
!R.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
2204
2207
|
e(t).CURSOR.TEXT,
|
|
2205
2208
|
e(t).POINTER_EVENTS.OFF
|
|
2206
2209
|
]),
|
|
2207
2210
|
for: o.inputId
|
|
2208
|
-
}, D(O.value), 11,
|
|
2211
|
+
}, D(O.value), 11, js)) : F("", !0),
|
|
2209
2212
|
we(v("input", {
|
|
2210
2213
|
autocomplete: S.autocomplete ? "on" : "off",
|
|
2211
2214
|
class: c([e(t).WIDTH.FULL, S.disabled && e(t).CURSOR.NOT_ALLOWED, e(t).FONT.ROLE.BODY_1]),
|
|
@@ -2224,7 +2227,7 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2224
2227
|
onInput: g,
|
|
2225
2228
|
id: o.inputId,
|
|
2226
2229
|
"onUpdate:modelValue": x[0] || (x[0] = (y) => l.value = y)
|
|
2227
|
-
}, null, 42,
|
|
2230
|
+
}, null, 42, Js), [
|
|
2228
2231
|
[Xt, l.value]
|
|
2229
2232
|
])
|
|
2230
2233
|
], 2),
|
|
@@ -2233,19 +2236,19 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2233
2236
|
class: c([
|
|
2234
2237
|
"tide-input-text-suffix",
|
|
2235
2238
|
e(t).FONT.ROLE.BODY_1,
|
|
2236
|
-
!
|
|
2239
|
+
!R.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
2237
2240
|
A.value ? "" : "offset"
|
|
2238
2241
|
])
|
|
2239
2242
|
}, D(o.suffix), 3)) : F("", !0)
|
|
2240
2243
|
], 2),
|
|
2241
|
-
|
|
2244
|
+
L.value && o.type !== e(_e).PASSWORD ? (E(), P(H, {
|
|
2242
2245
|
key: 1,
|
|
2243
2246
|
class: c([e(t).PADDING.Y.HALF, e(t).PADDING.FULL.HALF, e(t).CURSOR.POINTER]),
|
|
2244
2247
|
icon: e(G).CLOSE,
|
|
2245
2248
|
size: e(Y).SMALL,
|
|
2246
2249
|
onClick: N
|
|
2247
2250
|
}, null, 8, ["class", "icon", "size"])) : F("", !0),
|
|
2248
|
-
o.type === e(
|
|
2251
|
+
o.type === e(_e).PASSWORD ? (E(), P(H, {
|
|
2249
2252
|
key: 2,
|
|
2250
2253
|
class: c([e(t).PADDING.Y.HALF, e(t).PADDING.FULL.HALF, e(t).CURSOR.POINTER]),
|
|
2251
2254
|
icon: e(G).VISIBILITY,
|
|
@@ -2253,11 +2256,11 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2253
2256
|
onClick: x[2] || (x[2] = (y) => r.value = !r.value)
|
|
2254
2257
|
}, null, 8, ["class", "icon", "size"])) : F("", !0)
|
|
2255
2258
|
], 2),
|
|
2256
|
-
o.supportingText ||
|
|
2259
|
+
o.supportingText || R.value ? (E(), p("div", {
|
|
2257
2260
|
key: 0,
|
|
2258
2261
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.QUARTER])
|
|
2259
2262
|
}, [
|
|
2260
|
-
|
|
2263
|
+
R.value ? (E(), P(H, {
|
|
2261
2264
|
key: 0,
|
|
2262
2265
|
class: c([]),
|
|
2263
2266
|
icon: e(G).ERROR,
|
|
@@ -2265,12 +2268,12 @@ const Ri = /* @__PURE__ */ w(Qs, [["__scopeId", "data-v-2da267e1"]]), Ne = {
|
|
|
2265
2268
|
}, null, 8, ["icon", "size"])) : F("", !0),
|
|
2266
2269
|
v("div", {
|
|
2267
2270
|
class: c([e(t).FONT.ROLE.LABEL_3])
|
|
2268
|
-
}, D(
|
|
2271
|
+
}, D(R.value ? u.value : o.supportingText), 3)
|
|
2269
2272
|
], 2)) : F("", !0)
|
|
2270
2273
|
], 2));
|
|
2271
2274
|
}
|
|
2272
2275
|
});
|
|
2273
|
-
const
|
|
2276
|
+
const fi = /* @__PURE__ */ w(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for"], so = ["data-track", "maxlength", "minlength", "name", "required", "rows", "id"], oo = /* @__PURE__ */ C({
|
|
2274
2277
|
__name: "TideInputTextarea",
|
|
2275
2278
|
props: {
|
|
2276
2279
|
dataTrack: { default: "" },
|
|
@@ -2288,7 +2291,7 @@ const pi = /* @__PURE__ */ w(js, [["__scopeId", "data-v-d369bda5"]]), Js = ["for
|
|
|
2288
2291
|
setup(i, { expose: s }) {
|
|
2289
2292
|
const o = i, n = _(o.error), a = _(!1), d = _(null), r = _(o.value), l = U(() => Ze(o.error, n.value)), u = U(() => o.required ? `${o.label} *` : o.label), O = U(
|
|
2290
2293
|
() => o.required && r.value !== void 0 && !r.value || qe(n.value, o.error)
|
|
2291
|
-
),
|
|
2294
|
+
), L = U(() => a.value || !R.value), R = U(() => r.value === "" || r.value === void 0), A = () => {
|
|
2292
2295
|
a.value = !0;
|
|
2293
2296
|
}, f = () => {
|
|
2294
2297
|
a.value = !1, r.value || (r.value = "");
|
|
@@ -2327,14 +2330,14 @@ const pi = /* @__PURE__ */ w(js, [["__scopeId", "data-v-d369bda5"]]), Js = ["for
|
|
|
2327
2330
|
N.label ? (E(), p("label", {
|
|
2328
2331
|
key: 0,
|
|
2329
2332
|
class: c([
|
|
2330
|
-
|
|
2333
|
+
L.value ? ["minilabel", e(t).FONT.ROLE.LABEL_3] : e(t).FONT.ROLE.LABEL_1,
|
|
2331
2334
|
!O.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
2332
2335
|
e(t).CURSOR.TEXT,
|
|
2333
2336
|
e(t).POINTER_EVENTS.OFF
|
|
2334
2337
|
]),
|
|
2335
2338
|
for: o.inputId,
|
|
2336
2339
|
ref: "label"
|
|
2337
|
-
}, D(u.value), 11,
|
|
2340
|
+
}, D(u.value), 11, to)) : F("", !0),
|
|
2338
2341
|
we(v("textarea", {
|
|
2339
2342
|
class: c([e(t).WIDTH.FULL, e(t).FONT.ROLE.BODY_1]),
|
|
2340
2343
|
"data-track": o.dataTrack,
|
|
@@ -2350,7 +2353,7 @@ const pi = /* @__PURE__ */ w(js, [["__scopeId", "data-v-d369bda5"]]), Js = ["for
|
|
|
2350
2353
|
onFocusout: f,
|
|
2351
2354
|
id: o.inputId,
|
|
2352
2355
|
"onUpdate:modelValue": I[0] || (I[0] = (T) => r.value = T)
|
|
2353
|
-
}, null, 42,
|
|
2356
|
+
}, null, 42, so), [
|
|
2354
2357
|
[Vt, r.value]
|
|
2355
2358
|
])
|
|
2356
2359
|
], 2),
|
|
@@ -2370,10 +2373,10 @@ const pi = /* @__PURE__ */ w(js, [["__scopeId", "data-v-d369bda5"]]), Js = ["for
|
|
|
2370
2373
|
], 2));
|
|
2371
2374
|
}
|
|
2372
2375
|
});
|
|
2373
|
-
const
|
|
2376
|
+
const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @__PURE__ */ C({
|
|
2374
2377
|
__name: "TideLink",
|
|
2375
2378
|
props: {
|
|
2376
|
-
element: { default:
|
|
2379
|
+
element: { default: k.LINK },
|
|
2377
2380
|
href: { default: void 0 },
|
|
2378
2381
|
iconLeading: { default: void 0 },
|
|
2379
2382
|
iconTrailing: { default: void 0 },
|
|
@@ -2383,7 +2386,7 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2383
2386
|
},
|
|
2384
2387
|
setup(i) {
|
|
2385
2388
|
const s = i;
|
|
2386
|
-
return (o, n) => (E(), P(Oe(s.element === e(
|
|
2389
|
+
return (o, n) => (E(), P(Oe(s.element === e(k).LINK ? e(k).LINK : e(k).BUTTON), {
|
|
2387
2390
|
class: c([
|
|
2388
2391
|
"tide-link",
|
|
2389
2392
|
e(t).DISPLAY.INLINE,
|
|
@@ -2411,12 +2414,12 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2411
2414
|
_: 1
|
|
2412
2415
|
}, 8, ["class", "href", "target"]));
|
|
2413
2416
|
}
|
|
2414
|
-
}),
|
|
2417
|
+
}), io = {
|
|
2415
2418
|
SM: "sm",
|
|
2416
2419
|
MD: "md",
|
|
2417
2420
|
LG: "lg",
|
|
2418
2421
|
XL: "xl"
|
|
2419
|
-
},
|
|
2422
|
+
}, Ti = {
|
|
2420
2423
|
SM: 768,
|
|
2421
2424
|
MD: 992,
|
|
2422
2425
|
LG: 1232,
|
|
@@ -2438,7 +2441,7 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2438
2441
|
}, be = "tide-top-layer", Ft = () => {
|
|
2439
2442
|
let i = document.getElementById(be);
|
|
2440
2443
|
i || (i = document.createElement("div"), i.id = be, i.setAttribute("data-css-scope", ""), document.body.appendChild(i)), i.style.isolation = "isolate";
|
|
2441
|
-
},
|
|
2444
|
+
}, no = ["onClick", "onKeydown"], ao = ["textContent"], ro = /* @__PURE__ */ C({
|
|
2442
2445
|
__name: "TideModal",
|
|
2443
2446
|
props: {
|
|
2444
2447
|
isBackButton: { type: Boolean, default: !1 },
|
|
@@ -2450,30 +2453,36 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2450
2453
|
emits: ["close", "back"],
|
|
2451
2454
|
setup(i, { emit: s }) {
|
|
2452
2455
|
const o = i, n = _(), a = _(), d = () => {
|
|
2453
|
-
var
|
|
2454
|
-
(
|
|
2456
|
+
var L;
|
|
2457
|
+
(L = a.value) == null || L.showModal();
|
|
2455
2458
|
}, r = () => {
|
|
2456
|
-
var
|
|
2457
|
-
(
|
|
2459
|
+
var L;
|
|
2460
|
+
(L = a.value) == null || L.close();
|
|
2458
2461
|
}, l = () => {
|
|
2459
2462
|
Tt(() => {
|
|
2460
2463
|
n.value && (n.value.scrollTop = 0);
|
|
2461
2464
|
});
|
|
2465
|
+
}, u = () => {
|
|
2466
|
+
o.isDismissible && s("close");
|
|
2467
|
+
}, O = (L) => {
|
|
2468
|
+
L.preventDefault(), o.isDismissible && s("close");
|
|
2462
2469
|
};
|
|
2463
2470
|
return K(
|
|
2464
2471
|
() => o.isOpen,
|
|
2465
|
-
(
|
|
2466
|
-
a.value && (
|
|
2472
|
+
(L) => {
|
|
2473
|
+
a.value && (L ? (d(), l()) : r(), _t(L));
|
|
2467
2474
|
}
|
|
2468
2475
|
), Ge(() => {
|
|
2469
2476
|
o.isOpen && d();
|
|
2470
|
-
}), (
|
|
2477
|
+
}), (L, R) => (E(), p("dialog", {
|
|
2471
2478
|
class: c(["tide-modal", e(t).BG.INITIAL, e(t).HEIGHT.FULL, e(t).WIDTH.FULL, e(t).OVERFLOW.XY.HIDDEN]),
|
|
2472
2479
|
ref_key: "modalDialog",
|
|
2473
2480
|
ref: a,
|
|
2474
2481
|
style: Ke({ "--modal-width": o.width }),
|
|
2475
|
-
onClick:
|
|
2476
|
-
onClose:
|
|
2482
|
+
onClick: Ie(u, ["self"]),
|
|
2483
|
+
onClose: R[2] || (R[2] = Ie(() => {
|
|
2484
|
+
}, ["prevent"])),
|
|
2485
|
+
onKeydown: $t(O, ["escape"])
|
|
2477
2486
|
}, [
|
|
2478
2487
|
v("div", {
|
|
2479
2488
|
class: c([
|
|
@@ -2488,7 +2497,7 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2488
2497
|
e(t).SHADOW.TOP,
|
|
2489
2498
|
e(t).WIDTH.FULL,
|
|
2490
2499
|
e(t).WIDTH.MAX_FULL,
|
|
2491
|
-
e(t).withBreakpoint([e(t).SHADOW.BOTTOM], e(
|
|
2500
|
+
e(t).withBreakpoint([e(t).SHADOW.BOTTOM], e(io).SM)
|
|
2492
2501
|
])
|
|
2493
2502
|
}, [
|
|
2494
2503
|
v("header", {
|
|
@@ -2502,23 +2511,23 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2502
2511
|
e(t).BORDER.COLOR.LOW
|
|
2503
2512
|
])
|
|
2504
2513
|
}, [
|
|
2505
|
-
|
|
2514
|
+
L.isBackButton ? (E(), P(Z, {
|
|
2506
2515
|
key: 0,
|
|
2507
2516
|
icon: e(G).CHEVRON_LEFT,
|
|
2508
2517
|
priority: e($).QUATERNARY,
|
|
2509
|
-
onClick:
|
|
2518
|
+
onClick: R[0] || (R[0] = (A) => s("back")),
|
|
2510
2519
|
title: "Back"
|
|
2511
2520
|
}, null, 8, ["icon", "priority"])) : F("", !0),
|
|
2512
2521
|
v("div", {
|
|
2513
2522
|
class: c([e(t).FONT.ROLE.HEADLINE_2]),
|
|
2514
|
-
textContent: D(
|
|
2515
|
-
}, null, 10,
|
|
2516
|
-
|
|
2523
|
+
textContent: D(L.title)
|
|
2524
|
+
}, null, 10, ao),
|
|
2525
|
+
L.isDismissible ? (E(), P(Z, {
|
|
2517
2526
|
key: 1,
|
|
2518
2527
|
class: c([e(t).FLEX.GROW.OFF, e(t).FLEX.SHRINK.OFF, e(t).MARGIN.LEFT.AUTO]),
|
|
2519
2528
|
icon: e(G).CLOSE,
|
|
2520
2529
|
priority: e($).QUATERNARY,
|
|
2521
|
-
onClick:
|
|
2530
|
+
onClick: R[1] || (R[1] = (A) => s("close"))
|
|
2522
2531
|
}, null, 8, ["class", "icon", "priority"])) : F("", !0)
|
|
2523
2532
|
], 2),
|
|
2524
2533
|
v("div", {
|
|
@@ -2533,19 +2542,19 @@ const vi = /* @__PURE__ */ w(to, [["__scopeId", "data-v-2105ab99"]]), fi = /* @_
|
|
|
2533
2542
|
ref_key: "modalContent",
|
|
2534
2543
|
ref: n
|
|
2535
2544
|
}, [
|
|
2536
|
-
V(
|
|
2545
|
+
V(L.$slots, "default", {}, void 0, !0)
|
|
2537
2546
|
], 2),
|
|
2538
|
-
|
|
2547
|
+
L.$slots.footer ? (E(), p("footer", {
|
|
2539
2548
|
key: 0,
|
|
2540
2549
|
class: c(["tide-modal-footer", e(t).AXIS1.END, e(t).DISPLAY.FLEX, e(t).GAP.TWO, e(t).PADDING.Y.ONE, e(t).SHADOW.TOP])
|
|
2541
2550
|
}, [
|
|
2542
|
-
V(
|
|
2551
|
+
V(L.$slots, "footer", {}, void 0, !0)
|
|
2543
2552
|
], 2)) : F("", !0)
|
|
2544
2553
|
], 2)
|
|
2545
|
-
], 46,
|
|
2554
|
+
], 46, no));
|
|
2546
2555
|
}
|
|
2547
2556
|
});
|
|
2548
|
-
const
|
|
2557
|
+
const gi = /* @__PURE__ */ w(ro, [["__scopeId", "data-v-1598252f"]]), mi = /* @__PURE__ */ C({
|
|
2549
2558
|
__name: "TidePagination",
|
|
2550
2559
|
props: {
|
|
2551
2560
|
pageCurrent: { default: 1 },
|
|
@@ -2559,7 +2568,7 @@ const Ii = /* @__PURE__ */ w(no, [["__scopeId", "data-v-669268d3"]]), Ti = /* @_
|
|
|
2559
2568
|
return (r, l) => (E(), p("section", {
|
|
2560
2569
|
class: c(["tide-pagination", e(t).DISPLAY.FLEX, e(t).AXIS1.CENTER, e(t).AXIS2.CENTER, e(t).GAP.QUARTER, e(t).WIDTH.FULL])
|
|
2561
2570
|
}, [
|
|
2562
|
-
|
|
2571
|
+
M(Z, {
|
|
2563
2572
|
disabled: n.value === 1,
|
|
2564
2573
|
icon: e(G).CHEVRON_LEFT,
|
|
2565
2574
|
priority: e($).QUATERNARY,
|
|
@@ -2569,7 +2578,7 @@ const Ii = /* @__PURE__ */ w(no, [["__scopeId", "data-v-669268d3"]]), Ti = /* @_
|
|
|
2569
2578
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.QUARTER, e(t).LIST_BULLETS.OFF])
|
|
2570
2579
|
}, [
|
|
2571
2580
|
(E(!0), p(ee, null, le(a.value, (u) => (E(), p("li", { key: u }, [
|
|
2572
|
-
|
|
2581
|
+
M(Ls, {
|
|
2573
2582
|
disabled: n.value === u,
|
|
2574
2583
|
label: u,
|
|
2575
2584
|
priority: e($).QUATERNARY,
|
|
@@ -2577,7 +2586,7 @@ const Ii = /* @__PURE__ */ w(no, [["__scopeId", "data-v-669268d3"]]), Ti = /* @_
|
|
|
2577
2586
|
}, null, 8, ["disabled", "label", "priority", "onClick"])
|
|
2578
2587
|
]))), 128))
|
|
2579
2588
|
], 2),
|
|
2580
|
-
|
|
2589
|
+
M(Z, {
|
|
2581
2590
|
disabled: n.value === a.value[a.value.length - 1],
|
|
2582
2591
|
icon: e(G).CHEVRON_RIGHT,
|
|
2583
2592
|
priority: e($).QUATERNARY,
|
|
@@ -2585,15 +2594,15 @@ const Ii = /* @__PURE__ */ w(no, [["__scopeId", "data-v-669268d3"]]), Ti = /* @_
|
|
|
2585
2594
|
}, null, 8, ["disabled", "icon", "priority"])
|
|
2586
2595
|
], 2));
|
|
2587
2596
|
}
|
|
2588
|
-
}),
|
|
2597
|
+
}), lo = ["top", "right", "bottom", "left"], rt = ["start", "end"], lt = /* @__PURE__ */ lo.reduce((i, s) => i.concat(s, s + "-" + rt[0], s + "-" + rt[1]), []), Be = Math.min, ue = Math.max, Ue = Math.round, Ce = Math.floor, te = (i) => ({
|
|
2589
2598
|
x: i,
|
|
2590
2599
|
y: i
|
|
2591
|
-
}),
|
|
2600
|
+
}), co = {
|
|
2592
2601
|
left: "right",
|
|
2593
2602
|
right: "left",
|
|
2594
2603
|
bottom: "top",
|
|
2595
2604
|
top: "bottom"
|
|
2596
|
-
},
|
|
2605
|
+
}, uo = {
|
|
2597
2606
|
start: "end",
|
|
2598
2607
|
end: "start"
|
|
2599
2608
|
};
|
|
@@ -2603,7 +2612,7 @@ function ct(i, s, o) {
|
|
|
2603
2612
|
function He(i, s) {
|
|
2604
2613
|
return typeof i == "function" ? i(s) : i;
|
|
2605
2614
|
}
|
|
2606
|
-
function
|
|
2615
|
+
function ge(i) {
|
|
2607
2616
|
return i.split("-")[0];
|
|
2608
2617
|
}
|
|
2609
2618
|
function ce(i) {
|
|
@@ -2616,24 +2625,24 @@ function ht(i) {
|
|
|
2616
2625
|
return i === "y" ? "height" : "width";
|
|
2617
2626
|
}
|
|
2618
2627
|
function xe(i) {
|
|
2619
|
-
return ["top", "bottom"].includes(
|
|
2628
|
+
return ["top", "bottom"].includes(ge(i)) ? "y" : "x";
|
|
2620
2629
|
}
|
|
2621
2630
|
function Dt(i) {
|
|
2622
2631
|
return St(xe(i));
|
|
2623
2632
|
}
|
|
2624
|
-
function
|
|
2633
|
+
function Eo(i, s, o) {
|
|
2625
2634
|
o === void 0 && (o = !1);
|
|
2626
2635
|
const n = ce(i), a = Dt(i), d = ht(a);
|
|
2627
2636
|
let r = a === "x" ? n === (o ? "end" : "start") ? "right" : "left" : n === "start" ? "bottom" : "top";
|
|
2628
2637
|
return s.reference[d] > s.floating[d] && (r = dt(r)), [r, dt(r)];
|
|
2629
2638
|
}
|
|
2630
|
-
function
|
|
2631
|
-
return i.replace(/start|end/g, (s) =>
|
|
2639
|
+
function Oo(i) {
|
|
2640
|
+
return i.replace(/start|end/g, (s) => uo[s]);
|
|
2632
2641
|
}
|
|
2633
2642
|
function dt(i) {
|
|
2634
|
-
return i.replace(/left|right|bottom|top/g, (s) =>
|
|
2643
|
+
return i.replace(/left|right|bottom|top/g, (s) => co[s]);
|
|
2635
2644
|
}
|
|
2636
|
-
function
|
|
2645
|
+
function Lo(i) {
|
|
2637
2646
|
return {
|
|
2638
2647
|
top: 0,
|
|
2639
2648
|
right: 0,
|
|
@@ -2642,8 +2651,8 @@ function Eo(i) {
|
|
|
2642
2651
|
...i
|
|
2643
2652
|
};
|
|
2644
2653
|
}
|
|
2645
|
-
function
|
|
2646
|
-
return typeof i != "number" ?
|
|
2654
|
+
function Ro(i) {
|
|
2655
|
+
return typeof i != "number" ? Lo(i) : {
|
|
2647
2656
|
top: i,
|
|
2648
2657
|
right: i,
|
|
2649
2658
|
bottom: i,
|
|
@@ -2673,31 +2682,31 @@ function ut(i, s, o) {
|
|
|
2673
2682
|
reference: n,
|
|
2674
2683
|
floating: a
|
|
2675
2684
|
} = i;
|
|
2676
|
-
const d = xe(s), r = Dt(s), l = ht(r), u =
|
|
2685
|
+
const d = xe(s), r = Dt(s), l = ht(r), u = ge(s), O = d === "y", L = n.x + n.width / 2 - a.width / 2, R = n.y + n.height / 2 - a.height / 2, A = n[l] / 2 - a[l] / 2;
|
|
2677
2686
|
let f;
|
|
2678
2687
|
switch (u) {
|
|
2679
2688
|
case "top":
|
|
2680
2689
|
f = {
|
|
2681
|
-
x:
|
|
2690
|
+
x: L,
|
|
2682
2691
|
y: n.y - a.height
|
|
2683
2692
|
};
|
|
2684
2693
|
break;
|
|
2685
2694
|
case "bottom":
|
|
2686
2695
|
f = {
|
|
2687
|
-
x:
|
|
2696
|
+
x: L,
|
|
2688
2697
|
y: n.y + n.height
|
|
2689
2698
|
};
|
|
2690
2699
|
break;
|
|
2691
2700
|
case "right":
|
|
2692
2701
|
f = {
|
|
2693
2702
|
x: n.x + n.width,
|
|
2694
|
-
y:
|
|
2703
|
+
y: R
|
|
2695
2704
|
};
|
|
2696
2705
|
break;
|
|
2697
2706
|
case "left":
|
|
2698
2707
|
f = {
|
|
2699
2708
|
x: n.x - a.width,
|
|
2700
|
-
y:
|
|
2709
|
+
y: R
|
|
2701
2710
|
};
|
|
2702
2711
|
break;
|
|
2703
2712
|
default:
|
|
@@ -2716,7 +2725,7 @@ function ut(i, s, o) {
|
|
|
2716
2725
|
}
|
|
2717
2726
|
return f;
|
|
2718
2727
|
}
|
|
2719
|
-
const
|
|
2728
|
+
const po = async (i, s, o) => {
|
|
2720
2729
|
const {
|
|
2721
2730
|
placement: n = "bottom",
|
|
2722
2731
|
strategy: a = "absolute",
|
|
@@ -2728,8 +2737,8 @@ const Lo = async (i, s, o) => {
|
|
|
2728
2737
|
floating: s,
|
|
2729
2738
|
strategy: a
|
|
2730
2739
|
}), {
|
|
2731
|
-
x:
|
|
2732
|
-
y:
|
|
2740
|
+
x: L,
|
|
2741
|
+
y: R
|
|
2733
2742
|
} = ut(O, n, u), A = n, f = {}, m = 0;
|
|
2734
2743
|
for (let N = 0; N < l.length; N++) {
|
|
2735
2744
|
const {
|
|
@@ -2741,8 +2750,8 @@ const Lo = async (i, s, o) => {
|
|
|
2741
2750
|
data: b,
|
|
2742
2751
|
reset: S
|
|
2743
2752
|
} = await T({
|
|
2744
|
-
x:
|
|
2745
|
-
y:
|
|
2753
|
+
x: L,
|
|
2754
|
+
y: R,
|
|
2746
2755
|
initialPlacement: n,
|
|
2747
2756
|
placement: A,
|
|
2748
2757
|
strategy: a,
|
|
@@ -2754,7 +2763,7 @@ const Lo = async (i, s, o) => {
|
|
|
2754
2763
|
floating: s
|
|
2755
2764
|
}
|
|
2756
2765
|
});
|
|
2757
|
-
|
|
2766
|
+
L = g ?? L, R = h ?? R, f = {
|
|
2758
2767
|
...f,
|
|
2759
2768
|
[I]: {
|
|
2760
2769
|
...f[I],
|
|
@@ -2765,13 +2774,13 @@ const Lo = async (i, s, o) => {
|
|
|
2765
2774
|
floating: s,
|
|
2766
2775
|
strategy: a
|
|
2767
2776
|
}) : S.rects), {
|
|
2768
|
-
x:
|
|
2769
|
-
y:
|
|
2777
|
+
x: L,
|
|
2778
|
+
y: R
|
|
2770
2779
|
} = ut(O, A, u)), N = -1);
|
|
2771
2780
|
}
|
|
2772
2781
|
return {
|
|
2773
|
-
x:
|
|
2774
|
-
y:
|
|
2782
|
+
x: L,
|
|
2783
|
+
y: R,
|
|
2775
2784
|
placement: A,
|
|
2776
2785
|
strategy: a,
|
|
2777
2786
|
middlewareData: f
|
|
@@ -2789,16 +2798,16 @@ async function yt(i, s) {
|
|
|
2789
2798
|
strategy: u
|
|
2790
2799
|
} = i, {
|
|
2791
2800
|
boundary: O = "clippingAncestors",
|
|
2792
|
-
rootBoundary:
|
|
2793
|
-
elementContext:
|
|
2801
|
+
rootBoundary: L = "viewport",
|
|
2802
|
+
elementContext: R = "floating",
|
|
2794
2803
|
altBoundary: A = !1,
|
|
2795
2804
|
padding: f = 0
|
|
2796
|
-
} = He(s, i), m =
|
|
2805
|
+
} = He(s, i), m = Ro(f), I = l[A ? R === "floating" ? "reference" : "floating" : R], T = Pe(await d.getClippingRect({
|
|
2797
2806
|
element: (o = await (d.isElement == null ? void 0 : d.isElement(I))) == null || o ? I : I.contextElement || await (d.getDocumentElement == null ? void 0 : d.getDocumentElement(l.floating)),
|
|
2798
2807
|
boundary: O,
|
|
2799
|
-
rootBoundary:
|
|
2808
|
+
rootBoundary: L,
|
|
2800
2809
|
strategy: u
|
|
2801
|
-
})), g =
|
|
2810
|
+
})), g = R === "floating" ? {
|
|
2802
2811
|
x: n,
|
|
2803
2812
|
y: a,
|
|
2804
2813
|
width: r.floating.width,
|
|
@@ -2822,10 +2831,10 @@ async function yt(i, s) {
|
|
|
2822
2831
|
right: (S.right - T.right + m.right) / b.x
|
|
2823
2832
|
};
|
|
2824
2833
|
}
|
|
2825
|
-
function
|
|
2826
|
-
return (i ? [...o.filter((a) => ce(a) === i), ...o.filter((a) => ce(a) !== i)] : o.filter((a) =>
|
|
2834
|
+
function vo(i, s, o) {
|
|
2835
|
+
return (i ? [...o.filter((a) => ce(a) === i), ...o.filter((a) => ce(a) !== i)] : o.filter((a) => ge(a) === a)).filter((a) => i ? ce(a) === i || (s ? Oo(a) !== a : !1) : !0);
|
|
2827
2836
|
}
|
|
2828
|
-
const
|
|
2837
|
+
const fo = function(i) {
|
|
2829
2838
|
return i === void 0 && (i = {}), {
|
|
2830
2839
|
name: "autoPlacement",
|
|
2831
2840
|
options: i,
|
|
@@ -2838,22 +2847,22 @@ const po = function(i) {
|
|
|
2838
2847
|
platform: u,
|
|
2839
2848
|
elements: O
|
|
2840
2849
|
} = s, {
|
|
2841
|
-
crossAxis:
|
|
2842
|
-
alignment:
|
|
2850
|
+
crossAxis: L = !1,
|
|
2851
|
+
alignment: R,
|
|
2843
2852
|
allowedPlacements: A = lt,
|
|
2844
2853
|
autoAlignment: f = !0,
|
|
2845
2854
|
...m
|
|
2846
|
-
} = He(i, s), N =
|
|
2855
|
+
} = He(i, s), N = R !== void 0 || A === lt ? vo(R || null, f, A) : A, I = await yt(s, m), T = ((o = r.autoPlacement) == null ? void 0 : o.index) || 0, g = N[T];
|
|
2847
2856
|
if (g == null)
|
|
2848
2857
|
return {};
|
|
2849
|
-
const h =
|
|
2858
|
+
const h = Eo(g, d, await (u.isRTL == null ? void 0 : u.isRTL(O.floating)));
|
|
2850
2859
|
if (l !== g)
|
|
2851
2860
|
return {
|
|
2852
2861
|
reset: {
|
|
2853
2862
|
placement: N[0]
|
|
2854
2863
|
}
|
|
2855
2864
|
};
|
|
2856
|
-
const b = [I[
|
|
2865
|
+
const b = [I[ge(g)], I[h[0]], I[h[1]]], S = [...((n = r.autoPlacement) == null ? void 0 : n.overflows) || [], {
|
|
2857
2866
|
placement: g,
|
|
2858
2867
|
overflows: b
|
|
2859
2868
|
}], x = N[T + 1];
|
|
@@ -2869,7 +2878,7 @@ const po = function(i) {
|
|
|
2869
2878
|
};
|
|
2870
2879
|
const y = S.map((W) => {
|
|
2871
2880
|
const Q = ce(W.placement);
|
|
2872
|
-
return [W.placement, Q &&
|
|
2881
|
+
return [W.placement, Q && L ? (
|
|
2873
2882
|
// Check along the mainAxis and main crossAxis side.
|
|
2874
2883
|
W.overflows.slice(0, 2).reduce((ne, pe) => ne + pe, 0)
|
|
2875
2884
|
) : (
|
|
@@ -2894,34 +2903,34 @@ const po = function(i) {
|
|
|
2894
2903
|
}
|
|
2895
2904
|
};
|
|
2896
2905
|
};
|
|
2897
|
-
async function
|
|
2906
|
+
async function Ao(i, s) {
|
|
2898
2907
|
const {
|
|
2899
2908
|
placement: o,
|
|
2900
2909
|
platform: n,
|
|
2901
2910
|
elements: a
|
|
2902
|
-
} = i, d = await (n.isRTL == null ? void 0 : n.isRTL(a.floating)), r =
|
|
2911
|
+
} = i, d = await (n.isRTL == null ? void 0 : n.isRTL(a.floating)), r = ge(o), l = ce(o), u = xe(o) === "y", O = ["left", "top"].includes(r) ? -1 : 1, L = d && u ? -1 : 1, R = He(s, i);
|
|
2903
2912
|
let {
|
|
2904
2913
|
mainAxis: A,
|
|
2905
2914
|
crossAxis: f,
|
|
2906
2915
|
alignmentAxis: m
|
|
2907
|
-
} = typeof
|
|
2908
|
-
mainAxis:
|
|
2916
|
+
} = typeof R == "number" ? {
|
|
2917
|
+
mainAxis: R,
|
|
2909
2918
|
crossAxis: 0,
|
|
2910
2919
|
alignmentAxis: null
|
|
2911
2920
|
} : {
|
|
2912
|
-
mainAxis:
|
|
2913
|
-
crossAxis:
|
|
2914
|
-
alignmentAxis:
|
|
2921
|
+
mainAxis: R.mainAxis || 0,
|
|
2922
|
+
crossAxis: R.crossAxis || 0,
|
|
2923
|
+
alignmentAxis: R.alignmentAxis
|
|
2915
2924
|
};
|
|
2916
2925
|
return l && typeof m == "number" && (f = l === "end" ? m * -1 : m), u ? {
|
|
2917
|
-
x: f *
|
|
2926
|
+
x: f * L,
|
|
2918
2927
|
y: A * O
|
|
2919
2928
|
} : {
|
|
2920
2929
|
x: A * O,
|
|
2921
|
-
y: f *
|
|
2930
|
+
y: f * L
|
|
2922
2931
|
};
|
|
2923
2932
|
}
|
|
2924
|
-
const
|
|
2933
|
+
const Io = function(i) {
|
|
2925
2934
|
return i === void 0 && (i = 0), {
|
|
2926
2935
|
name: "offset",
|
|
2927
2936
|
options: i,
|
|
@@ -2932,7 +2941,7 @@ const fo = function(i) {
|
|
|
2932
2941
|
y: d,
|
|
2933
2942
|
placement: r,
|
|
2934
2943
|
middlewareData: l
|
|
2935
|
-
} = s, u = await
|
|
2944
|
+
} = s, u = await Ao(s, i);
|
|
2936
2945
|
return r === ((o = l.offset) == null ? void 0 : o.placement) && (n = l.arrow) != null && n.alignmentOffset ? {} : {
|
|
2937
2946
|
x: a + u.x,
|
|
2938
2947
|
y: d + u.y,
|
|
@@ -2943,7 +2952,7 @@ const fo = function(i) {
|
|
|
2943
2952
|
};
|
|
2944
2953
|
}
|
|
2945
2954
|
};
|
|
2946
|
-
},
|
|
2955
|
+
}, To = function(i) {
|
|
2947
2956
|
return i === void 0 && (i = {}), {
|
|
2948
2957
|
name: "shift",
|
|
2949
2958
|
options: i,
|
|
@@ -2971,20 +2980,20 @@ const fo = function(i) {
|
|
|
2971
2980
|
} = He(i, s), O = {
|
|
2972
2981
|
x: o,
|
|
2973
2982
|
y: n
|
|
2974
|
-
},
|
|
2975
|
-
let f = O[A], m = O[
|
|
2983
|
+
}, L = await yt(s, u), R = xe(ge(a)), A = St(R);
|
|
2984
|
+
let f = O[A], m = O[R];
|
|
2976
2985
|
if (d) {
|
|
2977
|
-
const I = A === "y" ? "top" : "left", T = A === "y" ? "bottom" : "right", g = f +
|
|
2986
|
+
const I = A === "y" ? "top" : "left", T = A === "y" ? "bottom" : "right", g = f + L[I], h = f - L[T];
|
|
2978
2987
|
f = ct(g, f, h);
|
|
2979
2988
|
}
|
|
2980
2989
|
if (r) {
|
|
2981
|
-
const I =
|
|
2990
|
+
const I = R === "y" ? "top" : "left", T = R === "y" ? "bottom" : "right", g = m + L[I], h = m - L[T];
|
|
2982
2991
|
m = ct(g, m, h);
|
|
2983
2992
|
}
|
|
2984
2993
|
const N = l.fn({
|
|
2985
2994
|
...s,
|
|
2986
2995
|
[A]: f,
|
|
2987
|
-
[
|
|
2996
|
+
[R]: m
|
|
2988
2997
|
});
|
|
2989
2998
|
return {
|
|
2990
2999
|
...N,
|
|
@@ -2993,14 +3002,14 @@ const fo = function(i) {
|
|
|
2993
3002
|
y: N.y - n,
|
|
2994
3003
|
enabled: {
|
|
2995
3004
|
[A]: d,
|
|
2996
|
-
[
|
|
3005
|
+
[R]: r
|
|
2997
3006
|
}
|
|
2998
3007
|
}
|
|
2999
3008
|
};
|
|
3000
3009
|
}
|
|
3001
3010
|
};
|
|
3002
3011
|
};
|
|
3003
|
-
function
|
|
3012
|
+
function ke() {
|
|
3004
3013
|
return typeof window < "u";
|
|
3005
3014
|
}
|
|
3006
3015
|
function Re(i) {
|
|
@@ -3015,16 +3024,16 @@ function ie(i) {
|
|
|
3015
3024
|
return (s = (je(i) ? i.ownerDocument : i.document) || window.document) == null ? void 0 : s.documentElement;
|
|
3016
3025
|
}
|
|
3017
3026
|
function je(i) {
|
|
3018
|
-
return
|
|
3027
|
+
return ke() ? i instanceof Node || i instanceof z(i).Node : !1;
|
|
3019
3028
|
}
|
|
3020
3029
|
function q(i) {
|
|
3021
|
-
return
|
|
3030
|
+
return ke() ? i instanceof Element || i instanceof z(i).Element : !1;
|
|
3022
3031
|
}
|
|
3023
3032
|
function oe(i) {
|
|
3024
|
-
return
|
|
3033
|
+
return ke() ? i instanceof HTMLElement || i instanceof z(i).HTMLElement : !1;
|
|
3025
3034
|
}
|
|
3026
3035
|
function Et(i) {
|
|
3027
|
-
return !
|
|
3036
|
+
return !ke() || typeof ShadowRoot > "u" ? !1 : i instanceof ShadowRoot || i instanceof z(i).ShadowRoot;
|
|
3028
3037
|
}
|
|
3029
3038
|
function De(i) {
|
|
3030
3039
|
const {
|
|
@@ -3035,10 +3044,10 @@ function De(i) {
|
|
|
3035
3044
|
} = j(i);
|
|
3036
3045
|
return /auto|scroll|overlay|hidden|clip/.test(s + n + o) && !["inline", "contents"].includes(a);
|
|
3037
3046
|
}
|
|
3038
|
-
function
|
|
3047
|
+
function go(i) {
|
|
3039
3048
|
return ["table", "td", "th"].includes(Re(i));
|
|
3040
3049
|
}
|
|
3041
|
-
function
|
|
3050
|
+
function Me(i) {
|
|
3042
3051
|
return [":popover-open", ":modal"].some((s) => {
|
|
3043
3052
|
try {
|
|
3044
3053
|
return i.matches(s);
|
|
@@ -3051,12 +3060,12 @@ function Je(i) {
|
|
|
3051
3060
|
const s = et(), o = q(i) ? j(i) : i;
|
|
3052
3061
|
return ["transform", "translate", "scale", "rotate", "perspective"].some((n) => o[n] ? o[n] !== "none" : !1) || (o.containerType ? o.containerType !== "normal" : !1) || !s && (o.backdropFilter ? o.backdropFilter !== "none" : !1) || !s && (o.filter ? o.filter !== "none" : !1) || ["transform", "translate", "scale", "rotate", "perspective", "filter"].some((n) => (o.willChange || "").includes(n)) || ["paint", "layout", "strict", "content"].some((n) => (o.contain || "").includes(n));
|
|
3053
3062
|
}
|
|
3054
|
-
function
|
|
3063
|
+
function mo(i) {
|
|
3055
3064
|
let s = de(i);
|
|
3056
|
-
for (; oe(s) && !
|
|
3065
|
+
for (; oe(s) && !Te(s); ) {
|
|
3057
3066
|
if (Je(s))
|
|
3058
3067
|
return s;
|
|
3059
|
-
if (
|
|
3068
|
+
if (Me(s))
|
|
3060
3069
|
return null;
|
|
3061
3070
|
s = de(s);
|
|
3062
3071
|
}
|
|
@@ -3065,7 +3074,7 @@ function To(i) {
|
|
|
3065
3074
|
function et() {
|
|
3066
3075
|
return typeof CSS > "u" || !CSS.supports ? !1 : CSS.supports("-webkit-backdrop-filter", "none");
|
|
3067
3076
|
}
|
|
3068
|
-
function
|
|
3077
|
+
function Te(i) {
|
|
3069
3078
|
return ["html", "body", "#document"].includes(Re(i));
|
|
3070
3079
|
}
|
|
3071
3080
|
function j(i) {
|
|
@@ -3094,7 +3103,7 @@ function de(i) {
|
|
|
3094
3103
|
}
|
|
3095
3104
|
function Ct(i) {
|
|
3096
3105
|
const s = de(i);
|
|
3097
|
-
return
|
|
3106
|
+
return Te(s) ? i.ownerDocument ? i.ownerDocument.body : i.body : oe(s) && De(s) ? s : Ct(s);
|
|
3098
3107
|
}
|
|
3099
3108
|
function he(i, s, o) {
|
|
3100
3109
|
var n;
|
|
@@ -3137,15 +3146,15 @@ function Ae(i) {
|
|
|
3137
3146
|
y: l
|
|
3138
3147
|
};
|
|
3139
3148
|
}
|
|
3140
|
-
const
|
|
3149
|
+
const No = /* @__PURE__ */ te(0);
|
|
3141
3150
|
function Bt(i) {
|
|
3142
3151
|
const s = z(i);
|
|
3143
|
-
return !et() || !s.visualViewport ?
|
|
3152
|
+
return !et() || !s.visualViewport ? No : {
|
|
3144
3153
|
x: s.visualViewport.offsetLeft,
|
|
3145
3154
|
y: s.visualViewport.offsetTop
|
|
3146
3155
|
};
|
|
3147
3156
|
}
|
|
3148
|
-
function
|
|
3157
|
+
function _o(i, s, o) {
|
|
3149
3158
|
return s === void 0 && (s = !1), !o || s && o !== z(i) ? !1 : s;
|
|
3150
3159
|
}
|
|
3151
3160
|
function Ee(i, s, o, n) {
|
|
@@ -3153,19 +3162,19 @@ function Ee(i, s, o, n) {
|
|
|
3153
3162
|
const a = i.getBoundingClientRect(), d = tt(i);
|
|
3154
3163
|
let r = te(1);
|
|
3155
3164
|
s && (n ? q(n) && (r = Ae(n)) : r = Ae(i));
|
|
3156
|
-
const l =
|
|
3157
|
-
let u = (a.left + l.x) / r.x, O = (a.top + l.y) / r.y,
|
|
3165
|
+
const l = _o(d, o, n) ? Bt(d) : te(0);
|
|
3166
|
+
let u = (a.left + l.x) / r.x, O = (a.top + l.y) / r.y, L = a.width / r.x, R = a.height / r.y;
|
|
3158
3167
|
if (d) {
|
|
3159
3168
|
const A = z(d), f = n && q(n) ? z(n) : n;
|
|
3160
3169
|
let m = A, N = $e(m);
|
|
3161
3170
|
for (; N && n && f !== m; ) {
|
|
3162
3171
|
const I = Ae(N), T = N.getBoundingClientRect(), g = j(N), h = T.left + (N.clientLeft + parseFloat(g.paddingLeft)) * I.x, b = T.top + (N.clientTop + parseFloat(g.paddingTop)) * I.y;
|
|
3163
|
-
u *= I.x, O *= I.y,
|
|
3172
|
+
u *= I.x, O *= I.y, L *= I.x, R *= I.y, u += h, O += b, m = z(N), N = $e(m);
|
|
3164
3173
|
}
|
|
3165
3174
|
}
|
|
3166
3175
|
return Pe({
|
|
3167
|
-
width:
|
|
3168
|
-
height:
|
|
3176
|
+
width: L,
|
|
3177
|
+
height: R,
|
|
3169
3178
|
x: u,
|
|
3170
3179
|
y: O
|
|
3171
3180
|
});
|
|
@@ -3185,37 +3194,37 @@ function Ut(i, s, o) {
|
|
|
3185
3194
|
y: d
|
|
3186
3195
|
};
|
|
3187
3196
|
}
|
|
3188
|
-
function
|
|
3197
|
+
function Fo(i) {
|
|
3189
3198
|
let {
|
|
3190
3199
|
elements: s,
|
|
3191
3200
|
rect: o,
|
|
3192
3201
|
offsetParent: n,
|
|
3193
3202
|
strategy: a
|
|
3194
3203
|
} = i;
|
|
3195
|
-
const d = a === "fixed", r = ie(n), l = s ?
|
|
3204
|
+
const d = a === "fixed", r = ie(n), l = s ? Me(s.floating) : !1;
|
|
3196
3205
|
if (n === r || l && d)
|
|
3197
3206
|
return o;
|
|
3198
3207
|
let u = {
|
|
3199
3208
|
scrollLeft: 0,
|
|
3200
3209
|
scrollTop: 0
|
|
3201
3210
|
}, O = te(1);
|
|
3202
|
-
const
|
|
3203
|
-
if ((
|
|
3211
|
+
const L = te(0), R = oe(n);
|
|
3212
|
+
if ((R || !R && !d) && ((Re(n) !== "body" || De(r)) && (u = Ye(n)), oe(n))) {
|
|
3204
3213
|
const f = Ee(n);
|
|
3205
|
-
O = Ae(n),
|
|
3214
|
+
O = Ae(n), L.x = f.x + n.clientLeft, L.y = f.y + n.clientTop;
|
|
3206
3215
|
}
|
|
3207
|
-
const A = r && !
|
|
3216
|
+
const A = r && !R && !d ? Ut(r, u, !0) : te(0);
|
|
3208
3217
|
return {
|
|
3209
3218
|
width: o.width * O.x,
|
|
3210
3219
|
height: o.height * O.y,
|
|
3211
|
-
x: o.x * O.x - u.scrollLeft * O.x +
|
|
3212
|
-
y: o.y * O.y - u.scrollTop * O.y +
|
|
3220
|
+
x: o.x * O.x - u.scrollLeft * O.x + L.x + A.x,
|
|
3221
|
+
y: o.y * O.y - u.scrollTop * O.y + L.y + A.y
|
|
3213
3222
|
};
|
|
3214
3223
|
}
|
|
3215
|
-
function
|
|
3224
|
+
function So(i) {
|
|
3216
3225
|
return Array.from(i.getClientRects());
|
|
3217
3226
|
}
|
|
3218
|
-
function
|
|
3227
|
+
function ho(i) {
|
|
3219
3228
|
const s = ie(i), o = Ye(i), n = i.ownerDocument.body, a = ue(s.scrollWidth, s.clientWidth, n.scrollWidth, n.clientWidth), d = ue(s.scrollHeight, s.clientHeight, n.scrollHeight, n.clientHeight);
|
|
3220
3229
|
let r = -o.scrollLeft + st(i);
|
|
3221
3230
|
const l = -o.scrollTop;
|
|
@@ -3226,7 +3235,7 @@ function Fo(i) {
|
|
|
3226
3235
|
y: l
|
|
3227
3236
|
};
|
|
3228
3237
|
}
|
|
3229
|
-
function
|
|
3238
|
+
function Do(i, s) {
|
|
3230
3239
|
const o = z(i), n = ie(i), a = o.visualViewport;
|
|
3231
3240
|
let d = n.clientWidth, r = n.clientHeight, l = 0, u = 0;
|
|
3232
3241
|
if (a) {
|
|
@@ -3241,7 +3250,7 @@ function So(i, s) {
|
|
|
3241
3250
|
y: u
|
|
3242
3251
|
};
|
|
3243
3252
|
}
|
|
3244
|
-
function
|
|
3253
|
+
function yo(i, s) {
|
|
3245
3254
|
const o = Ee(i, !0, s === "fixed"), n = o.top + i.clientTop, a = o.left + i.clientLeft, d = oe(i) ? Ae(i) : te(1), r = i.clientWidth * d.x, l = i.clientHeight * d.y, u = a * d.x, O = n * d.y;
|
|
3246
3255
|
return {
|
|
3247
3256
|
width: r,
|
|
@@ -3253,11 +3262,11 @@ function ho(i, s) {
|
|
|
3253
3262
|
function Ot(i, s, o) {
|
|
3254
3263
|
let n;
|
|
3255
3264
|
if (s === "viewport")
|
|
3256
|
-
n =
|
|
3265
|
+
n = Do(i, o);
|
|
3257
3266
|
else if (s === "document")
|
|
3258
|
-
n =
|
|
3267
|
+
n = ho(ie(i));
|
|
3259
3268
|
else if (q(s))
|
|
3260
|
-
n =
|
|
3269
|
+
n = yo(s, o);
|
|
3261
3270
|
else {
|
|
3262
3271
|
const a = Bt(i);
|
|
3263
3272
|
n = {
|
|
@@ -3271,31 +3280,31 @@ function Ot(i, s, o) {
|
|
|
3271
3280
|
}
|
|
3272
3281
|
function Pt(i, s) {
|
|
3273
3282
|
const o = de(i);
|
|
3274
|
-
return o === s || !q(o) ||
|
|
3283
|
+
return o === s || !q(o) || Te(o) ? !1 : j(o).position === "fixed" || Pt(o, s);
|
|
3275
3284
|
}
|
|
3276
|
-
function
|
|
3285
|
+
function Co(i, s) {
|
|
3277
3286
|
const o = s.get(i);
|
|
3278
3287
|
if (o)
|
|
3279
3288
|
return o;
|
|
3280
3289
|
let n = he(i, [], !1).filter((l) => q(l) && Re(l) !== "body"), a = null;
|
|
3281
3290
|
const d = j(i).position === "fixed";
|
|
3282
3291
|
let r = d ? de(i) : i;
|
|
3283
|
-
for (; q(r) && !
|
|
3292
|
+
for (; q(r) && !Te(r); ) {
|
|
3284
3293
|
const l = j(r), u = Je(r);
|
|
3285
|
-
!u && l.position === "fixed" && (a = null), (d ? !u && !a : !u && l.position === "static" && !!a && ["absolute", "fixed"].includes(a.position) || De(r) && !u && Pt(i, r)) ? n = n.filter((
|
|
3294
|
+
!u && l.position === "fixed" && (a = null), (d ? !u && !a : !u && l.position === "static" && !!a && ["absolute", "fixed"].includes(a.position) || De(r) && !u && Pt(i, r)) ? n = n.filter((L) => L !== r) : a = l, r = de(r);
|
|
3286
3295
|
}
|
|
3287
3296
|
return s.set(i, n), n;
|
|
3288
3297
|
}
|
|
3289
|
-
function
|
|
3298
|
+
function bo(i) {
|
|
3290
3299
|
let {
|
|
3291
3300
|
element: s,
|
|
3292
3301
|
boundary: o,
|
|
3293
3302
|
rootBoundary: n,
|
|
3294
3303
|
strategy: a
|
|
3295
3304
|
} = i;
|
|
3296
|
-
const r = [...o === "clippingAncestors" ?
|
|
3297
|
-
const
|
|
3298
|
-
return O.top = ue(
|
|
3305
|
+
const r = [...o === "clippingAncestors" ? Me(s) ? [] : Co(s, this._c) : [].concat(o), n], l = r[0], u = r.reduce((O, L) => {
|
|
3306
|
+
const R = Ot(s, L, a);
|
|
3307
|
+
return O.top = ue(R.top, O.top), O.right = Be(R.right, O.right), O.bottom = Be(R.bottom, O.bottom), O.left = ue(R.left, O.left), O;
|
|
3299
3308
|
}, Ot(s, l, a));
|
|
3300
3309
|
return {
|
|
3301
3310
|
width: u.right - u.left,
|
|
@@ -3304,7 +3313,7 @@ function yo(i) {
|
|
|
3304
3313
|
y: u.top
|
|
3305
3314
|
};
|
|
3306
3315
|
}
|
|
3307
|
-
function
|
|
3316
|
+
function Bo(i) {
|
|
3308
3317
|
const {
|
|
3309
3318
|
width: s,
|
|
3310
3319
|
height: o
|
|
@@ -3314,7 +3323,7 @@ function Co(i) {
|
|
|
3314
3323
|
height: o
|
|
3315
3324
|
};
|
|
3316
3325
|
}
|
|
3317
|
-
function
|
|
3326
|
+
function Uo(i, s, o) {
|
|
3318
3327
|
const n = oe(s), a = ie(s), d = o === "fixed", r = Ee(i, !0, d, s);
|
|
3319
3328
|
let l = {
|
|
3320
3329
|
scrollLeft: 0,
|
|
@@ -3327,10 +3336,10 @@ function bo(i, s, o) {
|
|
|
3327
3336
|
u.x = A.x + s.clientLeft, u.y = A.y + s.clientTop;
|
|
3328
3337
|
} else
|
|
3329
3338
|
a && (u.x = st(a));
|
|
3330
|
-
const O = a && !n && !d ? Ut(a, l) : te(0),
|
|
3339
|
+
const O = a && !n && !d ? Ut(a, l) : te(0), L = r.left + l.scrollLeft - u.x - O.x, R = r.top + l.scrollTop - u.y - O.y;
|
|
3331
3340
|
return {
|
|
3332
|
-
x:
|
|
3333
|
-
y:
|
|
3341
|
+
x: L,
|
|
3342
|
+
y: R,
|
|
3334
3343
|
width: r.width,
|
|
3335
3344
|
height: r.height
|
|
3336
3345
|
};
|
|
@@ -3348,11 +3357,11 @@ function Lt(i, s) {
|
|
|
3348
3357
|
}
|
|
3349
3358
|
function Gt(i, s) {
|
|
3350
3359
|
const o = z(i);
|
|
3351
|
-
if (
|
|
3360
|
+
if (Me(i))
|
|
3352
3361
|
return o;
|
|
3353
3362
|
if (!oe(i)) {
|
|
3354
3363
|
let a = de(i);
|
|
3355
|
-
for (; a && !
|
|
3364
|
+
for (; a && !Te(a); ) {
|
|
3356
3365
|
if (q(a) && !Xe(a))
|
|
3357
3366
|
return a;
|
|
3358
3367
|
a = de(a);
|
|
@@ -3360,14 +3369,14 @@ function Gt(i, s) {
|
|
|
3360
3369
|
return o;
|
|
3361
3370
|
}
|
|
3362
3371
|
let n = Lt(i, s);
|
|
3363
|
-
for (; n &&
|
|
3372
|
+
for (; n && go(n) && Xe(n); )
|
|
3364
3373
|
n = Lt(n, s);
|
|
3365
|
-
return n &&
|
|
3374
|
+
return n && Te(n) && Xe(n) && !Je(n) ? o : n || mo(i) || o;
|
|
3366
3375
|
}
|
|
3367
|
-
const
|
|
3376
|
+
const Po = async function(i) {
|
|
3368
3377
|
const s = this.getOffsetParent || Gt, o = this.getDimensions, n = await o(i.floating);
|
|
3369
3378
|
return {
|
|
3370
|
-
reference:
|
|
3379
|
+
reference: Uo(i.reference, await s(i.floating), i.strategy),
|
|
3371
3380
|
floating: {
|
|
3372
3381
|
x: 0,
|
|
3373
3382
|
y: 0,
|
|
@@ -3376,25 +3385,25 @@ const Bo = async function(i) {
|
|
|
3376
3385
|
}
|
|
3377
3386
|
};
|
|
3378
3387
|
};
|
|
3379
|
-
function
|
|
3388
|
+
function Go(i) {
|
|
3380
3389
|
return j(i).direction === "rtl";
|
|
3381
3390
|
}
|
|
3382
|
-
const
|
|
3383
|
-
convertOffsetParentRelativeRectToViewportRelativeRect:
|
|
3391
|
+
const wo = {
|
|
3392
|
+
convertOffsetParentRelativeRectToViewportRelativeRect: Fo,
|
|
3384
3393
|
getDocumentElement: ie,
|
|
3385
|
-
getClippingRect:
|
|
3394
|
+
getClippingRect: bo,
|
|
3386
3395
|
getOffsetParent: Gt,
|
|
3387
|
-
getElementRects:
|
|
3388
|
-
getClientRects:
|
|
3389
|
-
getDimensions:
|
|
3396
|
+
getElementRects: Po,
|
|
3397
|
+
getClientRects: So,
|
|
3398
|
+
getDimensions: Bo,
|
|
3390
3399
|
getScale: Ae,
|
|
3391
3400
|
isElement: q,
|
|
3392
|
-
isRTL:
|
|
3401
|
+
isRTL: Go
|
|
3393
3402
|
};
|
|
3394
3403
|
function wt(i, s) {
|
|
3395
3404
|
return i.x === s.x && i.y === s.y && i.width === s.width && i.height === s.height;
|
|
3396
3405
|
}
|
|
3397
|
-
function
|
|
3406
|
+
function Ho(i, s) {
|
|
3398
3407
|
let o = null, n;
|
|
3399
3408
|
const a = ie(i);
|
|
3400
3409
|
function d() {
|
|
@@ -3404,14 +3413,14 @@ function Go(i, s) {
|
|
|
3404
3413
|
function r(l, u) {
|
|
3405
3414
|
l === void 0 && (l = !1), u === void 0 && (u = 1), d();
|
|
3406
3415
|
const O = i.getBoundingClientRect(), {
|
|
3407
|
-
left:
|
|
3408
|
-
top:
|
|
3416
|
+
left: L,
|
|
3417
|
+
top: R,
|
|
3409
3418
|
width: A,
|
|
3410
3419
|
height: f
|
|
3411
3420
|
} = O;
|
|
3412
3421
|
if (l || s(), !A || !f)
|
|
3413
3422
|
return;
|
|
3414
|
-
const m = Ce(
|
|
3423
|
+
const m = Ce(R), N = Ce(a.clientWidth - (L + A)), I = Ce(a.clientHeight - (R + f)), T = Ce(L), h = {
|
|
3415
3424
|
rootMargin: -m + "px " + -N + "px " + -I + "px " + -T + "px",
|
|
3416
3425
|
threshold: ue(0, Be(1, u)) || 1
|
|
3417
3426
|
};
|
|
@@ -3440,7 +3449,7 @@ function Go(i, s) {
|
|
|
3440
3449
|
}
|
|
3441
3450
|
return r(!0), d;
|
|
3442
3451
|
}
|
|
3443
|
-
function
|
|
3452
|
+
function xo(i, s, o, n) {
|
|
3444
3453
|
n === void 0 && (n = {});
|
|
3445
3454
|
const {
|
|
3446
3455
|
ancestorScroll: a = !0,
|
|
@@ -3448,13 +3457,13 @@ function wo(i, s, o, n) {
|
|
|
3448
3457
|
elementResize: r = typeof ResizeObserver == "function",
|
|
3449
3458
|
layoutShift: l = typeof IntersectionObserver == "function",
|
|
3450
3459
|
animationFrame: u = !1
|
|
3451
|
-
} = n, O = tt(i),
|
|
3452
|
-
|
|
3460
|
+
} = n, O = tt(i), L = a || d ? [...O ? he(O) : [], ...he(s)] : [];
|
|
3461
|
+
L.forEach((T) => {
|
|
3453
3462
|
a && T.addEventListener("scroll", o, {
|
|
3454
3463
|
passive: !0
|
|
3455
3464
|
}), d && T.addEventListener("resize", o);
|
|
3456
3465
|
});
|
|
3457
|
-
const
|
|
3466
|
+
const R = O && l ? Ho(O, o) : null;
|
|
3458
3467
|
let A = -1, f = null;
|
|
3459
3468
|
r && (f = new ResizeObserver((T) => {
|
|
3460
3469
|
let [g] = T;
|
|
@@ -3471,35 +3480,35 @@ function wo(i, s, o, n) {
|
|
|
3471
3480
|
}
|
|
3472
3481
|
return o(), () => {
|
|
3473
3482
|
var T;
|
|
3474
|
-
|
|
3483
|
+
L.forEach((g) => {
|
|
3475
3484
|
a && g.removeEventListener("scroll", o), d && g.removeEventListener("resize", o);
|
|
3476
|
-
}),
|
|
3485
|
+
}), R == null || R(), (T = f) == null || T.disconnect(), f = null, u && cancelAnimationFrame(m);
|
|
3477
3486
|
};
|
|
3478
3487
|
}
|
|
3479
|
-
const Rt =
|
|
3488
|
+
const Rt = Io, pt = fo, vt = To, ko = (i, s, o) => {
|
|
3480
3489
|
const n = /* @__PURE__ */ new Map(), a = {
|
|
3481
|
-
platform:
|
|
3490
|
+
platform: wo,
|
|
3482
3491
|
...o
|
|
3483
3492
|
}, d = {
|
|
3484
3493
|
...a.platform,
|
|
3485
3494
|
_c: n
|
|
3486
3495
|
};
|
|
3487
|
-
return
|
|
3496
|
+
return po(i, s, {
|
|
3488
3497
|
...a,
|
|
3489
3498
|
platform: d
|
|
3490
3499
|
});
|
|
3491
3500
|
};
|
|
3492
|
-
function
|
|
3501
|
+
function Mo(i) {
|
|
3493
3502
|
return i != null && typeof i == "object" && "$el" in i;
|
|
3494
3503
|
}
|
|
3495
3504
|
function ft(i) {
|
|
3496
|
-
if (
|
|
3505
|
+
if (Mo(i)) {
|
|
3497
3506
|
const s = i.$el;
|
|
3498
3507
|
return je(s) && Re(s) === "#comment" ? null : s;
|
|
3499
3508
|
}
|
|
3500
3509
|
return i;
|
|
3501
3510
|
}
|
|
3502
|
-
function
|
|
3511
|
+
function Fe(i) {
|
|
3503
3512
|
return typeof i == "function" ? i() : e(i);
|
|
3504
3513
|
}
|
|
3505
3514
|
function Ht(i) {
|
|
@@ -3509,33 +3518,33 @@ function At(i, s) {
|
|
|
3509
3518
|
const o = Ht(i);
|
|
3510
3519
|
return Math.round(s * o) / o;
|
|
3511
3520
|
}
|
|
3512
|
-
function
|
|
3521
|
+
function Yo(i, s, o) {
|
|
3513
3522
|
o === void 0 && (o = {});
|
|
3514
3523
|
const n = o.whileElementsMounted, a = U(() => {
|
|
3515
3524
|
var y;
|
|
3516
|
-
return (y =
|
|
3517
|
-
}), d = U(() =>
|
|
3525
|
+
return (y = Fe(o.open)) != null ? y : !0;
|
|
3526
|
+
}), d = U(() => Fe(o.middleware)), r = U(() => {
|
|
3518
3527
|
var y;
|
|
3519
|
-
return (y =
|
|
3528
|
+
return (y = Fe(o.placement)) != null ? y : "bottom";
|
|
3520
3529
|
}), l = U(() => {
|
|
3521
3530
|
var y;
|
|
3522
|
-
return (y =
|
|
3531
|
+
return (y = Fe(o.strategy)) != null ? y : "absolute";
|
|
3523
3532
|
}), u = U(() => {
|
|
3524
3533
|
var y;
|
|
3525
|
-
return (y =
|
|
3526
|
-
}), O = U(() => ft(i.value)),
|
|
3534
|
+
return (y = Fe(o.transform)) != null ? y : !0;
|
|
3535
|
+
}), O = U(() => ft(i.value)), L = U(() => ft(s.value)), R = _(0), A = _(0), f = _(l.value), m = _(r.value), N = Kt({}), I = _(!1), T = U(() => {
|
|
3527
3536
|
const y = {
|
|
3528
3537
|
position: f.value,
|
|
3529
3538
|
left: "0",
|
|
3530
3539
|
top: "0"
|
|
3531
3540
|
};
|
|
3532
|
-
if (!
|
|
3541
|
+
if (!L.value)
|
|
3533
3542
|
return y;
|
|
3534
|
-
const B = At(
|
|
3543
|
+
const B = At(L.value, R.value), X = At(L.value, A.value);
|
|
3535
3544
|
return u.value ? {
|
|
3536
3545
|
...y,
|
|
3537
3546
|
transform: "translate(" + B + "px, " + X + "px)",
|
|
3538
|
-
...Ht(
|
|
3547
|
+
...Ht(L.value) >= 1.5 && {
|
|
3539
3548
|
willChange: "transform"
|
|
3540
3549
|
}
|
|
3541
3550
|
} : {
|
|
@@ -3546,15 +3555,15 @@ function Mo(i, s, o) {
|
|
|
3546
3555
|
});
|
|
3547
3556
|
let g;
|
|
3548
3557
|
function h() {
|
|
3549
|
-
if (O.value == null ||
|
|
3558
|
+
if (O.value == null || L.value == null)
|
|
3550
3559
|
return;
|
|
3551
3560
|
const y = a.value;
|
|
3552
|
-
|
|
3561
|
+
ko(O.value, L.value, {
|
|
3553
3562
|
middleware: d.value,
|
|
3554
3563
|
placement: r.value,
|
|
3555
3564
|
strategy: l.value
|
|
3556
3565
|
}).then((B) => {
|
|
3557
|
-
|
|
3566
|
+
R.value = B.x, A.value = B.y, f.value = B.strategy, m.value = B.placement, N.value = B.middlewareData, I.value = y !== !1;
|
|
3558
3567
|
});
|
|
3559
3568
|
}
|
|
3560
3569
|
function b() {
|
|
@@ -3565,8 +3574,8 @@ function Mo(i, s, o) {
|
|
|
3565
3574
|
h();
|
|
3566
3575
|
return;
|
|
3567
3576
|
}
|
|
3568
|
-
if (O.value != null &&
|
|
3569
|
-
g = n(O.value,
|
|
3577
|
+
if (O.value != null && L.value != null) {
|
|
3578
|
+
g = n(O.value, L.value, h);
|
|
3570
3579
|
return;
|
|
3571
3580
|
}
|
|
3572
3581
|
}
|
|
@@ -3575,12 +3584,12 @@ function Mo(i, s, o) {
|
|
|
3575
3584
|
}
|
|
3576
3585
|
return K([d, r, l, a], h, {
|
|
3577
3586
|
flush: "sync"
|
|
3578
|
-
}), K([O,
|
|
3587
|
+
}), K([O, L], S, {
|
|
3579
3588
|
flush: "sync"
|
|
3580
3589
|
}), K(a, x, {
|
|
3581
3590
|
flush: "sync"
|
|
3582
|
-
}),
|
|
3583
|
-
x: ve(
|
|
3591
|
+
}), zt() && Qt(b), {
|
|
3592
|
+
x: ve(R),
|
|
3584
3593
|
y: ve(A),
|
|
3585
3594
|
strategy: ve(f),
|
|
3586
3595
|
placement: ve(m),
|
|
@@ -3590,20 +3599,20 @@ function Mo(i, s, o) {
|
|
|
3590
3599
|
update: h
|
|
3591
3600
|
};
|
|
3592
3601
|
}
|
|
3593
|
-
const
|
|
3602
|
+
const Wo = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.target)), Xo = /* @__PURE__ */ C({
|
|
3594
3603
|
__name: "TidePopover",
|
|
3595
3604
|
props: {
|
|
3596
3605
|
anchorId: {},
|
|
3597
3606
|
offset: { default: 16 }
|
|
3598
3607
|
},
|
|
3599
3608
|
setup(i) {
|
|
3600
|
-
const s = i, o = _(null), n = _(null), a = _(null), d = _(!1), r = _(!1), l = _([pt(), Rt({ mainAxis: s.offset }), vt({ padding: 16 })]), u = U(() => d.value || r.value), { floatingStyles: O } =
|
|
3609
|
+
const s = i, o = _(null), n = _(null), a = _(null), d = _(!1), r = _(!1), l = _([pt(), Rt({ mainAxis: s.offset }), vt({ padding: 16 })]), u = U(() => d.value || r.value), { floatingStyles: O } = Yo(o, n, {
|
|
3601
3610
|
middleware: l,
|
|
3602
3611
|
strategy: "fixed",
|
|
3603
|
-
whileElementsMounted:
|
|
3604
|
-
}),
|
|
3605
|
-
!o.value || !n.value ||
|
|
3606
|
-
},
|
|
3612
|
+
whileElementsMounted: xo
|
|
3613
|
+
}), L = (b) => {
|
|
3614
|
+
!o.value || !n.value || Wo(b, [o.value, n.value]) && (b.stopImmediatePropagation(), r.value = !1);
|
|
3615
|
+
}, R = () => {
|
|
3607
3616
|
d.value = !0;
|
|
3608
3617
|
}, A = () => {
|
|
3609
3618
|
d.value = !1;
|
|
@@ -3612,17 +3621,17 @@ const ko = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3612
3621
|
}, m = () => {
|
|
3613
3622
|
if (!o.value)
|
|
3614
3623
|
return null;
|
|
3615
|
-
o.value.addEventListener("mouseover",
|
|
3624
|
+
o.value.addEventListener("mouseover", R), o.value.addEventListener("mouseleave", A), o.value.addEventListener("click", f);
|
|
3616
3625
|
}, N = () => {
|
|
3617
3626
|
if (!o.value)
|
|
3618
3627
|
return null;
|
|
3619
|
-
o.value.removeEventListener("mouseover",
|
|
3628
|
+
o.value.removeEventListener("mouseover", R), o.value.removeEventListener("mouseleave", A), o.value.removeEventListener("click", f);
|
|
3620
3629
|
}, I = (b) => {
|
|
3621
3630
|
b.key === "Escape" && (r.value = !1);
|
|
3622
3631
|
}, T = () => {
|
|
3623
|
-
a.value && (a.value.addEventListener("click",
|
|
3632
|
+
a.value && (a.value.addEventListener("click", L, !0), a.value.addEventListener("keydown", I));
|
|
3624
3633
|
}, g = () => {
|
|
3625
|
-
a.value && (a.value.removeEventListener("click",
|
|
3634
|
+
a.value && (a.value.removeEventListener("click", L, !0), a.value.removeEventListener("keydown", I));
|
|
3626
3635
|
}, h = () => {
|
|
3627
3636
|
o.value = document.getElementById(s.anchorId);
|
|
3628
3637
|
};
|
|
@@ -3636,7 +3645,7 @@ const ko = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3636
3645
|
() => {
|
|
3637
3646
|
N(), h(), m();
|
|
3638
3647
|
}
|
|
3639
|
-
),
|
|
3648
|
+
), Zt(() => {
|
|
3640
3649
|
l.value = [pt(), Rt({ mainAxis: s.offset }), vt({ padding: 16 })];
|
|
3641
3650
|
}), gt(() => {
|
|
3642
3651
|
Ft();
|
|
@@ -3647,7 +3656,7 @@ const ko = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3647
3656
|
}), (b, S) => (E(), P(mt, {
|
|
3648
3657
|
to: `#${e(be)}`
|
|
3649
3658
|
}, [
|
|
3650
|
-
|
|
3659
|
+
M(qt, null, {
|
|
3651
3660
|
default: Le(() => [
|
|
3652
3661
|
we(v("div", {
|
|
3653
3662
|
class: c([
|
|
@@ -3666,7 +3675,7 @@ const ko = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3666
3675
|
}, [
|
|
3667
3676
|
V(b.$slots, "default", {}, void 0, !0)
|
|
3668
3677
|
], 6), [
|
|
3669
|
-
[
|
|
3678
|
+
[jt, u.value]
|
|
3670
3679
|
])
|
|
3671
3680
|
]),
|
|
3672
3681
|
_: 3
|
|
@@ -3674,7 +3683,7 @@ const ko = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3674
3683
|
], 8, ["to"]));
|
|
3675
3684
|
}
|
|
3676
3685
|
});
|
|
3677
|
-
const
|
|
3686
|
+
const Ni = /* @__PURE__ */ w(Xo, [["__scopeId", "data-v-d3e831ff"]]), Vo = { class: "tide-seo-links" }, $o = ["href", "target"], Ko = /* @__PURE__ */ C({
|
|
3678
3687
|
__name: "TideSeoLinks",
|
|
3679
3688
|
props: {
|
|
3680
3689
|
heading: { default: "" },
|
|
@@ -3682,7 +3691,7 @@ const gi = /* @__PURE__ */ w(Yo, [["__scopeId", "data-v-d3e831ff"]]), Wo = { cla
|
|
|
3682
3691
|
},
|
|
3683
3692
|
setup(i) {
|
|
3684
3693
|
const s = i;
|
|
3685
|
-
return (o, n) => (E(), p("section",
|
|
3694
|
+
return (o, n) => (E(), p("section", Vo, [
|
|
3686
3695
|
v("h2", {
|
|
3687
3696
|
class: c([e(t).MARGIN.BOTTOM.HALF])
|
|
3688
3697
|
}, D(s.heading), 3),
|
|
@@ -3697,13 +3706,13 @@ const gi = /* @__PURE__ */ w(Yo, [["__scopeId", "data-v-d3e831ff"]]), Wo = { cla
|
|
|
3697
3706
|
class: c([e(t).UNDERLINE.REST.OFF]),
|
|
3698
3707
|
href: a.url,
|
|
3699
3708
|
target: a.isNewTab ? e(se).BLANK : e(se).SELF
|
|
3700
|
-
}, D(a.label), 11,
|
|
3709
|
+
}, D(a.label), 11, $o)
|
|
3701
3710
|
], 2))), 128))
|
|
3702
3711
|
], 2)
|
|
3703
3712
|
]));
|
|
3704
3713
|
}
|
|
3705
3714
|
});
|
|
3706
|
-
const
|
|
3715
|
+
const _i = /* @__PURE__ */ w(Ko, [["__scopeId", "data-v-e655eb08"]]), zo = /* @__PURE__ */ C({
|
|
3707
3716
|
__name: "TideSheet",
|
|
3708
3717
|
props: {
|
|
3709
3718
|
isOpen: { type: Boolean },
|
|
@@ -3734,7 +3743,7 @@ const mi = /* @__PURE__ */ w(Vo, [["__scopeId", "data-v-e655eb08"]]), $o = /* @_
|
|
|
3734
3743
|
class: c(["tide-sheet", e(t).BG.INITIAL, e(t).HEIGHT.FULL, e(t).WIDTH.FULL, e(t).OVERFLOW.XY.HIDDEN]),
|
|
3735
3744
|
ref_key: "dialogElement",
|
|
3736
3745
|
ref: n,
|
|
3737
|
-
onClick: l[1] || (l[1] =
|
|
3746
|
+
onClick: l[1] || (l[1] = Ie((u) => s("close"), ["self"])),
|
|
3738
3747
|
onClose: l[2] || (l[2] = (u) => s("close"))
|
|
3739
3748
|
}, [
|
|
3740
3749
|
v("div", {
|
|
@@ -3758,14 +3767,14 @@ const mi = /* @__PURE__ */ w(Vo, [["__scopeId", "data-v-e655eb08"]]), $o = /* @_
|
|
|
3758
3767
|
priority: e($).QUATERNARY,
|
|
3759
3768
|
onClick: l[0] || (l[0] = (u) => s("back"))
|
|
3760
3769
|
}, null, 8, ["class", "icon", "priority"])) : F("", !0),
|
|
3761
|
-
|
|
3770
|
+
M(Z, {
|
|
3762
3771
|
class: c([e(t).FLEX.GROW.OFF, e(t).FLEX.SHRINK.OFF, e(t).MARGIN.LEFT.AUTO]),
|
|
3763
3772
|
icon: e(G).CLOSE,
|
|
3764
3773
|
priority: e($).QUATERNARY,
|
|
3765
3774
|
onClick: d
|
|
3766
3775
|
}, null, 8, ["class", "icon", "priority"])
|
|
3767
3776
|
], 2),
|
|
3768
|
-
|
|
3777
|
+
M(Ve),
|
|
3769
3778
|
v("div", {
|
|
3770
3779
|
class: c([
|
|
3771
3780
|
"tide-sheet-content",
|
|
@@ -3783,7 +3792,7 @@ const mi = /* @__PURE__ */ w(Vo, [["__scopeId", "data-v-e655eb08"]]), $o = /* @_
|
|
|
3783
3792
|
], 8, ["to"]));
|
|
3784
3793
|
}
|
|
3785
3794
|
});
|
|
3786
|
-
const
|
|
3795
|
+
const Fi = /* @__PURE__ */ w(zo, [["__scopeId", "data-v-57dc17f8"]]), Qo = ["disabled"], Zo = /* @__PURE__ */ C({
|
|
3787
3796
|
__name: "TideSwitch",
|
|
3788
3797
|
props: {
|
|
3789
3798
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -3821,19 +3830,19 @@ const Ni = /* @__PURE__ */ w($o, [["__scopeId", "data-v-57dc17f8"]]), Ko = ["dis
|
|
|
3821
3830
|
o.isActive ? e(t).BG.SURFACE.DEFAULT : e(t).BG.SECONDARY
|
|
3822
3831
|
])
|
|
3823
3832
|
}, [
|
|
3824
|
-
|
|
3833
|
+
M(H, {
|
|
3825
3834
|
icon: e(G).CHECK,
|
|
3826
3835
|
size: e(Y).LARGE
|
|
3827
3836
|
}, null, 8, ["icon", "size"])
|
|
3828
3837
|
], 2)
|
|
3829
|
-
], 10,
|
|
3838
|
+
], 10, Qo));
|
|
3830
3839
|
}
|
|
3831
3840
|
});
|
|
3832
|
-
const
|
|
3841
|
+
const Si = /* @__PURE__ */ w(Zo, [["__scopeId", "data-v-9bdb658a"]]), hi = {
|
|
3833
3842
|
NUMBER: ze,
|
|
3834
|
-
PHONE:
|
|
3835
|
-
PRICE:
|
|
3836
|
-
},
|
|
3843
|
+
PHONE: os,
|
|
3844
|
+
PRICE: is
|
|
3845
|
+
}, Se = {
|
|
3837
3846
|
alpha: /^[a-zA-Z]+$/g,
|
|
3838
3847
|
alphaNumberOrEmpty: /^$|^[a-z0-9]+$/i,
|
|
3839
3848
|
alphaSpace: /^[a-zA-Z ]+$/g,
|
|
@@ -3841,75 +3850,75 @@ const _i = /* @__PURE__ */ w(zo, [["__scopeId", "data-v-9bdb658a"]]), Fi = {
|
|
|
3841
3850
|
numberFormatted: /^$|(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/,
|
|
3842
3851
|
phone: /^(?:\d{3}-\d{3}-\d{4}|\d{1}-\d{3}-\d{3}-\d{4})?$/,
|
|
3843
3852
|
price: /(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/
|
|
3844
|
-
},
|
|
3853
|
+
}, Di = {
|
|
3845
3854
|
IMAGE: {
|
|
3846
3855
|
FLOORPLAN: "floorplan",
|
|
3847
3856
|
IMAGE: "image"
|
|
3848
3857
|
},
|
|
3849
3858
|
VIDEO: "video",
|
|
3850
3859
|
VR: "vr"
|
|
3851
|
-
},
|
|
3852
|
-
ALPHA_NUMBER_EMPTY:
|
|
3853
|
-
ALPHA_SPACE:
|
|
3854
|
-
EMAIL:
|
|
3855
|
-
NUMBER:
|
|
3856
|
-
PHONE:
|
|
3860
|
+
}, yi = {
|
|
3861
|
+
ALPHA_NUMBER_EMPTY: Ne(Se.alphaNumberOrEmpty),
|
|
3862
|
+
ALPHA_SPACE: Ne(Se.alphaSpace),
|
|
3863
|
+
EMAIL: Ne(Se.email),
|
|
3864
|
+
NUMBER: Ne(Se.numberFormatted),
|
|
3865
|
+
PHONE: Ne(Se.phone)
|
|
3857
3866
|
};
|
|
3858
3867
|
export {
|
|
3859
3868
|
ae as ALERT,
|
|
3860
|
-
|
|
3861
|
-
|
|
3869
|
+
ls as BADGE_TRUSTED,
|
|
3870
|
+
io as BREAKPOINT,
|
|
3862
3871
|
t as CSS,
|
|
3863
|
-
|
|
3872
|
+
k as ELEMENT,
|
|
3864
3873
|
re as ELEMENT_TEXT_AS_ICON,
|
|
3865
|
-
|
|
3866
|
-
|
|
3874
|
+
hi as FORMAT,
|
|
3875
|
+
Se as FORMAT_REGEX,
|
|
3867
3876
|
G as ICON,
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3877
|
+
jo as ICON_REALM,
|
|
3878
|
+
Ti as MEDIA,
|
|
3879
|
+
Di as MEDIA_SLIDE_TYPES,
|
|
3871
3880
|
fe as OBJECT_FIT,
|
|
3872
3881
|
it as ORIENTATION,
|
|
3873
3882
|
$ as PRIORITY,
|
|
3874
|
-
|
|
3883
|
+
ts as REALM,
|
|
3875
3884
|
Y as SIZE,
|
|
3876
|
-
|
|
3885
|
+
me as SIZE_BUTTON,
|
|
3877
3886
|
se as TARGET,
|
|
3878
|
-
|
|
3887
|
+
_e as TEXT_INPUT_TYPE,
|
|
3879
3888
|
ye as TYPE_CARD,
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
|
|
3885
|
-
|
|
3886
|
-
|
|
3889
|
+
Jo as TideAccordionItem,
|
|
3890
|
+
ei as TideAlert,
|
|
3891
|
+
ti as TideBadge,
|
|
3892
|
+
si as TideBadgeTrustedPartner,
|
|
3893
|
+
oi as TideBadgeVerifiedVehicle,
|
|
3894
|
+
ii as TideBreadCrumbs,
|
|
3895
|
+
ni as TideButton,
|
|
3887
3896
|
Z as TideButtonIcon,
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3897
|
+
Ls as TideButtonPagination,
|
|
3898
|
+
ai as TideButtonSegmented,
|
|
3899
|
+
ri as TideCard,
|
|
3900
|
+
li as TideCarousel,
|
|
3901
|
+
ci as TideChipAction,
|
|
3902
|
+
di as TideChipFilter,
|
|
3903
|
+
ui as TideChipInput,
|
|
3904
|
+
Ei as TideColumns,
|
|
3896
3905
|
Ve as TideDivider,
|
|
3897
3906
|
H as TideIcon,
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
3911
|
-
|
|
3912
|
-
|
|
3913
|
-
|
|
3907
|
+
ys as TideImage,
|
|
3908
|
+
Oi as TideImageBackground,
|
|
3909
|
+
Li as TideIndicator,
|
|
3910
|
+
Ri as TideInputCheckbox,
|
|
3911
|
+
pi as TideInputRadio,
|
|
3912
|
+
vi as TideInputSelect,
|
|
3913
|
+
fi as TideInputText,
|
|
3914
|
+
Ai as TideInputTextarea,
|
|
3915
|
+
Ii as TideLink,
|
|
3916
|
+
gi as TideModal,
|
|
3917
|
+
mi as TidePagination,
|
|
3918
|
+
Ni as TidePopover,
|
|
3919
|
+
_i as TideSeoLinks,
|
|
3920
|
+
Fi as TideSheet,
|
|
3921
|
+
Si as TideSwitch,
|
|
3922
|
+
yi as VALIDATOR
|
|
3914
3923
|
};
|
|
3915
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlkZS1kZXNpZ24tc3lzdGVtLmVzbS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzL09yaWVudGF0aW9uLnRzIiwiLi4vc3JjL3R5cGVzL1N0eWxlcy50cyIsIi4uL3NyYy90eXBlcy9SZWFsbS50cyIsIi4uL3NyYy90eXBlcy9TaXplLnRzIiwiLi4vc3JjL3V0aWxpdGllcy9mb3JtYXQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSWNvbi52dWUiLCIuLi9zcmMvdHlwZXMvSWNvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVBY2NvcmRpb25JdGVtLnZ1ZSIsIi4uL3NyYy90eXBlcy9FbGVtZW50LnRzIiwiLi4vc3JjL3R5cGVzL1ByaW9yaXR5LnRzIiwiLi4vc3JjL3R5cGVzL1RhcmdldC50cyIsIi4uL3NyYy90eXBlcy9BbGVydC50cyIsIi4uL3NyYy90eXBlcy9CYWRnZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVCdXR0b25TZWdtZW50ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0NhcmQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlQ2Fyb3VzZWwudnVlIiwiLi4vc3JjL3R5cGVzL0ltYWdlLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUltYWdlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dENoZWNrYm94LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dFJhZGlvLnZ1ZSIsIi4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dFNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVGV4dElucHV0LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUlucHV0VGV4dC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvQnJlYWtwb2ludC50cyIsIi4uL3NyYy91dGlsaXRpZXMvdmlld3BvcnQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlTW9kYWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZVBhZ2luYXRpb24udnVlIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3Z1ZS9kaXN0L2Zsb2F0aW5nLXVpLnZ1ZS5tanMiLCIuLi9zcmMvdXRpbGl0aWVzL2V2ZW50LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZVBvcG92ZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZVNoZWV0LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL0Zvcm1hdHRlZC50cyIsIi4uL3NyYy90eXBlcy9MaXN0aW5nTWVkaWEudHMiLCIuLi9zcmMvdHlwZXMvVmFsaWRhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1JJRU5UQVRJT04gPSB7XG4gIEhPUklaT05UQUw6ICdob3Jpem9udGFsJyxcbiAgVkVSVElDQUw6ICd2ZXJ0aWNhbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBPcmllbnRhdGlvbiA9ICh0eXBlb2YgT1JJRU5UQVRJT04pW2tleW9mIHR5cGVvZiBPUklFTlRBVElPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmltcG9ydCB0eXBlIHsgQnJlYWtwb2ludCB9IGZyb20gJ0AvdHlwZXMvQnJlYWtwb2ludCc7XG5cbmV4cG9ydCBjb25zdCBDU1MgPSB7XG4gIHdpdGhCcmVha3BvaW50OiAodXRpbGl0aWVzOiBzdHJpbmdbXSwgYnJlYWtwb2ludDogQnJlYWtwb2ludCk6IHN0cmluZ1tdID0+IHtcbiAgICByZXR1cm4gdXRpbGl0aWVzLm1hcCgodXRpbGl0eSkgPT4gYCR7YnJlYWtwb2ludH0tJHt1dGlsaXR5fWApO1xuICB9LFxuICBBTElHTjoge1xuICAgIFg6IHtcbiAgICAgIENFTlRFUjogJ3RpZGUtdGV4dC1jZW50ZXInLFxuICAgICAgTEVGVDogJ3RpZGUtdGV4dC1sZWZ0JyxcbiAgICAgIFJJR0hUOiAndGlkZS10ZXh0LXJpZ2h0JyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIElOSVRJQUw6ICd0aWRlLWFsaWduLWluaXRpYWwnLFxuICAgICAgTUlERExFOiAndGlkZS1hbGlnbi1taWRkbGUnLFxuICAgIH0sXG4gIH0sXG4gIEFYSVMxOiB7XG4gICAgQVJPVU5EOiAndGlkZS1heGlzMS1hcm91bmQnLFxuICAgIEJFVFdFRU46ICd0aWRlLWF4aXMxLWJldHdlZW4nLFxuICAgIENFTlRFUjogJ3RpZGUtYXhpczEtY2VudGVyJyxcbiAgICBFTkQ6ICd0aWRlLWF4aXMxLWVuZCcsXG4gICAgU1RBUlQ6ICd0aWRlLWF4aXMxLXN0YXJ0JyxcbiAgfSxcbiAgQVhJUzI6IHtcbiAgICBBUk9VTkQ6ICd0aWRlLWF4aXMyLWFyb3VuZCcsXG4gICAgQ0VOVEVSOiAndGlkZS1heGlzMi1jZW50ZXInLFxuICAgIEVORDogJ3RpZGUtYXhpczItZW5kJyxcbiAgICBTVEFSVDogJ3RpZGUtYXhpczItc3RhcnQnLFxuICAgIFNUUkVUQ0g6ICd0aWRlLWF4aXMyLXN0cmV0Y2gnLFxuICB9LFxuICBCRzoge1xuICAgIEdMT0JBTDoge1xuICAgICAgUFJJTUFSWToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctcHJpbWFyeS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXByaW1hcnktaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXByaW1hcnktc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXByaW1hcnktd2FybmluZycsXG4gICAgICB9LFxuICAgICAgU1VSRkFDRToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctc3VyZmFjZS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXN1cmZhY2UtaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXN1cmZhY2Utc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXN1cmZhY2Utd2FybmluZycsXG5cbiAgICAgICAgQkxVRTogJ3RpZGUtYmctc3VyZmFjZS1ibHVlJyxcbiAgICAgICAgR1JFRU46ICd0aWRlLWJnLXN1cmZhY2UtZ3JlZW4nLFxuICAgICAgICBMSU1FOiAndGlkZS1iZy1zdXJmYWNlLWxpbWUnLFxuICAgICAgICBPUkFOR0U6ICd0aWRlLWJnLXN1cmZhY2Utb3JhbmdlJyxcbiAgICAgICAgUFVSUExFOiAndGlkZS1iZy1zdXJmYWNlLXB1cnBsZScsXG4gICAgICAgIFJFRDogJ3RpZGUtYmctc3VyZmFjZS1yZWQnLFxuICAgICAgICBTQUxNT046ICd0aWRlLWJnLXN1cmZhY2Utc2FsbW9uJyxcbiAgICAgICAgVEVBTDogJ3RpZGUtYmctc3VyZmFjZS10ZWFsJyxcbiAgICAgICAgWUVMTE9XOiAndGlkZS1iZy1zdXJmYWNlLXllbGxvdycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgSU5JVElBTDogJ3RpZGUtYmctaW5pdGlhbCcsXG4gICAgQkxVUjogJ3RpZGUtYmctYmx1cicsXG4gICAgUFJJTUFSWTogJ3RpZGUtYmctcHJpbWFyeScsXG4gICAgU0VDT05EQVJZOiAndGlkZS1iZy1zZWNvbmRhcnknLFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIEFDQ0VOVDogJ3RpZGUtYmctc3VyZmFjZS1hY2NlbnQnLFxuICAgICAgQlJBTkQ6ICd0aWRlLWJnLXN1cmZhY2UtYnJhbmQnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYmctc3VyZmFjZScsXG4gICAgICBGTE9BVElORzogJ3RpZGUtYmctc3VyZmFjZS1mbG9hdGluZycsXG4gICAgICBHUkFESUVOVDogJ3RpZGUtYmctc3VyZmFjZS1ncmFkaWVudCcsXG4gICAgICBWQVJJQU5UOiAndGlkZS1iZy1zdXJmYWNlLXZhcmlhbnQnLFxuICAgIH0sXG4gICAgVFJBTlNQQVJFTlQ6IHtcbiAgICAgIE9ORV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0xMDAnLFxuICAgICAgVFdPX0hVTkRSRUQ6ICd0aWRlLXRyYW5zcGFyZW50LTIwMCcsXG4gICAgICBUSFJFRV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0zMDAnLFxuICAgICAgRk9VUl9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC00MDAnLFxuICAgIH0sXG4gIH0sXG4gIEJPUkRFUjoge1xuICAgIENPTE9SOiB7XG4gICAgICBHTE9CQUw6IHtcbiAgICAgICAgRVJST1I6ICd0aWRlLWJvcmRlci1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJvcmRlci1pbmZvJyxcbiAgICAgICAgU1VDQ0VTUzogJ3RpZGUtYm9yZGVyLXN1Y2Nlc3MnLFxuICAgICAgICBXQVJOSU5HOiAndGlkZS1ib3JkZXItd2FybmluZycsXG5cbiAgICAgICAgQkxVRTogJ3RpZGUtYm9yZGVyLWJsdWUnLFxuICAgICAgICBHUkVFTjogJ3RpZGUtYm9yZGVyLWdyZWVuJyxcbiAgICAgICAgTElNRTogJ3RpZGUtYm9yZGVyLWxpbWUnLFxuICAgICAgICBPUkFOR0U6ICd0aWRlLWJvcmRlci1vcmFuZ2UnLFxuICAgICAgICBQVVJQTEU6ICd0aWRlLWJvcmRlci1wdXJwbGUnLFxuICAgICAgICBSRUQ6ICd0aWRlLWJvcmRlci1yZWQnLFxuICAgICAgICBTQUxNT046ICd0aWRlLWJvcmRlci1zYWxtb24nLFxuICAgICAgICBURUFMOiAndGlkZS1ib3JkZXItdGVhbCcsXG4gICAgICAgIFlFTExPVzogJ3RpZGUtYm9yZGVyLXllbGxvdycsXG4gICAgICB9LFxuICAgICAgSU5JVElBTDogJ3RpZGUtYm9yZGVyLWNvbG9yLWluaXRpYWwnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYm9yZGVyJyxcbiAgICAgIEZMT0FUSU5HOiAndGlkZS1ib3JkZXItZmxvYXRpbmcnLFxuICAgICAgSElHSDogJ3RpZGUtYm9yZGVyLWhpZ2gnLFxuICAgICAgTE9XOiAndGlkZS1ib3JkZXItbG93JyxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWJvcmRlci1wcmltYXJ5JyxcbiAgICB9LFxuICAgIFJBRElVUzoge1xuICAgICAgWkVSTzogJ3RpZGUtcmFkaXVzLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcmFkaXVzLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1yYWRpdXMtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcmFkaXVzLTEnLFxuICAgICAgRlVMTDogJ3RpZGUtcmFkaXVzLWZ1bGwnLFxuICAgIH0sXG4gICAgU1RZTEU6IHtcbiAgICAgIERBU0hFRDogJ3RpZGUtYm9yZGVyLWRhc2hlZCcsXG4gICAgICBTT0xJRDogJ3RpZGUtYm9yZGVyLXNvbGlkJyxcbiAgICB9LFxuICAgIEJPVFRPTToge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLWJvdHRvbS0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLWJvdHRvbS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtYm9yZGVyLWJvdHRvbS0yJyxcbiAgICB9LFxuICAgIEZVTEw6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLTEnLFxuICAgICAgVFdPOiAndGlkZS1ib3JkZXItMicsXG4gICAgfSxcbiAgICBMRUZUOiB7XG4gICAgICBaRVJPOiAndGlkZS1ib3JkZXItbGVmdC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLWxlZnQtMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci1sZWZ0LTInLFxuICAgIH0sXG4gICAgUklHSFQ6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci1yaWdodC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLXJpZ2h0LTEnLFxuICAgICAgVFdPOiAndGlkZS1ib3JkZXItcmlnaHQtMicsXG4gICAgfSxcbiAgICBUT1A6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci10b3AtMCcsXG4gICAgICBPTkU6ICd0aWRlLWJvcmRlci10b3AtMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci10b3AtMicsXG4gICAgfSxcbiAgfSxcbiAgQk9YX1NJWklORzoge1xuICAgIEJPUkRFUl9CT1g6ICd0aWRlLWJveC1ib3JkZXInLFxuICAgIENPTlRFTlRfQk9YOiAndGlkZS1ib3gtY29udGVudCcsXG4gIH0sXG4gIEJSRUFLX0lOU0lERToge1xuICAgIEFWT0lEX0NPTFVNTjogJ3RpZGUtYnJlYWstaW5zaWRlLWF2b2lkLWNvbHVtbicsXG4gIH0sXG4gIEJSRUFLX1dPUkQ6IHtcbiAgICBPRkY6ICd0aWRlLWJyZWFrLWluaXRpYWwnLFxuICAgIE9OOiAndGlkZS1icmVhay13b3JkJyxcbiAgfSxcbiAgQ09MVU1OUzoge1xuICAgIElOSVRJQUw6ICd0aWRlLWNvbHVtbnMtaW5pdGlhbCcsXG4gICAgT05FOiAndGlkZS1jb2x1bW5zLTEnLFxuICAgIFRXTzogJ3RpZGUtY29sdW1ucy0yJyxcbiAgICBUSFJFRTogJ3RpZGUtY29sdW1ucy0zJyxcbiAgICBGT1VSOiAndGlkZS1jb2x1bW5zLTQnLFxuICB9LFxuICBDVVJTT1I6IHtcbiAgICBOT1RfQUxMT1dFRDogJ3RpZGUtY3Vyc29yLW5vdC1hbGxvd2VkJyxcbiAgICBQT0lOVEVSOiAndGlkZS1jdXJzb3ItcG9pbnRlcicsXG4gICAgVEVYVDogJ3RpZGUtY3Vyc29yLXRleHQnLFxuICB9LFxuICBESVNQTEFZOiB7XG4gICAgQkxPQ0s6ICd0aWRlLWRpc3BsYXktYmxvY2snLFxuICAgIENPTlRFTlRTOiAndGlkZS1kaXNwbGF5LWNvbnRlbnRzJyxcbiAgICBGTEVYOiAndGlkZS1kaXNwbGF5LWZsZXgnLFxuICAgIEdSSUQ6ICd0aWRlLWRpc3BsYXktZ3JpZCcsXG4gICAgSU5JVElBTDogJ3RpZGUtZGlzcGxheS1pbml0aWFsJyxcbiAgICBJTkxJTkU6ICd0aWRlLWRpc3BsYXktaW5saW5lJyxcbiAgICBJTkxJTkVfQkxPQ0s6ICd0aWRlLWRpc3BsYXktaW5saW5lLWJsb2NrJyxcbiAgICBJTkxJTkVfRkxFWDogJ3RpZGUtZGlzcGxheS1pbmxpbmUtZmxleCcsXG4gICAgTk9ORTogJ3RpZGUtZGlzcGxheS1ub25lJyxcbiAgfSxcbiAgRUxMSVBTSVM6ICd0aWRlLWVsbGlwc2lzJyxcbiAgRkxFWDoge1xuICAgIEJBU0lTOiB7XG4gICAgICBBVVRPOiAndGlkZS1mbGV4LWJhc2lzLWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtZmxleC1iYXNpcy0wJyxcbiAgICB9LFxuICAgIERJUkVDVElPTjoge1xuICAgICAgQ09MVU1OOiAndGlkZS1mbGV4LWNvbHVtbicsXG4gICAgICBDT0xVTU5fUkVWRVJTRTogJ3RpZGUtZmxleC1jb2x1bW4tcmV2ZXJzZScsXG4gICAgICBST1c6ICd0aWRlLWZsZXgtcm93JyxcbiAgICAgIFJPV19SRVZFUlNFOiAndGlkZS1mbGV4LXJvdy1yZXZlcnNlJyxcbiAgICB9LFxuICAgIEdST1c6IHtcbiAgICAgIE9GRjogJ3RpZGUtZ3Jvdy1ub25lJyxcbiAgICAgIE9OOiAndGlkZS1ncm93JyxcbiAgICB9LFxuICAgIFNIUklOSzoge1xuICAgICAgT0ZGOiAndGlkZS1zaHJpbmstbm9uZScsXG4gICAgICBPTjogJ3RpZGUtc2hyaW5rJyxcbiAgICB9LFxuICAgIFdSQVA6ICd0aWRlLWZsZXgtd3JhcCcsXG4gIH0sXG4gIEZPTlQ6IHtcbiAgICBDT0xPUjoge1xuICAgICAgR0xPQkFMOiB7XG4gICAgICAgIEVSUk9SOiAndGlkZS1mb250LWVycm9yJyxcbiAgICAgICAgSU5GTzogJ3RpZGUtZm9udC1pbmZvJyxcbiAgICAgICAgU1VDQ0VTUzogJ3RpZGUtZm9udC1zdWNjZXNzJyxcbiAgICAgICAgV0FSTklORzogJ3RpZGUtZm9udC13YXJuaW5nJyxcblxuICAgICAgICBCTFVFOiAndGlkZS1mb250LWJsdWUnLFxuICAgICAgICBHUkVFTjogJ3RpZGUtZm9udC1ncmVlbicsXG4gICAgICAgIExJTUU6ICd0aWRlLWZvbnQtbGltZScsXG4gICAgICAgIE9SQU5HRTogJ3RpZGUtZm9udC1vcmFuZ2UnLFxuICAgICAgICBQVVJQTEU6ICd0aWRlLWZvbnQtcHVycGxlJyxcbiAgICAgICAgUkVEOiAndGlkZS1mb250LXJlZCcsXG4gICAgICAgIFNBTE1PTjogJ3RpZGUtZm9udC1zYWxtb24nLFxuICAgICAgICBURUFMOiAndGlkZS1mb250LXRlYWwnLFxuICAgICAgICBZRUxMT1c6ICd0aWRlLWZvbnQteWVsbG93JyxcblxuICAgICAgICBQUklNQVJZOiB7XG4gICAgICAgICAgQkxVRTogJ3RpZGUtZm9udC1wcmltYXJ5LWJsdWUnLFxuICAgICAgICAgIEdSRUVOOiAndGlkZS1mb250LXByaW1hcnktZ3JlZW4nLFxuICAgICAgICAgIExJTUU6ICd0aWRlLWZvbnQtcHJpbWFyeS1saW1lJyxcbiAgICAgICAgICBPUkFOR0U6ICd0aWRlLWZvbnQtcHJpbWFyeS1vcmFuZ2UnLFxuICAgICAgICAgIFBVUlBMRTogJ3RpZGUtZm9udC1wcmltYXJ5LXB1cnBsZScsXG4gICAgICAgICAgUkVEOiAndGlkZS1mb250LXByaW1hcnktcmVkJyxcbiAgICAgICAgICBTQUxNT046ICd0aWRlLWZvbnQtcHJpbWFyeS1zYWxtb24nLFxuICAgICAgICAgIFRFQUw6ICd0aWRlLWZvbnQtcHJpbWFyeS10ZWFsJyxcbiAgICAgICAgICBZRUxMT1c6ICd0aWRlLWZvbnQtcHJpbWFyeS15ZWxsb3cnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWZvbnQtb24tcHJpbWFyeScsXG4gICAgICBTRUNPTkRBUlk6ICd0aWRlLWZvbnQtb24tc2Vjb25kYXJ5JyxcbiAgICAgIFNVUkZBQ0U6IHtcbiAgICAgICAgQlJBTkQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1icmFuZCcsXG4gICAgICAgIERFRkFVTFQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZScsXG4gICAgICAgIElOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1pbnZlcnNlJyxcbiAgICAgICAgVkFSSUFOVDogJ3RpZGUtZm9udC1vbi1zdXJmYWNlLXZhcmlhbnQnLFxuICAgICAgICBWQVJJQU5UX0lOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS12YXJpYW50LWludmVyc2UnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFJPTEU6IHtcbiAgICAgIERJU1BMQVlfMTogJ3RpZGUtdHlwb2dyYXBoeS1kaXNwbGF5LTEnLFxuICAgICAgSEVBRExJTkVfMTogJ3RpZGUtdHlwb2dyYXBoeS1oZWFkbGluZS0xJyxcbiAgICAgIEhFQURMSU5FXzI6ICd0aWRlLXR5cG9ncmFwaHktaGVhZGxpbmUtMicsXG4gICAgICBIRUFETElORV8zOiAndGlkZS10eXBvZ3JhcGh5LWhlYWRsaW5lLTMnLFxuICAgICAgVElUTEVfMTogJ3RpZGUtdHlwb2dyYXBoeS10aXRsZS0xJyxcbiAgICAgIFRJVExFXzI6ICd0aWRlLXR5cG9ncmFwaHktdGl0bGUtMicsXG4gICAgICBCT0RZXzE6ICd0aWRlLXR5cG9ncmFwaHktYm9keS0xJyxcbiAgICAgIEJPRFlfMjogJ3RpZGUtdHlwb2dyYXBoeS1ib2R5LTInLFxuICAgICAgTEFCRUxfMTogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0xJyxcbiAgICAgIExBQkVMXzFfU0VNSUJPTEQ6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMS1zZW1pYm9sZCcsXG4gICAgICBMQUJFTF8yOiAndGlkZS10eXBvZ3JhcGh5LWxhYmVsLTInLFxuICAgICAgTEFCRUxfMl9TRU1JQk9MRDogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0yLXNlbWlib2xkJyxcbiAgICAgIExBQkVMXzM6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMycsXG4gICAgICBMSU5LXzE6ICd0aWRlLXR5cG9ncmFwaHktbGluay0xJyxcbiAgICAgIExJTktfMjogJ3RpZGUtdHlwb2dyYXBoeS1saW5rLTInLFxuICAgICAgTElOS18zOiAndGlkZS10eXBvZ3JhcGh5LWxpbmstMycsXG4gICAgICBCVVRUT05fMTogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMScsXG4gICAgICBCVVRUT05fMjogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMicsXG4gICAgfSxcbiAgICBTSVpFOiB7XG4gICAgICBUV0VMVkU6ICd0aWRlLWZvbnQtMTInLFxuICAgICAgRk9VUlRFRU46ICd0aWRlLWZvbnQtMTQnLFxuICAgICAgU0lYVEVFTjogJ3RpZGUtZm9udC0xNicsXG4gICAgICBUV0VOVFk6ICd0aWRlLWZvbnQtMjAnLFxuICAgICAgVFdFTlRZX0ZPVVI6ICd0aWRlLWZvbnQtMjQnLFxuICAgICAgVEhJUlRZX1RXTzogJ3RpZGUtZm9udC0zMicsXG4gICAgfSxcbiAgICBXRUlHSFQ6IHtcbiAgICAgIEZPVVJfSFVORFJFRDogJ3RpZGUtZm9udC00MDAnLFxuICAgICAgRklWRV9IVU5EUkVEOiAndGlkZS1mb250LTUwMCcsXG4gICAgICBTSVhfSFVORFJFRDogJ3RpZGUtZm9udC02MDAnLFxuICAgICAgU0VWRU5fSFVORFJFRDogJ3RpZGUtZm9udC03MDAnLFxuICAgIH0sXG4gIH0sXG4gIEdBUDoge1xuICAgIFpFUk86ICd0aWRlLWdhcC0wJyxcbiAgICBRVUFSVEVSOiAndGlkZS1nYXAtMS80JyxcbiAgICBIQUxGOiAndGlkZS1nYXAtMS8yJyxcbiAgICBPTkU6ICd0aWRlLWdhcC0xJyxcbiAgICBUV086ICd0aWRlLWdhcC0yJyxcbiAgICBGT1VSOiAndGlkZS1nYXAtNCcsXG4gIH0sXG4gIEdSSUQ6IHtcbiAgICBGTFVJRDogJ3RpZGUtZmx1aWQnLFxuICAgIElURU06ICd0aWRlLWdyaWQtaXRlbScsXG4gICAgTEFZT1VUOiAndGlkZS1ncmlkLWxheW91dCcsXG4gICAgWEw6ICd0aWRlLWdyaWQteGwnLFxuICB9LFxuICBIRUlHSFQ6IHtcbiAgICBBVVRPOiAndGlkZS1oZWlnaHQtYXV0bycsXG4gICAgWkVSTzogJ3RpZGUtaGVpZ2h0LTAnLFxuICAgIEZVTEw6ICd0aWRlLWhlaWdodC1mdWxsJyxcbiAgICBNQVhfRlVMTDogJ3RpZGUtbWF4LWhlaWdodC1mdWxsJyxcbiAgICBNSU5fWkVSTzogJ3RpZGUtbWluLWhlaWdodC0wJyxcbiAgfSxcbiAgSVNPTEFUSU9OOiB7XG4gICAgSVNPTEFURTogJ3RpZGUtaXNvbGF0ZScsXG4gIH0sXG4gIExJU1RfQlVMTEVUUzoge1xuICAgIE9GRjogJ3RpZGUtbGlzdC1ub25lJyxcbiAgfSxcbiAgTUFSR0lOOiB7XG4gICAgQk9UVE9NOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4tYm90dG9tLWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLWJvdHRvbS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi1ib3R0b20tMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi1ib3R0b20tMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLWJvdHRvbS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLWJvdHRvbS0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi1ib3R0b20tNCcsXG4gICAgfSxcbiAgICBGVUxMOiB7XG4gICAgICBaRVJPOiAndGlkZS1tYXJnaW4tMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4tMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi0xLzInLFxuICAgICAgT05FOiAndGlkZS1tYXJnaW4tMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi00JyxcbiAgICB9LFxuICAgIExFRlQ6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi1sZWZ0LWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLWxlZnQtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4tbGVmdC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLWxlZnQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLWxlZnQtMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi1sZWZ0LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLWxlZnQtNCcsXG4gICAgfSxcbiAgICBSSUdIVDoge1xuICAgICAgQVVUTzogJ3RpZGUtbWFyZ2luLXJpZ2h0LWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXJpZ2h0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLXJpZ2h0LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4tcmlnaHQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXJpZ2h0LTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tcmlnaHQtMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4tcmlnaHQtNCcsXG4gICAgfSxcbiAgICBUT1A6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi10b3AtYXV0bycsXG4gICAgICBaRVJPOiAndGlkZS1tYXJnaW4tdG9wLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLXRvcC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXRvcC0xLzInLFxuICAgICAgT05FOiAndGlkZS1tYXJnaW4tdG9wLTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tdG9wLTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXRvcC00JyxcbiAgICB9LFxuICAgIFg6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi14LWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXgtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4teC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXgtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXgtMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi14LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXgtNCcsXG4gICAgfSxcbiAgICBZOiB7XG4gICAgICBaRVJPOiAndGlkZS1tYXJnaW4teS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi15LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4teS0xLzInLFxuICAgICAgT05FOiAndGlkZS1tYXJnaW4teS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLXktMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4teS00JyxcbiAgICB9LFxuICB9LFxuICBPQkpFQ1Q6IHtcbiAgICBDRU5URVI6ICd0aWRlLW9iamVjdC1jZW50ZXInLFxuICAgIENPTlRBSU46ICd0aWRlLW9iamVjdC1jb250YWluJyxcbiAgICBDT1ZFUjogJ3RpZGUtb2JqZWN0LWNvdmVyJyxcbiAgICBTQ0FMRV9ET1dOOiAndGlkZS1vYmplY3Qtc2NhbGUtZG93bicsXG4gIH0sXG4gIE9QQUNJVFk6IHtcbiAgICBPRkY6ICd0aWRlLW9wYWNpdHktbm9uZScsXG4gICAgT046ICd0aWRlLW9wYWNpdHknLFxuICB9LFxuICBPVkVSRkxPVzoge1xuICAgIFg6IHtcbiAgICAgIEFVVE86ICd0aWRlLXgtYXV0bycsXG4gICAgICBISURERU46ICd0aWRlLXgtaGlkZGVuJyxcbiAgICAgIFNDUk9MTDogJ3RpZGUteC1zY3JvbGwnLFxuICAgIH0sXG4gICAgWFk6IHtcbiAgICAgIEFVVE86ICd0aWRlLXh5LWF1dG8nLFxuICAgICAgSElEREVOOiAndGlkZS14eS1oaWRkZW4nLFxuICAgIH0sXG4gICAgWToge1xuICAgICAgQVVUTzogJ3RpZGUteS1hdXRvJyxcbiAgICAgIEhJRERFTjogJ3RpZGUteS1oaWRkZW4nLFxuICAgIH0sXG4gIH0sXG4gIFBBRERJTkc6IHtcbiAgICBCT1RUT006IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmctYm90dG9tLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy1ib3R0b20tMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctYm90dG9tLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmctYm90dG9tLTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctYm90dG9tLTQnLFxuICAgIH0sXG4gICAgRlVMTDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmctMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctNCcsXG4gICAgfSxcbiAgICBMRUZUOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLWxlZnQtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLWxlZnQtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctbGVmdC0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLWxlZnQtMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmctbGVmdC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctbGVmdC00JyxcbiAgICB9LFxuICAgIFJJR0hUOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLXJpZ2h0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy1yaWdodC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtcGFkZGluZy1yaWdodC0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLXJpZ2h0LTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLXJpZ2h0LTInLFxuICAgICAgRk9VUjogJ3RpZGUtcGFkZGluZy1yaWdodC00JyxcbiAgICB9LFxuICAgIFRPUDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy10b3AtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLXRvcC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtcGFkZGluZy10b3AtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy10b3AtMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmctdG9wLTInLFxuICAgICAgRk9VUjogJ3RpZGUtcGFkZGluZy10b3AtNCcsXG4gICAgfSxcbiAgICBYOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLXgtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLXgtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmcteC0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLXgtMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmcteC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmcteC00JyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmcteS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmcteS0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtcGFkZGluZy15LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmcteS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy15LTInLFxuICAgICAgRk9VUjogJ3RpZGUtcGFkZGluZy15LTQnLFxuICAgIH0sXG4gIH0sXG4gIFBPSU5URVJfRVZFTlRTOiB7XG4gICAgT0ZGOiAndGlkZS1wb2ludGVyLWV2ZW50cy1ub25lJyxcbiAgICBPTjogJ3RpZGUtcG9pbnRlci1ldmVudHMnLFxuICB9LFxuICBQT1NJVElPTjoge1xuICAgIEFCU09MVVRFOiAndGlkZS1wb3NpdGlvbi1hYnNvbHV0ZScsXG4gICAgRklYRUQ6ICd0aWRlLXBvc2l0aW9uLWZpeGVkJyxcbiAgICBSRUxBVElWRTogJ3RpZGUtcG9zaXRpb24tcmVsYXRpdmUnLFxuICAgIFNUQVRJQzogJ3RpZGUtcG9zaXRpb24tc3RhdGljJyxcbiAgICBTVElDS1k6ICd0aWRlLXBvc2l0aW9uLXN0aWNreScsXG4gIH0sXG4gIFBPU0lUSU9OSU5HOiB7XG4gICAgQk9UVE9NOiAndGlkZS1ib3R0b20tMCcsXG4gICAgTEVGVDogJ3RpZGUtbGVmdC0wJyxcbiAgICBSSUdIVDogJ3RpZGUtcmlnaHQtMCcsXG4gICAgVE9QOiAndGlkZS10b3AtMCcsXG4gIH0sXG4gIFJBVElPOiB7XG4gICAgT05FX1RPX09ORTogJ3RpZGUtcmF0aW8tMS8xJyxcbiAgICBTSVhURUVOX1RPX05JTkU6ICd0aWRlLXJhdGlvLTE2LzknLFxuICAgIFRIUkVFX1RPX1RXTzogJ3RpZGUtcmF0aW8tMy8yJyxcbiAgfSxcbiAgU0NST0xMQkFSOiB7XG4gICAgT0ZGOiAndGlkZS1zY3JvbGxiYXItbm9uZScsXG4gIH0sXG4gIFNIQURPVzoge1xuICAgIElOSVRJQUw6ICd0aWRlLXNoYWRvdy1pbml0aWFsJyxcbiAgICBCT1RUT006ICd0aWRlLXNoYWRvdy1ib3R0b20nLFxuICAgIFRPUDogJ3RpZGUtc2hhZG93LXRvcCcsXG4gICAgVEVYVDogJ3RpZGUtc2hhZG93LXRleHQnLFxuICB9LFxuICBTTkFQOiB7XG4gICAgT046ICd0aWRlLXNjcm9sbC1zbmFwJyxcbiAgfSxcbiAgU05BUF9BTElHTjoge1xuICAgIFNUQVJUOiAndGlkZS1zY3JvbGwtc25hcC1zdGFydCcsXG4gIH0sXG4gIFRFWFRfVFJBTlNGT1JNOiB7XG4gICAgTE9XRVI6ICd0aWRlLXRleHQtdHJhbnNmb3JtLWxvd2VyJyxcbiAgICBOT05FOiAndGlkZS10ZXh0LXRyYW5zZm9ybS1ub25lJyxcbiAgICBVUFBFUjogJ3RpZGUtdGV4dC10cmFuc2Zvcm0tdXBwZXInLFxuICB9LFxuICBVTkRFUkxJTkU6IHtcbiAgICBIT1ZFUjoge1xuICAgICAgT046ICd0aWRlLXVuZGVybGluZS1ob3ZlcicsXG4gICAgICBPRkY6ICd0aWRlLXVuZGVybGluZS1ob3Zlci1ub25lJyxcbiAgICB9LFxuICAgIFJFU1Q6IHtcbiAgICAgIE9OOiAndGlkZS11bmRlcmxpbmUnLFxuICAgICAgT0ZGOiAndGlkZS11bmRlcmxpbmUtbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgVklTSUJJTElUWToge1xuICAgIE9GRjogJ3RpZGUtdmlzaWJsZS1ub25lJyxcbiAgICBPTjogJ3RpZGUtdmlzaWJsZScsXG4gIH0sXG4gIFdISVRFU1BBQ0VfV1JBUDoge1xuICAgIE9GRjogJ3RpZGUtd2hpdGVzcGFjZS1ub3dyYXAnLFxuICB9LFxuICBXSURUSDoge1xuICAgIEFVVE86ICd0aWRlLXdpZHRoLWF1dG8nLFxuICAgIFpFUk86ICd0aWRlLXdpZHRoLTAnLFxuICAgIEZVTEw6ICd0aWRlLXdpZHRoLWZ1bGwnLFxuICAgIE1BWF9GVUxMOiAndGlkZS1tYXgtd2lkdGgtZnVsbCcsXG4gICAgTUlOX1pFUk86ICd0aWRlLW1pbi13aWR0aC0wJyxcbiAgfSxcbiAgWl9JTkRFWDoge1xuICAgIElOSVRJQUw6ICd0aWRlLXotaW5kZXgtaW5pdGlhbCcsXG4gICAgT05FOiAndGlkZS16LWluZGV4LTEnLFxuICB9LFxufSBhcyBjb25zdDtcbiIsImV4cG9ydCBjb25zdCBSRUFMTSA9IHtcbiAgQUVSTzogJ2Flcm8nLFxuICBBVFY6ICdhdHYnLFxuICBCT0FUTUFSVDogJ2JvYXRtYXJ0JyxcbiAgQ1lDTEU6ICdjeWNsZScsXG4gIEVRVUlQTUVOVDogJ2VxdWlwbWVudCcsXG4gIFBXQzogJ3B3YycsXG4gIFJWOiAncnYnLFxuICBTTk9XOiAnc25vdycsXG4gIFRSVUNLOiAndHJ1Y2snLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVhbG1LZXkgPSBrZXlvZiB0eXBlb2YgUkVBTE07XG5leHBvcnQgdHlwZSBSZWFsbSA9ICh0eXBlb2YgUkVBTE0pW1JlYWxtS2V5XTtcbiIsImV4cG9ydCBjb25zdCBTSVpFID0ge1xuICBMQVJHRTogJ2xhcmdlJyxcbiAgU01BTEw6ICdzbWFsbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTSVpFKVtrZXlvZiB0eXBlb2YgU0laRV07XG5cbmV4cG9ydCBjb25zdCBTSVpFX0JVVFRPTiA9IHtcbiAgTEFSR0U6ICdsYXJnZScsXG4gIFNNQUxMOiAnc21hbGwnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2l6ZUJ1dHRvbiA9ICh0eXBlb2YgU0laRSlba2V5b2YgdHlwZW9mIFNJWkVdO1xuIiwiY29uc3QgY2FwaXRhbGl6ZUZpcnN0ID0gKHN0cmluZzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuXG5jb25zdCBmb3JtYXRDYW1lbENhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG4gICAgPyBpbnB1dFxuICAgICAgICAucmVwbGFjZSgvXltcXHNfLV0vLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IHdvcmQgOiB3b3JkLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdEtlYmFiQ2FzZSA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbiAgICA/IGlucHV0XG4gICAgICAgIC5yZXBsYWNlKC8oW2Etel17MX0pKFtBLVpdezF9KS9nLCAnJDEgJDInKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnLScpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdExhYmVsID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgbGFiZWxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgZmFsc2U6ICdObycsXG4gICAgdHJ1ZTogJ1llcycsXG4gIH07XG4gIHJldHVybiBPYmplY3QuaGFzT3duKGxhYmVsTWFwLCB2YWx1ZSkgPyBsYWJlbE1hcFt2YWx1ZV0gOiB2YWx1ZTtcbn07XG5cbmNvbnN0IGZvcm1hdE51bWJlciA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IG91dHB1dCA9IGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcnKTtcbiAgbGV0IGRpZ2l0cyA9IG91dHB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGRpZ2l0cyA9IGRpZ2l0cy5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIGlmIChOdW1iZXIoZGlnaXRzKSkge1xuICAgICAgb3V0cHV0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KE51bWJlcihkaWdpdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gJzAnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQYXNjYWxDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdFBob25lID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyA/IFN0cmluZyhpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJycpO1xuICBsZXQgZGlnaXRzID0gb3V0cHV0O1xuICBkaWdpdHMgPSBkaWdpdHMucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICBzd2l0Y2ggKGRpZ2l0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDc6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMyl9LSR7ZGlnaXRzLnNsaWNlKDMpfWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgb3V0cHV0ID0gYCR7ZGlnaXRzLnNsaWNlKDAsIDMpfS0ke2RpZ2l0cy5zbGljZSgzLCA2KX0tJHtkaWdpdHMuc2xpY2UoNil9YDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMSl9LSR7ZGlnaXRzLnNsaWNlKDEsIDQpfS0ke2RpZ2l0cy5zbGljZSg0LCA3KX0tJHtkaWdpdHMuc2xpY2UoNyl9YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvdXRwdXQgPSBkaWdpdHM7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQcmljZSA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gaW5wdXQgPyBmb3JtYXROdW1iZXIoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcwJyk7XG4gIHJldHVybiBgJCR7b3V0cHV0fWA7XG59O1xuXG5jb25zdCBmb3JtYXRRdW90ZXMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5jb25zdCBmb3JtYXRTZW50ZW5jZUNhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBzZW50ZW5jZUNhc2UgPSBpbnB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvd2VyQ2FzZSA9IGlucHV0XG4gICAgICAucmVwbGFjZSgvKFthLXpdezF9KShbQS1aXXsxfSkvZywgJyQxICQyJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnICcpO1xuXG4gICAgc2VudGVuY2VDYXNlID0gbG93ZXJDYXNlLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBsb3dlckNhc2Uuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gc2VudGVuY2VDYXNlO1xufTtcblxuY29uc3QgZm9ybWF0U25ha2VDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICdfJylcbiAgICA6IGlucHV0O1xufTtcblxuY29uc3QgZm9ybWF0VGl0bGVDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgIDogaW5wdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRVcmxGcm9tUm9vdCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmxGb3JtYXR0ZWQgPSB1cmwuc3BsaXQoJy5jb20vJyk7XG5cbiAgcmV0dXJuIHVybEZvcm1hdHRlZC5sZW5ndGggPiAxID8gYC8ke3VybEZvcm1hdHRlZFsxXX1gIDogdXJsO1xufTtcblxuY29uc3QgZm9ybWF0V2VpZ2h0ID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dCA/IGZvcm1hdE51bWJlcihpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJzAnKTtcbiAgcmV0dXJuIGAke291dHB1dH0gbGJzYDtcbn07XG5cbmNvbnN0IGdldEFydGljbGUgPSAobm91bjogc3RyaW5nLCBpc1BsdXJhbCA9IGZhbHNlLCBpc0RlZmluaXRlID0gZmFsc2UpID0+IHtcbiAgY29uc3Qgdm93ZWxzID0gWydhJywgJ2UnLCAnaScsICdvJywgJ3UnXTtcbiAgY29uc3QgaXNWb3dlbExlYWRpbmcgPSB2b3dlbHMuaW5jbHVkZXMobm91bi5jaGFyQXQoMCkpO1xuXG4gIHJldHVybiBpc0RlZmluaXRlID8gJ3RoZScgOiBpc1BsdXJhbCA/ICdzb21lJyA6IGlzVm93ZWxMZWFkaW5nID8gJ2FuJyA6ICdhJztcbn07XG5cbmNvbnN0IHByaWNlVG9OdW1iZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCckJywgJycpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59O1xuXG5jb25zdCB1bmZvcm1hdFByaWNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dC5yZXBsYWNlKC9cXCQvZywgJycpLnJlcGxhY2UoLywvZywgJycpO1xuICByZXR1cm4gYCR7b3V0cHV0fWA7XG59O1xuXG5leHBvcnQge1xuICBjYXBpdGFsaXplRmlyc3QsXG4gIGZvcm1hdENhbWVsQ2FzZSxcbiAgZm9ybWF0S2ViYWJDYXNlLFxuICBmb3JtYXRMYWJlbCxcbiAgZm9ybWF0TnVtYmVyLFxuICBmb3JtYXRQYXNjYWxDYXNlLFxuICBmb3JtYXRQaG9uZSxcbiAgZm9ybWF0UHJpY2UsXG4gIGZvcm1hdFF1b3RlcyxcbiAgZm9ybWF0U2VudGVuY2VDYXNlLFxuICBmb3JtYXRTbmFrZUNhc2UsXG4gIGZvcm1hdFRpdGxlQ2FzZSxcbiAgZm9ybWF0VXJsRnJvbVJvb3QsXG4gIGZvcm1hdFdlaWdodCxcbiAgZ2V0QXJ0aWNsZSxcbiAgcHJpY2VUb051bWJlcixcbiAgdW5mb3JtYXRQcmljZSxcbn07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBkZWZpbmVBc3luY0NvbXBvbmVudCwgbWFya1JhdywgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IHsgUkVBTE0gfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZm9ybWF0UGFzY2FsQ2FzZSB9IGZyb20gJ0AvdXRpbGl0aWVzL2Zvcm1hdCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBJY29uIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaWNvbjogSWNvbjtcbiAgICBzaXplPzogU2l6ZTtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIHNpemU6IFNJWkUuU01BTEwsXG4gIH0pO1xuXG4gIGNvbnN0IGlubmVyU1ZHID0gcmVmPENvbXBvbmVudD4oKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5pY29uLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBwcm9wcy5pY29uO1xuICAgICAgY29uc3QgbmFtZSA9IGZvcm1hdFBhc2NhbENhc2UoaWQpO1xuICAgICAgY29uc3QgW3ByZWZpeF0gPSBpZC5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgcmVhbG1Gb2xkZXIgPSBSRUFMTVtwcmVmaXg/LnRvVXBwZXJDYXNlKCkgYXMga2V5b2YgdHlwZW9mIFJFQUxNXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRlZmluZUFzeW5jQ29tcG9uZW50KCgpID0+IHtcbiAgICAgICAgaWYgKHJlYWxtRm9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGltcG9ydChgLi4vYXNzZXRzL3N2Zy9pY29ucy9yZWFsbS8ke3JlYWxtRm9sZGVyfS9JY29uJHtuYW1lfS5zdmc/Y29tcG9uZW50YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1wb3J0KGAuLi9hc3NldHMvc3ZnL2ljb25zL0ljb24ke25hbWV9LnN2Zz9jb21wb25lbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpbm5lclNWRy52YWx1ZSA9IG1hcmtSYXcoY29tcG9uZW50KTtcbiAgICB9LFxuICAgIHsgaW1tZWRpYXRlOiB0cnVlIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXYgOmNsYXNzPVwiWyd0aWRlLWljb24nLCBwcm9wcy5zaXplXVwiPlxuICAgIDxDb21wb25lbnRcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5CTE9DS11cIlxuICAgICAgOmRhdGEtaWNvbj1cImljb25cIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICA6aXM9XCJpbm5lclNWR1wiXG4gICAgICB2LWlmPVwiaW5uZXJTVkdcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuICAudGlkZS1pY29uIHtcbiAgICB3aWR0aDogMS41cmVtO1xuICAgIGhlaWdodDogMS41cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbi5zbWFsbCB7XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbiBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuPC9zdHlsZT5cbiIsImltcG9ydCB0eXBlIHsgUmVhbG1LZXkgfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcblxuZXhwb3J0IGNvbnN0IElDT04gPSB7XG4gIEFDQ09VTlRfQkFMQU5DRTogJ2FjY291bnQtYmFsYW5jZScsXG4gIEFDVVRFOiAnYWN1dGUnLFxuICBBREQ6ICdhZGQnLFxuICBBSV9ERVNDUklQVElPTjogJ2FpLWRlc2NyaXB0aW9uJyxcbiAgQUxJR05fU1BBQ0VfRVZFTjogJ2FsaWduLXNwYWNlLWV2ZW4nLFxuICBBUFBMRV9QQVk6ICdhcHBsZS1wYXknLFxuICBBUlJPV19CQUNLOiAnYXJyb3ctYmFjaycsXG4gIEFSUk9XX0NZQ0xFOiAnYXJyb3ctY3ljbGUnLFxuICBBUlJPV19GT1JXQVJEOiAnYXJyb3ctZm9yd2FyZCcsXG4gIEFSUk9XX1JJR0hUOiAnYXJyb3ctcmlnaHQnLFxuICBBU1NJR05NRU5UOiAnYXNzaWdubWVudCcsXG4gIEFUVEFDSF9NT05FWTogJ2F0dGFjaC1tb25leScsXG4gIEFVVE9fUkVORVc6ICdhdXRvLXJlbmV3JyxcbiAgQVdBUkRfU1RBUjogJ2F3YXJkLXN0YXInLFxuICBCRUQ6ICdiZWQnLFxuICBCT0xUOiAnYm9sdCcsXG4gIEJPT0tNQVJLOiAnYm9va21hcmsnLFxuICBCVU5LSE9VU0U6ICdidW5raG91c2UnLFxuICBDQUxFTkRBUl9NT05USDogJ2NhbGVuZGFyLW1vbnRoJyxcbiAgQ0FMTDogJ2NhbGwnLFxuICBDQUxMX1FVQUxJVFk6ICdjYWxsLXF1YWxpdHknLFxuICBDQVJfUkVOVEFMOiAnY2FyLXJlbnRhbCcsXG4gIENIRUNLOiAnY2hlY2snLFxuICBDSEVWUk9OX0xFRlQ6ICdjaGV2cm9uLWxlZnQnLFxuICBDSEVWUk9OX1JJR0hUOiAnY2hldnJvbi1yaWdodCcsXG4gIENMRUFSOiAnY2xlYXInLFxuICBDTE9TRTogJ2Nsb3NlJyxcbiAgQ09OVFJBQ1Q6ICdjb250cmFjdCcsXG4gIENSQVNIOiAnY3Jhc2gnLFxuICBEQVNIQk9BUkRfQ1VTVE9NSVpFOiAnZGFzaGJvYXJkLWN1c3RvbWl6ZScsXG4gIERFTEVURTogJ2RlbGV0ZScsXG4gIERJQU1PTkQ6ICdkaWFtb25kJyxcbiAgRElSRUNUSU9OU19CT0FUOiAnZGlyZWN0aW9ucy1ib2F0JyxcbiAgRE9NQUlOOiAnZG9tYWluJyxcbiAgRFJBRlQ6ICdkcmFmdCcsXG4gIEVESVQ6ICdlZGl0JyxcbiAgRU5HSU5FOiAnZW5naW5lJyxcbiAgRU5HSU5FRVJJTkc6ICdlbmdpbmVlcmluZycsXG4gIEVSUk9SOiAnZXJyb3InLFxuICBFWFBBTkRfQ09OVEVOVDogJ2V4cGFuZC1jb250ZW50JyxcbiAgRVhQQU5EX0xFU1M6ICdleHBhbmQtbGVzcycsXG4gIEVYUEFORF9NT1JFOiAnZXhwYW5kLW1vcmUnLFxuICBGQUNFQk9PSzogJ2ZhY2Vib29rJyxcbiAgRkFWT1JJVEU6ICdmYXZvcml0ZScsXG4gIEZBVk9SSVRFX0ZJTExFRDogJ2Zhdm9yaXRlLWZpbGxlZCcsXG4gIEZMQUc6ICdmbGFnJyxcbiAgRk9STUFUX0JPTEQ6ICdmb3JtYXQtYm9sZCcsXG4gIEZPUk1BVF9JVEFMSUM6ICdmb3JtYXQtaXRhbGljJyxcbiAgRk9STUFUX0xJU1RfQlVMTEVURUQ6ICdmb3JtYXQtbGlzdC1idWxsZXRlZCcsXG4gIEZPUlVNOiAnZm9ydW0nLFxuICBHQVM6ICdnYXMnLFxuICBHQVZFTDogJ2dhdmVsJyxcbiAgR0VBUlM6ICdnZWFycycsXG4gIEdMT0JFX0xPQ0FUSU9OX1BJTjogJ2dsb2JlLWxvY2F0aW9uLXBpbicsXG4gIEdPT0dMRTogJ2dvb2dsZScsXG4gIEdPT0dMRV9QQVk6ICdnb29nbGUtcGF5JyxcbiAgR1JJRDogJ2dyaWQnLFxuICBIQU5EU0hBS0U6ICdoYW5kc2hha2UnLFxuICBIQU5EWU1BTjogJ2hhbmR5bWFuJyxcbiAgSEVJR0hUOiAnaGVpZ2h0JyxcbiAgSEVMUDogJ2hlbHAnLFxuICBJTkZPOiAnaW5mbycsXG4gIElORk9STUFUSU9OOiAnaW5mb3JtYXRpb24nLFxuICBJTlNFUlRfVEVYVDogJ2luc2VydC10ZXh0JyxcbiAgSU5TVEFHUkFNOiAnaW5zdGFncmFtJyxcbiAgSU9TX1NIQVJFOiAnaW9zLXNoYXJlJyxcbiAgTEFZT1VUOiAnbGF5b3V0JyxcbiAgTEVWRUxMSU5HX0pBQ0s6ICdsZXZlbGxpbmctamFjaycsXG4gIExJTktFRF9JTjogJ2xpbmtlZCBpbicsXG4gIExPQ0FMX1NISVBQSU5HOiAnbG9jYWwtc2hpcHBpbmcnLFxuICBMT0NLOiAnbG9jaycsXG4gIE1BSUw6ICdtYWlsJyxcbiAgTUVOVTogJ21lbnUnLFxuICBNT05FWV9CQUc6ICdtb25leS1iYWcnLFxuICBNT1JFX0hPUklaOiAnbW9yZS1ob3JpeicsXG4gIE5PVElGSUNBVElPTlM6ICdub3RpZmljYXRpb25zJyxcbiAgT0RPTUVURVI6ICdvZG9tZXRlcicsXG4gIE9QRU5fSU5fTkVXOiAnb3Blbi1pbi1uZXcnLFxuICBQQUxFVFRFOiAncGFsZXR0ZScsXG4gIFBBWVBBTDogJ3BheXBhbCcsXG4gIFBFUlNPTjogJ3BlcnNvbicsXG4gIFBFUlNPTl9TRUFSQ0g6ICdwZXJzb24tc2VhcmNoJyxcbiAgUEhPVE9fQ0FNRVJBOiAncGhvdG8tY2FtZXJhJyxcbiAgUElOVEVSRVNUOiAncGludGVyZXN0JyxcbiAgUExBWV9BUlJPVzogJ3BsYXktYXJyb3cnLFxuICBQT0xJQ1k6ICdwb2xpY3knLFxuICBQT1dFUjogJ3Bvd2VyJyxcbiAgUE9XRVJfT0ZGOiAncG93ZXItb2ZmJyxcbiAgUFJJT1JJVFlfSElHSDogJ3ByaW9yaXR5LWhpZ2gnLFxuICBSRU1PVkU6ICdyZW1vdmUnLFxuICBSRVFVRVNUX1FVT1RFOiAncmVxdWVzdC1xdW90ZScsXG4gIFJFU0VUX1dSRU5DSDogJ3Jlc2V0LXdyZW5jaCcsXG4gIFJPQUQ6ICdyb2FkJyxcbiAgUk9VTkRFRF9DT1JORVI6ICdyb3VuZGVkLWNvcm5lcicsXG4gIFJVTEVSOiAncnVsZXInLFxuICBTQUlMSU5HOiAnc2FpbGluZycsXG4gIFNDSE9PTDogJ3NjaG9vbCcsXG4gIFNFQVJDSDogJ3NlYXJjaCcsXG4gIFNFQVRJTkc6ICdzZWF0aW5nJyxcbiAgU0VMTDogJ3NlbGwnLFxuICBTRU5TT1JTOiAnc2Vuc29ycycsXG4gIFNFVFRJTkdTOiAnc2V0dGluZ3MnLFxuICBTSEFSRTogJ3NoYXJlJyxcbiAgU0hJRUxEX0NIRUNLOiAnc2hpZWxkLWNoZWNrJyxcbiAgU0hPUFBJTkdfQ0FSVDogJ3Nob3BwaW5nLWNhcnQnLFxuICBTTEVFUFM6ICdzbGVlcHMnLFxuICBTTVM6ICdzbXMnLFxuICBTTk9XRkxBS0U6ICdzbm93Zmxha2UnLFxuICBTVEFSOiAnc3RhcicsXG4gIFNVTU1BUklaRTogJ3N1bW1hcml6ZScsXG4gIFNXQVBfSE9SSVo6ICdzd2FwLWhvcml6JyxcbiAgU1dBUF9WRVJUOiAnc3dhcC12ZXJ0JyxcbiAgVEhSRUVfRF9ST1RBVElPTjogJ3RocmVlLWQtcm90YXRpb24nLFxuICBUSFVNQl9VUDogJ3RodW1iLXVwJyxcbiAgVFJFTkRJTkdfRE9XTjogJ3RyZW5kaW5nLWRvd24nLFxuICBUUk9QSFk6ICd0cm9waHknLFxuICBUVU5FOiAndHVuZScsXG4gIFRXSVRURVI6ICd0d2l0dGVyJyxcbiAgVU1CUkVMTEE6ICd1bWJyZWxsYScsXG4gIFZFUklGSUVEOiAndmVyaWZpZWQnLFxuICBWSURFT0NBTTogJ3ZpZGVvY2FtJyxcbiAgVklFV19JTl9BUjogJ3ZpZXctaW4tYXInLFxuICBWSVNJQklMSVRZOiAndmlzaWJpbGl0eScsXG4gIFZPTFVNRV9PRkY6ICd2b2x1bWUtb2ZmJyxcbiAgVk9MVU1FX09OOiAndm9sdW1lLW9uJyxcbiAgV0FSRUhPVVNFOiAnd2FyZWhvdXNlJyxcbiAgV0FSTklORzogJ3dhcm5pbmcnLFxuICBXQVRFUjogJ3dhdGVyJyxcbiAgV0VJR0hUOiAnd2VpZ2h0JyxcbiAgV0lEVEg6ICd3aWR0aCcsXG4gIFdPUktTUEFDRV9QUkVNSVVNOiAnd29ya3NwYWNlLXByZW1pdW0nLFxuICBXUkVOQ0g6ICd3cmVuY2gnLFxuICBZT1VUVUJFOiAneW91dHViZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgSUNPTl9SRUFMTSA9IHtcbiAgQVRWOiB7XG4gICAgQVRWOiAnYXR2LWF0dicsXG4gICAgRFVORV9CVUdHWTogJ2F0di1kdW5lLWJ1Z2d5JyxcbiAgICBHT0xGX0NBUlQ6ICdhdHYtZ29sZi1jYXJ0JyxcbiAgICBHT19LQVJUOiAnYXR2LWdvLWthcnQnLFxuICAgIFNBTkRfUkFJTDogJ2F0di1zYW5kLXJhaWwnLFxuICAgIFNJREVfQllfU0lERTogJ2F0di1zaWRlLWJ5LXNpZGUnLFxuICAgIFRSQUlMRVI6ICdhdHYtdHJhaWxlcicsXG4gIH0sXG4gIEJPQVRNQVJUOiB7XG4gICAgUFdDOiAnYm9hdG1hcnQtcHdjJyxcbiAgICBUUkFJTEVSOiAnYm9hdG1hcnQtdHJhaWxlcicsXG4gIH0sXG4gIFJWOiB7XG4gICAgQ0xBU1NfQTogJ3J2LWNsYXNzLWEnLFxuICAgIENMQVNTX0I6ICdydi1jbGFzcy1iJyxcbiAgICBDTEFTU19DOiAncnYtY2xhc3MtYycsXG4gICAgRklGVEhfV0hFRUw6ICdydi1maWZ0aC13aGVlbCcsXG4gICAgRklTSF9IT1VTRTogJ3J2LWZpc2gtaG91c2UnLFxuICAgIFBBUktfTU9ERUw6ICdydi1wYXJrLW1vZGVsJyxcbiAgICBQT1BfVVBfQ0FNUEVSOiAncnYtcG9wLXVwLWNhbXBlcicsXG4gICAgVFJBVkVMX1RSQUlMRVI6ICdydi10cmF2ZWwtdHJhaWxlcicsXG4gICAgVFJVQ0tfQ0FNUEVSOiAncnYtdHJ1Y2stY2FtcGVyJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgUmVhbG1LZXlzV2l0aEljb25zID0gRXh0cmFjdDxSZWFsbUtleSwga2V5b2YgdHlwZW9mIElDT05fUkVBTE0+O1xudHlwZSBSZWFsbUljb24gPSB7XG4gIFtSZWFsbUtleSBpbiBSZWFsbUtleXNXaXRoSWNvbnNdOiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XVtrZXlvZiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XV07XG59W1JlYWxtS2V5c1dpdGhJY29uc107XG5cbmV4cG9ydCB0eXBlIEdsb2JhbEljb24gPSAodHlwZW9mIElDT04pW2tleW9mIHR5cGVvZiBJQ09OXTtcbmV4cG9ydCB0eXBlIEljb24gPSBHbG9iYWxJY29uIHwgUmVhbG1JY29uO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IFRpZGVEaXZpZGVyIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlRGl2aWRlci52dWUnO1xuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3RvZ2dsZSddKTtcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGhhc0JvdHRvbURpdmlkZXI/OiBib29sZWFuO1xuICAgIGhhc1RvcERpdmlkZXI/OiBib29sZWFuO1xuICAgIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGlzT3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBoYXNCb3R0b21EaXZpZGVyOiBmYWxzZSxcbiAgICBoYXNUb3BEaXZpZGVyOiBmYWxzZSxcbiAgICBpc0V4cGFuZGVkOiBmYWxzZSxcbiAgICBpc09wdGlvbmFsOiBmYWxzZSxcbiAgICBsYWJlbDogJycsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUNsaWNrID0gKCkgPT4ge1xuICAgIGVtaXQoJ3RvZ2dsZScpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInRpZGUtYWNjb3JkaW9uLWl0ZW1cIj5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc1RvcERpdmlkZXJcIiAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiWyd0aWRlLWFjY29yZGlvbi1oZWFkJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMxLkJFVFdFRU4sIENTUy5QQURESU5HLlkuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVUb2dnbGVDbGlja1wiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5IQUxGLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzFfU0VNSUJPTERdXCI+XG4gICAgICAgIDxzcGFuPnt7IHByb3BzLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICAgIHYtaWY9XCJwcm9wcy5pc09wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIChvcHRpb25hbClcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cImlzRXhwYW5kZWQgPyBJQ09OLkVYUEFORF9MRVNTIDogSUNPTi5FWFBBTkRfTU9SRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtYWNjb3JkaW9uLWJvZHknLCBwcm9wcy5pc0V4cGFuZGVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnLCBDU1MuRElTUExBWS5HUklEXVwiPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLk9WRVJGTE9XLlkuSElEREVOLCBDU1MuTUFSR0lOLlkuT05FLCBDU1MuRk9OVC5ST0xFLkJPRFlfMSwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5ERUZBVUxUXVwiPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc0JvdHRvbURpdmlkZXJcIiAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLWFjY29yZGlvbi1ib2R5IHtcbiAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmV4cGFuZGVkIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmNvbGxhcHNlZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgRUxFTUVOVCA9IHtcbiAgQlVUVE9OOiAnYnV0dG9uJyxcbiAgTElOSzogJ2EnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVEVYVF9BU19JQ09OID0ge1xuICBCVVRUT046ICdidXR0b24nLFxuICBESVY6ICdkaXYnLFxuICBMSU5LOiAnYScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBFbGVtZW50ID0gKHR5cGVvZiBFTEVNRU5UKVtrZXlvZiB0eXBlb2YgRUxFTUVOVF07XG5leHBvcnQgdHlwZSBFbGVtZW50VGV4dEFzSWNvbiA9ICh0eXBlb2YgRUxFTUVOVF9URVhUX0FTX0lDT04pW2tleW9mIHR5cGVvZiBFTEVNRU5UX1RFWFRfQVNfSUNPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBQUklPUklUWSA9IHtcbiAgUFJJTUFSWTogJ3ByaW1hcnknLFxuICBTRUNPTkRBUlk6ICdzZWNvbmRhcnknLFxuICBURVJUSUFSWTogJ3RlcnRpYXJ5JyxcbiAgUVVBVEVSTkFSWTogJ3F1YXRlcm5hcnknLFxuICBGTE9BVElORzogJ2Zsb2F0aW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFByaW9yaXR5ID0gKHR5cGVvZiBQUklPUklUWSlba2V5b2YgdHlwZW9mIFBSSU9SSVRZXTtcbiIsImV4cG9ydCBjb25zdCBUQVJHRVQgPSB7XG4gIEJMQU5LOiAnX2JsYW5rJyxcbiAgU0VMRjogdW5kZWZpbmVkLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0ID0gKHR5cGVvZiBUQVJHRVQpW2tleW9mIHR5cGVvZiBUQVJHRVRdO1xuIiwiZXhwb3J0IGNvbnN0IEFMRVJUID0ge1xuICBFUlJPUjogJ2Vycm9yJyxcbiAgSU5GTzogJ2luZm8nLFxuICBTVUNDRVNTOiAnc3VjY2VzcycsXG4gIFdBUk5JTkc6ICd3YXJuaW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFsZXJ0ID0gKHR5cGVvZiBBTEVSVClba2V5b2YgdHlwZW9mIEFMRVJUXTtcbiIsImltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuZXhwb3J0IGNvbnN0IEJBREdFX0NPTE9SID0ge1xuICBCTEFDSzogJ2JsYWNrJyxcbiAgQkxVRTogJ2JsdWUnLFxuICBHUkVFTjogJ2dyZWVuJyxcbiAgTElNRTogJ2xpbWUnLFxuICBPUkFOR0U6ICdvcmFuZ2UnLFxuICBQVVJQTEU6ICdwdXJwbGUnLFxuICBSRUQ6ICdyZWQnLFxuICBTQUxNT046ICdzYWxtb24nLFxuICBURUFMOiAndGVhbCcsXG4gIFlFTExPVzogJ3llbGxvdycsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQkFER0VfQ09MT1JfREVUQUlMUzogUmVjb3JkPFxuICBCYWRnZUNvbG9yLFxuICB7XG4gICAgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgICBpY29uQ29sb3I6IHN0cmluZztcbiAgfVxuPiA9IHtcbiAgW0JBREdFX0NPTE9SLkJMQUNLXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkhJR0gsXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLkRFRkFVTFQsXG4gIH0sXG4gIFtCQURHRV9DT0xPUi5CTFVFXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5CTFVFLFxuICAgIGljb25Db2xvcjogQ1NTLkZPTlQuQ09MT1IuR0xPQkFMLlBSSU1BUlkuQkxVRSxcbiAgfSxcbiAgW0JBREdFX0NPTE9SLkdSRUVOXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5HUkVFTixcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLkdSRUVOLFxuICB9LFxuICBbQkFER0VfQ09MT1IuTElNRV06IHtcbiAgICBib3JkZXJDb2xvcjogQ1NTLkJPUkRFUi5DT0xPUi5HTE9CQUwuTElNRSxcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLkxJTUUsXG4gIH0sXG4gIFtCQURHRV9DT0xPUi5PUkFOR0VdOiB7XG4gICAgYm9yZGVyQ29sb3I6IENTUy5CT1JERVIuQ09MT1IuR0xPQkFMLk9SQU5HRSxcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLk9SQU5HRSxcbiAgfSxcbiAgW0JBREdFX0NPTE9SLlBVUlBMRV06IHtcbiAgICBib3JkZXJDb2xvcjogQ1NTLkJPUkRFUi5DT0xPUi5HTE9CQUwuUFVSUExFLFxuICAgIGljb25Db2xvcjogQ1NTLkZPTlQuQ09MT1IuR0xPQkFMLlBSSU1BUlkuUFVSUExFLFxuICB9LFxuICBbQkFER0VfQ09MT1IuUkVEXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5SRUQsXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5HTE9CQUwuUFJJTUFSWS5SRUQsXG4gIH0sXG4gIFtCQURHRV9DT0xPUi5TQUxNT05dOiB7XG4gICAgYm9yZGVyQ29sb3I6IENTUy5CT1JERVIuQ09MT1IuR0xPQkFMLlNBTE1PTixcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLlNBTE1PTixcbiAgfSxcbiAgW0JBREdFX0NPTE9SLlRFQUxdOiB7XG4gICAgYm9yZGVyQ29sb3I6IENTUy5CT1JERVIuQ09MT1IuR0xPQkFMLlRFQUwsXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5HTE9CQUwuUFJJTUFSWS5URUFMLFxuICB9LFxuICBbQkFER0VfQ09MT1IuWUVMTE9XXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5ZRUxMT1csXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5HTE9CQUwuUFJJTUFSWS5ZRUxMT1csXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQkFER0VfVFJVU1RFRCA9IHtcbiAgWUVBUlNfMTA6ICcxMCcsXG4gIFlFQVJTXzE1OiAnMTUnLFxuICBZRUFSU181OiAnNScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCYWRnZUNvbG9yID0gKHR5cGVvZiBCQURHRV9DT0xPUilba2V5b2YgdHlwZW9mIEJBREdFX0NPTE9SXTtcbmV4cG9ydCB0eXBlIEJhZGdlVHJ1c3RlZFllYXJzID0gKHR5cGVvZiBCQURHRV9UUlVTVEVEKVtrZXlvZiB0eXBlb2YgQkFER0VfVFJVU1RFRF07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgaW1wb3J0IHR5cGUgeyBUYWIgfSBmcm9tICdAL3R5cGVzL1RhYic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhY3RpdmVUYWI6IG51bWJlcjtcbiAgICB0YWJzOiBUYWJbXTtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGFjdGl2ZVRhYjogMCxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBlbWl0KCdjaGFuZ2UnLCBpbmRleCk7XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgOmNsYXNzPVwiW1xuICAgICAgJ3RpZGUtYnV0dG9uLXNlZ21lbnRlZCcsXG4gICAgICBDU1MuQkcuU1VSRkFDRS5WQVJJQU5ULFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5HQVAuUVVBUlRFUixcbiAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICBDU1MuUEFERElORy5GVUxMLlFVQVJURVIsXG4gICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgQ1NTLldJRFRILkZVTEwsXG4gICAgXVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWJ1dHRvbi1zZWdtZW50ZWQtdGFiJyxcbiAgICAgICAgaW5kZXggPT09IGFjdGl2ZVRhYlxuICAgICAgICAgID8gW0NTUy5CRy5TVVJGQUNFLkRFRkFVTFQsIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuREVGQVVMVCwgQ1NTLlNIQURPVy5CT1RUT01dXG4gICAgICAgICAgOiBbJ2luYWN0aXZlJywgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXSxcbiAgICAgICAgQ1NTLkZMRVguR1JPVy5PTixcbiAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLlRXTyxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgQ1NTLlBBRERJTkcuWS5RVUFSVEVSLFxuICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgQ1NTLkZPTlQuUk9MRS5CVVRUT05fMSxcbiAgICAgICAgQ1NTLldISVRFU1BBQ0VfV1JBUC5PRkYsXG4gICAgICBdXCJcbiAgICAgIDpkYXRhLXRyYWNrPVwidGFiLmRhdGFUcmFjayB8fCB1bmRlZmluZWRcIlxuICAgICAgOmtleT1cInRhYi5sYWJlbFwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVDbGljayhpbmRleClcIlxuICAgICAgdi1mb3I9XCIodGFiLCBpbmRleCkgaW4gcHJvcHMudGFic1wiXG4gICAgPlxuICAgICAgPHNwYW4gOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuTEFCRUxfMl9TRU1JQk9MRF1cIj5cbiAgICAgICAge3sgdGFiLmxhYmVsIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxzcGFuXG4gICAgICAgIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzJfU0VNSUJPTERdXCJcbiAgICAgICAgdi1pZj1cInRhYi5jb3VudCAmJiB0YWIuY291bnQgPiAwXCJcbiAgICAgID5cbiAgICAgICAgKHt7IHRhYi5jb3VudCB9fSlcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1idXR0b24tc2VnbWVudGVkIHtcbiAgICBtYXgtd2lkdGg6IDIzLjNyZW07XG4gIH1cblxuICAudGlkZS1idXR0b24tc2VnbWVudGVkLXRhYiB7XG4gICAgZmxleDogMTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICAuaW5hY3RpdmU6bm90KDpob3Zlcikge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLXZhcmlhbnQpO1xuICB9XG5cbiAgLmluYWN0aXZlOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWRlZmF1bHQpO1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IFRZUEVfQ0FSRCA9IHtcbiAgQUNUSU9OQUJMRTogJ2FjdGlvbicsXG4gIElORk9STUFUSU9OQUw6ICdpbmZvcm1hdGlvbmFsJyxcbiAgU0VMRUNUQUJMRTogJ3NlbGVjdCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDYXJkVHlwZSA9ICh0eXBlb2YgVFlQRV9DQVJEKVtrZXlvZiB0eXBlb2YgVFlQRV9DQVJEXTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG9uVXBkYXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVCdXR0b25JY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgUFJJT1JJVFkgfSBmcm9tICdAL3R5cGVzL1ByaW9yaXR5JztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGJsZWVkPzogbnVtYmVyO1xuICAgIGlzRmxvYXRpbmc/OiBib29sZWFuO1xuICAgIGlzSGVhZGxpbmUxPzogYm9vbGVhbjtcbiAgICBpc0hpZGVhd2F5QnV0dG9ucz86IGJvb2xlYW47XG4gICAgaXNUb3VjaHNjcmVlbj86IGJvb2xlYW47XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBibGVlZDogdW5kZWZpbmVkLFxuICAgIGlzRmxvYXRpbmc6IGZhbHNlLFxuICAgIGlzSGVhZGxpbmUxOiBmYWxzZSxcbiAgICBpc0hpZGVhd2F5QnV0dG9uczogdHJ1ZSxcbiAgICBpc1RvdWNoc2NyZWVuOiB1bmRlZmluZWQsXG4gICAgc3VidGl0bGU6IHVuZGVmaW5lZCxcbiAgICB0aXRsZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICB0eXBlIEVtaXRzID0ge1xuICAgIChldmVudDogJ3NsaWRlQ2hhbmdlJywgc2xpZGVJbmRleDogbnVtYmVyKTogdm9pZDtcbiAgICAoZXZlbnQ6ICdzbGlkZXNBZGRlZFRvVmlldycsIHNsaWRlc0luVmlldzogbnVtYmVyW10pOiB2b2lkO1xuICB9O1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czxFbWl0cz4oKTtcblxuICBjb25zdCBjb250YWluZXJSZWY6IFJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuICBjb25zdCBzbGlkZU9ic2VydmVyID0gcmVmPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHNsb3RPYnNlcnZlciA9IHJlZjxNdXRhdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRSaWdodEVkZ2UgPSByZWYoKTtcbiAgY29uc3QgY29udGVudFdpZHRoID0gcmVmKCk7XG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHJlZigwKTtcbiAgY29uc3QgZnJhbWVXaWR0aCA9IHJlZigpO1xuICBjb25zdCBoYXNPdmVyZmxvdyA9IHJlZigpO1xuICBjb25zdCBpc0ZpcnN0U2xpZGUgPSByZWYoKTtcbiAgY29uc3QgaXNMYXN0U2xpZGUgPSByZWYoKTtcbiAgY29uc3QgbGFzdFBvc2l0aW9uID0gcmVmKCk7XG4gIGNvbnN0IHNob3dCdXR0b25zID0gcmVmKCk7XG5cbiAgY29uc3QgdXBkYXRlQ29udGFpbmVyQmxlZWQgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLmJsZWVkID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChjb250YWluZXJSZWYudmFsdWUgPT09IG51bGwpIHJldHVybjtcblxuICAgIGlmIChpc0xhc3RTbGlkZS52YWx1ZSAmJiBzaG93QnV0dG9ucy52YWx1ZSkge1xuICAgICAgLy8gUHJldmVudCBncmFkaWVudCBmcm9tIGJsZWVkaW5nIG9mZiBsZWZ0IGVkZ2UgaW4gbGFzdCBwb3NpdGlvbi5cbiAgICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zdHlsZS5tYXJnaW4gPSBgLSR7cHJvcHMuYmxlZWR9cHggLSR7cHJvcHMuYmxlZWR9cHggLSR7cHJvcHMuYmxlZWR9cHggMGA7XG4gICAgICBjb250YWluZXJSZWYudmFsdWUuc3R5bGUucGFkZGluZyA9IGAke3Byb3BzLmJsZWVkfXB4ICR7cHJvcHMuYmxlZWR9cHggJHtwcm9wcy5ibGVlZH1weCAwYDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJldmVudCBncmFkaWVudCBmcm9tIGJsZWVkaW5nIG9mZiByaWdodCBlZGdlIGluIGZpcnN0IHBvc2l0aW9uLlxuICAgICAgY29udGFpbmVyUmVmLnZhbHVlLnN0eWxlLm1hcmdpbiA9IGAtJHtwcm9wcy5ibGVlZH1weCAwIC0ke3Byb3BzLmJsZWVkfXB4IC0ke3Byb3BzLmJsZWVkfXB4YDtcbiAgICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zdHlsZS5wYWRkaW5nID0gYCR7cHJvcHMuYmxlZWR9cHggMCAke3Byb3BzLmJsZWVkfXB4ICR7cHJvcHMuYmxlZWR9cHhgO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTWVhc3VyZSB0aGUgY3VycmVudCBzbGlkZSBiYXNlZCBvbiB0aGUgc2Nyb2xsXG4gICAqIHBvc2l0aW9uIG9mIHRoZSBmcmFtZS4gVGhlIGN1cnJlbnQgc2xpZGUgaXNcbiAgICogdGhlIHNsaWRlIHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgbGVmdCBlZGdlIG9mXG4gICAqIHRoZSBmcmFtZS5cbiAgICovXG4gIGNvbnN0IG1lYXN1cmVDdXJyZW50U2xpZGUgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUmVmLnZhbHVlO1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAvLyBDYXN0IG9uY2UsIHNvIFRTIGtub3dzIHRoZXNlIGFyZSBIVE1MRWxlbWVudHNcbiAgICBjb25zdCBzbGlkZU9mZnNldHMgPSBBcnJheS5mcm9tKGNvbnRhaW5lci5jaGlsZHJlbiBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50PikubWFwKFxuICAgICAgKHNsaWRlKSA9PiBzbGlkZS5vZmZzZXRMZWZ0XG4gICAgKTtcblxuICAgIGlmIChzbGlkZU9mZnNldHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XG5cbiAgICBjb25zdCBjbG9zZXN0U2xpZGVPZmZzZXQgPSBzbGlkZU9mZnNldHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PlxuICAgICAgTWF0aC5hYnMoY3VyciAtIHNjcm9sbExlZnQpIDwgTWF0aC5hYnMocHJldiAtIHNjcm9sbExlZnQpID8gY3VyciA6IHByZXZcbiAgICApO1xuXG4gICAgY3VycmVudFNsaWRlLnZhbHVlID0gc2xpZGVPZmZzZXRzLmluZGV4T2YoY2xvc2VzdFNsaWRlT2Zmc2V0KTtcblxuICAgIHVwZGF0ZUNvbnRhaW5lckJsZWVkKCk7XG4gIH07XG5cbiAgY29uc3QgbWVhc3VyZURvbSA9ICgpID0+IHtcbiAgICBpZiAoY29udGFpbmVyUmVmLnZhbHVlID09PSBudWxsKSByZXR1cm47XG4gICAgY29udGVudFJpZ2h0RWRnZS52YWx1ZSA9IGNvbnRhaW5lclJlZi52YWx1ZS5zY3JvbGxMZWZ0ICsgY29udGFpbmVyUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGNvbnRlbnRXaWR0aC52YWx1ZSA9IGNvbnRhaW5lclJlZi52YWx1ZS5zY3JvbGxXaWR0aDtcbiAgICBmcmFtZVdpZHRoLnZhbHVlID0gY29udGFpbmVyUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGhhc092ZXJmbG93LnZhbHVlID0gY29udGVudFdpZHRoLnZhbHVlID4gZnJhbWVXaWR0aC52YWx1ZTtcbiAgICBpc0ZpcnN0U2xpZGUudmFsdWUgPSBjdXJyZW50U2xpZGUudmFsdWUgPT09IDA7XG4gICAgaXNMYXN0U2xpZGUudmFsdWUgPSBjb250ZW50UmlnaHRFZGdlLnZhbHVlID09PSBjb250ZW50V2lkdGgudmFsdWU7XG4gICAgbGFzdFBvc2l0aW9uLnZhbHVlID0gY29udGFpbmVyUmVmLnZhbHVlLnNjcm9sbFdpZHRoIC0gY29udGFpbmVyUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIHNob3dCdXR0b25zLnZhbHVlID0gaGFzT3ZlcmZsb3cudmFsdWUgJiYgIXByb3BzLmlzVG91Y2hzY3JlZW47XG5cbiAgICBtZWFzdXJlQ3VycmVudFNsaWRlKCk7XG4gIH07XG5cbiAgLy8gVE9ETzogZGVib3VuY2UgdGhpc1xuICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvU2xpZGUgPSAoc2xpZGVJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5lclJlZi52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zY3JvbGxUbyh7XG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICBsZWZ0OiAoY29udGFpbmVyUmVmLnZhbHVlLmNoaWxkcmVuW3NsaWRlSW5kZXhdIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRMZWZ0LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNob3dOZXh0U2xpZGUgPSAoKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5lclJlZi52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmIChjb250ZW50UmlnaHRFZGdlLnZhbHVlID4gY29udGVudFdpZHRoLnZhbHVlKSB7XG4gICAgICBjb250YWluZXJSZWYudmFsdWUuc2Nyb2xsVG8oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGxlZnQ6IGNvbnRlbnRXaWR0aC52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWlzTGFzdFNsaWRlLnZhbHVlKSB7XG4gICAgICBzY3JvbGxUb1NsaWRlKGN1cnJlbnRTbGlkZS52YWx1ZSArIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaG93UHJldmlvdXNTbGlkZSA9ICgpID0+IHtcbiAgICBpZiAoIWlzRmlyc3RTbGlkZS52YWx1ZSkge1xuICAgICAgc2Nyb2xsVG9TbGlkZShjdXJyZW50U2xpZGUudmFsdWUgLSAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb2JzZXJ2ZVNsaWRlcyA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogY29udGFpbmVyUmVmPy52YWx1ZSxcbiAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgdGhyZXNob2xkOiAwLjUsXG4gICAgfTtcblxuICAgIHNsaWRlT2JzZXJ2ZXIudmFsdWUgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGxldCBzbGlkZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGVJbmRleCA9IEFycmF5LmZyb20oY29udGFpbmVyUmVmLnZhbHVlPy5jaGlsZHJlbiA/PyBbXSkuaW5kZXhPZihlbnRyeS50YXJnZXQpO1xuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICBzbGlkZXMucHVzaChzbGlkZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzbGlkZXMubGVuZ3RoID4gMCkgZW1pdCgnc2xpZGVzQWRkZWRUb1ZpZXcnLCBzbGlkZXMpO1xuICAgIH0sIG9wdGlvbnMpO1xuICAgIEFycmF5LmZyb20oY29udGFpbmVyUmVmLnZhbHVlPy5jaGlsZHJlbiA/PyBbXSkuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGlmIChzbGlkZU9ic2VydmVyLnZhbHVlKSBzbGlkZU9ic2VydmVyLnZhbHVlLm9ic2VydmUoY2hpbGQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9ic2VydmVTbG90ID0gKCkgPT4ge1xuICAgIGNvbnN0IG9ic2VydmVyQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBvYnNlcnZlU2xpZGVzKCk7XG4gICAgfTtcbiAgICBzbG90T2JzZXJ2ZXIudmFsdWUgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICBpZiAoY29udGFpbmVyUmVmLnZhbHVlKSBzbG90T2JzZXJ2ZXIudmFsdWUub2JzZXJ2ZShjb250YWluZXJSZWYudmFsdWUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICB9O1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgaWYgKHdpbmRvdykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG1lYXN1cmVEb20pO1xuICAgIH1cblxuICAgIG1lYXN1cmVEb20oKTtcbiAgICBvYnNlcnZlU2xpZGVzKCk7XG4gICAgb2JzZXJ2ZVNsb3QoKTtcbiAgfSk7XG5cbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlRG9tKTtcbiAgICBzbGlkZU9ic2VydmVyLnZhbHVlPy5kaXNjb25uZWN0KCk7XG4gICAgc2xvdE9ic2VydmVyLnZhbHVlPy5kaXNjb25uZWN0KCk7XG4gIH0pO1xuXG4gIG9uVXBkYXRlZCgoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICB9KTtcblxuICB3YXRjaChjdXJyZW50U2xpZGUsICgpID0+IHtcbiAgICBlbWl0KCdzbGlkZUNoYW5nZScsIGN1cnJlbnRTbGlkZS52YWx1ZSk7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHNlY3Rpb25cbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1jYXJvdXNlbCcsXG4gICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkZMRVguRElSRUNUSU9OLkNPTFVNTixcbiAgICAgIENTUy5HQVAuVFdPLFxuICAgICAgQ1NTLldJRFRILk1BWF9GVUxMLFxuICAgIF1cIlxuICAgIHJlZj1cImNhcm91c2VsUmVmXCJcbiAgPlxuICAgIDxzZWN0aW9uXG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgcHJvcHMudGl0bGUgPyBDU1MuQVhJUzEuQkVUV0VFTiA6IENTUy5BWElTMS5FTkQsIENTUy5BWElTMi5DRU5URVIsIENTUy5XSURUSC5GVUxMXVwiXG4gICAgICB2LWlmPVwiIXByb3BzLmlzRmxvYXRpbmcgJiYgKHNob3dCdXR0b25zIHx8IHByb3BzLnRpdGxlKVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5PTkVdXCJcbiAgICAgICAgdi1pZj1cInByb3BzLnRpdGxlIHx8IHByb3BzLnN1YnRpdGxlXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltpc0hlYWRsaW5lMSA/IENTUy5GT05ULlJPTEUuSEVBRExJTkVfMSA6IENTUy5GT05ULlJPTEUuSEVBRExJTkVfMl1cIlxuICAgICAgICAgIHYtaWY9XCJwcm9wcy50aXRsZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy50aXRsZSB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuTEFCRUxfMiwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnN1YnRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByb3BzLnN1YnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuT05FXVwiXG4gICAgICAgIHYtaWY9XCJzaG93QnV0dG9uc1wiXG4gICAgICA+XG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpkaXNhYmxlZD1cImN1cnJlbnRTbGlkZSA9PT0gMFwiXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuVEVSVElBUllcIlxuICAgICAgICAgIEBjbGljaz1cInNob3dQcmV2aW91c1NsaWRlXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xhc3RTbGlkZVwiXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fUklHSFRcIlxuICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlRFUlRJQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJzaG93TmV4dFNsaWRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzbG90IG5hbWU9XCJtaXNjXCIgLz5cblxuICAgIDxkaXYgOmNsYXNzPVwiW0NTUy5QT1NJVElPTi5SRUxBVElWRV1cIj5cbiAgICAgIDx1bFxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtY2Fyb3VzZWwtY29udGFpbmVyJyxcbiAgICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICAgIENTUy5HQVAuT05FLFxuICAgICAgICAgIENTUy5MSVNUX0JVTExFVFMuT0ZGLFxuICAgICAgICAgIENTUy5PVkVSRkxPVy5YLlNDUk9MTCxcbiAgICAgICAgICBDU1MuU0NST0xMQkFSLk9GRixcbiAgICAgICAgICBDU1MuU05BUC5PTixcbiAgICAgICAgXVwiXG4gICAgICAgIHJlZj1cImNvbnRhaW5lclJlZlwiXG4gICAgICAgIEBzY3JvbGw9XCJoYW5kbGVTY3JvbGxcIlxuICAgICAgPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtY2Fyb3VzZWwtYnV0dG9uLW92ZXJsYXknLFxuICAgICAgICBDU1MuUE9TSVRJT04uQUJTT0xVVEUsXG4gICAgICAgIENTUy5QT1NJVElPTklORy5UT1AsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMS5CRVRXRUVOLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgQ1NTLkhFSUdIVC5GVUxMLFxuICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICBwcm9wcy5pc0hpZGVhd2F5QnV0dG9ucyA/ICdoaWRlYXdheScgOiAnJyxcbiAgICAgIF1cIlxuICAgICAgdi1pZj1cImlzRmxvYXRpbmcgJiYgc2hvd0J1dHRvbnNcIlxuICAgID5cbiAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLk1BUkdJTi5MRUZULk9ORSwgQ1NTLlBPSU5URVJfRVZFTlRTLk9OXVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImN1cnJlbnRTbGlkZSA9PT0gMFwiXG4gICAgICAgIDppY29uPVwiSUNPTi5DSEVWUk9OX0xFRlRcIlxuICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgQGNsaWNrPVwic2hvd1ByZXZpb3VzU2xpZGVcIlxuICAgICAgLz5cblxuICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuTUFSR0lOLlJJR0hULk9ORSwgQ1NTLlBPSU5URVJfRVZFTlRTLk9OXVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTGFzdFNsaWRlXCJcbiAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fUklHSFRcIlxuICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgQGNsaWNrPVwic2hvd05leHRTbGlkZVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1jYXJvdXNlbC1jb250YWluZXIge1xuICAgIHRyYW5zaXRpb246IG1hcmdpbiB2YXIoLS10aWRlLWFuaW1hdGUpLCBwYWRkaW5nIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICAudGlkZS1jYXJvdXNlbC1idXR0b24tb3ZlcmxheS5oaWRlYXdheSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIC50aWRlLWNhcm91c2VsOmhvdmVyIC50aWRlLWNhcm91c2VsLWJ1dHRvbi1vdmVybGF5LmhpZGVhd2F5IHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IE9CSkVDVF9GSVQgPSB7XG4gIENPTlRBSU46ICdjb250YWluJyxcbiAgQ09WRVI6ICdjb3ZlcicsXG4gIFNDQUxFX0RPV046ICdzY2FsZS1kb3duJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE9iamVjdEZpdCA9ICh0eXBlb2YgT0JKRUNUX0ZJVClba2V5b2YgdHlwZW9mIE9CSkVDVF9GSVRdO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IHsgT0JKRUNUX0ZJVCB9IGZyb20gJ0AvdHlwZXMvSW1hZ2UnO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgaW1wb3J0IHR5cGUgeyBPYmplY3RGaXQgfSBmcm9tICdAL3R5cGVzL0ltYWdlJztcbiAgaW1wb3J0IHR5cGUgeyBTb3VyY2UgfSBmcm9tICdAL3R5cGVzL1NvdXJjZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhbHQ6IHN0cmluZztcbiAgICBoZWlnaHQ/OiBzdHJpbmc7XG4gICAgaXNMYXp5PzogYm9vbGVhbjtcbiAgICBvYmplY3RGaXQ/OiBPYmplY3RGaXQ7XG4gICAgc291cmNlcz86IFNvdXJjZVtdO1xuICAgIHNyYz86IHN0cmluZztcbiAgICB3aWR0aD86IHN0cmluZztcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGFsdDogJycsXG4gICAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgaXNMYXp5OiB0cnVlLFxuICAgIG9iamVjdEZpdDogT0JKRUNUX0ZJVC5DT1ZFUixcbiAgICBzb3VyY2VzOiAoKSA9PiBbXSxcbiAgICBzcmM6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBwaWN0dXJlID0gcmVmKCk7XG4gIGNvbnN0IGltZyA9IHJlZigpO1xuXG4gIGNvbnN0IGltYWdlRGVmYXVsdCA9ICdodHRwczovL2Nkbi1zdGF0aWMudGlsYWJzLmlvL21hcmtldHBsYWNlL2NvbW1vbi9pbWFnZS1jb21pbmctc29vbi5zdmcnO1xuXG4gIGNvbnN0IG9iamVjdEZpdENsYXNzTmFtZSA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4ge1xuICAgIHN3aXRjaCAocHJvcHMub2JqZWN0Rml0KSB7XG4gICAgICBjYXNlIE9CSkVDVF9GSVQuQ09OVEFJTjpcbiAgICAgICAgcmV0dXJuIENTUy5PQkpFQ1QuQ09OVEFJTjtcbiAgICAgIGNhc2UgT0JKRUNUX0ZJVC5DT1ZFUjpcbiAgICAgICAgcmV0dXJuIENTUy5PQkpFQ1QuQ09WRVI7XG4gICAgICBjYXNlIE9CSkVDVF9GSVQuU0NBTEVfRE9XTjpcbiAgICAgICAgcmV0dXJuIENTUy5PQkpFQ1QuU0NBTEVfRE9XTjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBPQkpFQ1RfRklULkNPVkVSO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc2V0SW1hZ2VGcm9tRGVmYXVsdCA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U3JjID0gaW1nLnZhbHVlPy5jdXJyZW50U3JjO1xuICAgIGNvbnN0IHBpY3R1cmVTb3VyY2UgPSBwaWN0dXJlLnZhbHVlPy5xdWVyeVNlbGVjdG9yKGBzb3VyY2Vbc3Jjc2V0PVwiJHtjdXJyZW50U3JjfVwiXWApO1xuXG4gICAgaWYgKGN1cnJlbnRTcmMgJiYgcGljdHVyZVNvdXJjZSkge1xuICAgICAgcGljdHVyZVNvdXJjZS5zcmNzZXQgPSBpbWFnZURlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChpbWcudmFsdWUpIHtcbiAgICAgIGltZy52YWx1ZS5zcmMgPSBpbWFnZURlZmF1bHQ7XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHBpY3R1cmVcbiAgICA6Y2xhc3M9XCJbJ3RpZGUtaW1hZ2UnLCBDU1MuRElTUExBWS5CTE9DS11cIlxuICAgIHJlZj1cInBpY3R1cmVcIlxuICAgIDpzdHlsZT1cIlxuICAgICAgd2lkdGggfHwgaGVpZ2h0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgd2lkdGg6IHdpZHRoIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgXCJcbiAgPlxuICAgIDxzb3VyY2VcbiAgICAgIDprZXk9XCJzb3VyY2Uuc3Jjc2V0XCJcbiAgICAgIDptZWRpYT1cImAobWluLXdpZHRoOiR7c291cmNlLm1lZGlhfXB4KWBcIlxuICAgICAgOnNyY3NldD1cInNvdXJjZS5zcmNzZXRcIlxuICAgICAgdi1mb3I9XCJzb3VyY2UgaW4gcHJvcHMuc291cmNlc1wiXG4gICAgLz5cblxuICAgIDxpbWdcbiAgICAgIDphbHQ9XCJhbHRcIlxuICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuSEVJR0hULkZVTEwsIENTUy5PQkpFQ1QuQ0VOVEVSLCBvYmplY3RGaXRDbGFzc05hbWVdXCJcbiAgICAgIDpmZXRjaHByaW9yaXR5PVwiaXNMYXp5ID8gdW5kZWZpbmVkIDogJ2hpZ2gnXCJcbiAgICAgIDpsb2FkaW5nPVwicHJvcHMuaXNMYXp5ID8gJ2xhenknIDogJ2VhZ2VyJ1wiXG4gICAgICByZWY9XCJpbWdcIlxuICAgICAgOnNyYz1cInNyYyA/PyBpbWFnZURlZmF1bHRcIlxuICAgICAgQGVycm9yPVwic2V0SW1hZ2VGcm9tRGVmYXVsdFwiXG4gICAgLz5cbiAgPC9waWN0dXJlPlxuPC90ZW1wbGF0ZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuICBpbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICdAL3V0aWxpdGllcy9mb3JtYXQnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgZGF0YVRyYWNrPzogc3RyaW5nO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgICBpbnB1dElkPzogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG51bWJlcj86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIGRhdGFUcmFjazogJycsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgIGlucHV0SWQ6IHVuZGVmaW5lZCxcbiAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICBudW1iZXI6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuY2hlY2tlZCB8fCBwcm9wcy5pbmRldGVybWluYXRlKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1jaGVja2JveCcsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgZGlzYWJsZWQgPyBbJ2Rpc2FibGVkJywgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRl0gOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgXVwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIDpjaGVja2VkPVwiaXNDaGVja2VkXCJcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5OT05FXVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICA6bmFtZT1cInByb3BzLm5hbWVcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgQGNsaWNrLnByZXZlbnRcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1pbnB1dC1jaGVja2JveC1jdXN0b20nLFxuICAgICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMS5DRU5URVIsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5GTEVYLlNIUklOSy5PRkYsXG4gICAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICAgIGlzQ2hlY2tlZCA/IFtDU1MuQk9SREVSLkNPTE9SLkhJR0gsIENTUy5CRy5TRUNPTkRBUlldIDogW0NTUy5CT1JERVIuQ09MT1IuREVGQVVMVCwgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVF0sXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLlFVQVJURVIsXG4gICAgICAgIGlzQ2hlY2tlZCAmJiAnY2hlY2tlZCcsXG4gICAgICAgIGRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuUE9JTlRFUixcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU0VDT05EQVJZXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaW5kZXRlcm1pbmF0ZSA/IElDT04uUkVNT1ZFIDogSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJpc0NoZWNrZWRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICBkaXNhYmxlZCA/IENTUy5DVVJTT1IuTk9UX0FMTE9XRUQgOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgICBdXCJcbiAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgIEBjbGljay5wcmV2ZW50XG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICB2LWlmPVwicHJvcHMubnVtYmVyXCJcbiAgICAgID5cbiAgICAgICAgKHt7IGZvcm1hdE51bWJlcihwcm9wcy5udW1iZXIpIH19KVxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3guZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IHZhcigtLXRpZGUtZGlzYWJsZWQpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3gtY3VzdG9tIHtcbiAgICB3aWR0aDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgICBoZWlnaHQ6IHZhcigtLXRpZGUtZm9udC0yOCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyByZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY2hlY2tlZCA9IHJlZihwcm9wcy5jaGVja2VkKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5jaGVja2VkLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IGNoZWNrZWQudmFsdWUpIHtcbiAgICAgICAgY2hlY2tlZC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1yYWRpbycsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5QT0lOVEVSX0VWRU5UUy5PRkYsXG4gICAgICBwcm9wcy5kaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgIF1cIlxuICA+XG4gICAgPGlucHV0XG4gICAgICA6Y2hlY2tlZD1cImNoZWNrZWRcIlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLk5PTkVdXCJcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgbmFtZT1cIlwiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgdmFsdWU9XCJcIlxuICAgIC8+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LXJhZGlvLWN1c3RvbScsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgQ1NTLkFYSVMxLkNFTlRFUixcbiAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLk9ORSxcbiAgICAgICAgY2hlY2tlZCA/IENTUy5CT1JERVIuQ09MT1IuSElHSCA6IENTUy5CT1JERVIuQ09MT1IuREVGQVVMVCxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgQ1NTLkNVUlNPUi5QT0lOVEVSLFxuICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT04sXG4gICAgICAgIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtcmFkaW8tY2hlY2snLCBDU1MuQk9SREVSLlJBRElVUy5GVUxMLCBwcm9wcy5jaGVja2VkICYmIENTUy5CRy5TRUNPTkRBUlldXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuQk9EWV8xLCBDU1MuQ1VSU09SLlBPSU5URVIsIENTUy5QT0lOVEVSX0VWRU5UUy5PTl1cIlxuICAgICAgOmZvcj1cInByb3BzLmlucHV0SWRcIlxuICAgID5cbiAgICAgIHt7IHByb3BzLmxhYmVsIH19XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1pbnB1dC1yYWRpby5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1yYWRpby1jdXN0b20ge1xuICAgIHdpZHRoOiB2YXIoLS10aWRlLWZvbnQtMjgpO1xuICAgIGhlaWdodDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXJhZGlvLWNoZWNrIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBwcmljZVRvTnVtYmVyIH0gZnJvbSAnQC91dGlsaXRpZXMvZm9ybWF0JztcblxuaW1wb3J0IHR5cGUgeyBSYW5nZURhdGEgfSBmcm9tICdAL3R5cGVzL0ZhY2V0UmFuZ2UnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdJbnB1dCB9IGZyb20gJ0AvdHlwZXMvRm9ybSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJ0AvdHlwZXMvU2VsZWN0JztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uTGVuZ3RoLCBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgY29uc3QgZXJyb3JNZXNzYWdlRGVmYXVsdCA9ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCB2YWx1ZS4nO1xuXG5leHBvcnQgY29uc3Qgbm9FcnJvciA9IHtcbiAgbWVzc2FnZTogJycsXG4gIHZhbGlkOiB0cnVlLFxufSBhcyBSZWFkb25seTxWYWxpZGF0aW9uUmVzdWx0PjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRm9ybWF0ID0gKGZvcm1hdDogUmVnRXhwKSA9PiB7XG4gIHJldHVybiAodmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQgPT4ge1xuICAgIGxldCByZXN1bHQgPSBub0Vycm9yO1xuXG4gICAgaWYgKCF2YWx1ZS50cmltKCkubWF0Y2goZm9ybWF0KSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VEZWZhdWx0LFxuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3IsIGVycm9yRnJvbVJlZjogVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIC8vIGVycm9yIGluIHByb3BzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YWxpZGF0aW9uIGVycm9yXG4gIGlmICh0eXBlb2YgZXJyb3JGcm9tUHJvcHMgPT09ICdzdHJpbmcnICYmIGVycm9yRnJvbVByb3BzLmxlbmd0aCA+IDApIHJldHVybiBlcnJvckZyb21Qcm9wcztcblxuICByZXR1cm4gdHlwZW9mIGVycm9yRnJvbVJlZiA9PT0gJ3N0cmluZycgJiYgZXJyb3JGcm9tUmVmLmxlbmd0aCA+IDAgPyBlcnJvckZyb21SZWYgOiBlcnJvck1lc3NhZ2VEZWZhdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpZWxkSGFzRXJyb3IgPSAoZXJyb3JGcm9tUHJvcHM6IFZhbGlkYXRpb25FcnJvciwgZXJyb3JGcm9tUmVmOiBWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGVycm9yRnJvbVByb3BzICE9PSBmYWxzZSB8fCBlcnJvckZyb21SZWYgIT09IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRMZW5ndGhJc1ZhbGlkID0gKHsgbWF4bGVuZ3RoLCBtaW5sZW5ndGgsIHJlcXVpcmVkLCB2YWx1ZSB9OiBWYWxpZGF0aW9uTGVuZ3RoKSA9PiB7XG4gIGNvbnN0IGlzRW1wdHlBbmRVbnJlcXVpcmVkID0gdmFsdWUubGVuZ3RoID09PSAwICYmICFyZXF1aXJlZDtcbiAgY29uc3QgaXNUb29Mb25nID0gbWF4bGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heGxlbmd0aDtcbiAgY29uc3QgaXNUb29TaG9ydCA9ICFpc0VtcHR5QW5kVW5yZXF1aXJlZCAmJiBtaW5sZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWlubGVuZ3RoO1xuXG4gIHJldHVybiAhaXNUb29TaG9ydCAmJiAhaXNUb29Mb25nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heFJhbmdlSXNWYWxpZCA9ICh7IG1pbiB9OiBQaWNrPFJhbmdlRGF0YSwgJ21pbic+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWF4OiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNYXggPSAhaXNOYU4obmV3TWF4KSA/IG5ld01heCA6IG51bGw7XG4gICAgaWYgKG1pbiAmJiBuZXdNYXgpIHtcbiAgICAgIGlmIChuZXdNYXggPj0gbWluKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5gLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pblJhbmdlSXNWYWxpZCA9ICh7IG1heCB9OiBQaWNrPFJhbmdlRGF0YSwgJ21heCc+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWluOiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNaW4gPSAhaXNOYU4obmV3TWluKSA/IG5ld01pbiA6IG51bGw7XG4gICAgaWYgKG1heCAmJiBuZXdNaW4pIHtcbiAgICAgIGlmIChuZXdNaW4gPD0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGxlc3MgdGhhbiBtYXhgLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdE9wdGlvbnNGcm9tU3RyaW5ncyA9IChzdHJpbmdzOiBzdHJpbmdbXSkgPT5cbiAgc3RyaW5ncy5tYXAoXG4gICAgKG9wdGlvbikgPT5cbiAgICAgICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24sXG4gICAgICAgIHZhbHVlOiBvcHRpb24sXG4gICAgICB9IGFzIFNlbGVjdE9wdGlvbilcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUZpZWxkVmFsaWRhdGlvbiA9ICh7XG4gIGVycm9yLFxuICBlcnJvckZyb21Qcm9wcyxcbiAgbWF4bGVuZ3RoLFxuICBtaW5sZW5ndGgsXG4gIHJlcXVpcmVkID0gZmFsc2UsXG4gIHZhbGlkYXRvcnMsXG4gIHZhbHVlLFxufToge1xuICBlcnJvcjogUmVmPFZhbGlkYXRpb25FcnJvcj47XG4gIGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3I7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JbXTtcbiAgdmFsdWU/OiBSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn0pID0+IHtcbiAgLy8gZXJyb3IgaW4gcHJvcHMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbGlkYXRpb24gZXJyb3JcblxuICBlcnJvci52YWx1ZSA9IGVycm9yRnJvbVByb3BzID8gZXJyb3JGcm9tUHJvcHMgOiBmYWxzZTtcblxuICBpZiAoIWVycm9yLnZhbHVlICYmIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZT8udmFsdWUgfHwgJycsIHZhbGlkYXRvcnMpO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBlcnJvci52YWx1ZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWVycm9yLnZhbHVlICYmIChtYXhsZW5ndGggfHwgbWlubGVuZ3RoKSkge1xuICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRpb24gPSB2YWxpZGF0ZUxlbmd0aCh7XG4gICAgICBtYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGgsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhbHVlOiB2YWx1ZT8udmFsdWUgfHwgJycsXG4gICAgfSk7XG5cbiAgICBpZiAoIWxlbmd0aFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGVycm9yLnZhbHVlID0gbGVuZ3RoVmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGRzRnJvbVJlZnMoZmllbGRzOiB7IFtrZXk6IHN0cmluZ106IFJlZjxTdHJpbmdJbnB1dCB8IG51bGw+IH0pIHtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHMpIHtcbiAgICBpZiAoZmllbGRzW2tleV0udmFsdWU/LnJlcXVpcmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkc1trZXldLnZhbHVlPy52YWx1ZTtcbiAgICAgIHZhbGlkID0gdmFsaWQgJiYgISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkgIT09ICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmllbGRzW2tleV0udmFsdWU/LmVycm9yO1xuICAgIHZhbGlkID0gdmFsaWQgJiYgIWVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVMZW5ndGggPSAoe1xuICBtYXhsZW5ndGgsXG4gIG1pbmxlbmd0aCxcbiAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgdmFsdWUsXG59OiBWYWxpZGF0aW9uTGVuZ3RoKTogVmFsaWRhdGlvblJlc3VsdCA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIHZhbGlkOiB0cnVlLFxuICB9O1xuXG4gIHJlc3BvbnNlLnZhbGlkID0gZ2V0RmllbGRMZW5ndGhJc1ZhbGlkKHtcbiAgICBtYXhsZW5ndGgsXG4gICAgbWlubGVuZ3RoLFxuICAgIHJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcblxuICBpZiAocmVzcG9uc2UudmFsaWQpIHJldHVybiByZXNwb25zZTtcblxuICByZXNwb25zZS5tZXNzYWdlID0gZXJyb3JNZXNzYWdlRGVmYXVsdDtcblxuICBpZiAobWF4bGVuZ3RoICYmIG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiAke21pbmxlbmd0aH0gYW5kICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1heGxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbW9yZSB0aGFuICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbGVzcyB0aGFuICR7bWlubGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodmFsdWU6IHN0cmluZywgdmFsaWRhdG9yczogKCh2YWx1ZTogc3RyaW5nKSA9PiBWYWxpZGF0aW9uUmVzdWx0KVtdKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogJycsXG4gICAgdmFsaWQ6IHRydWUsXG4gIH07XG59XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yIH0gZnJvbSAnQC91dGlsaXRpZXMvdmFsaWRhdGlvbic7XG5cbiAgaW1wb3J0IHR5cGUgeyBTZWxlY3RGaWVsZCB9IGZyb20gJ0AvdHlwZXMvRmllbGQnO1xuICBpbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiwgU2VsZWN0T3B0aW9uR3JvdXAgfSBmcm9tICdAL3R5cGVzL1NlbGVjdCc7XG5cbiAgaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgU2VsZWN0RmllbGQge1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gIH1cblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVmKHByb3BzLnJlcXVpcmVkKTtcbiAgY29uc3QgdmFsdWUgPSByZWY8c3RyaW5nIHwgdW5kZWZpbmVkPihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmICF2YWx1ZS52YWx1ZSkgfHwgZ2V0RmllbGRIYXNFcnJvcihlcnJvci52YWx1ZSwgcHJvcHMuZXJyb3IpKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZXhwYW5kT3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nKTtcbiAgICBpbnB1dD8udmFsdWU/LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7IGVycm9yLCB2YWx1ZSB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1zZWxlY3QnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICBDU1MuR0FQLlFVQVJURVIsXG4gICAgICBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgICAgaGFzRXJyb3IgJiYgJ2Vycm9yJyxcbiAgICBdXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtYm9yZGVyJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkhBTEYsXG4gICAgICAgIENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6ICcnLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgXVwiXG4gICAgICBAY2xpY2s9XCJleHBhbmRPcHRpb25zXCJcbiAgICA+XG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgaGFzTWluaWxhYmVsID8gWydtaW5pbGFiZWwnLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzNdIDogQ1NTLkZPTlQuUk9MRS5MQUJFTF8xLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OLkFCU09MVVRFLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkxFRlQsXG4gICAgICAgICAgICBDU1MuTUFSR0lOLlRPUC5IQUxGLFxuICAgICAgICAgICAgQ1NTLk1BUkdJTi5MRUZULk9ORSxcbiAgICAgICAgICAgICFoYXNFcnJvciAmJiBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLlZBUklBTlQsXG4gICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZm9ybWF0dGVkTGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgQ1NTLlBBRERJTkcuQk9UVE9NLkhBTEYsXG4gICAgICAgICAgICBDU1MuUEFERElORy5YLk9ORSxcbiAgICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICAgICAgZGlzYWJsZWQgJiYgQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICA6cmVxdWlyZWQ9XCJyZXF1aXJlZFwiXG4gICAgICAgICAgQGZvY3VzPVwiaGFuZGxlRm9jdXNcIlxuICAgICAgICAgIEBmb2N1c291dD1cImhhbmRsZUZvY3VzT3V0XCJcbiAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwib3B0Z3JvdXAgaW4gcHJvcHMub3B0Z3JvdXBzXCI+XG4gICAgICAgICAgICA8b3B0Z3JvdXBcbiAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgIDprZXk9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLmxhYmVsXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiKG9wdGdyb3VwIGFzIFNlbGVjdE9wdGlvbkdyb3VwKS5sYWJlbFwiXG4gICAgICAgICAgICAgIHYtaWY9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgICAgOmtleT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiAob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9vcHRncm91cD5cblxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5CRy5TVVJGQUNFLkRFRkFVTFRdXCJcbiAgICAgICAgICAgICAgOmtleT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgOnNlbGVjdGVkPVwidmFsdWUgPT09IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLmxhYmVsIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICA6a2V5PVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIDpzZWxlY3RlZD1cInZhbHVlID09PSBvcHRpb24udmFsdWUgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUE9TSVRJT04uQUJTT0xVVEUsIENTUy5QT1NJVElPTklORy5SSUdIVCwgQ1NTLk1BUkdJTi5SSUdIVC5PTkUsIENTUy5QT0lOVEVSX0VWRU5UUy5PRkZdXCJcbiAgICAgICAgOmljb249XCJJQ09OLkVYUEFORF9NT1JFXCJcbiAgICAgICAgOnNpemU9XCJTSVpFLlNNQUxMXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5FUlJPUlwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJoYXNFcnJvclwiXG4gICAgICAvPlxuXG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzNdXCI+XG4gICAgICAgIHt7IGhhc0Vycm9yID8gZXJyb3JNZXNzYWdlIDogcHJvcHMuc3VwcG9ydGluZ1RleHQgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIHNlbGVjdCB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBoZWlnaHQ6IDEuMTg3NXJlbTtcbiAgICB0cmFuc2l0aW9uOiBmb250LXNpemUgdmFyKC0tdGlkZS1hbmltYXRlKSwgdHJhbnNmb3JtIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICBsYWJlbDpub3QoLm1pbmlsYWJlbCkge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIGNhbGMoOSAvIDE2ICogMXJlbSkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiB2YXIoLS10aWRlLWRpc2FibGVkKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdC5lcnJvciAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXN1cmZhY2UpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGg6IHZhcigtLXRpZGUtYm9yZGVyLXdpZHRoLTEpO1xuICAgIG91dGxpbmU6IHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgc29saWQgdmFyKC0tdGlkZS1ib3JkZXIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiBjYWxjKHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgKiAtMSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1zZWxlY3QuZXJyb3Ige1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXByaW1hcnkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yIG9wdGlvbiB7XG4gICAgY29sb3I6IHZhcigtLXRpZGUtb24tc3VyZmFjZSk7XG4gIH1cblxuICBzZWxlY3Qge1xuICAgIHBhZGRpbmctdG9wOiAyN3B4O1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IFRFWFRfSU5QVVRfVFlQRSA9IHtcbiAgREFURTogJ2RhdGUnLFxuICBEQVRFVElNRV9MT0NBTDogJ2RhdGV0aW1lLWxvY2FsJyxcbiAgRU1BSUw6ICdlbWFpbCcsXG4gIE1PTlRIOiAnbW9udGgnLFxuICBOVU1CRVI6ICdudW1iZXInLFxuICBQQVNTV09SRDogJ3Bhc3N3b3JkJyxcbiAgU0VBUkNIOiAnc2VhcmNoJyxcbiAgVEVMOiAndGVsJyxcbiAgVEVYVDogJ3RleHQnLFxuICBUSU1FOiAndGltZScsXG4gIFVSTDogJ3VybCcsXG4gIFdFRUs6ICd3ZWVrJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFR5cGUgPSAodHlwZW9mIFRFWFRfSU5QVVRfVFlQRSlba2V5b2YgdHlwZW9mIFRFWFRfSU5QVVRfVFlQRV07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgVEVYVF9JTlBVVF9UWVBFIH0gZnJvbSAnQC90eXBlcy9UZXh0SW5wdXQnO1xuICBpbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIGdldEZpZWxkSGFzRXJyb3IsIGhhbmRsZUZpZWxkVmFsaWRhdGlvbiB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZhbGlkYXRpb24nO1xuXG4gIGltcG9ydCB0eXBlIHsgRm9ybVZhbHVlVHJhbnNmb3JtZXIgfSBmcm9tICdAL3R5cGVzL0Zvcm0nO1xuICBpbXBvcnQgdHlwZSB7IEljb24gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgdHlwZSB7IFRleHRJbnB1dFR5cGUgfSBmcm9tICdAL3R5cGVzL1RleHRJbnB1dCc7XG4gIGltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGVycm9yPzogVmFsaWRhdGlvbkVycm9yO1xuICAgIGhhc0NsZWFyPzogYm9vbGVhbjtcbiAgICBpY29uTGVhZGluZz86IEljb247XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG1heGxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBtaW5sZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgc3VmZml4Pzogc3RyaW5nO1xuICAgIHN1cHBvcnRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHRyYW5zZm9ybVZhbHVlPzogRm9ybVZhbHVlVHJhbnNmb3JtZXI7XG4gICAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gICAgdmFsaWRhdG9ycz86IFZhbGlkYXRvcltdO1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYXV0b2NvbXBsZXRlOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaGFzQ2xlYXI6IGZhbHNlLFxuICAgIGljb25MZWFkaW5nOiB1bmRlZmluZWQsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgbWF4bGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgbWlubGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgcHJlZml4OiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1ZmZpeDogdW5kZWZpbmVkLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdHJhbnNmb3JtVmFsdWU6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBURVhUX0lOUFVUX1RZUEUuVEVYVCxcbiAgICB2YWxpZGF0b3JzOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgc2hvd1Bhc3N3b3JkID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgdmFsdWUgPSByZWYocHJvcHMudmFsdWUpO1xuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IGdldEVycm9yTWVzc2FnZShwcm9wcy5lcnJvciwgZXJyb3IudmFsdWUpKTtcbiAgY29uc3QgZm9ybWF0dGVkTGFiZWwgPSBjb21wdXRlZCgoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgcHJvcHMubGFiZWwgPyBgJHtwcm9wcy5sYWJlbH0gKmAgOiBwcm9wcy5sYWJlbCkpO1xuICBjb25zdCBoYXNDbGVhciA9IGNvbXB1dGVkKCgpID0+IHByb3BzLmhhc0NsZWFyICYmIHZhbHVlLnZhbHVlKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBjb21wdXRlZChcbiAgICAoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUudmFsdWUpIHx8IGdldEZpZWxkSGFzRXJyb3IoZXJyb3IudmFsdWUsIHByb3BzLmVycm9yKVxuICApO1xuICBjb25zdCBoYXNNaW5pbGFiZWwgPSBjb21wdXRlZCgoKSA9PiBoYXNGb2N1cy52YWx1ZSB8fCAhaXNFbXB0eS52YWx1ZSk7XG4gIGNvbnN0IGlzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB2YWx1ZS52YWx1ZSA9PT0gJycgfHwgdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHR5cGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRCAmJiBzaG93UGFzc3dvcmQudmFsdWUgPT09IHRydWUgPyBURVhUX0lOUFVUX1RZUEUuVEVYVCA6IHByb3BzLnR5cGVcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9ICcnO1xuICAgIGlucHV0LnZhbHVlPy5mb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBoYW5kbGVWYWxpZGF0aW9uKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLnRyYW5zZm9ybVZhbHVlKSB7XG4gICAgICBjb25zdCBkaWdpdHMgPSB2YWx1ZS52YWx1ZT8ubWF0Y2goL1xcZC9nKT8uam9pbignJykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICB2YWx1ZS52YWx1ZSA9IGRpZ2l0cyA/IHByb3BzLnRyYW5zZm9ybVZhbHVlKGRpZ2l0cykgOiAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICBoYW5kbGVGaWVsZFZhbGlkYXRpb24oe1xuICAgICAgZXJyb3IsXG4gICAgICBlcnJvckZyb21Qcm9wczogcHJvcHMuZXJyb3IsXG4gICAgICBtYXhsZW5ndGg6IHByb3BzLm1heGxlbmd0aCxcbiAgICAgIG1pbmxlbmd0aDogcHJvcHMubWlubGVuZ3RoLFxuICAgICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgICAgdmFsaWRhdG9yczogcHJvcHMudmFsaWRhdG9ycyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVZhbHVlID0gKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHVwZGF0ZVZhbHVlLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC10ZXh0JyxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICAgICAgQ1NTLkdBUC5RVUFSVEVSLFxuICAgICAgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJyxcbiAgICAgIGhhc0Vycm9yICYmICdlcnJvcicsXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LWJvcmRlcicsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBoYXNDbGVhciA/IFtDU1MuUEFERElORy5SSUdIVC5IQUxGLCBDU1MuUEFERElORy5MRUZULk9ORV0gOiBbQ1NTLlBBRERJTkcuWC5PTkVdLFxuICAgICAgICBDU1MuUEFERElORy5ZLkhBTEYsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuVEVYVCxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtcHJlZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnByZWZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5wcmVmaXggfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwiaW5wdXQ/LmZvY3VzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/IFsnbWluaWxhYmVsJywgQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXSA6IENTUy5GT05ULlJPTEUuTEFCRUxfMSxcbiAgICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgICAgQ1NTLkNVUlNPUi5URVhULFxuICAgICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICA6Zm9yPVwicHJvcHMuaW5wdXRJZFwiXG4gICAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZExhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZSA/ICdvbicgOiAnb2ZmJ1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIGRpc2FibGVkICYmIENTUy5DVVJTT1IuTk9UX0FMTE9XRUQsIENTUy5GT05ULlJPTEUuQk9EWV8xXVwiXG4gICAgICAgICAgICA6ZGF0YS10cmFjaz1cInByb3BzLmRhdGFUcmFja1wiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgICAgIDptaW5sZW5ndGg9XCJwcm9wcy5taW5sZW5ndGhcIlxuICAgICAgICAgICAgOm5hbWU9XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICAgIDpyZXF1aXJlZD1cInByb3BzLnJlcXVpcmVkXCJcbiAgICAgICAgICAgIDp0eXBlPVwidHlwZVwiXG4gICAgICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgICAgICBAZm9jdXM9XCJoYW5kbGVGb2N1c1wiXG4gICAgICAgICAgICBAZm9jdXNvdXQ9XCJoYW5kbGVGb2N1c091dFwiXG4gICAgICAgICAgICBAaW5wdXQ9XCJoYW5kbGVJbnB1dFwiXG4gICAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtc3VmZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnN1ZmZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5zdWZmaXggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUEFERElORy5ZLkhBTEYsIENTUy5QQURESU5HLkZVTEwuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIEBjbGljaz1cImhhbmRsZUNsZWFyXCJcbiAgICAgICAgdi1pZj1cImhhc0NsZWFyICYmIHByb3BzLnR5cGUgIT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuXG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5QQURESU5HLlkuSEFMRiwgQ1NTLlBBRERJTkcuRlVMTC5IQUxGLCBDU1MuQ1VSU09SLlBPSU5URVJdXCJcbiAgICAgICAgOmljb249XCJJQ09OLlZJU0lCSUxJVFlcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICBAY2xpY2s9XCJzaG93UGFzc3dvcmQgPSAhc2hvd1Bhc3N3b3JkXCJcbiAgICAgICAgdi1pZj1cInByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuUVVBUlRFUl1cIlxuICAgICAgdi1pZj1cInByb3BzLnN1cHBvcnRpbmdUZXh0IHx8IGhhc0Vycm9yXCJcbiAgICA+XG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW11cIlxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICBsYWJlbCB7XG4gICAgaGVpZ2h0OiAxLjE4NzVyZW07XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIHZhcigtLXRpZGUtYW5pbWF0ZSksIHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgbGFiZWw6bm90KC5taW5pbGFiZWwpLFxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeDpub3QoLm9mZnNldCksXG4gIC50aWRlLWlucHV0LXRleHQtc3VmZml4Om5vdCgub2Zmc2V0KSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgY2FsYyg5IC8gMTYgKiAxcmVtKSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeCxcbiAgLnRpZGUtaW5wdXQtdGV4dC1zdWZmaXgge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dC5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3IgLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3I6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQgaW5wdXQge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yLCBoYW5kbGVGaWVsZFZhbGlkYXRpb24gfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuICBpbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0AvdHlwZXMvVmFsaWRhdGlvbic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBWYWxpZGF0aW9uRXJyb3I7XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBtYXhsZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbWlubGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHJvd3M/OiBudW1iZXI7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtYXhsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBtaW5sZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHJvd3M6IDgsXG4gICAgc3VwcG9ydGluZ1RleHQ6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBlcnJvciA9IHJlZihwcm9wcy5lcnJvcik7XG4gIGNvbnN0IGhhc0ZvY3VzID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgaW5wdXQgPSByZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCB2YWx1ZSA9IHJlZihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLnZhbHVlKSB8fCBnZXRGaWVsZEhhc0Vycm9yKGVycm9yLnZhbHVlLCBwcm9wcy5lcnJvcilcbiAgKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09ICcnIHx8IHZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFuZGxlRmllbGRWYWxpZGF0aW9uKHtcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JGcm9tUHJvcHM6IHByb3BzLmVycm9yLFxuICAgICAgbWF4bGVuZ3RoOiBwcm9wcy5tYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGg6IHByb3BzLm1pbmxlbmd0aCxcbiAgICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtdGV4dGFyZWEnLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuR0FQLlFVQVJURVIsIGhhc0Vycm9yICYmICdlcnJvciddXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQnLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgICAgQ1NTLlBBRERJTkcuTEVGVC5PTkUsXG4gICAgICAgIENTUy5QQURESU5HLlRPUC5IQUxGLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICBoYXNNaW5pbGFiZWwgPyBbJ21pbmlsYWJlbCcsIENTUy5GT05ULlJPTEUuTEFCRUxfM10gOiBDU1MuRk9OVC5ST0xFLkxBQkVMXzEsXG4gICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICBDU1MuQ1VSU09SLlRFWFQsXG4gICAgICAgICAgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRixcbiAgICAgICAgXVwiXG4gICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgcmVmPVwibGFiZWxcIlxuICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgPlxuICAgICAgICB7eyBmb3JtYXR0ZWRMYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIDpjbGFzcz1cIltDU1MuV0lEVEguRlVMTCwgQ1NTLkZPTlQuUk9MRS5CT0RZXzFdXCJcbiAgICAgICAgOmRhdGEtdHJhY2s9XCJwcm9wcy5kYXRhVHJhY2tcIlxuICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgOm1pbmxlbmd0aD1cInByb3BzLm1pbmxlbmd0aFwiXG4gICAgICAgIDpuYW1lPVwicHJvcHMubmFtZVwiXG4gICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgOnJlcXVpcmVkPVwicHJvcHMucmVxdWlyZWRcIlxuICAgICAgICA6cm93cz1cInByb3BzLnJvd3NcIlxuICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgIEBmb2N1cz1cImhhbmRsZUZvY3VzXCJcbiAgICAgICAgQGZvY3Vzb3V0PVwiaGFuZGxlRm9jdXNPdXRcIlxuICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICB0ZXh0YXJlYSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxuPC9zdHlsZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgbGFiZWwge1xuICAgIGhlaWdodDogMS4xODc1cmVtO1xuICAgIHRyYW5zaXRpb246IGZvbnQtc2l6ZSB2YXIoLS10aWRlLWFuaW1hdGUpLCB0cmFuc2Zvcm0gdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC10ZXh0YXJlYS1maWVsZCB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWE6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhIHRleHRhcmVhIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UID0ge1xuICBTTTogJ3NtJyxcbiAgTUQ6ICdtZCcsXG4gIExHOiAnbGcnLFxuICBYTDogJ3hsJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBNRURJQSA9IHtcbiAgU006IDc2OCxcbiAgTUQ6IDk5MixcbiAgTEc6IDEyMzIsXG4gIFhMOiAxOTIwLFxufTtcblxuZXhwb3J0IHR5cGUgQnJlYWtwb2ludCA9ICh0eXBlb2YgQlJFQUtQT0lOVClba2V5b2YgdHlwZW9mIEJSRUFLUE9JTlRdO1xuZXhwb3J0IHR5cGUgTWVkaWEgPSAodHlwZW9mIE1FRElBKVtrZXlvZiB0eXBlb2YgTUVESUFdO1xuIiwiaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIERpcmVjdGx5IG1vZGlmaWVzIHRoZSBgPGJvZHk+YCBlbGVtZW50IHRvIGFwcGx5IG9yIHJlbW92ZSBzY3JvbGwgbG9jay5cbiAqIFdoZW4gYGZhbHNlYCBpcyBwcm92aWRlZCwgaXQgb25seSB1bmxvY2tzIHNjcm9sbCBpZiB0aGVyZSBhcmUgbm8gb3BlblxuICogSFRNTCBkaWFsb2cgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTY3JvbGxMb2NrID0gYXN5bmMgKGlzTG9ja2VkOiBib29sZWFuKSA9PiB7XG4gIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gIC8vIGNvbnN0IEJPRFlfTE9DS19DTEFTUyA9ICdib2R5LXNjcm9sbC1sb2NrJztcblxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICBpZiAoaXNMb2NrZWQpIHtcbiAgICBpZiAoIWJvZHkuZGF0YXNldC5zY3JvbGxMb2NrWSkge1xuICAgICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgPSBzY3JvbGxZLnRvU3RyaW5nKCk7XG4gICAgICBib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15JywgYCR7c2Nyb2xsWX1weGApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnaW5zZXQnLCAnMCcpO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGBjYWxjKDBweCAtIHZhcigtLXNhdmVkLXNjcm9sbC15LCAwcHgpKWApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdzY3JvbGwnKTtcbiAgICAgIGJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7XG5cbiAgICAgIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gICAgICAvLyBib2R5LmNsYXNzTGlzdC5hZGQoQk9EWV9MT0NLX0NMQVNTKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgbmV4dFRpY2soKTtcbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpYWxvZ1tvcGVuXScpKSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFkgPSBwYXJzZUludChib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgfHwgJzAnKTtcblxuICAgICAgLy8gQ2Fubm90IGJlIGFwcGxpZWQgdG8gYm9keSB0YWcgaW4gbWFya2V0cGxhY2UgcmVwbyBkdWUgdG8gZGF0YS1jc3Mtc2NvcGVcbiAgICAgIC8vIGJvZHkuY2xhc3NMaXN0LnJlbW92ZShCT0RZX0xPQ0tfQ0xBU1MpO1xuXG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdpbnNldCcpO1xuICAgICAgYm9keS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbWFyZ2luVG9wJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdvdmVyZmxvd1knKTtcbiAgICAgIGJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3Bvc2l0aW9uJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15Jyk7XG5cbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgIGJlaGF2aW9yOiAnYXV0bycsXG4gICAgICAgIHRvcDogc2F2ZWRTY3JvbGxZLFxuICAgICAgfSk7XG5cbiAgICAgIGRlbGV0ZSBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1k7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgVE9QX0xBWUVSX0lEID0gJ3RpZGUtdG9wLWxheWVyJztcblxuZXhwb3J0IGNvbnN0IGluaXRGYXV4VG9wTGF5ZXIgPSAoKSA9PiB7XG4gIGxldCB0b3BMYXllciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRPUF9MQVlFUl9JRCk7XG4gIGlmICghdG9wTGF5ZXIpIHtcbiAgICB0b3BMYXllciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRvcExheWVyLmlkID0gVE9QX0xBWUVSX0lEO1xuICAgIHRvcExheWVyLnNldEF0dHJpYnV0ZSgnZGF0YS1jc3Mtc2NvcGUnLCAnJyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0b3BMYXllcik7XG4gIH1cbiAgdG9wTGF5ZXIuc3R5bGUuaXNvbGF0aW9uID0gJ2lzb2xhdGUnO1xufTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IG5leHRUaWNrLCBvbk1vdW50ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IHsgQlJFQUtQT0lOVCB9IGZyb20gJ0AvdHlwZXMvQnJlYWtwb2ludCc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBQUklPUklUWSB9IGZyb20gJ0AvdHlwZXMvUHJpb3JpdHknO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG4gIGltcG9ydCB7IHNldFNjcm9sbExvY2sgfSBmcm9tICdAL3V0aWxpdGllcy92aWV3cG9ydCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaXNCYWNrQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc21pc3NpYmxlPzogYm9vbGVhbjtcbiAgICBpc09wZW46IGJvb2xlYW47XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgd2lkdGg/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBpc0JhY2tCdXR0b246IGZhbHNlLFxuICAgIGlzRGlzbWlzc2libGU6IHRydWUsXG4gICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICB9KTtcblxuICB0eXBlIEVtaXRzID0ge1xuICAgIChlOiAnY2xvc2UnKTogdm9pZDtcbiAgICAoZTogJ2JhY2snKTogdm9pZDtcbiAgfTtcblxuICBjb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8RW1pdHM+KCk7XG5cbiAgY29uc3QgbW9kYWxDb250ZW50OiBSZWY8SFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ+ID0gcmVmKCk7XG4gIGNvbnN0IG1vZGFsRGlhbG9nOiBSZWY8SFRNTERpYWxvZ0VsZW1lbnQgfCB1bmRlZmluZWQ+ID0gcmVmKCk7XG5cbiAgY29uc3QgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4gPSAoKSA9PiB7XG4gICAgbW9kYWxEaWFsb2cudmFsdWU/LnNob3dNb2RhbCgpO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSA9ICgpID0+IHtcbiAgICBtb2RhbERpYWxvZy52YWx1ZT8uY2xvc2UoKTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxDb250ZW50VG9Ub3AgPSAoKSA9PiB7XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgaWYgKCFtb2RhbENvbnRlbnQudmFsdWUpIHJldHVybjtcbiAgICAgIG1vZGFsQ29udGVudC52YWx1ZS5zY3JvbGxUb3AgPSAwO1xuICAgIH0pO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLmlzT3BlbixcbiAgICAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghbW9kYWxEaWFsb2cudmFsdWUpIHJldHVybjtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbigpO1xuICAgICAgICBzY3JvbGxDb250ZW50VG9Ub3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSgpO1xuICAgICAgfVxuICAgICAgc2V0U2Nyb2xsTG9jayhuZXdWYWx1ZSk7XG4gICAgfVxuICApO1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgaWYgKHByb3BzLmlzT3Blbikge1xuICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4oKTtcbiAgICB9XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpYWxvZ1xuICAgIDpjbGFzcz1cIlsndGlkZS1tb2RhbCcsIENTUy5CRy5JTklUSUFMLCBDU1MuSEVJR0hULkZVTEwsIENTUy5XSURUSC5GVUxMLCBDU1MuT1ZFUkZMT1cuWFkuSElEREVOXVwiXG4gICAgcmVmPVwibW9kYWxEaWFsb2dcIlxuICAgIDpzdHlsZT1cInsgJy0tbW9kYWwtd2lkdGgnOiBwcm9wcy53aWR0aCB9XCJcbiAgICBAY2xpY2suc2VsZj1cInRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZVwiXG4gICAgQGNsb3NlPVwiZW1pdCgnY2xvc2UnKVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLW1vZGFsLWJvZHknLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5PTkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICAgIENTUy5PVkVSRkxPVy5YWS5ISURERU4sXG4gICAgICAgIENTUy5QT1NJVElPTi5BQlNPTFVURSxcbiAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkJPVFRPTSxcbiAgICAgICAgQ1NTLlNIQURPVy5UT1AsXG4gICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICBDU1MuV0lEVEguTUFYX0ZVTEwsXG4gICAgICAgIENTUy53aXRoQnJlYWtwb2ludChbQ1NTLlNIQURPVy5CT1RUT01dLCBCUkVBS1BPSU5ULlNNKSxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxoZWFkZXJcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICd0aWRlLW1vZGFsLWhlYWRlcicsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgICBDU1MuUEFERElORy5ZLk9ORSxcbiAgICAgICAgICBDU1MuQk9SREVSLkJPVFRPTS5PTkUsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5DT0xPUi5MT1csXG4gICAgICAgIF1cIlxuICAgICAgPlxuICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJlbWl0KCdiYWNrJylcIlxuICAgICAgICAgIHRpdGxlPVwiQmFja1wiXG4gICAgICAgICAgdi1pZj1cImlzQmFja0J1dHRvblwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkhFQURMSU5FXzJdXCJcbiAgICAgICAgICB2LXRleHQ9XCJ0aXRsZVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GTEVYLkdST1cuT0ZGLCBDU1MuRkxFWC5TSFJJTksuT0ZGLCBDU1MuTUFSR0lOLkxFRlQuQVVUT11cIlxuICAgICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwidHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlXCJcbiAgICAgICAgICB2LWlmPVwiaXNEaXNtaXNzaWJsZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtbW9kYWwtY29udGVudCcsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuR1JJRCxcbiAgICAgICAgICBDU1MuT1ZFUkZMT1cuWS5BVVRPLFxuICAgICAgICAgIENTUy5PVkVSRkxPVy5YLkhJRERFTixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgICBDU1MuUEFERElORy5ZLlRXTyxcbiAgICAgICAgXVwiXG4gICAgICAgIHJlZj1cIm1vZGFsQ29udGVudFwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGZvb3RlclxuICAgICAgICA6Y2xhc3M9XCJbJ3RpZGUtbW9kYWwtZm9vdGVyJywgQ1NTLkFYSVMxLkVORCwgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkdBUC5UV08sIENTUy5QQURESU5HLlkuT05FLCBDU1MuU0hBRE9XLlRPUF1cIlxuICAgICAgICB2LWlmPVwiJHNsb3RzLmZvb3RlclwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIiAvPlxuICAgICAgPC9mb290ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtbW9kYWwge1xuICAgIC0tbW9kYWwtcGFkZGluZy14OiAyMHB4O1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gICAgbWF4LWhlaWdodDogdW5zZXQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10aWRlLWFuaW1hdGUpIGFsbG93LWRpc2NyZXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgfVxuICAudGlkZS1tb2RhbFtvcGVuXSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICB9XG4gIC50aWRlLW1vZGFsOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRpZGUtYW5pbWF0ZSkgYWxsb3ctZGlzY3JldGU7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCk7XG4gIH1cbiAgLnRpZGUtbW9kYWxbb3Blbl06OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLXRyYW5zcGFyZW50LTQwMCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiB2YXIoLS10aWRlLWJnLWJsdXIpO1xuICB9XG4gIEBzdGFydGluZy1zdHlsZSB7XG4gICAgLnRpZGUtbW9kYWxbb3Blbl0ge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICB9XG4gICAgLnRpZGUtbW9kYWxbb3Blbl06OmJhY2tkcm9wIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiB2YXIoLS10aWRlLWJnLWJsdXIpO1xuICAgIH1cbiAgfVxuICAudGlkZS1tb2RhbC1ib2R5IHtcbiAgICB3aWR0aDogdmFyKC0tbW9kYWwtd2lkdGgsIDU3NnB4KTtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSB2YXIoLS10aWRlLXNwYWNpbmctMikpO1xuICB9XG5cbiAgLnRpZGUtbW9kYWwtaGVhZGVyLFxuICAudGlkZS1tb2RhbC1mb290ZXIge1xuICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1tb2RhbC1wYWRkaW5nLXgpO1xuICB9XG4gIC50aWRlLW1vZGFsLWNvbnRlbnQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tbW9kYWwtcGFkZGluZy14KSAxZnIgdmFyKC0tbW9kYWwtcGFkZGluZy14KTtcbiAgfVxuICA6d2hlcmUoLnRpZGUtbW9kYWwtY29udGVudCk6ZGVlcCg+IDp3aGVyZSgqKSkge1xuICAgIGdyaWQtY29sdW1uOiAyO1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLnRpZGUtbW9kYWwtYm9keSB7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuICB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC50aWRlLW1vZGFsIHtcbiAgICAgIC0tbW9kYWwtcGFkZGluZy14OiB2YXIoLS10aWRlLXNwYWNpbmctMik7XG4gICAgfVxuICAgIC50aWRlLW1vZGFsLWJvZHkge1xuICAgICAgbWF4LWhlaWdodDogODUlO1xuICAgICAgYm90dG9tOiBpbml0aWFsO1xuICAgIH1cbiAgfVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGNvbXB1dGVkLCByZWYgfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IFRpZGVCdXR0b25QYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uUGFnaW5hdGlvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgUFJJT1JJVFkgfSBmcm9tICdAL3R5cGVzL1ByaW9yaXR5JztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgcGFnZUN1cnJlbnQ/OiBudW1iZXI7XG4gICAgcGFnZVRvdGFsPzogbnVtYmVyO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgcGFnZUN1cnJlbnQ6IDEsXG4gICAgcGFnZVRvdGFsOiAxLFxuICB9KTtcblxuICBjb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWydjaGFuZ2UnXSk7XG5cbiAgY29uc3QgcGFnZUN1cnJlbnQgPSByZWYocHJvcHMucGFnZUN1cnJlbnQpO1xuXG4gIGNvbnN0IHBhZ2luYXRpb25CdXR0b25zID0gY29tcHV0ZWQoKCkgPT4gbmV3IEFycmF5KHByb3BzLnBhZ2VUb3RhbCkuZmlsbCgnJykubWFwKChlbXB0eSwgaW5kZXgpID0+IGluZGV4ICsgMSkpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBwYWdlQ3VycmVudC52YWx1ZSA9IGluZGV4O1xuXG4gICAgZW1pdCgnY2hhbmdlJywgZXZlbnQsIGluZGV4KTtcbiAgfTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxzZWN0aW9uXG4gICAgOmNsYXNzPVwiWyd0aWRlLXBhZ2luYXRpb24nLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuQVhJUzEuQ0VOVEVSLCBDU1MuQVhJUzIuQ0VOVEVSLCBDU1MuR0FQLlFVQVJURVIsIENTUy5XSURUSC5GVUxMXVwiXG4gID5cbiAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgIDpkaXNhYmxlZD1cInBhZ2VDdXJyZW50ID09PSAxXCJcbiAgICAgIDppY29uPVwiSUNPTi5DSEVWUk9OX0xFRlRcIlxuICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVDbGljayhwYWdlQ3VycmVudCAtIDEpXCJcbiAgICAvPlxuXG4gICAgPHVsIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuQVhJUzIuQ0VOVEVSLCBDU1MuR0FQLlFVQVJURVIsIENTUy5MSVNUX0JVTExFVFMuT0ZGXVwiPlxuICAgICAgPGxpXG4gICAgICAgIDprZXk9XCJwYWdpbmF0aW9uQnV0dG9uXCJcbiAgICAgICAgdi1mb3I9XCJwYWdpbmF0aW9uQnV0dG9uIGluIHBhZ2luYXRpb25CdXR0b25zXCJcbiAgICAgID5cbiAgICAgICAgPFRpZGVCdXR0b25QYWdpbmF0aW9uXG4gICAgICAgICAgOmRpc2FibGVkPVwicGFnZUN1cnJlbnQgPT09IHBhZ2luYXRpb25CdXR0b25cIlxuICAgICAgICAgIDpsYWJlbD1cInBhZ2luYXRpb25CdXR0b25cIlxuICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICAgIEBjbGljaz1cImhhbmRsZUNsaWNrKHBhZ2luYXRpb25CdXR0b24pXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cblxuICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgOmRpc2FibGVkPVwicGFnZUN1cnJlbnQgPT09IHBhZ2luYXRpb25CdXR0b25zW3BhZ2luYXRpb25CdXR0b25zLmxlbmd0aCAtIDFdXCJcbiAgICAgIDppY29uPVwiSUNPTi5DSEVWUk9OX1JJR0hUXCJcbiAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2socGFnZUN1cnJlbnQgKyAxKVwiXG4gICAgLz5cbiAgPC9zZWN0aW9uPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD48L3N0eWxlPlxuIiwiLyoqXG4gKiBDdXN0b20gcG9zaXRpb25pbmcgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdmlydHVhbC1lbGVtZW50c1xuICovXG5cbmNvbnN0IHNpZGVzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmNvbnN0IGFsaWdubWVudHMgPSBbJ3N0YXJ0JywgJ2VuZCddO1xuY29uc3QgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9zaWRlcy5yZWR1Y2UoKGFjYywgc2lkZSkgPT4gYWNjLmNvbmNhdChzaWRlLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzBdLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzFdKSwgW10pO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IGNyZWF0ZUNvb3JkcyA9IHYgPT4gKHtcbiAgeDogdixcbiAgeTogdlxufSk7XG5jb25zdCBvcHBvc2l0ZVNpZGVNYXAgPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5jb25zdCBvcHBvc2l0ZUFsaWdubWVudE1hcCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5mdW5jdGlvbiBjbGFtcChzdGFydCwgdmFsdWUsIGVuZCkge1xuICByZXR1cm4gbWF4KHN0YXJ0LCBtaW4odmFsdWUsIGVuZCkpO1xufVxuZnVuY3Rpb24gZXZhbHVhdGUodmFsdWUsIHBhcmFtKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZShwYXJhbSkgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFNpZGUocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEF4aXNMZW5ndGgoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBjb25zdCBsciA9IFsnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCBybCA9IFsncmlnaHQnLCAnbGVmdCddO1xuICBjb25zdCB0YiA9IFsndG9wJywgJ2JvdHRvbSddO1xuICBjb25zdCBidCA9IFsnYm90dG9tJywgJ3RvcCddO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsIDogbHI7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyIDogcmw7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YiA6IGJ0O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSByZWN0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgbGVmdDogeCxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWxpZ25tZW50cywgY2xhbXAsIGNyZWF0ZUNvb3JkcywgZXZhbHVhdGUsIGV4cGFuZFBhZGRpbmdPYmplY3QsIGZsb29yLCBnZXRBbGlnbm1lbnQsIGdldEFsaWdubWVudEF4aXMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRBeGlzTGVuZ3RoLCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZUF4aXMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRQYWRkaW5nT2JqZWN0LCBnZXRTaWRlLCBnZXRTaWRlQXhpcywgbWF4LCBtaW4sIHBsYWNlbWVudHMsIHJlY3RUb0NsaWVudFJlY3QsIHJvdW5kLCBzaWRlcyB9O1xuIiwiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0cy5mbG9hdGluZy5oZWlnaHRcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgb3B0aW9ucyxcbiAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgfSA9IHN0YXRlO1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSkgfHwge307XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgY2F1c2VzIHRoZSBhcnJvdyB0byBubyBsb25nZXIgYmVcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXG4gICAgY29uc3QgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIC0gMTtcbiAgICBjb25zdCBtaW5QYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWluUHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaWYgdGhlIGNlbnRlclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXG4gICAgY29uc3QgbWluJDEgPSBtaW5QYWRkaW5nO1xuICAgIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAtIG1heFBhZGRpbmc7XG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgICBjb25zdCBvZmZzZXQgPSBjbGFtcChtaW4kMSwgY2VudGVyLCBtYXgpO1xuXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xuICAgIC8vIHRvIHBvaW50IHRvIG5vdGhpbmcgZm9yIGFuIGFsaWduZWQgcGxhY2VtZW50LCBhZGp1c3QgdGhlIG9mZnNldCBvZiB0aGVcbiAgICAvLyBmbG9hdGluZyBlbGVtZW50IGl0c2VsZi4gVG8gZW5zdXJlIGBzaGlmdCgpYCBjb250aW51ZXMgdG8gdGFrZSBhY3Rpb24sXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxuICAgIGNvbnN0IHNob3VsZEFkZE9mZnNldCA9ICFtaWRkbGV3YXJlRGF0YS5hcnJvdyAmJiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPSBudWxsICYmIGNlbnRlciAhPT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGluaXRpYWxTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGluaXRpYWxQbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2lkZUF4aXMgPT09IGluaXRpYWxTaWRlQXhpcyB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBiaWFzIHRvIHRoZSBgeWAgc2lkZSBheGlzIGR1ZSB0byBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgZGlyZWN0aW9ucyBmYXZvcmluZyBncmVhdGVyIHdpZHRoLlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2lkZUF4aXMgPT09ICd5JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pLm1hcChkID0+IFtkLnBsYWNlbWVudCwgZC5vdmVyZmxvd3MuZmlsdGVyKG92ZXJmbG93ID0+IG92ZXJmbG93ID4gMCkucmVkdWNlKChhY2MsIG92ZXJmbG93KSA9PiBhY2MgKyBvdmVyZmxvdywgMCldKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaW5pdGlhbFBsYWNlbWVudCc6XG4gICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZW1lbnQgIT09IHJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aFxuICB9O1xufVxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBzaWRlcy5zb21lKHNpZGUgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaGlkZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdHJhdGVneSA9ICdyZWZlcmVuY2VIaWRkZW4nLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgJ3JlZmVyZW5jZUhpZGRlbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLnJlZmVyZW5jZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW46IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnZXNjYXBlZCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMuZmxvYXRpbmcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRPZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIGVzY2FwZWQ6IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0cykge1xuICBjb25zdCBtaW5YID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICBjb25zdCBtaW5ZID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QudG9wKSk7XG4gIGNvbnN0IG1heFggPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICBjb25zdCBtYXhZID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QuYm90dG9tKSk7XG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRSZWN0c0J5TGluZShyZWN0cykge1xuICBjb25zdCBzb3J0ZWRSZWN0cyA9IHJlY3RzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgY29uc3QgZ3JvdXBzID0gW107XG4gIGxldCBwcmV2UmVjdCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByZWN0ID0gc29ydGVkUmVjdHNbaV07XG4gICAgaWYgKCFwcmV2UmVjdCB8fCByZWN0LnkgLSBwcmV2UmVjdC55ID4gcHJldlJlY3QuaGVpZ2h0IC8gMikge1xuICAgICAgZ3JvdXBzLnB1c2goW3JlY3RdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5wdXNoKHJlY3QpO1xuICAgIH1cbiAgICBwcmV2UmVjdCA9IHJlY3Q7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcy5tYXAocmVjdCA9PiByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChyZWN0KSkpO1xufVxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdpbmxpbmUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgLy8gQSBNb3VzZUV2ZW50J3MgY2xpZW50e1gsWX0gY29vcmRzIGNhbiBiZSB1cCB0byAyIHBpeGVscyBvZmYgYVxuICAgICAgLy8gQ2xpZW50UmVjdCdzIGJvdW5kcywgZGVzcGl0ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYmVpbmcgdHJpZ2dlcmVkLiBBXG4gICAgICAvLyBwYWRkaW5nIG9mIDIgc2VlbXMgdG8gaGFuZGxlIHRoaXMgaXNzdWUuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZGRpbmcgPSAyLFxuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgbmF0aXZlQ2xpZW50UmVjdHMgPSBBcnJheS5mcm9tKChhd2FpdCAocGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldENsaWVudFJlY3RzKGVsZW1lbnRzLnJlZmVyZW5jZSkpKSB8fCBbXSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IGdldFJlY3RzQnlMaW5lKG5hdGl2ZUNsaWVudFJlY3RzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgICAgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlY3RzIGFuZCB0aGV5IGFyZSBkaXNqb2luZWQuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPT09IDIgJiYgY2xpZW50UmVjdHNbMF0ubGVmdCA+IGNsaWVudFJlY3RzWzFdLnJpZ2h0ICYmIHggIT0gbnVsbCAmJiB5ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCByZWN0IGluIHdoaWNoIHRoZSBwb2ludCBpcyBmdWxseSBpbnNpZGUuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3RzLmZpbmQocmVjdCA9PiB4ID4gcmVjdC5sZWZ0IC0gcGFkZGluZ09iamVjdC5sZWZ0ICYmIHggPCByZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCAmJiB5ID4gcmVjdC50b3AgLSBwYWRkaW5nT2JqZWN0LnRvcCAmJiB5IDwgcmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgfHwgZmFsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBhcmUgMiBvciBtb3JlIGNvbm5lY3RlZCByZWN0cy5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgaWYgKGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5Jykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUb3AgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTGVmdFNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICdsZWZ0JztcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgbWluTGVmdCA9IG1pbiguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgICAgICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIocmVjdCA9PiBpc0xlZnRTaWRlID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0IDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbWVhc3VyZVJlY3RzW21lYXN1cmVSZWN0cy5sZW5ndGggLSAxXS5ib3R0b207XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzZXRSZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZzogZWxlbWVudHMuZmxvYXRpbmcsXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9KTtcbiAgICAgIGlmIChyZWN0cy5yZWZlcmVuY2UueCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueCB8fCByZWN0cy5yZWZlcmVuY2UueSAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueSB8fCByZWN0cy5yZWZlcmVuY2Uud2lkdGggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLndpZHRoIHx8IHJlY3RzLnJlZmVyZW5jZS5oZWlnaHQgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogcmVzZXRSZWN0c1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQsXG4gICAgcGxhdGZvcm0sXG4gICAgZWxlbWVudHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gWydsZWZ0JywgJ3RvcCddLmluY2x1ZGVzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLm1haW5BeGlzIHx8IDAsXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcbiAgICBhbGlnbm1lbnRBeGlzOiByYXdWYWx1ZS5hbGlnbm1lbnRBeGlzXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgW21haW5BeGlzXTogY2hlY2tNYWluQXhpcyxcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBbJ3RvcCcsICdsZWZ0J10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc1lBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XG4gICAgICBsZXQgaGVpZ2h0U2lkZTtcbiAgICAgIGxldCB3aWR0aFNpZGU7XG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IHNpZGU7XG4gICAgICAgIHdpZHRoU2lkZSA9IGFsaWdubWVudCA9PT0gKChhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpID8gJ3N0YXJ0JyA6ICdlbmQnKSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFNpZGUgPSBzaWRlO1xuICAgICAgICBoZWlnaHRTaWRlID0gYWxpZ25tZW50ID09PSAnZW5kJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gbWluKHdpZHRoIC0gb3ZlcmZsb3dbd2lkdGhTaWRlXSwgbWF4aW11bUNsaXBwaW5nV2lkdGgpO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YS5lbmFibGVkLngpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIuZW5hYmxlZC55KSB7XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsImZ1bmN0aW9uIGhhc1dpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobm9kZSkge1xuICBpZiAoaXNOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIChub2RlLm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIC8vIE1vY2tlZCBub2RlcyBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBtYXkgbm90IGJlIGluc3RhbmNlcyBvZiBOb2RlLiBCeVxuICAvLyByZXR1cm5pbmcgYCNkb2N1bWVudGAgYW4gaW5maW5pdGUgbG9vcCB3b24ndCBvY2N1ci5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yMzE3XG4gIHJldHVybiAnI2RvY3VtZW50Jztcbn1cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50O1xuICByZXR1cm4gKG5vZGUgPT0gbnVsbCB8fCAoX25vZGUkb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbn1cbmZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChub2RlKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSAoaXNOb2RlKG5vZGUpID8gbm9kZS5vd25lckRvY3VtZW50IDogbm9kZS5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX3JlZi5kb2N1bWVudEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc05vZGUodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuSFRNTEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSB8fCB0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhWydpbmxpbmUnLCAnY29udGVudHMnXS5pbmNsdWRlcyhkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5mdW5jdGlvbiBpc1RvcExheWVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXS5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50T3JDc3MpIHtcbiAgY29uc3Qgd2Via2l0ID0gaXNXZWJLaXQoKTtcbiAgY29uc3QgY3NzID0gaXNFbGVtZW50KGVsZW1lbnRPckNzcykgPyBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRPckNzcykgOiBlbGVtZW50T3JDc3M7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTIvI2luZGl2aWR1YWwtdHJhbnNmb3Jtc1xuICByZXR1cm4gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZSddLnNvbWUodmFsdWUgPT4gY3NzW3ZhbHVlXSA/IGNzc1t2YWx1ZV0gIT09ICdub25lJyA6IGZhbHNlKSB8fCAoY3NzLmNvbnRhaW5lclR5cGUgPyBjc3MuY29udGFpbmVyVHlwZSAhPT0gJ25vcm1hbCcgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmJhY2tkcm9wRmlsdGVyID8gY3NzLmJhY2tkcm9wRmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJywgJ2ZpbHRlciddLnNvbWUodmFsdWUgPT4gKGNzcy53aWxsQ2hhbmdlIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpIHx8IFsncGFpbnQnLCAnbGF5b3V0JywgJ3N0cmljdCcsICdjb250ZW50J10uc29tZSh2YWx1ZSA9PiAoY3NzLmNvbnRhaW4gfHwgJycpLmluY2x1ZGVzKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBsZXQgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBpZiAoaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIGlmIChpc1RvcExheWVyKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgaWYgKHR5cGVvZiBDU1MgPT09ICd1bmRlZmluZWQnIHx8ICFDU1Muc3VwcG9ydHMpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIENTUy5zdXBwb3J0cygnLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXInLCAnbm9uZScpO1xufVxuZnVuY3Rpb24gaXNMYXN0VHJhdmVyc2FibGVOb2RlKG5vZGUpIHtcbiAgcmV0dXJuIFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpIHtcbiAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsWCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIGlmIChnZXROb2RlTmFtZShub2RlKSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID1cbiAgLy8gU3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGUuXG4gIG5vZGUuYXNzaWduZWRTbG90IHx8XG4gIC8vIERPTSBFbGVtZW50IGRldGVjdGVkLlxuICBub2RlLnBhcmVudE5vZGUgfHxcbiAgLy8gU2hhZG93Um9vdCBkZXRlY3RlZC5cbiAgaXNTaGFkb3dSb290KG5vZGUpICYmIG5vZGUuaG9zdCB8fFxuICAvLyBGYWxsYmFjay5cbiAgZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpO1xuICByZXR1cm4gaXNTaGFkb3dSb290KHJlc3VsdCkgPyByZXN1bHQuaG9zdCA6IHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUobm9kZSk7XG4gIGlmIChpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50ID8gbm9kZS5vd25lckRvY3VtZW50LmJvZHkgOiBub2RlLmJvZHk7XG4gIH1cbiAgaWYgKGlzSFRNTEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgaXNPdmVyZmxvd0VsZW1lbnQocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IocGFyZW50Tm9kZSk7XG59XG5mdW5jdGlvbiBnZXRPdmVyZmxvd0FuY2VzdG9ycyhub2RlLCBsaXN0LCB0cmF2ZXJzZUlmcmFtZXMpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQyO1xuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG4gIGlmICh0cmF2ZXJzZUlmcmFtZXMgPT09IHZvaWQgMCkge1xuICAgIHRyYXZlcnNlSWZyYW1lcyA9IHRydWU7XG4gIH1cbiAgY29uc3Qgc2Nyb2xsYWJsZUFuY2VzdG9yID0gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSk7XG4gIGNvbnN0IGlzQm9keSA9IHNjcm9sbGFibGVBbmNlc3RvciA9PT0gKChfbm9kZSRvd25lckRvY3VtZW50MiA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQyLmJvZHkpO1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsYWJsZUFuY2VzdG9yKTtcbiAgaWYgKGlzQm9keSkge1xuICAgIGNvbnN0IGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudCh3aW4pO1xuICAgIHJldHVybiBsaXN0LmNvbmNhdCh3aW4sIHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNPdmVyZmxvd0VsZW1lbnQoc2Nyb2xsYWJsZUFuY2VzdG9yKSA/IHNjcm9sbGFibGVBbmNlc3RvciA6IFtdLCBmcmFtZUVsZW1lbnQgJiYgdHJhdmVyc2VJZnJhbWVzID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudCh3aW4pIHtcbiAgcmV0dXJuIHdpbi5wYXJlbnQgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbi5wYXJlbnQpID8gd2luLmZyYW1lRWxlbWVudCA6IG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1RvcExheWVyLCBpc1dlYktpdCB9O1xuIiwiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgZGV0ZWN0T3ZlcmZsb3cgYXMgZGV0ZWN0T3ZlcmZsb3ckMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBhdXRvUGxhY2VtZW50IGFzIGF1dG9QbGFjZW1lbnQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgZmxpcCBhcyBmbGlwJDEsIHNpemUgYXMgc2l6ZSQxLCBoaWRlIGFzIGhpZGUkMSwgYXJyb3cgYXMgYXJyb3ckMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgaWdub3JlU2Nyb2xsYmFyWCkge1xuICBpZiAoaWdub3JlU2Nyb2xsYmFyWCA9PT0gdm9pZCAwKSB7XG4gICAgaWdub3JlU2Nyb2xsYmFyWCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGh0bWxSZWN0ID0gZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB4ID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gKGlnbm9yZVNjcm9sbGJhclggPyAwIDpcbiAgLy8gUlRMIDxib2R5PiBzY3JvbGxiYXIuXG4gIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCkpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIHRydWUpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IocGFyZW50Tm9kZSwgc3RvcE5vZGUpO1xufVxuXG4vLyBBIFwiY2xpcHBpbmcgYW5jZXN0b3JcIiBpcyBhbiBgb3ZlcmZsb3dgIGVsZW1lbnQgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIGNoaWxkIGVsZW1lbnRzLiBUaGlzIHJldHVybnMgYWxsIGNsaXBwaW5nIGFuY2VzdG9yc1xuLy8gb2YgdGhlIGdpdmVuIGVsZW1lbnQgdXAgdGhlIHRyZWUuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgY2FjaGUpIHtcbiAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBpZiAoY2FjaGVkUmVzdWx0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZWxlbWVudCwgW10sIGZhbHNlKS5maWx0ZXIoZWwgPT4gaXNFbGVtZW50KGVsKSAmJiBnZXROb2RlTmFtZShlbCkgIT09ICdib2R5Jyk7XG4gIGxldCBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gIGNvbnN0IGVsZW1lbnRJc0ZpeGVkID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIDogZWxlbWVudDtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICB3aGlsZSAoaXNFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgWydhYnNvbHV0ZScsICdmaXhlZCddLmluY2x1ZGVzKGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlLnBvc2l0aW9uKSB8fCBpc092ZXJmbG93RWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBjdXJyZW50Tm9kZSk7XG4gICAgaWYgKHNob3VsZERyb3BDdXJyZW50Tm9kZSkge1xuICAgICAgLy8gRHJvcCBub24tY29udGFpbmluZyBibG9ja3MuXG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGFuY2VzdG9yID0+IGFuY2VzdG9yICE9PSBjdXJyZW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlY29yZCBsYXN0IGNvbnRhaW5pbmcgYmxvY2sgZm9yIG5leHQgaXRlcmF0aW9uLlxuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIGNhY2hlLnNldChlbGVtZW50LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBhbmNlc3RvcnMuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnQsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBlbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nQW5jZXN0b3JzJyA/IGlzVG9wTGF5ZXIoZWxlbWVudCkgPyBbXSA6IGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCB0aGlzLl9jKSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nQW5jZXN0b3JzID0gWy4uLmVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ0FuY2VzdG9yID0gY2xpcHBpbmdBbmNlc3RvcnNbMF07XG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nQW5jZXN0b3JzLnJlZHVjZSgoYWNjUmVjdCwgY2xpcHBpbmdBbmNlc3RvcikgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBmaXJzdENsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIGhlaWdodDogY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3AsXG4gICAgeDogY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgeTogY2xpcHBpbmdSZWN0LnRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZWxlbWVudCwgb2Zmc2V0UGFyZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgYXBwZWFycyBvbiB0aGUgbGVmdCAoZS5nLiBSVEwgc3lzdGVtcykuIFVzZVxuICAgICAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJztcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICBsZXQgcmF3T2Zmc2V0UGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cbiAgLy8gRmlyZWZveCByZXR1cm5zIHRoZSA8aHRtbD4gZWxlbWVudCBhcyB0aGUgb2Zmc2V0UGFyZW50IGlmIGl0J3Mgbm9uLXN0YXRpYyxcbiAgLy8gd2hpbGUgQ2hyb21lIGFuZCBTYWZhcmkgcmV0dXJuIHRoZSA8Ym9keT4gZWxlbWVudC4gVGhlIDxib2R5PiBlbGVtZW50IG11c3RcbiAgLy8gYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBjb3JyZWN0IGNhbGN1bGF0aW9ucyBldmVuIGlmIHRoZSA8aHRtbD4gZWxlbWVudCBpc1xuICAvLyBub24tc3RhdGljLlxuICBpZiAoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpID09PSByYXdPZmZzZXRQYXJlbnQpIHtcbiAgICByYXdPZmZzZXRQYXJlbnQgPSByYXdPZmZzZXRQYXJlbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG4gIHJldHVybiByYXdPZmZzZXRQYXJlbnQ7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoaXNUb3BMYXllcihlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgbGV0IHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgd2hpbGUgKHN2Z09mZnNldFBhcmVudCAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQoc3ZnT2Zmc2V0UGFyZW50KSAmJiAhaXNTdGF0aWNQb3NpdGlvbmVkKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHN2Z09mZnNldFBhcmVudDtcbiAgICAgIH1cbiAgICAgIHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoc3ZnT2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSkge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSAmJiAhaXNDb250YWluaW5nQmxvY2sob2Zmc2V0UGFyZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luO1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBnZXRPZmZzZXRQYXJlbnRGbiA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50IHx8IGdldE9mZnNldFBhcmVudDtcbiAgY29uc3QgZ2V0RGltZW5zaW9uc0ZuID0gdGhpcy5nZXREaW1lbnNpb25zO1xuICBjb25zdCBmbG9hdGluZ0RpbWVuc2lvbnMgPSBhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZyk7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiBmbG9hdGluZ0RpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGZsb2F0aW5nRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc1JUTChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaW8ub2JzZXJ2ZShlbGVtZW50KTtcbiAgfVxuICByZWZyZXNoKHRydWUpO1xuICByZXR1cm4gY2xlYW51cDtcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHdoZW4gbmVjZXNzYXJ5LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXMgbW91bnRlZCBvbiB0aGUgRE9NIG9yXG4gKiB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uXG4gKiBAcmV0dXJucyBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpc1xuICogcmVtb3ZlZCBmcm9tIHRoZSBET00gb3IgaGlkZGVuIGZyb20gdGhlIHNjcmVlbi5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvVXBkYXRlXG4gKi9cbmZ1bmN0aW9uIGF1dG9VcGRhdGUocmVmZXJlbmNlLCBmbG9hdGluZywgdXBkYXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIGFuY2VzdG9yU2Nyb2xsID0gdHJ1ZSxcbiAgICBhbmNlc3RvclJlc2l6ZSA9IHRydWUsXG4gICAgZWxlbWVudFJlc2l6ZSA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBsYXlvdXRTaGlmdCA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBhbmltYXRpb25GcmFtZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCByZWZlcmVuY2VFbCA9IHVud3JhcEVsZW1lbnQocmVmZXJlbmNlKTtcbiAgY29uc3QgYW5jZXN0b3JzID0gYW5jZXN0b3JTY3JvbGwgfHwgYW5jZXN0b3JSZXNpemUgPyBbLi4uKHJlZmVyZW5jZUVsID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMocmVmZXJlbmNlRWwpIDogW10pLCAuLi5nZXRPdmVyZmxvd0FuY2VzdG9ycyhmbG9hdGluZyldIDogW107XG4gIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICB9KTtcbiAgY29uc3QgY2xlYW51cElvID0gcmVmZXJlbmNlRWwgJiYgbGF5b3V0U2hpZnQgPyBvYnNlcnZlTW92ZShyZWZlcmVuY2VFbCwgdXBkYXRlKSA6IG51bGw7XG4gIGxldCByZW9ic2VydmVGcmFtZSA9IC0xO1xuICBsZXQgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICBpZiAoZWxlbWVudFJlc2l6ZSkge1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKF9yZWYgPT4ge1xuICAgICAgbGV0IFtmaXJzdEVudHJ5XSA9IF9yZWY7XG4gICAgICBpZiAoZmlyc3RFbnRyeSAmJiBmaXJzdEVudHJ5LnRhcmdldCA9PT0gcmVmZXJlbmNlRWwgJiYgcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gUHJldmVudCB1cGRhdGUgbG9vcHMgd2hlbiB1c2luZyB0aGUgYHNpemVgIG1pZGRsZXdhcmUuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMTc0MFxuICAgICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyZW9ic2VydmVGcmFtZSk7XG4gICAgICAgIHJlb2JzZXJ2ZUZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyO1xuICAgICAgICAgIChfcmVzaXplT2JzZXJ2ZXIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdXBkYXRlKCk7XG4gICAgfSk7XG4gICAgaWYgKHJlZmVyZW5jZUVsICYmICFhbmltYXRpb25GcmFtZSkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShyZWZlcmVuY2VFbCk7XG4gICAgfVxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICB9XG4gIGxldCBmcmFtZUlkO1xuICBsZXQgcHJldlJlZlJlY3QgPSBhbmltYXRpb25GcmFtZSA/IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpIDogbnVsbDtcbiAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZnJhbWVMb29wKCk7XG4gIH1cbiAgZnVuY3Rpb24gZnJhbWVMb29wKCkge1xuICAgIGNvbnN0IG5leHRSZWZSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSk7XG4gICAgaWYgKHByZXZSZWZSZWN0ICYmICFyZWN0c0FyZUVxdWFsKHByZXZSZWZSZWN0LCBuZXh0UmVmUmVjdCkpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcmV2UmVmUmVjdCA9IG5leHRSZWZSZWN0O1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWVMb29wKTtcbiAgfVxuICB1cGRhdGUoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyMjtcbiAgICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUpO1xuICAgICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgICB9KTtcbiAgICBjbGVhbnVwSW8gPT0gbnVsbCB8fCBjbGVhbnVwSW8oKTtcbiAgICAoX3Jlc2l6ZU9ic2VydmVyMiA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlcjIuZGlzY29ubmVjdCgpO1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmNvbnN0IGRldGVjdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3ckMTtcblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gYXV0b1BsYWNlbWVudCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBzaGlmdCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZsaXAkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQg4oCUXG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gc2l6ZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGhpZGUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBhcnJvdyQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBpbmxpbmUkMTtcblxuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGxpbWl0U2hpZnQkMTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IChyZWZlcmVuY2UsIGZsb2F0aW5nLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoaXMgY2FjaGVzIHRoZSBleHBlbnNpdmUgYGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9yc2AgZnVuY3Rpb24gc28gdGhhdFxuICAvLyBtdWx0aXBsZSBsaWZlY3ljbGUgcmVzZXRzIHJlLXVzZSB0aGUgc2FtZSByZXN1bHQuIEl0IG9ubHkgbGl2ZXMgZm9yIGFcbiAgLy8gc2luZ2xlIGNhbGwuIElmIG90aGVyIGZ1bmN0aW9ucyBiZWNvbWUgZXhwZW5zaXZlLCB3ZSBjYW4gYWRkIHRoZW0gYXMgd2VsbC5cbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7XG4gICAgcGxhdGZvcm0sXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBwbGF0Zm9ybVdpdGhDYWNoZSA9IHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLnBsYXRmb3JtLFxuICAgIF9jOiBjYWNoZVxuICB9O1xuICByZXR1cm4gY29tcHV0ZVBvc2l0aW9uJDEocmVmZXJlbmNlLCBmbG9hdGluZywge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgcGxhdGZvcm06IHBsYXRmb3JtV2l0aENhY2hlXG4gIH0pO1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBwbGF0Zm9ybSwgc2hpZnQsIHNpemUgfTtcbiIsImltcG9ydCB7IGFycm93IGFzIGFycm93JDEsIGNvbXB1dGVQb3NpdGlvbiB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuZXhwb3J0IHsgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBwbGF0Zm9ybSwgc2hpZnQsIHNpemUgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IGlzTm9kZSwgZ2V0Tm9kZU5hbWUgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmltcG9ydCB7IHVucmVmLCBjb21wdXRlZCwgcmVmLCBzaGFsbG93UmVmLCB3YXRjaCwgZ2V0Q3VycmVudFNjb3BlLCBvblNjb3BlRGlzcG9zZSwgc2hhbGxvd1JlYWRvbmx5IH0gZnJvbSAndnVlLWRlbWknO1xuXG5mdW5jdGlvbiBpc0NvbXBvbmVudFB1YmxpY0luc3RhbmNlKHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0ICE9IG51bGwgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgJyRlbCcgaW4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gdW53cmFwRWxlbWVudCh0YXJnZXQpIHtcbiAgaWYgKGlzQ29tcG9uZW50UHVibGljSW5zdGFuY2UodGFyZ2V0KSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0YXJnZXQuJGVsO1xuICAgIHJldHVybiBpc05vZGUoZWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICcjY29tbWVudCcgPyBudWxsIDogZWxlbWVudDtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiB0b1ZhbHVlKHNvdXJjZSkge1xuICByZXR1cm4gdHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZSgpIDogdW5yZWYoc291cmNlKTtcbn1cblxuLyoqXG4gKiBQb3NpdGlvbnMgYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzdWNoIHRoYXQgaXQgaXMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIGFycm93IG9wdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuZnVuY3Rpb24gYXJyb3cob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhcnJvdycsXG4gICAgb3B0aW9ucyxcbiAgICBmbihhcmdzKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdW53cmFwRWxlbWVudCh0b1ZhbHVlKG9wdGlvbnMuZWxlbWVudCkpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyb3ckMSh7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHBhZGRpbmc6IG9wdGlvbnMucGFkZGluZ1xuICAgICAgfSkuZm4oYXJncyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREUFIoZWxlbWVudCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICByZXR1cm4gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbn1cblxuZnVuY3Rpb24gcm91bmRCeURQUihlbGVtZW50LCB2YWx1ZSkge1xuICBjb25zdCBkcHIgPSBnZXREUFIoZWxlbWVudCk7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogZHByKSAvIGRwcjtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50IG5leHQgdG8gYSByZWZlcmVuY2UgZWxlbWVudCB3aGVuIGl0IGlzIGdpdmVuIGEgY2VydGFpbiBDU1MgcG9zaXRpb25pbmcgc3RyYXRlZ3kuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgdGVtcGxhdGUgcmVmLlxuICogQHBhcmFtIGZsb2F0aW5nIFRoZSBmbG9hdGluZyB0ZW1wbGF0ZSByZWYuXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgZmxvYXRpbmcgb3B0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92dWVcbiAqL1xuZnVuY3Rpb24gdXNlRmxvYXRpbmcocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHdoaWxlRWxlbWVudHNNb3VudGVkT3B0aW9uID0gb3B0aW9ucy53aGlsZUVsZW1lbnRzTW91bnRlZDtcbiAgY29uc3Qgb3Blbk9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX3RvVmFsdWU7XG4gICAgcmV0dXJuIChfdG9WYWx1ZSA9IHRvVmFsdWUob3B0aW9ucy5vcGVuKSkgIT0gbnVsbCA/IF90b1ZhbHVlIDogdHJ1ZTtcbiAgfSk7XG4gIGNvbnN0IG1pZGRsZXdhcmVPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB0b1ZhbHVlKG9wdGlvbnMubWlkZGxld2FyZSkpO1xuICBjb25zdCBwbGFjZW1lbnRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF90b1ZhbHVlMjtcbiAgICByZXR1cm4gKF90b1ZhbHVlMiA9IHRvVmFsdWUob3B0aW9ucy5wbGFjZW1lbnQpKSAhPSBudWxsID8gX3RvVmFsdWUyIDogJ2JvdHRvbSc7XG4gIH0pO1xuICBjb25zdCBzdHJhdGVneU9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX3RvVmFsdWUzO1xuICAgIHJldHVybiAoX3RvVmFsdWUzID0gdG9WYWx1ZShvcHRpb25zLnN0cmF0ZWd5KSkgIT0gbnVsbCA/IF90b1ZhbHVlMyA6ICdhYnNvbHV0ZSc7XG4gIH0pO1xuICBjb25zdCB0cmFuc2Zvcm1PcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF90b1ZhbHVlNDtcbiAgICByZXR1cm4gKF90b1ZhbHVlNCA9IHRvVmFsdWUob3B0aW9ucy50cmFuc2Zvcm0pKSAhPSBudWxsID8gX3RvVmFsdWU0IDogdHJ1ZTtcbiAgfSk7XG4gIGNvbnN0IHJlZmVyZW5jZUVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB1bndyYXBFbGVtZW50KHJlZmVyZW5jZS52YWx1ZSkpO1xuICBjb25zdCBmbG9hdGluZ0VsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB1bndyYXBFbGVtZW50KGZsb2F0aW5nLnZhbHVlKSk7XG4gIGNvbnN0IHggPSByZWYoMCk7XG4gIGNvbnN0IHkgPSByZWYoMCk7XG4gIGNvbnN0IHN0cmF0ZWd5ID0gcmVmKHN0cmF0ZWd5T3B0aW9uLnZhbHVlKTtcbiAgY29uc3QgcGxhY2VtZW50ID0gcmVmKHBsYWNlbWVudE9wdGlvbi52YWx1ZSk7XG4gIGNvbnN0IG1pZGRsZXdhcmVEYXRhID0gc2hhbGxvd1JlZih7fSk7XG4gIGNvbnN0IGlzUG9zaXRpb25lZCA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGZsb2F0aW5nU3R5bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxTdHlsZXMgPSB7XG4gICAgICBwb3NpdGlvbjogc3RyYXRlZ3kudmFsdWUsXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJ1xuICAgIH07XG4gICAgaWYgKCFmbG9hdGluZ0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHJldHVybiBpbml0aWFsU3R5bGVzO1xuICAgIH1cbiAgICBjb25zdCB4VmFsID0gcm91bmRCeURQUihmbG9hdGluZ0VsZW1lbnQudmFsdWUsIHgudmFsdWUpO1xuICAgIGNvbnN0IHlWYWwgPSByb3VuZEJ5RFBSKGZsb2F0aW5nRWxlbWVudC52YWx1ZSwgeS52YWx1ZSk7XG4gICAgaWYgKHRyYW5zZm9ybU9wdGlvbi52YWx1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5pdGlhbFN0eWxlcyxcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIiArIHhWYWwgKyBcInB4LCBcIiArIHlWYWwgKyBcInB4KVwiLFxuICAgICAgICAuLi4oZ2V0RFBSKGZsb2F0aW5nRWxlbWVudC52YWx1ZSkgPj0gMS41ICYmIHtcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJ1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBzdHJhdGVneS52YWx1ZSxcbiAgICAgIGxlZnQ6IHhWYWwgKyBcInB4XCIsXG4gICAgICB0b3A6IHlWYWwgKyBcInB4XCJcbiAgICB9O1xuICB9KTtcbiAgbGV0IHdoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cDtcbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmIChyZWZlcmVuY2VFbGVtZW50LnZhbHVlID09IG51bGwgfHwgZmxvYXRpbmdFbGVtZW50LnZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3BlbiA9IG9wZW5PcHRpb24udmFsdWU7XG4gICAgY29tcHV0ZVBvc2l0aW9uKHJlZmVyZW5jZUVsZW1lbnQudmFsdWUsIGZsb2F0aW5nRWxlbWVudC52YWx1ZSwge1xuICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZU9wdGlvbi52YWx1ZSxcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50T3B0aW9uLnZhbHVlLFxuICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5T3B0aW9uLnZhbHVlXG4gICAgfSkudGhlbihwb3NpdGlvbiA9PiB7XG4gICAgICB4LnZhbHVlID0gcG9zaXRpb24ueDtcbiAgICAgIHkudmFsdWUgPSBwb3NpdGlvbi55O1xuICAgICAgc3RyYXRlZ3kudmFsdWUgPSBwb3NpdGlvbi5zdHJhdGVneTtcbiAgICAgIHBsYWNlbWVudC52YWx1ZSA9IHBvc2l0aW9uLnBsYWNlbWVudDtcbiAgICAgIG1pZGRsZXdhcmVEYXRhLnZhbHVlID0gcG9zaXRpb24ubWlkZGxld2FyZURhdGE7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBmbG9hdGluZyBlbGVtZW50J3MgcG9zaXRpb24gbWF5IGJlIHJlY29tcHV0ZWQgd2hpbGUgaXQncyBjbG9zZWRcbiAgICAgICAqIGJ1dCBzdGlsbCBtb3VudGVkIChzdWNoIGFzIHdoZW4gdHJhbnNpdGlvbmluZyBvdXQpLiBUbyBlbnN1cmVcbiAgICAgICAqIGBpc1Bvc2l0aW9uZWRgIHdpbGwgYmUgYGZhbHNlYCBpbml0aWFsbHkgb24gdGhlIG5leHQgb3BlbiwgYXZvaWRcbiAgICAgICAqIHNldHRpbmcgaXQgdG8gYHRydWVgIHdoZW4gYG9wZW4gPT09IGZhbHNlYCAobXVzdCBiZSBzcGVjaWZpZWQpLlxuICAgICAgICovXG4gICAgICBpc1Bvc2l0aW9uZWQudmFsdWUgPSBvcGVuICE9PSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGlmICh0eXBlb2Ygd2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAoKTtcbiAgICAgIHdoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYXR0YWNoKCkge1xuICAgIGNsZWFudXAoKTtcbiAgICBpZiAod2hpbGVFbGVtZW50c01vdW50ZWRPcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZWZlcmVuY2VFbGVtZW50LnZhbHVlICE9IG51bGwgJiYgZmxvYXRpbmdFbGVtZW50LnZhbHVlICE9IG51bGwpIHtcbiAgICAgIHdoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCA9IHdoaWxlRWxlbWVudHNNb3VudGVkT3B0aW9uKHJlZmVyZW5jZUVsZW1lbnQudmFsdWUsIGZsb2F0aW5nRWxlbWVudC52YWx1ZSwgdXBkYXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgaWYgKCFvcGVuT3B0aW9uLnZhbHVlKSB7XG4gICAgICBpc1Bvc2l0aW9uZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgd2F0Y2goW21pZGRsZXdhcmVPcHRpb24sIHBsYWNlbWVudE9wdGlvbiwgc3RyYXRlZ3lPcHRpb24sIG9wZW5PcHRpb25dLCB1cGRhdGUsIHtcbiAgICBmbHVzaDogJ3N5bmMnXG4gIH0pO1xuICB3YXRjaChbcmVmZXJlbmNlRWxlbWVudCwgZmxvYXRpbmdFbGVtZW50XSwgYXR0YWNoLCB7XG4gICAgZmx1c2g6ICdzeW5jJ1xuICB9KTtcbiAgd2F0Y2gob3Blbk9wdGlvbiwgcmVzZXQsIHtcbiAgICBmbHVzaDogJ3N5bmMnXG4gIH0pO1xuICBpZiAoZ2V0Q3VycmVudFNjb3BlKCkpIHtcbiAgICBvblNjb3BlRGlzcG9zZShjbGVhbnVwKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHNoYWxsb3dSZWFkb25seSh4KSxcbiAgICB5OiBzaGFsbG93UmVhZG9ubHkoeSksXG4gICAgc3RyYXRlZ3k6IHNoYWxsb3dSZWFkb25seShzdHJhdGVneSksXG4gICAgcGxhY2VtZW50OiBzaGFsbG93UmVhZG9ubHkocGxhY2VtZW50KSxcbiAgICBtaWRkbGV3YXJlRGF0YTogc2hhbGxvd1JlYWRvbmx5KG1pZGRsZXdhcmVEYXRhKSxcbiAgICBpc1Bvc2l0aW9uZWQ6IHNoYWxsb3dSZWFkb25seShpc1Bvc2l0aW9uZWQpLFxuICAgIGZsb2F0aW5nU3R5bGVzLFxuICAgIHVwZGF0ZVxuICB9O1xufVxuXG5leHBvcnQgeyBhcnJvdywgdXNlRmxvYXRpbmcgfTtcbiIsImV4cG9ydCBjb25zdCBpc0NsaWNrT3V0c2lkZSA9IChldmVudDogTW91c2VFdmVudCwgZWxlbWVudHM6IEhUTUxFbGVtZW50IHwgSFRNTEVsZW1lbnRbXSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB0YXJnZXRzID0gQXJyYXkuaXNBcnJheShlbGVtZW50cykgPyBlbGVtZW50cyA6IFtlbGVtZW50c107XG4gIHJldHVybiAhdGFyZ2V0cy5zb21lKChlbCkgPT4gZWwuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKTtcbn07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBvZmZzZXQgYXMgb2Zmc2V0TWlkZGxld2FyZSwgc2hpZnQsIHVzZUZsb2F0aW5nIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3Z1ZSc7XG4gIGltcG9ydCB7IGNvbXB1dGVkLCBvbkJlZm9yZU1vdW50LCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkLCByZWYsIHdhdGNoLCB3YXRjaEVmZmVjdCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuICBpbXBvcnQgeyBpc0NsaWNrT3V0c2lkZSB9IGZyb20gJ0AvdXRpbGl0aWVzL2V2ZW50JztcbiAgaW1wb3J0IHsgVE9QX0xBWUVSX0lELCBpbml0RmF1eFRvcExheWVyIH0gZnJvbSAnQC91dGlsaXRpZXMvdmlld3BvcnQnO1xuXG4gIGltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGFuY2hvcklkOiBzdHJpbmc7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgb2Zmc2V0OiAxNixcbiAgfSk7XG5cbiAgY29uc3QgYW5jaG9yOiBSZWY8SFRNTEVsZW1lbnQgfCBudWxsPiA9IHJlZihudWxsKTtcbiAgY29uc3QgZmxvYXRpbmc6IFJlZjxIVE1MRWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuICBjb25zdCByb290OiBSZWY8SFRNTEVsZW1lbnQgfCBudWxsPiA9IHJlZihudWxsKTtcbiAgY29uc3QgaXNIb3ZlcmVkID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgaXNUb2dnbGVkT3BlbiA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSByZWYoW2F1dG9QbGFjZW1lbnQoKSwgb2Zmc2V0TWlkZGxld2FyZSh7IG1haW5BeGlzOiBwcm9wcy5vZmZzZXQgfSksIHNoaWZ0KHsgcGFkZGluZzogMTYgfSldKTtcblxuICBjb25zdCBpc1Nob3dQb3BvdmVyID0gY29tcHV0ZWQoKCkgPT4gaXNIb3ZlcmVkLnZhbHVlIHx8IGlzVG9nZ2xlZE9wZW4udmFsdWUpO1xuXG4gIGNvbnN0IHsgZmxvYXRpbmdTdHlsZXMgfSA9IHVzZUZsb2F0aW5nKGFuY2hvciwgZmxvYXRpbmcsIHtcbiAgICBtaWRkbGV3YXJlLFxuICAgIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICAgIHdoaWxlRWxlbWVudHNNb3VudGVkOiBhdXRvVXBkYXRlLFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUNsaWNrID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoIWFuY2hvci52YWx1ZSB8fCAhZmxvYXRpbmcudmFsdWUpIHJldHVybjtcbiAgICBpZiAoaXNDbGlja091dHNpZGUoZSwgW2FuY2hvci52YWx1ZSwgZmxvYXRpbmcudmFsdWVdKSkge1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGlzVG9nZ2xlZE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3ZlciA9ICgpID0+IHtcbiAgICBpc0hvdmVyZWQudmFsdWUgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgIGlzSG92ZXJlZC52YWx1ZSA9IGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUFuY2hvckVsZW1lbnRDbGljayA9ICgpID0+IHtcbiAgICBpc1RvZ2dsZWRPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFhbmNob3IudmFsdWUpIHJldHVybiBudWxsO1xuICAgIGFuY2hvci52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyKTtcbiAgICBhbmNob3IudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZUxlYXZlKTtcbiAgICBhbmNob3IudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2spO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZUxpc3RlbmVyc0Zyb21BbmNob3JFbGVtZW50ID0gKCkgPT4ge1xuICAgIGlmICghYW5jaG9yLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBhbmNob3IudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3Zlcik7XG4gICAgYW5jaG9yLnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VMZWF2ZSk7XG4gICAgYW5jaG9yLnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGlzVG9nZ2xlZE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWRkT3Blbkxpc3RlbmVyc1RvUm9vdCA9ICgpID0+IHtcbiAgICBpZiAoIXJvb3QudmFsdWUpIHJldHVybjtcbiAgICByb290LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljaywgdHJ1ZSk7XG4gICAgcm9vdC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlLZXlkb3duKTtcbiAgfTtcblxuICBjb25zdCByZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QgPSAoKSA9PiB7XG4gICAgaWYgKCFyb290LnZhbHVlKSByZXR1cm47XG4gICAgcm9vdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2ssIHRydWUpO1xuICAgIHJvb3QudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93bik7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlQW5jaG9yRWxlbWVudCA9ICgpID0+IHtcbiAgICBhbmNob3IudmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5hbmNob3JJZCk7XG4gIH07XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gaXNUb2dnbGVkT3Blbi52YWx1ZSxcbiAgICAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBhZGRPcGVuTGlzdGVuZXJzVG9Sb290KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QoKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gcHJvcHMuYW5jaG9ySWQsXG4gICAgKCkgPT4ge1xuICAgICAgcmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQoKTtcbiAgICAgIHVwZGF0ZUFuY2hvckVsZW1lbnQoKTtcbiAgICAgIGFkZExpc3RlbmVyc1RvQW5jaG9yRWxlbWVudCgpO1xuICAgIH1cbiAgKTtcblxuICB3YXRjaEVmZmVjdCgoKSA9PiB7XG4gICAgbWlkZGxld2FyZS52YWx1ZSA9IFthdXRvUGxhY2VtZW50KCksIG9mZnNldE1pZGRsZXdhcmUoeyBtYWluQXhpczogcHJvcHMub2Zmc2V0IH0pLCBzaGlmdCh7IHBhZGRpbmc6IDE2IH0pXTtcbiAgfSk7XG5cbiAgb25CZWZvcmVNb3VudCgoKSA9PiB7XG4gICAgaW5pdEZhdXhUb3BMYXllcigpO1xuICB9KTtcblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIHVwZGF0ZUFuY2hvckVsZW1lbnQoKTtcbiAgICByb290LnZhbHVlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGFkZExpc3RlbmVyc1RvQW5jaG9yRWxlbWVudCgpO1xuICB9KTtcblxuICBvblVubW91bnRlZCgoKSA9PiB7XG4gICAgcmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQoKTtcbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8VGVsZXBvcnQgOnRvPVwiYCMke1RPUF9MQVlFUl9JRH1gXCI+XG4gICAgPFRyYW5zaXRpb24+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAndGlkZS1wb3BvdmVyJyxcbiAgICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICAgIENTUy5CT1JERVIuQ09MT1IuTE9XLFxuICAgICAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgICAgICBDU1MuRk9OVC5ST0xFLkJPRFlfMixcbiAgICAgICAgICBDU1MuUEFERElORy5GVUxMLk9ORSxcbiAgICAgICAgICBDU1MuU0hBRE9XLkJPVFRPTSxcbiAgICAgICAgXVwiXG4gICAgICAgIHJlZj1cImZsb2F0aW5nXCJcbiAgICAgICAgOnN0eWxlPVwieyAuLi5mbG9hdGluZ1N0eWxlcyB9XCJcbiAgICAgICAgdi1zaG93PVwiaXNTaG93UG9wb3ZlclwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RyYW5zaXRpb24+XG4gIDwvVGVsZXBvcnQ+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1wb3BvdmVyIHtcbiAgICBtYXgtd2lkdGg6IDI1NnB4O1xuICB9XG4gIC52LWVudGVyLWZyb20sXG4gIC52LWxlYXZlLXRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIC52LWVudGVyLWFjdGl2ZSxcbiAgLnYtbGVhdmUtYWN0aXZlIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cbiAgLnYtZW50ZXItdG8sXG4gIC52LWxlYXZlLWZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBvbkJlZm9yZU1vdW50LCBvbk1vdW50ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgVE9QX0xBWUVSX0lELCBpbml0RmF1eFRvcExheWVyLCBzZXRTY3JvbGxMb2NrIH0gZnJvbSAnQC91dGlsaXRpZXMvdmlld3BvcnQnO1xuXG4gIGltcG9ydCBUaWRlRGl2aWRlciBmcm9tICcuL1RpZGVEaXZpZGVyLnZ1ZSc7XG5cbiAgaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaXNPcGVuOiBib29sZWFuO1xuICAgIGlzQmFja0J1dHRvbj86IGJvb2xlYW47XG4gIH07XG4gIGNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8UHJvcHM+KCk7XG5cbiAgdHlwZSBFbWl0cyA9IHtcbiAgICAoZTogJ2JhY2snKTogdm9pZDtcbiAgICAoZTogJ2Nsb3NlJyk6IHZvaWQ7XG4gIH07XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPEVtaXRzPigpO1xuXG4gIGNvbnN0IGRpYWxvZ0VsZW1lbnQ6IFJlZjxIVE1MRGlhbG9nRWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuXG4gIGNvbnN0IHRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuID0gKCkgPT4ge1xuICAgIGRpYWxvZ0VsZW1lbnQudmFsdWU/LnNob3dNb2RhbCgpO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSA9ICgpID0+IHtcbiAgICBkaWFsb2dFbGVtZW50LnZhbHVlPy5jbG9zZSgpO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLmlzT3BlbixcbiAgICAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghZGlhbG9nRWxlbWVudC52YWx1ZSkgcmV0dXJuO1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nQ2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHNldFNjcm9sbExvY2sobmV3VmFsdWUpO1xuICAgIH1cbiAgKTtcblxuICBvbkJlZm9yZU1vdW50KCgpID0+IHtcbiAgICBpbml0RmF1eFRvcExheWVyKCk7XG4gIH0pO1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgaWYgKHByb3BzLmlzT3Blbikge1xuICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4oKTtcbiAgICB9XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPFRlbGVwb3J0IDp0bz1cImAjJHtUT1BfTEFZRVJfSUR9YFwiPlxuICAgIDxkaWFsb2dcbiAgICAgIDpjbGFzcz1cIlsndGlkZS1zaGVldCcsIENTUy5CRy5JTklUSUFMLCBDU1MuSEVJR0hULkZVTEwsIENTUy5XSURUSC5GVUxMLCBDU1MuT1ZFUkZMT1cuWFkuSElEREVOXVwiXG4gICAgICByZWY9XCJkaWFsb2dFbGVtZW50XCJcbiAgICAgIEBjbGljay5zZWxmPVwiZW1pdCgnY2xvc2UnKVwiXG4gICAgICBAY2xvc2U9XCJlbWl0KCdjbG9zZScpXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAndGlkZS1zaGVldC1ib2R5JyxcbiAgICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgICAgQ1NTLkZMRVguRElSRUNUSU9OLkNPTFVNTixcbiAgICAgICAgICBDU1MuSEVJR0hULkZVTEwsXG4gICAgICAgICAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgXVwiXG4gICAgICA+XG4gICAgICAgIDxoZWFkZXIgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5QQURESU5HLlguT05FLCBDU1MuUEFERElORy5UT1AuT05FXVwiPlxuICAgICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5GTEVYLkdST1cuT0ZGLCBDU1MuRkxFWC5TSFJJTksuT0ZGXVwiXG4gICAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICAgICAgQGNsaWNrPVwiZW1pdCgnYmFjaycpXCJcbiAgICAgICAgICAgIHYtaWY9XCJpc0JhY2tCdXR0b25cIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICAgIDpjbGFzcz1cIltDU1MuRkxFWC5HUk9XLk9GRiwgQ1NTLkZMRVguU0hSSU5LLk9GRiwgQ1NTLk1BUkdJTi5MRUZULkFVVE9dXCJcbiAgICAgICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICAgIEBjbGljaz1cInRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPFRpZGVEaXZpZGVyIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLXNoZWV0LWNvbnRlbnQnLFxuICAgICAgICAgICAgQ1NTLkRJU1BMQVkuR1JJRCxcbiAgICAgICAgICAgIENTUy5PVkVSRkxPVy5ZLkFVVE8sXG4gICAgICAgICAgICBDU1MuT1ZFUkZMT1cuWC5ISURERU4sXG4gICAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgICAgIENTUy5QQURESU5HLkJPVFRPTS5PTkUsXG4gICAgICAgICAgXVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2xvdCAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGlhbG9nPlxuICA8L1RlbGVwb3J0PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtc2hlZXQge1xuICAgIC0tc2hlZXQtcGFkZGluZy14OiB2YXIoLS10aWRlLXNwYWNpbmctMSk7XG4gICAgbWF4LXdpZHRoOiB1bnNldDtcbiAgICBtYXgtaGVpZ2h0OiB1bnNldDtcbiAgICBqdXN0aWZ5LWl0ZW1zOiByaWdodDtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10aWRlLWFuaW1hdGUpIGFsbG93LWRpc2NyZXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgfVxuXG4gIC50aWRlLXNoZWV0W29wZW5dIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG4gIH1cblxuICAudGlkZS1zaGVldDo6YmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10aWRlLWFuaW1hdGUpIGFsbG93LWRpc2NyZXRlO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpO1xuICB9XG5cbiAgLnRpZGUtc2hlZXRbb3Blbl06OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLXRyYW5zcGFyZW50LTQwMCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiB2YXIoLS10aWRlLWJnLWJsdXIpO1xuICB9XG5cbiAgLnRpZGUtc2hlZXQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiBtaW4oY2FsYygxMDB2dyAtIHZhcigtLXRpZGUtc3BhY2luZy0yKSksIDMxMXB4KTtcbiAgfVxuXG4gIC50aWRlLXNoZWV0LWNvbnRlbnQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tc2hlZXQtcGFkZGluZy14KSAxZnIgdmFyKC0tc2hlZXQtcGFkZGluZy14KTtcbiAgfVxuXG4gIDp3aGVyZSgudGlkZS1zaGVldC1jb250ZW50KTpkZWVwKD4gOndoZXJlKCopKSB7XG4gICAgZ3JpZC1jb2x1bW46IDI7XG4gIH1cblxuICBAc3RhcnRpbmctc3R5bGUge1xuICAgIC50aWRlLXNoZWV0W29wZW5dIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgfVxuXG4gICAgLnRpZGUtc2hlZXRbb3Blbl06OmJhY2tkcm9wIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiB2YXIoLS10aWRlLWJnLWJsdXIpO1xuICAgIH1cbiAgfVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCBUaWRlSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFNJWkUgfSBmcm9tICdAL3R5cGVzL1NpemUnO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGVtaXQoJ2NoYW5nZScpO1xuICAgIH1cbiAgfTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxidXR0b25cbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1zd2l0Y2gnLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICcnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICBDU1MuQk9SREVSLkZVTEwuT05FLFxuICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgIHByb3BzLmlzQWN0aXZlID8gJycgOiBDU1MuQk9SREVSLkNPTE9SLkRFRkFVTFQsXG4gICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyBDU1MuQkcuU0VDT05EQVJZIDogQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICBdXCJcbiAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2tcIlxuICAgIGFyaWEtbGFiZWw9XCJTd2l0Y2hcIlxuICA+XG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1zd2l0Y2gtaW5kaWNhdG9yJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzEuQ0VOVEVSLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICAgICAgICBwcm9wcy5pc0FjdGl2ZSA/IENTUy5CRy5TVVJGQUNFLkRFRkFVTFQgOiBDU1MuQkcuU0VDT05EQVJZLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDppY29uPVwiSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLXN3aXRjaCB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvcjtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC4zMjtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaC5hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGlkZS1zZWNvbmRhcnkpO1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLmFjdGl2ZSAudGlkZS1zd2l0Y2gtaW5kaWNhdG9yIHtcbiAgICBsZWZ0OiAzNnB4O1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLWluZGljYXRvciB7XG4gICAgbGVmdDogNHB4O1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdCwgYm9yZGVyLWNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yO1xuICB9XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRQaG9uZSwgZm9ybWF0UHJpY2UgfSBmcm9tICdAL3V0aWxpdGllcy9mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZWQgPSB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IEZPUk1BVCA9IHtcbiAgTlVNQkVSOiBmb3JtYXROdW1iZXIsXG4gIFBIT05FOiBmb3JtYXRQaG9uZSxcbiAgUFJJQ0U6IGZvcm1hdFByaWNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEZPUk1BVF9SRUdFWCA9IHtcbiAgYWxwaGE6IC9eW2EtekEtWl0rJC9nLFxuICBhbHBoYU51bWJlck9yRW1wdHk6IC9eJHxeW2EtejAtOV0rJC9pLFxuICBhbHBoYVNwYWNlOiAvXlthLXpBLVogXSskL2csXG4gIGVtYWlsOlxuICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgbnVtYmVyRm9ybWF0dGVkOiAvXiR8KD89LileXFwkPygoWzEtOV1bMC05XXswLDJ9KCxbMC05XXszfSkqKXwwKT8oXFwuWzAtOV17MSwyfSk/JC8sXG4gIHBob25lOiAvXig/OlxcZHszfS1cXGR7M30tXFxkezR9fFxcZHsxfS1cXGR7M30tXFxkezN9LVxcZHs0fSk/JC8sXG4gIHByaWNlOiAvKD89LileXFwkPygoWzEtOV1bMC05XXswLDJ9KCxbMC05XXszfSkqKXwwKT8oXFwuWzAtOV17MSwyfSk/JC8sXG59O1xuIiwiLyoqXG4gKiBUaGVzZSBzbGlkZXMgYXJlIHVzZWQgaW4gYm90aCB0aGUgaW5saW5lIGRldGFpbCBwYWdlIHBob3RvIHNsaWRlclxuICogYW5kIHRoZSBmdWxsc2NyZWVuIG1lZGlhIGdhbGxlcnkuXG4gKi9cblxuZXhwb3J0IGNvbnN0IE1FRElBX1NMSURFX1RZUEVTID0ge1xuICBJTUFHRToge1xuICAgIEZMT09SUExBTjogJ2Zsb29ycGxhbicsXG4gICAgSU1BR0U6ICdpbWFnZScsXG4gIH0sXG4gIFZJREVPOiAndmlkZW8nLFxuICBWUjogJ3ZyJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE1lZGlhU2xpZGVUeXBlID1cbiAgfCAodHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFKVtrZXlvZiB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0VdXG4gIHwgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZJREVPXG4gIHwgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZSO1xuXG5leHBvcnQgdHlwZSBJbWFnZVNsaWRlVHlwZSA9ICh0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0UpW2tleW9mIHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRV07XG5cbnR5cGUgSW1hZ2VTbGlkZSA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZztcbiAgdHlwZTogSW1hZ2VTbGlkZVR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWaWRlb1NsaWRlVHlwZSA9IHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5WSURFTztcblxudHlwZSBWaWRlb1NsaWRlID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICB0eXBlOiBWaWRlb1NsaWRlVHlwZTtcbiAgdmlkZW9Vcmw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZyU2xpZGVUeXBlID0gdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZSO1xuXG50eXBlIFZyU2xpZGUgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHR5cGU6IFZyU2xpZGVUeXBlO1xuICB2clVybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdGluZ01lZGlhID0gSW1hZ2VTbGlkZSB8IFZpZGVvU2xpZGUgfCBWclNsaWRlO1xuIiwiaW1wb3J0IHsgRk9STUFUX1JFR0VYIH0gZnJvbSAnQC90eXBlcy9Gb3JtYXR0ZWQnO1xuaW1wb3J0IHsgY2hlY2tGb3JtYXQgfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUiA9IHtcbiAgQUxQSEFfTlVNQkVSX0VNUFRZOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVguYWxwaGFOdW1iZXJPckVtcHR5KSxcbiAgQUxQSEFfU1BBQ0U6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5hbHBoYVNwYWNlKSxcbiAgRU1BSUw6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5lbWFpbCksXG4gIE5VTUJFUjogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLm51bWJlckZvcm1hdHRlZCksXG4gIFBIT05FOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVgucGhvbmUpLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkVycm9yID0gc3RyaW5nIHwgYm9vbGVhbjtcbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25SZXN1bHQgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdmFsaWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uTGVuZ3RoID0ge1xuICBtYXhsZW5ndGg/OiBudW1iZXI7XG4gIG1pbmxlbmd0aD86IG51bWJlcjtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yID0gKHZhbHVlOiBzdHJpbmcpID0+IFZhbGlkYXRpb25SZXN1bHQ7XG4iXSwibmFtZXMiOlsiT1JJRU5UQVRJT04iLCJDU1MiLCJ1dGlsaXRpZXMiLCJicmVha3BvaW50IiwidXRpbGl0eSIsIlJFQUxNIiwiU0laRSIsIlNJWkVfQlVUVE9OIiwiZm9ybWF0TnVtYmVyIiwiaW5wdXQiLCJvdXRwdXQiLCJkaWdpdHMiLCJmb3JtYXRQYXNjYWxDYXNlIiwid29yZCIsImZvcm1hdFBob25lIiwiZm9ybWF0UHJpY2UiLCJpbm5lclNWRyIsInJlZiIsIndhdGNoIiwicHJvcHMiLCJpZCIsIm5hbWUiLCJwcmVmaXgiLCJyZWFsbUZvbGRlciIsImNvbXBvbmVudCIsImRlZmluZUFzeW5jQ29tcG9uZW50IiwiX192YXJpYWJsZUR5bmFtaWNJbXBvcnRSdW50aW1lSGVscGVyIiwibWFya1JhdyIsIklDT04iLCJJQ09OX1JFQUxNIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJlbWl0IiwiRUxFTUVOVCIsIkVMRU1FTlRfVEVYVF9BU19JQ09OIiwiUFJJT1JJVFkiLCJUQVJHRVQiLCJBTEVSVCIsIkJBREdFX0NPTE9SIiwiQkFER0VfQ09MT1JfREVUQUlMUyIsIkJBREdFX1RSVVNURUQiLCJoYW5kbGVDbGljayIsImluZGV4IiwiVFlQRV9DQVJEIiwiY29udGFpbmVyUmVmIiwic2xpZGVPYnNlcnZlciIsInNsb3RPYnNlcnZlciIsImNvbnRlbnRSaWdodEVkZ2UiLCJjb250ZW50V2lkdGgiLCJjdXJyZW50U2xpZGUiLCJmcmFtZVdpZHRoIiwiaGFzT3ZlcmZsb3ciLCJpc0ZpcnN0U2xpZGUiLCJpc0xhc3RTbGlkZSIsImxhc3RQb3NpdGlvbiIsInNob3dCdXR0b25zIiwidXBkYXRlQ29udGFpbmVyQmxlZWQiLCJtZWFzdXJlQ3VycmVudFNsaWRlIiwiY29udGFpbmVyIiwic2xpZGVPZmZzZXRzIiwic2xpZGUiLCJzY3JvbGxMZWZ0IiwiY2xvc2VzdFNsaWRlT2Zmc2V0IiwicHJldiIsImN1cnIiLCJtZWFzdXJlRG9tIiwiaGFuZGxlU2Nyb2xsIiwic2Nyb2xsVG9TbGlkZSIsInNsaWRlSW5kZXgiLCJzaG93TmV4dFNsaWRlIiwic2hvd1ByZXZpb3VzU2xpZGUiLCJvYnNlcnZlU2xpZGVzIiwib3B0aW9ucyIsImVudHJpZXMiLCJzbGlkZXMiLCJlbnRyeSIsIl9hIiwiY2hpbGQiLCJvYnNlcnZlU2xvdCIsIm9ic2VydmVyQ2FsbGJhY2siLCJvbk1vdW50ZWQiLCJvblVubW91bnRlZCIsIl9iIiwib25VcGRhdGVkIiwiT0JKRUNUX0ZJVCIsImltYWdlRGVmYXVsdCIsInBpY3R1cmUiLCJpbWciLCJvYmplY3RGaXRDbGFzc05hbWUiLCJjb21wdXRlZCIsInNldEltYWdlRnJvbURlZmF1bHQiLCJjdXJyZW50U3JjIiwicGljdHVyZVNvdXJjZSIsImlzQ2hlY2tlZCIsImNoZWNrZWQiLCJuZXdWYWx1ZSIsIm9sZFZhbHVlIiwiZXJyb3JNZXNzYWdlRGVmYXVsdCIsIm5vRXJyb3IiLCJjaGVja0Zvcm1hdCIsImZvcm1hdCIsInZhbHVlIiwicmVzdWx0IiwiZ2V0RXJyb3JNZXNzYWdlIiwiZXJyb3JGcm9tUHJvcHMiLCJlcnJvckZyb21SZWYiLCJnZXRGaWVsZEhhc0Vycm9yIiwiZ2V0RmllbGRMZW5ndGhJc1ZhbGlkIiwibWF4bGVuZ3RoIiwibWlubGVuZ3RoIiwicmVxdWlyZWQiLCJpc0VtcHR5QW5kVW5yZXF1aXJlZCIsImlzVG9vTG9uZyIsImhhbmRsZUZpZWxkVmFsaWRhdGlvbiIsImVycm9yIiwidmFsaWRhdG9ycyIsInZhbGlkYXRpb24iLCJ2YWxpZGF0ZVByb3BlcnR5IiwibGVuZ3RoVmFsaWRhdGlvbiIsInZhbGlkYXRlTGVuZ3RoIiwicmVzcG9uc2UiLCJ2YWxpZGF0b3IiLCJoYXNGb2N1cyIsImVycm9yTWVzc2FnZSIsImZvcm1hdHRlZExhYmVsIiwiaGFzRXJyb3IiLCJoYXNNaW5pbGFiZWwiLCJpc0VtcHR5IiwiZXhwYW5kT3B0aW9ucyIsImV2ZW50IiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVGb2N1c091dCIsIl9fZXhwb3NlIiwiVEVYVF9JTlBVVF9UWVBFIiwic2hvd1Bhc3N3b3JkIiwiaGFzQ2xlYXIiLCJ0eXBlIiwiaGFuZGxlQ2xlYXIiLCJoYW5kbGVWYWxpZGF0aW9uIiwiaGFuZGxlSW5wdXQiLCJ1cGRhdGVWYWx1ZSIsIkJSRUFLUE9JTlQiLCJNRURJQSIsInNldFNjcm9sbExvY2siLCJpc0xvY2tlZCIsImJvZHkiLCJzY3JvbGxZIiwibmV4dFRpY2siLCJzYXZlZFNjcm9sbFkiLCJUT1BfTEFZRVJfSUQiLCJpbml0RmF1eFRvcExheWVyIiwidG9wTGF5ZXIiLCJtb2RhbENvbnRlbnQiLCJtb2RhbERpYWxvZyIsInRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuIiwidHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlIiwic2Nyb2xsQ29udGVudFRvVG9wIiwicGFnZUN1cnJlbnQiLCJwYWdpbmF0aW9uQnV0dG9ucyIsImVtcHR5Iiwic2lkZXMiLCJhbGlnbm1lbnRzIiwicGxhY2VtZW50cyIsImFjYyIsInNpZGUiLCJtaW4iLCJtYXgiLCJyb3VuZCIsImZsb29yIiwiY3JlYXRlQ29vcmRzIiwidiIsIm9wcG9zaXRlU2lkZU1hcCIsIm9wcG9zaXRlQWxpZ25tZW50TWFwIiwiY2xhbXAiLCJzdGFydCIsImVuZCIsImV2YWx1YXRlIiwicGFyYW0iLCJnZXRTaWRlIiwicGxhY2VtZW50IiwiZ2V0QWxpZ25tZW50IiwiZ2V0T3Bwb3NpdGVBeGlzIiwiYXhpcyIsImdldEF4aXNMZW5ndGgiLCJnZXRTaWRlQXhpcyIsImdldEFsaWdubWVudEF4aXMiLCJnZXRBbGlnbm1lbnRTaWRlcyIsInJlY3RzIiwicnRsIiwiYWxpZ25tZW50IiwiYWxpZ25tZW50QXhpcyIsImxlbmd0aCIsIm1haW5BbGlnbm1lbnRTaWRlIiwiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0IiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsImNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50IiwiX3JlZiIsInJlZmVyZW5jZSIsImZsb2F0aW5nIiwic2lkZUF4aXMiLCJhbGlnbkxlbmd0aCIsImlzVmVydGljYWwiLCJjb21tb25YIiwiY29tbW9uWSIsImNvbW1vbkFsaWduIiwiY29vcmRzIiwiY29tcHV0ZVBvc2l0aW9uIiwiY29uZmlnIiwic3RyYXRlZ3kiLCJtaWRkbGV3YXJlIiwicGxhdGZvcm0iLCJ2YWxpZE1pZGRsZXdhcmUiLCJzdGF0ZWZ1bFBsYWNlbWVudCIsIm1pZGRsZXdhcmVEYXRhIiwicmVzZXRDb3VudCIsImkiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJkYXRhIiwicmVzZXQiLCJkZXRlY3RPdmVyZmxvdyIsInN0YXRlIiwiX2F3YWl0JHBsYXRmb3JtJGlzRWxlIiwiZWxlbWVudHMiLCJib3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsImVsZW1lbnRDb250ZXh0IiwiYWx0Qm91bmRhcnkiLCJwYWRkaW5nT2JqZWN0IiwiZWxlbWVudCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFNjYWxlIiwiZWxlbWVudENsaWVudFJlY3QiLCJnZXRQbGFjZW1lbnRMaXN0IiwiYXV0b0FsaWdubWVudCIsImFsbG93ZWRQbGFjZW1lbnRzIiwiYXV0b1BsYWNlbWVudCIsIl9taWRkbGV3YXJlRGF0YSRhdXRvUCIsIl9taWRkbGV3YXJlRGF0YSRhdXRvUDIiLCJfcGxhY2VtZW50c1RoYXRGaXRPbkUiLCJjcm9zc0F4aXMiLCJkZXRlY3RPdmVyZmxvd09wdGlvbnMiLCJwbGFjZW1lbnRzJDEiLCJvdmVyZmxvdyIsImN1cnJlbnRJbmRleCIsImN1cnJlbnRQbGFjZW1lbnQiLCJhbGlnbm1lbnRTaWRlcyIsImN1cnJlbnRPdmVyZmxvd3MiLCJhbGxPdmVyZmxvd3MiLCJuZXh0UGxhY2VtZW50IiwicGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlIiwiZCIsImEiLCJiIiwicmVzZXRQbGFjZW1lbnQiLCJjb252ZXJ0VmFsdWVUb0Nvb3JkcyIsIm1haW5BeGlzTXVsdGkiLCJjcm9zc0F4aXNNdWx0aSIsInJhd1ZhbHVlIiwibWFpbkF4aXMiLCJvZmZzZXQiLCJfbWlkZGxld2FyZURhdGEkb2Zmc2UiLCJfbWlkZGxld2FyZURhdGEkYXJyb3ciLCJkaWZmQ29vcmRzIiwic2hpZnQiLCJjaGVja01haW5BeGlzIiwiY2hlY2tDcm9zc0F4aXMiLCJsaW1pdGVyIiwibWFpbkF4aXNDb29yZCIsImNyb3NzQXhpc0Nvb3JkIiwibWluU2lkZSIsIm1heFNpZGUiLCJsaW1pdGVkQ29vcmRzIiwiaGFzV2luZG93IiwiZ2V0Tm9kZU5hbWUiLCJub2RlIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpc092ZXJmbG93RWxlbWVudCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRpc3BsYXkiLCJnZXRDb21wdXRlZFN0eWxlIiwiaXNUYWJsZUVsZW1lbnQiLCJpc1RvcExheWVyIiwic2VsZWN0b3IiLCJpc0NvbnRhaW5pbmdCbG9jayIsImVsZW1lbnRPckNzcyIsIndlYmtpdCIsImlzV2ViS2l0IiwiY3NzIiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiY3VycmVudE5vZGUiLCJnZXRQYXJlbnROb2RlIiwiaXNMYXN0VHJhdmVyc2FibGVOb2RlIiwiZ2V0Tm9kZVNjcm9sbCIsImdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yIiwicGFyZW50Tm9kZSIsImdldE92ZXJmbG93QW5jZXN0b3JzIiwibGlzdCIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwibGVmdCIsInRvcCIsImdldFdpbmRvd1Njcm9sbEJhclgiLCJsZWZ0U2Nyb2xsIiwiZ2V0SFRNTE9mZnNldCIsImRvY3VtZW50RWxlbWVudCIsInNjcm9sbCIsImlnbm9yZVNjcm9sbGJhclgiLCJodG1sUmVjdCIsImNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0Iiwib2Zmc2V0cyIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UmVjdCIsImh0bWxPZmZzZXQiLCJnZXRDbGllbnRSZWN0cyIsImdldERvY3VtZW50UmVjdCIsImh0bWwiLCJnZXRWaWV3cG9ydFJlY3QiLCJ2aXN1YWxWaWV3cG9ydCIsInZpc3VhbFZpZXdwb3J0QmFzZWQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nQW5jZXN0b3IiLCJoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IiLCJzdG9wTm9kZSIsImdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyIsImNhY2hlIiwiY2FjaGVkUmVzdWx0IiwiZWwiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJpc1N0YXRpY1Bvc2l0aW9uZWQiLCJnZXRUcnVlT2Zmc2V0UGFyZW50IiwicG9seWZpbGwiLCJyYXdPZmZzZXRQYXJlbnQiLCJnZXRPZmZzZXRQYXJlbnQiLCJzdmdPZmZzZXRQYXJlbnQiLCJnZXRFbGVtZW50UmVjdHMiLCJnZXRPZmZzZXRQYXJlbnRGbiIsImdldERpbWVuc2lvbnNGbiIsImZsb2F0aW5nRGltZW5zaW9ucyIsImlzUlRMIiwicmVjdHNBcmVFcXVhbCIsIm9ic2VydmVNb3ZlIiwib25Nb3ZlIiwiaW8iLCJ0aW1lb3V0SWQiLCJyb290IiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsInJhdGlvIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZSIsImFuY2VzdG9yU2Nyb2xsIiwiYW5jZXN0b3JSZXNpemUiLCJlbGVtZW50UmVzaXplIiwibGF5b3V0U2hpZnQiLCJhbmltYXRpb25GcmFtZSIsInJlZmVyZW5jZUVsIiwiYW5jZXN0b3JzIiwiY2xlYW51cElvIiwicmVvYnNlcnZlRnJhbWUiLCJyZXNpemVPYnNlcnZlciIsImZpcnN0RW50cnkiLCJfcmVzaXplT2JzZXJ2ZXIiLCJmcmFtZUlkIiwicHJldlJlZlJlY3QiLCJmcmFtZUxvb3AiLCJuZXh0UmVmUmVjdCIsIl9yZXNpemVPYnNlcnZlcjIiLCJvZmZzZXQkMSIsImF1dG9QbGFjZW1lbnQkMSIsInNoaWZ0JDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsImlzQ29tcG9uZW50UHVibGljSW5zdGFuY2UiLCJ0YXJnZXQiLCJ0b1ZhbHVlIiwic291cmNlIiwidW5yZWYiLCJnZXREUFIiLCJyb3VuZEJ5RFBSIiwiZHByIiwidXNlRmxvYXRpbmciLCJ3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbiIsIm9wZW5PcHRpb24iLCJfdG9WYWx1ZSIsIm1pZGRsZXdhcmVPcHRpb24iLCJwbGFjZW1lbnRPcHRpb24iLCJfdG9WYWx1ZTIiLCJzdHJhdGVneU9wdGlvbiIsIl90b1ZhbHVlMyIsInRyYW5zZm9ybU9wdGlvbiIsIl90b1ZhbHVlNCIsInJlZmVyZW5jZUVsZW1lbnQiLCJmbG9hdGluZ0VsZW1lbnQiLCJzaGFsbG93UmVmIiwiaXNQb3NpdGlvbmVkIiwiZmxvYXRpbmdTdHlsZXMiLCJpbml0aWFsU3R5bGVzIiwieFZhbCIsInlWYWwiLCJ3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAiLCJvcGVuIiwicG9zaXRpb24iLCJhdHRhY2giLCJnZXRDdXJyZW50U2NvcGUiLCJvblNjb3BlRGlzcG9zZSIsInNoYWxsb3dSZWFkb25seSIsImlzQ2xpY2tPdXRzaWRlIiwiYW5jaG9yIiwiaXNIb3ZlcmVkIiwiaXNUb2dnbGVkT3BlbiIsIm9mZnNldE1pZGRsZXdhcmUiLCJpc1Nob3dQb3BvdmVyIiwiaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljayIsImUiLCJoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyIiwiaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUiLCJoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2siLCJhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQiLCJyZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCIsImhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93biIsImFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QiLCJyZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QiLCJ1cGRhdGVBbmNob3JFbGVtZW50Iiwid2F0Y2hFZmZlY3QiLCJvbkJlZm9yZU1vdW50IiwiZGlhbG9nRWxlbWVudCIsIkZPUk1BVCIsIkZPUk1BVF9SRUdFWCIsIk1FRElBX1NMSURFX1RZUEVTIiwiVkFMSURBVE9SIl0sIm1hcHBpbmdzIjoiO0FBQU8sTUFBTUEsS0FBYztBQUFBLEVBQ3pCLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFDWixHQ0NhQyxJQUFNO0FBQUEsRUFDakIsZ0JBQWdCLENBQUNDLEdBQXFCQyxNQUM3QkQsRUFBVSxJQUFJLENBQUNFLE1BQVksR0FBR0QsQ0FBVSxJQUFJQyxDQUFPLEVBQUU7QUFBQSxFQUU5RCxPQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsTUFDRCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsU0FBUztB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QUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0EsV0FBVztBQUFBLElBQ1QsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLGNBQWM7QUFBQSxJQUNaLEtBQUs7QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsS0FBSztBQUFBLE1BQ0gsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLFlBQVk7QUFBQSxFQUNkO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxJQUFJO0FBQUEsRUFDTjtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1IsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUNBLElBQUk7QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUNWO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUFBLEVBQ0EsZ0JBQWdCO0FBQUEsSUFDZCxLQUFLO0FBQUEsSUFDTCxJQUFJO0FBQUEsRUFDTjtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxJQUNQLEtBQUs7QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxZQUFZO0FBQUEsSUFDWixpQkFBaUI7QUFBQSxJQUNqQixjQUFjO0FBQUEsRUFDaEI7QUFBQSxFQUNBLFdBQVc7QUFBQSxJQUNULEtBQUs7QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsRUFDUjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osSUFBSTtBQUFBLEVBQ047QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxnQkFBZ0I7QUFBQSxJQUNkLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxXQUFXO0FBQUEsSUFDVCxPQUFPO0FBQUEsTUFDTCxJQUFJO0FBQUEsTUFDSixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osS0FBSztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDVixLQUFLO0FBQUEsSUFDTCxJQUFJO0FBQUEsRUFDTjtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsSUFDZixLQUFLO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULEtBQUs7QUFBQSxFQUNQO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dDamdCYUMsS0FBUTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLEtBQUs7QUFBQSxFQUNMLElBQUk7QUFBQSxFQUNKLE1BQU07QUFBQSxFQUNOLE9BQU87QUFDVCxHQ1ZhQyxJQUFPO0FBQUEsRUFDbEIsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUNULEdBSWFDLEtBQWM7QUFBQSxFQUN6QixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQ1QsR0N3Qk1DLEtBQWUsQ0FBQ0MsTUFBbUM7QUFDdkQsTUFBSUMsSUFBU0QsS0FBUyxPQUFPQSxLQUFVLFdBQVcsSUFBSSxLQUFLLGFBQWEsRUFBRSxPQUFPQSxDQUFLLElBQUksT0FBT0EsS0FBUyxFQUFFLEdBQ3hHRSxJQUFTRDtBQUVULFNBQUFELEtBQVMsT0FBT0EsS0FBVSxhQUNuQkUsSUFBQUEsRUFBTyxRQUFRLE9BQU8sRUFBRSxHQUM3QixPQUFPQSxDQUFNLElBQ2ZELElBQVMsSUFBSSxLQUFLLGFBQUEsRUFBZSxPQUFPLE9BQU9DLENBQU0sQ0FBQyxJQUU3Q0QsSUFBQSxNQUlOQTtBQUNULEdBRU1FLEtBQW1CLENBQUNILE1BQ2pCQSxLQUFTLE9BQU9BLEtBQVUsV0FDN0JBLEVBQ0csUUFBUSx5QkFBeUIsT0FBTyxFQUN4QyxRQUFRLFdBQVcsR0FBRyxFQUN0QixZQUFBLEVBQ0EsTUFBTSxHQUFHLEVBQ1QsSUFBSSxDQUFDSSxNQUFTQSxFQUFLLE1BQU0sR0FBRyxDQUFDLEVBQUUsWUFBQSxJQUFnQkEsRUFBSyxNQUFNLENBQUMsQ0FBQyxFQUM1RCxLQUFLLEVBQUUsSUFDVkosR0FHQUssS0FBYyxDQUFDTCxNQUFtQztBQUNsRCxNQUFBQyxJQUE4QyxPQUFyQ0QsS0FBUyxPQUFPQSxLQUFVLFdBQWtCQSxJQUFnQkEsS0FBUyxFQUFwQixHQUMxREUsSUFBU0Q7QUFHYixVQUZTQyxJQUFBQSxFQUFPLFFBQVEsT0FBTyxFQUFFLEdBRXpCQSxFQUFPLFFBQVE7QUFBQSxJQUNyQixLQUFLO0FBQ00sTUFBQUQsSUFBQSxHQUFHQyxFQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSUEsRUFBTyxNQUFNLENBQUMsQ0FBQztBQUNqRDtBQUFBLElBQ0YsS0FBSztBQUNILE1BQUFELElBQVMsR0FBR0MsRUFBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUlBLEVBQU8sTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJQSxFQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFO0FBQUEsSUFDRixLQUFLO0FBQ00sTUFBQUQsSUFBQSxHQUFHQyxFQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSUEsRUFBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUlBLEVBQU8sTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJQSxFQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQzdGO0FBQUEsSUFDRjtBQUNXLE1BQUFELElBQUFDO0FBQ1Q7QUFBQSxFQUNKO0FBRU8sU0FBQUQ7QUFDVCxHQUVNSyxLQUFjLENBQUNOLE1BRVosSUFEUUEsSUFBUUQsR0FBYUMsQ0FBSyxJQUFJLE9BQU9BLEtBQVMsR0FBRyxDQUMvQzs7Ozs7OztpQkNsRVhPLElBQVdDO0FBRWpCLFdBQUFDO0FBQUEsTUFDRSxNQUFNQyxFQUFNO0FBQUEsTUFDWixZQUFZO0FBQ1YsY0FBTUMsSUFBYUQsRUFBTSxNQUNuQkUsSUFBT1QsR0FBaUJRLENBQUUsR0FDMUIsQ0FBQ0UsQ0FBTSxJQUFJRixFQUFHLE1BQU0sR0FBRyxHQUN2QkcsSUFBY2xCLEdBQU1pQixLQUFBLGdCQUFBQSxFQUFRLGFBQW1DLEdBQy9ERSxJQUFZQyxHQUFxQixNQUNqQ0YsSUFDS0csODFEQUdGQSxHQUFBLHVCQUFBLE9BQUEsRUFBQSw4Q0FBQSxNQUFBLE9BQUEsa0NBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxtQ0FBQSxNQUFBLE9BQUEsdUJBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSw4Q0FBQSxNQUFBLE9BQUEsa0NBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSxtQ0FBQSxNQUFBLE9BQUEsdUJBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxrREFBQSxNQUFBLE9BQUEsc0NBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSw4Q0FBQSxNQUFBLE9BQUEsa0NBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSw4Q0FBQSxNQUFBLE9BQUEsa0NBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSxrREFBQSxNQUFBLE9BQUEsc0NBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxtQ0FBQSxNQUFBLE9BQUEsdUJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSxnREFBQSxNQUFBLE9BQUEsb0NBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSw2Q0FBQSxNQUFBLE9BQUEsaUNBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSxxQ0FBQSxNQUFBLE9BQUEseUJBQUEsR0FBQSwyQ0FBQSxNQUFBLE9BQUEsK0JBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxtQ0FBQSxNQUFBLE9BQUEsdUJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSxvQ0FBQSxNQUFBLE9BQUEsd0JBQUEsR0FBQSwwQ0FBQSxNQUFBLE9BQUEsOEJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx5Q0FBQSxNQUFBLE9BQUEsNkJBQUEsR0FBQSx3Q0FBQSxNQUFBLE9BQUEsNEJBQUEsR0FBQSw4Q0FBQSxNQUFBLE9BQUEsa0NBQUEsR0FBQSx1Q0FBQSxNQUFBLE9BQUEsMkJBQUEsR0FBQSw0Q0FBQSxNQUFBLE9BQUEsZ0NBQUEsR0FBQSxzQ0FBQSxNQUFBLE9BQUEsMEJBQUEsR0FBQSxvQ0FB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
|
|
3924
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlkZS1kZXNpZ24tc3lzdGVtLmVzbS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzL09yaWVudGF0aW9uLnRzIiwiLi4vc3JjL3R5cGVzL1N0eWxlcy50cyIsIi4uL3NyYy90eXBlcy9SZWFsbS50cyIsIi4uL3NyYy90eXBlcy9TaXplLnRzIiwiLi4vc3JjL3V0aWxpdGllcy9mb3JtYXQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSWNvbi52dWUiLCIuLi9zcmMvdHlwZXMvSWNvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVBY2NvcmRpb25JdGVtLnZ1ZSIsIi4uL3NyYy90eXBlcy9FbGVtZW50LnRzIiwiLi4vc3JjL3R5cGVzL1ByaW9yaXR5LnRzIiwiLi4vc3JjL3R5cGVzL1RhcmdldC50cyIsIi4uL3NyYy90eXBlcy9BbGVydC50cyIsIi4uL3NyYy90eXBlcy9CYWRnZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVCdXR0b25TZWdtZW50ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0NhcmQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlQ2Fyb3VzZWwudnVlIiwiLi4vc3JjL3R5cGVzL0ltYWdlLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUltYWdlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dENoZWNrYm94LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dFJhZGlvLnZ1ZSIsIi4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVJbnB1dFNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVGV4dElucHV0LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZUlucHV0VGV4dC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlSW5wdXRUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvQnJlYWtwb2ludC50cyIsIi4uL3NyYy91dGlsaXRpZXMvdmlld3BvcnQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9UaWRlTW9kYWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZVBhZ2luYXRpb24udnVlIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3Z1ZS9kaXN0L2Zsb2F0aW5nLXVpLnZ1ZS5tanMiLCIuLi9zcmMvdXRpbGl0aWVzL2V2ZW50LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZVBvcG92ZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvVGlkZVNoZWV0LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpZGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL0Zvcm1hdHRlZC50cyIsIi4uL3NyYy90eXBlcy9MaXN0aW5nTWVkaWEudHMiLCIuLi9zcmMvdHlwZXMvVmFsaWRhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1JJRU5UQVRJT04gPSB7XG4gIEhPUklaT05UQUw6ICdob3Jpem9udGFsJyxcbiAgVkVSVElDQUw6ICd2ZXJ0aWNhbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBPcmllbnRhdGlvbiA9ICh0eXBlb2YgT1JJRU5UQVRJT04pW2tleW9mIHR5cGVvZiBPUklFTlRBVElPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmltcG9ydCB0eXBlIHsgQnJlYWtwb2ludCB9IGZyb20gJ0AvdHlwZXMvQnJlYWtwb2ludCc7XG5cbmV4cG9ydCBjb25zdCBDU1MgPSB7XG4gIHdpdGhCcmVha3BvaW50OiAodXRpbGl0aWVzOiBzdHJpbmdbXSwgYnJlYWtwb2ludDogQnJlYWtwb2ludCk6IHN0cmluZ1tdID0+IHtcbiAgICByZXR1cm4gdXRpbGl0aWVzLm1hcCgodXRpbGl0eSkgPT4gYCR7YnJlYWtwb2ludH0tJHt1dGlsaXR5fWApO1xuICB9LFxuICBBTElHTjoge1xuICAgIFg6IHtcbiAgICAgIENFTlRFUjogJ3RpZGUtdGV4dC1jZW50ZXInLFxuICAgICAgTEVGVDogJ3RpZGUtdGV4dC1sZWZ0JyxcbiAgICAgIFJJR0hUOiAndGlkZS10ZXh0LXJpZ2h0JyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIElOSVRJQUw6ICd0aWRlLWFsaWduLWluaXRpYWwnLFxuICAgICAgTUlERExFOiAndGlkZS1hbGlnbi1taWRkbGUnLFxuICAgIH0sXG4gIH0sXG4gIEFYSVMxOiB7XG4gICAgQVJPVU5EOiAndGlkZS1heGlzMS1hcm91bmQnLFxuICAgIEJFVFdFRU46ICd0aWRlLWF4aXMxLWJldHdlZW4nLFxuICAgIENFTlRFUjogJ3RpZGUtYXhpczEtY2VudGVyJyxcbiAgICBFTkQ6ICd0aWRlLWF4aXMxLWVuZCcsXG4gICAgU1RBUlQ6ICd0aWRlLWF4aXMxLXN0YXJ0JyxcbiAgfSxcbiAgQVhJUzI6IHtcbiAgICBBUk9VTkQ6ICd0aWRlLWF4aXMyLWFyb3VuZCcsXG4gICAgQ0VOVEVSOiAndGlkZS1heGlzMi1jZW50ZXInLFxuICAgIEVORDogJ3RpZGUtYXhpczItZW5kJyxcbiAgICBTVEFSVDogJ3RpZGUtYXhpczItc3RhcnQnLFxuICAgIFNUUkVUQ0g6ICd0aWRlLWF4aXMyLXN0cmV0Y2gnLFxuICB9LFxuICBCRzoge1xuICAgIEdMT0JBTDoge1xuICAgICAgUFJJTUFSWToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctcHJpbWFyeS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXByaW1hcnktaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXByaW1hcnktc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXByaW1hcnktd2FybmluZycsXG4gICAgICB9LFxuICAgICAgU1VSRkFDRToge1xuICAgICAgICBFUlJPUjogJ3RpZGUtYmctc3VyZmFjZS1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJnLXN1cmZhY2UtaW5mbycsXG4gICAgICAgIFNVQ0NFU1M6ICd0aWRlLWJnLXN1cmZhY2Utc3VjY2VzcycsXG4gICAgICAgIFdBUk5JTkc6ICd0aWRlLWJnLXN1cmZhY2Utd2FybmluZycsXG5cbiAgICAgICAgQkxVRTogJ3RpZGUtYmctc3VyZmFjZS1ibHVlJyxcbiAgICAgICAgR1JFRU46ICd0aWRlLWJnLXN1cmZhY2UtZ3JlZW4nLFxuICAgICAgICBMSU1FOiAndGlkZS1iZy1zdXJmYWNlLWxpbWUnLFxuICAgICAgICBPUkFOR0U6ICd0aWRlLWJnLXN1cmZhY2Utb3JhbmdlJyxcbiAgICAgICAgUFVSUExFOiAndGlkZS1iZy1zdXJmYWNlLXB1cnBsZScsXG4gICAgICAgIFJFRDogJ3RpZGUtYmctc3VyZmFjZS1yZWQnLFxuICAgICAgICBTQUxNT046ICd0aWRlLWJnLXN1cmZhY2Utc2FsbW9uJyxcbiAgICAgICAgVEVBTDogJ3RpZGUtYmctc3VyZmFjZS10ZWFsJyxcbiAgICAgICAgWUVMTE9XOiAndGlkZS1iZy1zdXJmYWNlLXllbGxvdycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgSU5JVElBTDogJ3RpZGUtYmctaW5pdGlhbCcsXG4gICAgQkxVUjogJ3RpZGUtYmctYmx1cicsXG4gICAgUFJJTUFSWTogJ3RpZGUtYmctcHJpbWFyeScsXG4gICAgU0VDT05EQVJZOiAndGlkZS1iZy1zZWNvbmRhcnknLFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIEFDQ0VOVDogJ3RpZGUtYmctc3VyZmFjZS1hY2NlbnQnLFxuICAgICAgQlJBTkQ6ICd0aWRlLWJnLXN1cmZhY2UtYnJhbmQnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYmctc3VyZmFjZScsXG4gICAgICBGTE9BVElORzogJ3RpZGUtYmctc3VyZmFjZS1mbG9hdGluZycsXG4gICAgICBHUkFESUVOVDogJ3RpZGUtYmctc3VyZmFjZS1ncmFkaWVudCcsXG4gICAgICBWQVJJQU5UOiAndGlkZS1iZy1zdXJmYWNlLXZhcmlhbnQnLFxuICAgIH0sXG4gICAgVFJBTlNQQVJFTlQ6IHtcbiAgICAgIE9ORV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0xMDAnLFxuICAgICAgVFdPX0hVTkRSRUQ6ICd0aWRlLXRyYW5zcGFyZW50LTIwMCcsXG4gICAgICBUSFJFRV9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC0zMDAnLFxuICAgICAgRk9VUl9IVU5EUkVEOiAndGlkZS10cmFuc3BhcmVudC00MDAnLFxuICAgIH0sXG4gIH0sXG4gIEJPUkRFUjoge1xuICAgIENPTE9SOiB7XG4gICAgICBHTE9CQUw6IHtcbiAgICAgICAgRVJST1I6ICd0aWRlLWJvcmRlci1lcnJvcicsXG4gICAgICAgIElORk86ICd0aWRlLWJvcmRlci1pbmZvJyxcbiAgICAgICAgU1VDQ0VTUzogJ3RpZGUtYm9yZGVyLXN1Y2Nlc3MnLFxuICAgICAgICBXQVJOSU5HOiAndGlkZS1ib3JkZXItd2FybmluZycsXG5cbiAgICAgICAgQkxVRTogJ3RpZGUtYm9yZGVyLWJsdWUnLFxuICAgICAgICBHUkVFTjogJ3RpZGUtYm9yZGVyLWdyZWVuJyxcbiAgICAgICAgTElNRTogJ3RpZGUtYm9yZGVyLWxpbWUnLFxuICAgICAgICBPUkFOR0U6ICd0aWRlLWJvcmRlci1vcmFuZ2UnLFxuICAgICAgICBQVVJQTEU6ICd0aWRlLWJvcmRlci1wdXJwbGUnLFxuICAgICAgICBSRUQ6ICd0aWRlLWJvcmRlci1yZWQnLFxuICAgICAgICBTQUxNT046ICd0aWRlLWJvcmRlci1zYWxtb24nLFxuICAgICAgICBURUFMOiAndGlkZS1ib3JkZXItdGVhbCcsXG4gICAgICAgIFlFTExPVzogJ3RpZGUtYm9yZGVyLXllbGxvdycsXG4gICAgICB9LFxuICAgICAgSU5JVElBTDogJ3RpZGUtYm9yZGVyLWNvbG9yLWluaXRpYWwnLFxuICAgICAgREVGQVVMVDogJ3RpZGUtYm9yZGVyJyxcbiAgICAgIEZMT0FUSU5HOiAndGlkZS1ib3JkZXItZmxvYXRpbmcnLFxuICAgICAgSElHSDogJ3RpZGUtYm9yZGVyLWhpZ2gnLFxuICAgICAgTE9XOiAndGlkZS1ib3JkZXItbG93JyxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWJvcmRlci1wcmltYXJ5JyxcbiAgICB9LFxuICAgIFJBRElVUzoge1xuICAgICAgWkVSTzogJ3RpZGUtcmFkaXVzLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcmFkaXVzLTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1yYWRpdXMtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcmFkaXVzLTEnLFxuICAgICAgRlVMTDogJ3RpZGUtcmFkaXVzLWZ1bGwnLFxuICAgIH0sXG4gICAgU1RZTEU6IHtcbiAgICAgIERBU0hFRDogJ3RpZGUtYm9yZGVyLWRhc2hlZCcsXG4gICAgICBTT0xJRDogJ3RpZGUtYm9yZGVyLXNvbGlkJyxcbiAgICB9LFxuICAgIEJPVFRPTToge1xuICAgICAgWkVSTzogJ3RpZGUtYm9yZGVyLWJvdHRvbS0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLWJvdHRvbS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtYm9yZGVyLWJvdHRvbS0yJyxcbiAgICB9LFxuICAgIEZVTEw6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLTEnLFxuICAgICAgVFdPOiAndGlkZS1ib3JkZXItMicsXG4gICAgfSxcbiAgICBMRUZUOiB7XG4gICAgICBaRVJPOiAndGlkZS1ib3JkZXItbGVmdC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLWxlZnQtMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci1sZWZ0LTInLFxuICAgIH0sXG4gICAgUklHSFQ6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci1yaWdodC0wJyxcbiAgICAgIE9ORTogJ3RpZGUtYm9yZGVyLXJpZ2h0LTEnLFxuICAgICAgVFdPOiAndGlkZS1ib3JkZXItcmlnaHQtMicsXG4gICAgfSxcbiAgICBUT1A6IHtcbiAgICAgIFpFUk86ICd0aWRlLWJvcmRlci10b3AtMCcsXG4gICAgICBPTkU6ICd0aWRlLWJvcmRlci10b3AtMScsXG4gICAgICBUV086ICd0aWRlLWJvcmRlci10b3AtMicsXG4gICAgfSxcbiAgfSxcbiAgQk9YX1NJWklORzoge1xuICAgIEJPUkRFUl9CT1g6ICd0aWRlLWJveC1ib3JkZXInLFxuICAgIENPTlRFTlRfQk9YOiAndGlkZS1ib3gtY29udGVudCcsXG4gIH0sXG4gIEJSRUFLX0lOU0lERToge1xuICAgIEFWT0lEX0NPTFVNTjogJ3RpZGUtYnJlYWstaW5zaWRlLWF2b2lkLWNvbHVtbicsXG4gIH0sXG4gIEJSRUFLX1dPUkQ6IHtcbiAgICBPRkY6ICd0aWRlLWJyZWFrLWluaXRpYWwnLFxuICAgIE9OOiAndGlkZS1icmVhay13b3JkJyxcbiAgfSxcbiAgQ09MVU1OUzoge1xuICAgIElOSVRJQUw6ICd0aWRlLWNvbHVtbnMtaW5pdGlhbCcsXG4gICAgT05FOiAndGlkZS1jb2x1bW5zLTEnLFxuICAgIFRXTzogJ3RpZGUtY29sdW1ucy0yJyxcbiAgICBUSFJFRTogJ3RpZGUtY29sdW1ucy0zJyxcbiAgICBGT1VSOiAndGlkZS1jb2x1bW5zLTQnLFxuICB9LFxuICBDVVJTT1I6IHtcbiAgICBOT1RfQUxMT1dFRDogJ3RpZGUtY3Vyc29yLW5vdC1hbGxvd2VkJyxcbiAgICBQT0lOVEVSOiAndGlkZS1jdXJzb3ItcG9pbnRlcicsXG4gICAgVEVYVDogJ3RpZGUtY3Vyc29yLXRleHQnLFxuICB9LFxuICBESVNQTEFZOiB7XG4gICAgQkxPQ0s6ICd0aWRlLWRpc3BsYXktYmxvY2snLFxuICAgIENPTlRFTlRTOiAndGlkZS1kaXNwbGF5LWNvbnRlbnRzJyxcbiAgICBGTEVYOiAndGlkZS1kaXNwbGF5LWZsZXgnLFxuICAgIEdSSUQ6ICd0aWRlLWRpc3BsYXktZ3JpZCcsXG4gICAgSU5JVElBTDogJ3RpZGUtZGlzcGxheS1pbml0aWFsJyxcbiAgICBJTkxJTkU6ICd0aWRlLWRpc3BsYXktaW5saW5lJyxcbiAgICBJTkxJTkVfQkxPQ0s6ICd0aWRlLWRpc3BsYXktaW5saW5lLWJsb2NrJyxcbiAgICBJTkxJTkVfRkxFWDogJ3RpZGUtZGlzcGxheS1pbmxpbmUtZmxleCcsXG4gICAgTk9ORTogJ3RpZGUtZGlzcGxheS1ub25lJyxcbiAgfSxcbiAgRUxMSVBTSVM6ICd0aWRlLWVsbGlwc2lzJyxcbiAgRkxFWDoge1xuICAgIEJBU0lTOiB7XG4gICAgICBBVVRPOiAndGlkZS1mbGV4LWJhc2lzLWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtZmxleC1iYXNpcy0wJyxcbiAgICB9LFxuICAgIERJUkVDVElPTjoge1xuICAgICAgQ09MVU1OOiAndGlkZS1mbGV4LWNvbHVtbicsXG4gICAgICBDT0xVTU5fUkVWRVJTRTogJ3RpZGUtZmxleC1jb2x1bW4tcmV2ZXJzZScsXG4gICAgICBST1c6ICd0aWRlLWZsZXgtcm93JyxcbiAgICAgIFJPV19SRVZFUlNFOiAndGlkZS1mbGV4LXJvdy1yZXZlcnNlJyxcbiAgICB9LFxuICAgIEdST1c6IHtcbiAgICAgIE9GRjogJ3RpZGUtZ3Jvdy1ub25lJyxcbiAgICAgIE9OOiAndGlkZS1ncm93JyxcbiAgICB9LFxuICAgIFNIUklOSzoge1xuICAgICAgT0ZGOiAndGlkZS1zaHJpbmstbm9uZScsXG4gICAgICBPTjogJ3RpZGUtc2hyaW5rJyxcbiAgICB9LFxuICAgIFdSQVA6ICd0aWRlLWZsZXgtd3JhcCcsXG4gIH0sXG4gIEZPTlQ6IHtcbiAgICBDT0xPUjoge1xuICAgICAgR0xPQkFMOiB7XG4gICAgICAgIEVSUk9SOiAndGlkZS1mb250LWVycm9yJyxcbiAgICAgICAgSU5GTzogJ3RpZGUtZm9udC1pbmZvJyxcbiAgICAgICAgU1VDQ0VTUzogJ3RpZGUtZm9udC1zdWNjZXNzJyxcbiAgICAgICAgV0FSTklORzogJ3RpZGUtZm9udC13YXJuaW5nJyxcblxuICAgICAgICBCTFVFOiAndGlkZS1mb250LWJsdWUnLFxuICAgICAgICBHUkVFTjogJ3RpZGUtZm9udC1ncmVlbicsXG4gICAgICAgIExJTUU6ICd0aWRlLWZvbnQtbGltZScsXG4gICAgICAgIE9SQU5HRTogJ3RpZGUtZm9udC1vcmFuZ2UnLFxuICAgICAgICBQVVJQTEU6ICd0aWRlLWZvbnQtcHVycGxlJyxcbiAgICAgICAgUkVEOiAndGlkZS1mb250LXJlZCcsXG4gICAgICAgIFNBTE1PTjogJ3RpZGUtZm9udC1zYWxtb24nLFxuICAgICAgICBURUFMOiAndGlkZS1mb250LXRlYWwnLFxuICAgICAgICBZRUxMT1c6ICd0aWRlLWZvbnQteWVsbG93JyxcblxuICAgICAgICBQUklNQVJZOiB7XG4gICAgICAgICAgQkxVRTogJ3RpZGUtZm9udC1wcmltYXJ5LWJsdWUnLFxuICAgICAgICAgIEdSRUVOOiAndGlkZS1mb250LXByaW1hcnktZ3JlZW4nLFxuICAgICAgICAgIExJTUU6ICd0aWRlLWZvbnQtcHJpbWFyeS1saW1lJyxcbiAgICAgICAgICBPUkFOR0U6ICd0aWRlLWZvbnQtcHJpbWFyeS1vcmFuZ2UnLFxuICAgICAgICAgIFBVUlBMRTogJ3RpZGUtZm9udC1wcmltYXJ5LXB1cnBsZScsXG4gICAgICAgICAgUkVEOiAndGlkZS1mb250LXByaW1hcnktcmVkJyxcbiAgICAgICAgICBTQUxNT046ICd0aWRlLWZvbnQtcHJpbWFyeS1zYWxtb24nLFxuICAgICAgICAgIFRFQUw6ICd0aWRlLWZvbnQtcHJpbWFyeS10ZWFsJyxcbiAgICAgICAgICBZRUxMT1c6ICd0aWRlLWZvbnQtcHJpbWFyeS15ZWxsb3cnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFBSSU1BUlk6ICd0aWRlLWZvbnQtb24tcHJpbWFyeScsXG4gICAgICBTRUNPTkRBUlk6ICd0aWRlLWZvbnQtb24tc2Vjb25kYXJ5JyxcbiAgICAgIFNVUkZBQ0U6IHtcbiAgICAgICAgQlJBTkQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1icmFuZCcsXG4gICAgICAgIERFRkFVTFQ6ICd0aWRlLWZvbnQtb24tc3VyZmFjZScsXG4gICAgICAgIElOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS1pbnZlcnNlJyxcbiAgICAgICAgVkFSSUFOVDogJ3RpZGUtZm9udC1vbi1zdXJmYWNlLXZhcmlhbnQnLFxuICAgICAgICBWQVJJQU5UX0lOVkVSU0U6ICd0aWRlLWZvbnQtb24tc3VyZmFjZS12YXJpYW50LWludmVyc2UnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFJPTEU6IHtcbiAgICAgIERJU1BMQVlfMTogJ3RpZGUtdHlwb2dyYXBoeS1kaXNwbGF5LTEnLFxuICAgICAgSEVBRExJTkVfMTogJ3RpZGUtdHlwb2dyYXBoeS1oZWFkbGluZS0xJyxcbiAgICAgIEhFQURMSU5FXzI6ICd0aWRlLXR5cG9ncmFwaHktaGVhZGxpbmUtMicsXG4gICAgICBIRUFETElORV8zOiAndGlkZS10eXBvZ3JhcGh5LWhlYWRsaW5lLTMnLFxuICAgICAgVElUTEVfMTogJ3RpZGUtdHlwb2dyYXBoeS10aXRsZS0xJyxcbiAgICAgIFRJVExFXzI6ICd0aWRlLXR5cG9ncmFwaHktdGl0bGUtMicsXG4gICAgICBCT0RZXzE6ICd0aWRlLXR5cG9ncmFwaHktYm9keS0xJyxcbiAgICAgIEJPRFlfMjogJ3RpZGUtdHlwb2dyYXBoeS1ib2R5LTInLFxuICAgICAgTEFCRUxfMTogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0xJyxcbiAgICAgIExBQkVMXzFfU0VNSUJPTEQ6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMS1zZW1pYm9sZCcsXG4gICAgICBMQUJFTF8yOiAndGlkZS10eXBvZ3JhcGh5LWxhYmVsLTInLFxuICAgICAgTEFCRUxfMl9TRU1JQk9MRDogJ3RpZGUtdHlwb2dyYXBoeS1sYWJlbC0yLXNlbWlib2xkJyxcbiAgICAgIExBQkVMXzM6ICd0aWRlLXR5cG9ncmFwaHktbGFiZWwtMycsXG4gICAgICBMSU5LXzE6ICd0aWRlLXR5cG9ncmFwaHktbGluay0xJyxcbiAgICAgIExJTktfMjogJ3RpZGUtdHlwb2dyYXBoeS1saW5rLTInLFxuICAgICAgTElOS18zOiAndGlkZS10eXBvZ3JhcGh5LWxpbmstMycsXG4gICAgICBCVVRUT05fMTogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMScsXG4gICAgICBCVVRUT05fMjogJ3RpZGUtdHlwb2dyYXBoeS1idXR0b24tMicsXG4gICAgfSxcbiAgICBTSVpFOiB7XG4gICAgICBUV0VMVkU6ICd0aWRlLWZvbnQtMTInLFxuICAgICAgRk9VUlRFRU46ICd0aWRlLWZvbnQtMTQnLFxuICAgICAgU0lYVEVFTjogJ3RpZGUtZm9udC0xNicsXG4gICAgICBUV0VOVFk6ICd0aWRlLWZvbnQtMjAnLFxuICAgICAgVFdFTlRZX0ZPVVI6ICd0aWRlLWZvbnQtMjQnLFxuICAgICAgVEhJUlRZX1RXTzogJ3RpZGUtZm9udC0zMicsXG4gICAgfSxcbiAgICBXRUlHSFQ6IHtcbiAgICAgIEZPVVJfSFVORFJFRDogJ3RpZGUtZm9udC00MDAnLFxuICAgICAgRklWRV9IVU5EUkVEOiAndGlkZS1mb250LTUwMCcsXG4gICAgICBTSVhfSFVORFJFRDogJ3RpZGUtZm9udC02MDAnLFxuICAgICAgU0VWRU5fSFVORFJFRDogJ3RpZGUtZm9udC03MDAnLFxuICAgIH0sXG4gIH0sXG4gIEdBUDoge1xuICAgIFpFUk86ICd0aWRlLWdhcC0wJyxcbiAgICBRVUFSVEVSOiAndGlkZS1nYXAtMS80JyxcbiAgICBIQUxGOiAndGlkZS1nYXAtMS8yJyxcbiAgICBPTkU6ICd0aWRlLWdhcC0xJyxcbiAgICBUV086ICd0aWRlLWdhcC0yJyxcbiAgICBGT1VSOiAndGlkZS1nYXAtNCcsXG4gIH0sXG4gIEdSSUQ6IHtcbiAgICBGTFVJRDogJ3RpZGUtZmx1aWQnLFxuICAgIElURU06ICd0aWRlLWdyaWQtaXRlbScsXG4gICAgTEFZT1VUOiAndGlkZS1ncmlkLWxheW91dCcsXG4gICAgWEw6ICd0aWRlLWdyaWQteGwnLFxuICB9LFxuICBIRUlHSFQ6IHtcbiAgICBBVVRPOiAndGlkZS1oZWlnaHQtYXV0bycsXG4gICAgWkVSTzogJ3RpZGUtaGVpZ2h0LTAnLFxuICAgIEZVTEw6ICd0aWRlLWhlaWdodC1mdWxsJyxcbiAgICBNQVhfRlVMTDogJ3RpZGUtbWF4LWhlaWdodC1mdWxsJyxcbiAgICBNSU5fWkVSTzogJ3RpZGUtbWluLWhlaWdodC0wJyxcbiAgfSxcbiAgSVNPTEFUSU9OOiB7XG4gICAgSVNPTEFURTogJ3RpZGUtaXNvbGF0ZScsXG4gIH0sXG4gIExJU1RfQlVMTEVUUzoge1xuICAgIE9GRjogJ3RpZGUtbGlzdC1ub25lJyxcbiAgfSxcbiAgTUFSR0lOOiB7XG4gICAgQk9UVE9NOiB7XG4gICAgICBBVVRPOiAndGlkZS1tYXJnaW4tYm90dG9tLWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLWJvdHRvbS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi1ib3R0b20tMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi1ib3R0b20tMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLWJvdHRvbS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLWJvdHRvbS0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi1ib3R0b20tNCcsXG4gICAgfSxcbiAgICBGVUxMOiB7XG4gICAgICBaRVJPOiAndGlkZS1tYXJnaW4tMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4tMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLW1hcmdpbi0xLzInLFxuICAgICAgT05FOiAndGlkZS1tYXJnaW4tMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLW1hcmdpbi00JyxcbiAgICB9LFxuICAgIExFRlQ6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi1sZWZ0LWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLWxlZnQtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4tbGVmdC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLWxlZnQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLWxlZnQtMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi1sZWZ0LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLWxlZnQtNCcsXG4gICAgfSxcbiAgICBSSUdIVDoge1xuICAgICAgQVVUTzogJ3RpZGUtbWFyZ2luLXJpZ2h0LWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXJpZ2h0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLXJpZ2h0LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4tcmlnaHQtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXJpZ2h0LTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tcmlnaHQtMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4tcmlnaHQtNCcsXG4gICAgfSxcbiAgICBUT1A6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi10b3AtYXV0bycsXG4gICAgICBaRVJPOiAndGlkZS1tYXJnaW4tdG9wLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtbWFyZ2luLXRvcC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXRvcC0xLzInLFxuICAgICAgT05FOiAndGlkZS1tYXJnaW4tdG9wLTEnLFxuICAgICAgVFdPOiAndGlkZS1tYXJnaW4tdG9wLTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXRvcC00JyxcbiAgICB9LFxuICAgIFg6IHtcbiAgICAgIEFVVE86ICd0aWRlLW1hcmdpbi14LWF1dG8nLFxuICAgICAgWkVSTzogJ3RpZGUtbWFyZ2luLXgtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1tYXJnaW4teC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtbWFyZ2luLXgtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtbWFyZ2luLXgtMScsXG4gICAgICBUV086ICd0aWRlLW1hcmdpbi14LTInLFxuICAgICAgRk9VUjogJ3RpZGUtbWFyZ2luLXgtNCcsXG4gICAgfSxcbiAgICBZOiB7XG4gICAgICBaRVJPOiAndGlkZS1tYXJnaW4teS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLW1hcmdpbi15LTEvNCcsXG4gICAgICBIQUxGOiAndGlkZS1tYXJnaW4teS0xLzInLFxuICAgICAgT05FOiAndGlkZS1tYXJnaW4teS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtbWFyZ2luLXktMicsXG4gICAgICBGT1VSOiAndGlkZS1tYXJnaW4teS00JyxcbiAgICB9LFxuICB9LFxuICBPQkpFQ1Q6IHtcbiAgICBDRU5URVI6ICd0aWRlLW9iamVjdC1jZW50ZXInLFxuICAgIENPTlRBSU46ICd0aWRlLW9iamVjdC1jb250YWluJyxcbiAgICBDT1ZFUjogJ3RpZGUtb2JqZWN0LWNvdmVyJyxcbiAgICBTQ0FMRV9ET1dOOiAndGlkZS1vYmplY3Qtc2NhbGUtZG93bicsXG4gIH0sXG4gIE9QQUNJVFk6IHtcbiAgICBPRkY6ICd0aWRlLW9wYWNpdHktbm9uZScsXG4gICAgT046ICd0aWRlLW9wYWNpdHknLFxuICB9LFxuICBPVkVSRkxPVzoge1xuICAgIFg6IHtcbiAgICAgIEFVVE86ICd0aWRlLXgtYXV0bycsXG4gICAgICBISURERU46ICd0aWRlLXgtaGlkZGVuJyxcbiAgICAgIFNDUk9MTDogJ3RpZGUteC1zY3JvbGwnLFxuICAgIH0sXG4gICAgWFk6IHtcbiAgICAgIEFVVE86ICd0aWRlLXh5LWF1dG8nLFxuICAgICAgSElEREVOOiAndGlkZS14eS1oaWRkZW4nLFxuICAgIH0sXG4gICAgWToge1xuICAgICAgQVVUTzogJ3RpZGUteS1hdXRvJyxcbiAgICAgIEhJRERFTjogJ3RpZGUteS1oaWRkZW4nLFxuICAgIH0sXG4gIH0sXG4gIFBBRERJTkc6IHtcbiAgICBCT1RUT006IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmctYm90dG9tLTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy1ib3R0b20tMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctYm90dG9tLTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmctYm90dG9tLTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLWJvdHRvbS0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctYm90dG9tLTQnLFxuICAgIH0sXG4gICAgRlVMTDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmctMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctNCcsXG4gICAgfSxcbiAgICBMRUZUOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLWxlZnQtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLWxlZnQtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmctbGVmdC0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLWxlZnQtMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmctbGVmdC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmctbGVmdC00JyxcbiAgICB9LFxuICAgIFJJR0hUOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLXJpZ2h0LTAnLFxuICAgICAgUVVBUlRFUjogJ3RpZGUtcGFkZGluZy1yaWdodC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtcGFkZGluZy1yaWdodC0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLXJpZ2h0LTEnLFxuICAgICAgVFdPOiAndGlkZS1wYWRkaW5nLXJpZ2h0LTInLFxuICAgICAgRk9VUjogJ3RpZGUtcGFkZGluZy1yaWdodC00JyxcbiAgICB9LFxuICAgIFRPUDoge1xuICAgICAgWkVSTzogJ3RpZGUtcGFkZGluZy10b3AtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLXRvcC0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtcGFkZGluZy10b3AtMS8yJyxcbiAgICAgIE9ORTogJ3RpZGUtcGFkZGluZy10b3AtMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmctdG9wLTInLFxuICAgICAgRk9VUjogJ3RpZGUtcGFkZGluZy10b3AtNCcsXG4gICAgfSxcbiAgICBYOiB7XG4gICAgICBaRVJPOiAndGlkZS1wYWRkaW5nLXgtMCcsXG4gICAgICBRVUFSVEVSOiAndGlkZS1wYWRkaW5nLXgtMS80JyxcbiAgICAgIEhBTEY6ICd0aWRlLXBhZGRpbmcteC0xLzInLFxuICAgICAgT05FOiAndGlkZS1wYWRkaW5nLXgtMScsXG4gICAgICBUV086ICd0aWRlLXBhZGRpbmcteC0yJyxcbiAgICAgIEZPVVI6ICd0aWRlLXBhZGRpbmcteC00JyxcbiAgICB9LFxuICAgIFk6IHtcbiAgICAgIFpFUk86ICd0aWRlLXBhZGRpbmcteS0wJyxcbiAgICAgIFFVQVJURVI6ICd0aWRlLXBhZGRpbmcteS0xLzQnLFxuICAgICAgSEFMRjogJ3RpZGUtcGFkZGluZy15LTEvMicsXG4gICAgICBPTkU6ICd0aWRlLXBhZGRpbmcteS0xJyxcbiAgICAgIFRXTzogJ3RpZGUtcGFkZGluZy15LTInLFxuICAgICAgRk9VUjogJ3RpZGUtcGFkZGluZy15LTQnLFxuICAgIH0sXG4gIH0sXG4gIFBPSU5URVJfRVZFTlRTOiB7XG4gICAgT0ZGOiAndGlkZS1wb2ludGVyLWV2ZW50cy1ub25lJyxcbiAgICBPTjogJ3RpZGUtcG9pbnRlci1ldmVudHMnLFxuICB9LFxuICBQT1NJVElPTjoge1xuICAgIEFCU09MVVRFOiAndGlkZS1wb3NpdGlvbi1hYnNvbHV0ZScsXG4gICAgRklYRUQ6ICd0aWRlLXBvc2l0aW9uLWZpeGVkJyxcbiAgICBSRUxBVElWRTogJ3RpZGUtcG9zaXRpb24tcmVsYXRpdmUnLFxuICAgIFNUQVRJQzogJ3RpZGUtcG9zaXRpb24tc3RhdGljJyxcbiAgICBTVElDS1k6ICd0aWRlLXBvc2l0aW9uLXN0aWNreScsXG4gIH0sXG4gIFBPU0lUSU9OSU5HOiB7XG4gICAgQk9UVE9NOiAndGlkZS1ib3R0b20tMCcsXG4gICAgTEVGVDogJ3RpZGUtbGVmdC0wJyxcbiAgICBSSUdIVDogJ3RpZGUtcmlnaHQtMCcsXG4gICAgVE9QOiAndGlkZS10b3AtMCcsXG4gIH0sXG4gIFJBVElPOiB7XG4gICAgT05FX1RPX09ORTogJ3RpZGUtcmF0aW8tMS8xJyxcbiAgICBTSVhURUVOX1RPX05JTkU6ICd0aWRlLXJhdGlvLTE2LzknLFxuICAgIFRIUkVFX1RPX1RXTzogJ3RpZGUtcmF0aW8tMy8yJyxcbiAgfSxcbiAgU0NST0xMQkFSOiB7XG4gICAgT0ZGOiAndGlkZS1zY3JvbGxiYXItbm9uZScsXG4gIH0sXG4gIFNIQURPVzoge1xuICAgIElOSVRJQUw6ICd0aWRlLXNoYWRvdy1pbml0aWFsJyxcbiAgICBCT1RUT006ICd0aWRlLXNoYWRvdy1ib3R0b20nLFxuICAgIFRPUDogJ3RpZGUtc2hhZG93LXRvcCcsXG4gICAgVEVYVDogJ3RpZGUtc2hhZG93LXRleHQnLFxuICB9LFxuICBTTkFQOiB7XG4gICAgT046ICd0aWRlLXNjcm9sbC1zbmFwJyxcbiAgfSxcbiAgU05BUF9BTElHTjoge1xuICAgIFNUQVJUOiAndGlkZS1zY3JvbGwtc25hcC1zdGFydCcsXG4gIH0sXG4gIFRFWFRfVFJBTlNGT1JNOiB7XG4gICAgTE9XRVI6ICd0aWRlLXRleHQtdHJhbnNmb3JtLWxvd2VyJyxcbiAgICBOT05FOiAndGlkZS10ZXh0LXRyYW5zZm9ybS1ub25lJyxcbiAgICBVUFBFUjogJ3RpZGUtdGV4dC10cmFuc2Zvcm0tdXBwZXInLFxuICB9LFxuICBVTkRFUkxJTkU6IHtcbiAgICBIT1ZFUjoge1xuICAgICAgT046ICd0aWRlLXVuZGVybGluZS1ob3ZlcicsXG4gICAgICBPRkY6ICd0aWRlLXVuZGVybGluZS1ob3Zlci1ub25lJyxcbiAgICB9LFxuICAgIFJFU1Q6IHtcbiAgICAgIE9OOiAndGlkZS11bmRlcmxpbmUnLFxuICAgICAgT0ZGOiAndGlkZS11bmRlcmxpbmUtbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgVklTSUJJTElUWToge1xuICAgIE9GRjogJ3RpZGUtdmlzaWJsZS1ub25lJyxcbiAgICBPTjogJ3RpZGUtdmlzaWJsZScsXG4gIH0sXG4gIFdISVRFU1BBQ0VfV1JBUDoge1xuICAgIE9GRjogJ3RpZGUtd2hpdGVzcGFjZS1ub3dyYXAnLFxuICB9LFxuICBXSURUSDoge1xuICAgIEFVVE86ICd0aWRlLXdpZHRoLWF1dG8nLFxuICAgIFpFUk86ICd0aWRlLXdpZHRoLTAnLFxuICAgIEZVTEw6ICd0aWRlLXdpZHRoLWZ1bGwnLFxuICAgIE1BWF9GVUxMOiAndGlkZS1tYXgtd2lkdGgtZnVsbCcsXG4gICAgTUlOX1pFUk86ICd0aWRlLW1pbi13aWR0aC0wJyxcbiAgfSxcbiAgWl9JTkRFWDoge1xuICAgIElOSVRJQUw6ICd0aWRlLXotaW5kZXgtaW5pdGlhbCcsXG4gICAgT05FOiAndGlkZS16LWluZGV4LTEnLFxuICB9LFxufSBhcyBjb25zdDtcbiIsImV4cG9ydCBjb25zdCBSRUFMTSA9IHtcbiAgQUVSTzogJ2Flcm8nLFxuICBBVFY6ICdhdHYnLFxuICBCT0FUTUFSVDogJ2JvYXRtYXJ0JyxcbiAgQ1lDTEU6ICdjeWNsZScsXG4gIEVRVUlQTUVOVDogJ2VxdWlwbWVudCcsXG4gIFBXQzogJ3B3YycsXG4gIFJWOiAncnYnLFxuICBTTk9XOiAnc25vdycsXG4gIFRSVUNLOiAndHJ1Y2snLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVhbG1LZXkgPSBrZXlvZiB0eXBlb2YgUkVBTE07XG5leHBvcnQgdHlwZSBSZWFsbSA9ICh0eXBlb2YgUkVBTE0pW1JlYWxtS2V5XTtcbiIsImV4cG9ydCBjb25zdCBTSVpFID0ge1xuICBMQVJHRTogJ2xhcmdlJyxcbiAgU01BTEw6ICdzbWFsbCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTSVpFKVtrZXlvZiB0eXBlb2YgU0laRV07XG5cbmV4cG9ydCBjb25zdCBTSVpFX0JVVFRPTiA9IHtcbiAgTEFSR0U6ICdsYXJnZScsXG4gIFNNQUxMOiAnc21hbGwnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2l6ZUJ1dHRvbiA9ICh0eXBlb2YgU0laRSlba2V5b2YgdHlwZW9mIFNJWkVdO1xuIiwiY29uc3QgY2FwaXRhbGl6ZUZpcnN0ID0gKHN0cmluZzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuXG5jb25zdCBmb3JtYXRDYW1lbENhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG4gICAgPyBpbnB1dFxuICAgICAgICAucmVwbGFjZSgvXltcXHNfLV0vLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IHdvcmQgOiB3b3JkLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdEtlYmFiQ2FzZSA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbiAgICA/IGlucHV0XG4gICAgICAgIC5yZXBsYWNlKC8oW2Etel17MX0pKFtBLVpdezF9KS9nLCAnJDEgJDInKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnLScpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdExhYmVsID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgbGFiZWxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgZmFsc2U6ICdObycsXG4gICAgdHJ1ZTogJ1llcycsXG4gIH07XG4gIHJldHVybiBPYmplY3QuaGFzT3duKGxhYmVsTWFwLCB2YWx1ZSkgPyBsYWJlbE1hcFt2YWx1ZV0gOiB2YWx1ZTtcbn07XG5cbmNvbnN0IGZvcm1hdE51bWJlciA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IG91dHB1dCA9IGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcnKTtcbiAgbGV0IGRpZ2l0cyA9IG91dHB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGRpZ2l0cyA9IGRpZ2l0cy5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIGlmIChOdW1iZXIoZGlnaXRzKSkge1xuICAgICAgb3V0cHV0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KE51bWJlcihkaWdpdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gJzAnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQYXNjYWxDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgOiBpbnB1dDtcbn07XG5cbmNvbnN0IGZvcm1hdFBob25lID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyA/IFN0cmluZyhpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJycpO1xuICBsZXQgZGlnaXRzID0gb3V0cHV0O1xuICBkaWdpdHMgPSBkaWdpdHMucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICBzd2l0Y2ggKGRpZ2l0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDc6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMyl9LSR7ZGlnaXRzLnNsaWNlKDMpfWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgb3V0cHV0ID0gYCR7ZGlnaXRzLnNsaWNlKDAsIDMpfS0ke2RpZ2l0cy5zbGljZSgzLCA2KX0tJHtkaWdpdHMuc2xpY2UoNil9YDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICBvdXRwdXQgPSBgJHtkaWdpdHMuc2xpY2UoMCwgMSl9LSR7ZGlnaXRzLnNsaWNlKDEsIDQpfS0ke2RpZ2l0cy5zbGljZSg0LCA3KX0tJHtkaWdpdHMuc2xpY2UoNyl9YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvdXRwdXQgPSBkaWdpdHM7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRQcmljZSA9IChpbnB1dDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gaW5wdXQgPyBmb3JtYXROdW1iZXIoaW5wdXQpIDogU3RyaW5nKGlucHV0IHx8ICcwJyk7XG4gIHJldHVybiBgJCR7b3V0cHV0fWA7XG59O1xuXG5jb25zdCBmb3JtYXRRdW90ZXMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5jb25zdCBmb3JtYXRTZW50ZW5jZUNhc2UgPSAoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBzZW50ZW5jZUNhc2UgPSBpbnB1dDtcblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvd2VyQ2FzZSA9IGlucHV0XG4gICAgICAucmVwbGFjZSgvKFthLXpdezF9KShbQS1aXXsxfSkvZywgJyQxICQyJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW1xcc18tXS9nLCAnICcpO1xuXG4gICAgc2VudGVuY2VDYXNlID0gbG93ZXJDYXNlLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBsb3dlckNhc2Uuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gc2VudGVuY2VDYXNlO1xufTtcblxuY29uc3QgZm9ybWF0U25ha2VDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICdfJylcbiAgICA6IGlucHV0O1xufTtcblxuY29uc3QgZm9ybWF0VGl0bGVDYXNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xuICAgID8gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XXsxfSkoW0EtWl17MX0pL2csICckMSAkMicpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKC9bXFxzXy1dL2csICcgJylcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgod29yZCkgPT4gd29yZC5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgIDogaW5wdXQ7XG59O1xuXG5jb25zdCBmb3JtYXRVcmxGcm9tUm9vdCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmxGb3JtYXR0ZWQgPSB1cmwuc3BsaXQoJy5jb20vJyk7XG5cbiAgcmV0dXJuIHVybEZvcm1hdHRlZC5sZW5ndGggPiAxID8gYC8ke3VybEZvcm1hdHRlZFsxXX1gIDogdXJsO1xufTtcblxuY29uc3QgZm9ybWF0V2VpZ2h0ID0gKGlucHV0OiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dCA/IGZvcm1hdE51bWJlcihpbnB1dCkgOiBTdHJpbmcoaW5wdXQgfHwgJzAnKTtcbiAgcmV0dXJuIGAke291dHB1dH0gbGJzYDtcbn07XG5cbmNvbnN0IGdldEFydGljbGUgPSAobm91bjogc3RyaW5nLCBpc1BsdXJhbCA9IGZhbHNlLCBpc0RlZmluaXRlID0gZmFsc2UpID0+IHtcbiAgY29uc3Qgdm93ZWxzID0gWydhJywgJ2UnLCAnaScsICdvJywgJ3UnXTtcbiAgY29uc3QgaXNWb3dlbExlYWRpbmcgPSB2b3dlbHMuaW5jbHVkZXMobm91bi5jaGFyQXQoMCkpO1xuXG4gIHJldHVybiBpc0RlZmluaXRlID8gJ3RoZScgOiBpc1BsdXJhbCA/ICdzb21lJyA6IGlzVm93ZWxMZWFkaW5nID8gJ2FuJyA6ICdhJztcbn07XG5cbmNvbnN0IHByaWNlVG9OdW1iZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCckJywgJycpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59O1xuXG5jb25zdCB1bmZvcm1hdFByaWNlID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBpbnB1dC5yZXBsYWNlKC9cXCQvZywgJycpLnJlcGxhY2UoLywvZywgJycpO1xuICByZXR1cm4gYCR7b3V0cHV0fWA7XG59O1xuXG5leHBvcnQge1xuICBjYXBpdGFsaXplRmlyc3QsXG4gIGZvcm1hdENhbWVsQ2FzZSxcbiAgZm9ybWF0S2ViYWJDYXNlLFxuICBmb3JtYXRMYWJlbCxcbiAgZm9ybWF0TnVtYmVyLFxuICBmb3JtYXRQYXNjYWxDYXNlLFxuICBmb3JtYXRQaG9uZSxcbiAgZm9ybWF0UHJpY2UsXG4gIGZvcm1hdFF1b3RlcyxcbiAgZm9ybWF0U2VudGVuY2VDYXNlLFxuICBmb3JtYXRTbmFrZUNhc2UsXG4gIGZvcm1hdFRpdGxlQ2FzZSxcbiAgZm9ybWF0VXJsRnJvbVJvb3QsXG4gIGZvcm1hdFdlaWdodCxcbiAgZ2V0QXJ0aWNsZSxcbiAgcHJpY2VUb051bWJlcixcbiAgdW5mb3JtYXRQcmljZSxcbn07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBkZWZpbmVBc3luY0NvbXBvbmVudCwgbWFya1JhdywgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IHsgUkVBTE0gfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZm9ybWF0UGFzY2FsQ2FzZSB9IGZyb20gJ0AvdXRpbGl0aWVzL2Zvcm1hdCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBJY29uIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaWNvbjogSWNvbjtcbiAgICBzaXplPzogU2l6ZTtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIHNpemU6IFNJWkUuU01BTEwsXG4gIH0pO1xuXG4gIGNvbnN0IGlubmVyU1ZHID0gcmVmPENvbXBvbmVudD4oKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5pY29uLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBwcm9wcy5pY29uO1xuICAgICAgY29uc3QgbmFtZSA9IGZvcm1hdFBhc2NhbENhc2UoaWQpO1xuICAgICAgY29uc3QgW3ByZWZpeF0gPSBpZC5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgcmVhbG1Gb2xkZXIgPSBSRUFMTVtwcmVmaXg/LnRvVXBwZXJDYXNlKCkgYXMga2V5b2YgdHlwZW9mIFJFQUxNXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRlZmluZUFzeW5jQ29tcG9uZW50KCgpID0+IHtcbiAgICAgICAgaWYgKHJlYWxtRm9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGltcG9ydChgLi4vYXNzZXRzL3N2Zy9pY29ucy9yZWFsbS8ke3JlYWxtRm9sZGVyfS9JY29uJHtuYW1lfS5zdmc/Y29tcG9uZW50YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1wb3J0KGAuLi9hc3NldHMvc3ZnL2ljb25zL0ljb24ke25hbWV9LnN2Zz9jb21wb25lbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpbm5lclNWRy52YWx1ZSA9IG1hcmtSYXcoY29tcG9uZW50KTtcbiAgICB9LFxuICAgIHsgaW1tZWRpYXRlOiB0cnVlIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXYgOmNsYXNzPVwiWyd0aWRlLWljb24nLCBwcm9wcy5zaXplXVwiPlxuICAgIDxDb21wb25lbnRcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5CTE9DS11cIlxuICAgICAgOmRhdGEtaWNvbj1cImljb25cIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICA6aXM9XCJpbm5lclNWR1wiXG4gICAgICB2LWlmPVwiaW5uZXJTVkdcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuICAudGlkZS1pY29uIHtcbiAgICB3aWR0aDogMS41cmVtO1xuICAgIGhlaWdodDogMS41cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbi5zbWFsbCB7XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICB9XG5cbiAgLnRpZGUtaWNvbiBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuPC9zdHlsZT5cbiIsImltcG9ydCB0eXBlIHsgUmVhbG1LZXkgfSBmcm9tICdAL3R5cGVzL1JlYWxtJztcblxuZXhwb3J0IGNvbnN0IElDT04gPSB7XG4gIEFDQ09VTlRfQkFMQU5DRTogJ2FjY291bnQtYmFsYW5jZScsXG4gIEFDVVRFOiAnYWN1dGUnLFxuICBBREQ6ICdhZGQnLFxuICBBSV9ERVNDUklQVElPTjogJ2FpLWRlc2NyaXB0aW9uJyxcbiAgQUxJR05fU1BBQ0VfRVZFTjogJ2FsaWduLXNwYWNlLWV2ZW4nLFxuICBBUFBMRV9QQVk6ICdhcHBsZS1wYXknLFxuICBBUlJPV19CQUNLOiAnYXJyb3ctYmFjaycsXG4gIEFSUk9XX0NZQ0xFOiAnYXJyb3ctY3ljbGUnLFxuICBBUlJPV19GT1JXQVJEOiAnYXJyb3ctZm9yd2FyZCcsXG4gIEFSUk9XX1JJR0hUOiAnYXJyb3ctcmlnaHQnLFxuICBBU1NJR05NRU5UOiAnYXNzaWdubWVudCcsXG4gIEFUVEFDSF9NT05FWTogJ2F0dGFjaC1tb25leScsXG4gIEFVVE9fUkVORVc6ICdhdXRvLXJlbmV3JyxcbiAgQVdBUkRfU1RBUjogJ2F3YXJkLXN0YXInLFxuICBCRUQ6ICdiZWQnLFxuICBCT0xUOiAnYm9sdCcsXG4gIEJPT0tNQVJLOiAnYm9va21hcmsnLFxuICBCVU5LSE9VU0U6ICdidW5raG91c2UnLFxuICBDQUxFTkRBUl9NT05USDogJ2NhbGVuZGFyLW1vbnRoJyxcbiAgQ0FMTDogJ2NhbGwnLFxuICBDQUxMX1FVQUxJVFk6ICdjYWxsLXF1YWxpdHknLFxuICBDQVJfUkVOVEFMOiAnY2FyLXJlbnRhbCcsXG4gIENIRUNLOiAnY2hlY2snLFxuICBDSEVWUk9OX0xFRlQ6ICdjaGV2cm9uLWxlZnQnLFxuICBDSEVWUk9OX1JJR0hUOiAnY2hldnJvbi1yaWdodCcsXG4gIENMRUFSOiAnY2xlYXInLFxuICBDTE9TRTogJ2Nsb3NlJyxcbiAgQ09OVFJBQ1Q6ICdjb250cmFjdCcsXG4gIENSQVNIOiAnY3Jhc2gnLFxuICBEQVNIQk9BUkRfQ1VTVE9NSVpFOiAnZGFzaGJvYXJkLWN1c3RvbWl6ZScsXG4gIERFTEVURTogJ2RlbGV0ZScsXG4gIERJQU1PTkQ6ICdkaWFtb25kJyxcbiAgRElSRUNUSU9OU19CT0FUOiAnZGlyZWN0aW9ucy1ib2F0JyxcbiAgRE9NQUlOOiAnZG9tYWluJyxcbiAgRFJBRlQ6ICdkcmFmdCcsXG4gIEVESVQ6ICdlZGl0JyxcbiAgRU5HSU5FOiAnZW5naW5lJyxcbiAgRU5HSU5FRVJJTkc6ICdlbmdpbmVlcmluZycsXG4gIEVSUk9SOiAnZXJyb3InLFxuICBFWFBBTkRfQ09OVEVOVDogJ2V4cGFuZC1jb250ZW50JyxcbiAgRVhQQU5EX0xFU1M6ICdleHBhbmQtbGVzcycsXG4gIEVYUEFORF9NT1JFOiAnZXhwYW5kLW1vcmUnLFxuICBGQUNFQk9PSzogJ2ZhY2Vib29rJyxcbiAgRkFWT1JJVEU6ICdmYXZvcml0ZScsXG4gIEZBVk9SSVRFX0ZJTExFRDogJ2Zhdm9yaXRlLWZpbGxlZCcsXG4gIEZMQUc6ICdmbGFnJyxcbiAgRk9STUFUX0JPTEQ6ICdmb3JtYXQtYm9sZCcsXG4gIEZPUk1BVF9JVEFMSUM6ICdmb3JtYXQtaXRhbGljJyxcbiAgRk9STUFUX0xJU1RfQlVMTEVURUQ6ICdmb3JtYXQtbGlzdC1idWxsZXRlZCcsXG4gIEZPUlVNOiAnZm9ydW0nLFxuICBHQVM6ICdnYXMnLFxuICBHQVZFTDogJ2dhdmVsJyxcbiAgR0VBUlM6ICdnZWFycycsXG4gIEdMT0JFX0xPQ0FUSU9OX1BJTjogJ2dsb2JlLWxvY2F0aW9uLXBpbicsXG4gIEdPT0dMRTogJ2dvb2dsZScsXG4gIEdPT0dMRV9QQVk6ICdnb29nbGUtcGF5JyxcbiAgR1JJRDogJ2dyaWQnLFxuICBIQU5EU0hBS0U6ICdoYW5kc2hha2UnLFxuICBIQU5EWU1BTjogJ2hhbmR5bWFuJyxcbiAgSEVJR0hUOiAnaGVpZ2h0JyxcbiAgSEVMUDogJ2hlbHAnLFxuICBJTkZPOiAnaW5mbycsXG4gIElORk9STUFUSU9OOiAnaW5mb3JtYXRpb24nLFxuICBJTlNFUlRfVEVYVDogJ2luc2VydC10ZXh0JyxcbiAgSU5TVEFHUkFNOiAnaW5zdGFncmFtJyxcbiAgSU9TX1NIQVJFOiAnaW9zLXNoYXJlJyxcbiAgTEFZT1VUOiAnbGF5b3V0JyxcbiAgTEVWRUxMSU5HX0pBQ0s6ICdsZXZlbGxpbmctamFjaycsXG4gIExJTktFRF9JTjogJ2xpbmtlZCBpbicsXG4gIExPQ0FMX1NISVBQSU5HOiAnbG9jYWwtc2hpcHBpbmcnLFxuICBMT0NLOiAnbG9jaycsXG4gIE1BSUw6ICdtYWlsJyxcbiAgTUVOVTogJ21lbnUnLFxuICBNT05FWV9CQUc6ICdtb25leS1iYWcnLFxuICBNT1JFX0hPUklaOiAnbW9yZS1ob3JpeicsXG4gIE5PVElGSUNBVElPTlM6ICdub3RpZmljYXRpb25zJyxcbiAgT0RPTUVURVI6ICdvZG9tZXRlcicsXG4gIE9QRU5fSU5fTkVXOiAnb3Blbi1pbi1uZXcnLFxuICBQQUxFVFRFOiAncGFsZXR0ZScsXG4gIFBBWVBBTDogJ3BheXBhbCcsXG4gIFBFUlNPTjogJ3BlcnNvbicsXG4gIFBFUlNPTl9TRUFSQ0g6ICdwZXJzb24tc2VhcmNoJyxcbiAgUEhPVE9fQ0FNRVJBOiAncGhvdG8tY2FtZXJhJyxcbiAgUElOVEVSRVNUOiAncGludGVyZXN0JyxcbiAgUExBWV9BUlJPVzogJ3BsYXktYXJyb3cnLFxuICBQT0xJQ1k6ICdwb2xpY3knLFxuICBQT1dFUjogJ3Bvd2VyJyxcbiAgUE9XRVJfT0ZGOiAncG93ZXItb2ZmJyxcbiAgUFJJT1JJVFlfSElHSDogJ3ByaW9yaXR5LWhpZ2gnLFxuICBSRU1PVkU6ICdyZW1vdmUnLFxuICBSRVFVRVNUX1FVT1RFOiAncmVxdWVzdC1xdW90ZScsXG4gIFJFU0VUX1dSRU5DSDogJ3Jlc2V0LXdyZW5jaCcsXG4gIFJPQUQ6ICdyb2FkJyxcbiAgUk9VTkRFRF9DT1JORVI6ICdyb3VuZGVkLWNvcm5lcicsXG4gIFJVTEVSOiAncnVsZXInLFxuICBTQUlMSU5HOiAnc2FpbGluZycsXG4gIFNDSE9PTDogJ3NjaG9vbCcsXG4gIFNFQVJDSDogJ3NlYXJjaCcsXG4gIFNFQVRJTkc6ICdzZWF0aW5nJyxcbiAgU0VMTDogJ3NlbGwnLFxuICBTRU5TT1JTOiAnc2Vuc29ycycsXG4gIFNFVFRJTkdTOiAnc2V0dGluZ3MnLFxuICBTSEFSRTogJ3NoYXJlJyxcbiAgU0hJRUxEX0NIRUNLOiAnc2hpZWxkLWNoZWNrJyxcbiAgU0hPUFBJTkdfQ0FSVDogJ3Nob3BwaW5nLWNhcnQnLFxuICBTTEVFUFM6ICdzbGVlcHMnLFxuICBTTVM6ICdzbXMnLFxuICBTTk9XRkxBS0U6ICdzbm93Zmxha2UnLFxuICBTVEFSOiAnc3RhcicsXG4gIFNVTU1BUklaRTogJ3N1bW1hcml6ZScsXG4gIFNXQVBfSE9SSVo6ICdzd2FwLWhvcml6JyxcbiAgU1dBUF9WRVJUOiAnc3dhcC12ZXJ0JyxcbiAgVEhSRUVfRF9ST1RBVElPTjogJ3RocmVlLWQtcm90YXRpb24nLFxuICBUSFVNQl9VUDogJ3RodW1iLXVwJyxcbiAgVFJFTkRJTkdfRE9XTjogJ3RyZW5kaW5nLWRvd24nLFxuICBUUk9QSFk6ICd0cm9waHknLFxuICBUVU5FOiAndHVuZScsXG4gIFRXSVRURVI6ICd0d2l0dGVyJyxcbiAgVU1CUkVMTEE6ICd1bWJyZWxsYScsXG4gIFZFUklGSUVEOiAndmVyaWZpZWQnLFxuICBWSURFT0NBTTogJ3ZpZGVvY2FtJyxcbiAgVklFV19JTl9BUjogJ3ZpZXctaW4tYXInLFxuICBWSVNJQklMSVRZOiAndmlzaWJpbGl0eScsXG4gIFZPTFVNRV9PRkY6ICd2b2x1bWUtb2ZmJyxcbiAgVk9MVU1FX09OOiAndm9sdW1lLW9uJyxcbiAgV0FSRUhPVVNFOiAnd2FyZWhvdXNlJyxcbiAgV0FSTklORzogJ3dhcm5pbmcnLFxuICBXQVRFUjogJ3dhdGVyJyxcbiAgV0VJR0hUOiAnd2VpZ2h0JyxcbiAgV0lEVEg6ICd3aWR0aCcsXG4gIFdPUktTUEFDRV9QUkVNSVVNOiAnd29ya3NwYWNlLXByZW1pdW0nLFxuICBXUkVOQ0g6ICd3cmVuY2gnLFxuICBZT1VUVUJFOiAneW91dHViZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgSUNPTl9SRUFMTSA9IHtcbiAgQVRWOiB7XG4gICAgQVRWOiAnYXR2LWF0dicsXG4gICAgRFVORV9CVUdHWTogJ2F0di1kdW5lLWJ1Z2d5JyxcbiAgICBHT0xGX0NBUlQ6ICdhdHYtZ29sZi1jYXJ0JyxcbiAgICBHT19LQVJUOiAnYXR2LWdvLWthcnQnLFxuICAgIFNBTkRfUkFJTDogJ2F0di1zYW5kLXJhaWwnLFxuICAgIFNJREVfQllfU0lERTogJ2F0di1zaWRlLWJ5LXNpZGUnLFxuICAgIFRSQUlMRVI6ICdhdHYtdHJhaWxlcicsXG4gIH0sXG4gIEJPQVRNQVJUOiB7XG4gICAgUFdDOiAnYm9hdG1hcnQtcHdjJyxcbiAgICBUUkFJTEVSOiAnYm9hdG1hcnQtdHJhaWxlcicsXG4gIH0sXG4gIFJWOiB7XG4gICAgQ0xBU1NfQTogJ3J2LWNsYXNzLWEnLFxuICAgIENMQVNTX0I6ICdydi1jbGFzcy1iJyxcbiAgICBDTEFTU19DOiAncnYtY2xhc3MtYycsXG4gICAgRklGVEhfV0hFRUw6ICdydi1maWZ0aC13aGVlbCcsXG4gICAgRklTSF9IT1VTRTogJ3J2LWZpc2gtaG91c2UnLFxuICAgIFBBUktfTU9ERUw6ICdydi1wYXJrLW1vZGVsJyxcbiAgICBQT1BfVVBfQ0FNUEVSOiAncnYtcG9wLXVwLWNhbXBlcicsXG4gICAgVFJBVkVMX1RSQUlMRVI6ICdydi10cmF2ZWwtdHJhaWxlcicsXG4gICAgVFJVQ0tfQ0FNUEVSOiAncnYtdHJ1Y2stY2FtcGVyJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgUmVhbG1LZXlzV2l0aEljb25zID0gRXh0cmFjdDxSZWFsbUtleSwga2V5b2YgdHlwZW9mIElDT05fUkVBTE0+O1xudHlwZSBSZWFsbUljb24gPSB7XG4gIFtSZWFsbUtleSBpbiBSZWFsbUtleXNXaXRoSWNvbnNdOiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XVtrZXlvZiAodHlwZW9mIElDT05fUkVBTE0pW1JlYWxtS2V5XV07XG59W1JlYWxtS2V5c1dpdGhJY29uc107XG5cbmV4cG9ydCB0eXBlIEdsb2JhbEljb24gPSAodHlwZW9mIElDT04pW2tleW9mIHR5cGVvZiBJQ09OXTtcbmV4cG9ydCB0eXBlIEljb24gPSBHbG9iYWxJY29uIHwgUmVhbG1JY29uO1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IFRpZGVEaXZpZGVyIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlRGl2aWRlci52dWUnO1xuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3RvZ2dsZSddKTtcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGhhc0JvdHRvbURpdmlkZXI/OiBib29sZWFuO1xuICAgIGhhc1RvcERpdmlkZXI/OiBib29sZWFuO1xuICAgIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGlzT3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBoYXNCb3R0b21EaXZpZGVyOiBmYWxzZSxcbiAgICBoYXNUb3BEaXZpZGVyOiBmYWxzZSxcbiAgICBpc0V4cGFuZGVkOiBmYWxzZSxcbiAgICBpc09wdGlvbmFsOiBmYWxzZSxcbiAgICBsYWJlbDogJycsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUNsaWNrID0gKCkgPT4ge1xuICAgIGVtaXQoJ3RvZ2dsZScpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInRpZGUtYWNjb3JkaW9uLWl0ZW1cIj5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc1RvcERpdmlkZXJcIiAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiWyd0aWRlLWFjY29yZGlvbi1oZWFkJywgQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMxLkJFVFdFRU4sIENTUy5QQURESU5HLlkuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVUb2dnbGVDbGlja1wiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5IQUxGLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzFfU0VNSUJPTERdXCI+XG4gICAgICAgIDxzcGFuPnt7IHByb3BzLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICAgIHYtaWY9XCJwcm9wcy5pc09wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIChvcHRpb25hbClcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cImlzRXhwYW5kZWQgPyBJQ09OLkVYUEFORF9MRVNTIDogSUNPTi5FWFBBTkRfTU9SRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5MQVJHRVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtYWNjb3JkaW9uLWJvZHknLCBwcm9wcy5pc0V4cGFuZGVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnLCBDU1MuRElTUExBWS5HUklEXVwiPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLk9WRVJGTE9XLlkuSElEREVOLCBDU1MuTUFSR0lOLlkuT05FLCBDU1MuRk9OVC5ST0xFLkJPRFlfMSwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5ERUZBVUxUXVwiPlxuICAgICAgICA8c2xvdCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8VGlkZURpdmlkZXIgdi1pZj1cInByb3BzLmhhc0JvdHRvbURpdmlkZXJcIiAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLWFjY29yZGlvbi1ib2R5IHtcbiAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmV4cGFuZGVkIHtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgfVxuXG4gIC50aWRlLWFjY29yZGlvbi1ib2R5LmNvbGxhcHNlZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgRUxFTUVOVCA9IHtcbiAgQlVUVE9OOiAnYnV0dG9uJyxcbiAgTElOSzogJ2EnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVEVYVF9BU19JQ09OID0ge1xuICBCVVRUT046ICdidXR0b24nLFxuICBESVY6ICdkaXYnLFxuICBMSU5LOiAnYScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBFbGVtZW50ID0gKHR5cGVvZiBFTEVNRU5UKVtrZXlvZiB0eXBlb2YgRUxFTUVOVF07XG5leHBvcnQgdHlwZSBFbGVtZW50VGV4dEFzSWNvbiA9ICh0eXBlb2YgRUxFTUVOVF9URVhUX0FTX0lDT04pW2tleW9mIHR5cGVvZiBFTEVNRU5UX1RFWFRfQVNfSUNPTl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBQUklPUklUWSA9IHtcbiAgUFJJTUFSWTogJ3ByaW1hcnknLFxuICBTRUNPTkRBUlk6ICdzZWNvbmRhcnknLFxuICBURVJUSUFSWTogJ3RlcnRpYXJ5JyxcbiAgUVVBVEVSTkFSWTogJ3F1YXRlcm5hcnknLFxuICBGTE9BVElORzogJ2Zsb2F0aW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFByaW9yaXR5ID0gKHR5cGVvZiBQUklPUklUWSlba2V5b2YgdHlwZW9mIFBSSU9SSVRZXTtcbiIsImV4cG9ydCBjb25zdCBUQVJHRVQgPSB7XG4gIEJMQU5LOiAnX2JsYW5rJyxcbiAgU0VMRjogdW5kZWZpbmVkLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0ID0gKHR5cGVvZiBUQVJHRVQpW2tleW9mIHR5cGVvZiBUQVJHRVRdO1xuIiwiZXhwb3J0IGNvbnN0IEFMRVJUID0ge1xuICBFUlJPUjogJ2Vycm9yJyxcbiAgSU5GTzogJ2luZm8nLFxuICBTVUNDRVNTOiAnc3VjY2VzcycsXG4gIFdBUk5JTkc6ICd3YXJuaW5nJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFsZXJ0ID0gKHR5cGVvZiBBTEVSVClba2V5b2YgdHlwZW9mIEFMRVJUXTtcbiIsImltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuZXhwb3J0IGNvbnN0IEJBREdFX0NPTE9SID0ge1xuICBCTEFDSzogJ2JsYWNrJyxcbiAgQkxVRTogJ2JsdWUnLFxuICBHUkVFTjogJ2dyZWVuJyxcbiAgTElNRTogJ2xpbWUnLFxuICBPUkFOR0U6ICdvcmFuZ2UnLFxuICBQVVJQTEU6ICdwdXJwbGUnLFxuICBSRUQ6ICdyZWQnLFxuICBTQUxNT046ICdzYWxtb24nLFxuICBURUFMOiAndGVhbCcsXG4gIFlFTExPVzogJ3llbGxvdycsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQkFER0VfQ09MT1JfREVUQUlMUzogUmVjb3JkPFxuICBCYWRnZUNvbG9yLFxuICB7XG4gICAgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgICBpY29uQ29sb3I6IHN0cmluZztcbiAgfVxuPiA9IHtcbiAgW0JBREdFX0NPTE9SLkJMQUNLXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkhJR0gsXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLkRFRkFVTFQsXG4gIH0sXG4gIFtCQURHRV9DT0xPUi5CTFVFXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5CTFVFLFxuICAgIGljb25Db2xvcjogQ1NTLkZPTlQuQ09MT1IuR0xPQkFMLlBSSU1BUlkuQkxVRSxcbiAgfSxcbiAgW0JBREdFX0NPTE9SLkdSRUVOXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5HUkVFTixcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLkdSRUVOLFxuICB9LFxuICBbQkFER0VfQ09MT1IuTElNRV06IHtcbiAgICBib3JkZXJDb2xvcjogQ1NTLkJPUkRFUi5DT0xPUi5HTE9CQUwuTElNRSxcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLkxJTUUsXG4gIH0sXG4gIFtCQURHRV9DT0xPUi5PUkFOR0VdOiB7XG4gICAgYm9yZGVyQ29sb3I6IENTUy5CT1JERVIuQ09MT1IuR0xPQkFMLk9SQU5HRSxcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLk9SQU5HRSxcbiAgfSxcbiAgW0JBREdFX0NPTE9SLlBVUlBMRV06IHtcbiAgICBib3JkZXJDb2xvcjogQ1NTLkJPUkRFUi5DT0xPUi5HTE9CQUwuUFVSUExFLFxuICAgIGljb25Db2xvcjogQ1NTLkZPTlQuQ09MT1IuR0xPQkFMLlBSSU1BUlkuUFVSUExFLFxuICB9LFxuICBbQkFER0VfQ09MT1IuUkVEXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5SRUQsXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5HTE9CQUwuUFJJTUFSWS5SRUQsXG4gIH0sXG4gIFtCQURHRV9DT0xPUi5TQUxNT05dOiB7XG4gICAgYm9yZGVyQ29sb3I6IENTUy5CT1JERVIuQ09MT1IuR0xPQkFMLlNBTE1PTixcbiAgICBpY29uQ29sb3I6IENTUy5GT05ULkNPTE9SLkdMT0JBTC5QUklNQVJZLlNBTE1PTixcbiAgfSxcbiAgW0JBREdFX0NPTE9SLlRFQUxdOiB7XG4gICAgYm9yZGVyQ29sb3I6IENTUy5CT1JERVIuQ09MT1IuR0xPQkFMLlRFQUwsXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5HTE9CQUwuUFJJTUFSWS5URUFMLFxuICB9LFxuICBbQkFER0VfQ09MT1IuWUVMTE9XXToge1xuICAgIGJvcmRlckNvbG9yOiBDU1MuQk9SREVSLkNPTE9SLkdMT0JBTC5ZRUxMT1csXG4gICAgaWNvbkNvbG9yOiBDU1MuRk9OVC5DT0xPUi5HTE9CQUwuUFJJTUFSWS5ZRUxMT1csXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQkFER0VfVFJVU1RFRCA9IHtcbiAgWUVBUlNfMTA6ICcxMCcsXG4gIFlFQVJTXzE1OiAnMTUnLFxuICBZRUFSU181OiAnNScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCYWRnZUNvbG9yID0gKHR5cGVvZiBCQURHRV9DT0xPUilba2V5b2YgdHlwZW9mIEJBREdFX0NPTE9SXTtcbmV4cG9ydCB0eXBlIEJhZGdlVHJ1c3RlZFllYXJzID0gKHR5cGVvZiBCQURHRV9UUlVTVEVEKVtrZXlvZiB0eXBlb2YgQkFER0VfVFJVU1RFRF07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgaW1wb3J0IHR5cGUgeyBUYWIgfSBmcm9tICdAL3R5cGVzL1RhYic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBhY3RpdmVUYWI6IG51bWJlcjtcbiAgICB0YWJzOiBUYWJbXTtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGFjdGl2ZVRhYjogMCxcbiAgfSk7XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2hhbmdlJ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBlbWl0KCdjaGFuZ2UnLCBpbmRleCk7XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgOmNsYXNzPVwiW1xuICAgICAgJ3RpZGUtYnV0dG9uLXNlZ21lbnRlZCcsXG4gICAgICBDU1MuQkcuU1VSRkFDRS5WQVJJQU5ULFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5HQVAuUVVBUlRFUixcbiAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICBDU1MuUEFERElORy5GVUxMLlFVQVJURVIsXG4gICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgQ1NTLldJRFRILkZVTEwsXG4gICAgXVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWJ1dHRvbi1zZWdtZW50ZWQtdGFiJyxcbiAgICAgICAgaW5kZXggPT09IGFjdGl2ZVRhYlxuICAgICAgICAgID8gW0NTUy5CRy5TVVJGQUNFLkRFRkFVTFQsIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuREVGQVVMVCwgQ1NTLlNIQURPVy5CT1RUT01dXG4gICAgICAgICAgOiBbJ2luYWN0aXZlJywgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXSxcbiAgICAgICAgQ1NTLkZMRVguR1JPVy5PTixcbiAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLlRXTyxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgQ1NTLlBBRERJTkcuWS5RVUFSVEVSLFxuICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgQ1NTLkZPTlQuUk9MRS5CVVRUT05fMSxcbiAgICAgICAgQ1NTLldISVRFU1BBQ0VfV1JBUC5PRkYsXG4gICAgICBdXCJcbiAgICAgIDpkYXRhLXRyYWNrPVwidGFiLmRhdGFUcmFjayB8fCB1bmRlZmluZWRcIlxuICAgICAgOmtleT1cInRhYi5sYWJlbFwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVDbGljayhpbmRleClcIlxuICAgICAgdi1mb3I9XCIodGFiLCBpbmRleCkgaW4gcHJvcHMudGFic1wiXG4gICAgPlxuICAgICAgPHNwYW4gOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuTEFCRUxfMl9TRU1JQk9MRF1cIj5cbiAgICAgICAge3sgdGFiLmxhYmVsIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxzcGFuXG4gICAgICAgIDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzJfU0VNSUJPTERdXCJcbiAgICAgICAgdi1pZj1cInRhYi5jb3VudCAmJiB0YWIuY291bnQgPiAwXCJcbiAgICAgID5cbiAgICAgICAgKHt7IHRhYi5jb3VudCB9fSlcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1idXR0b24tc2VnbWVudGVkIHtcbiAgICBtYXgtd2lkdGg6IDIzLjNyZW07XG4gIH1cblxuICAudGlkZS1idXR0b24tc2VnbWVudGVkLXRhYiB7XG4gICAgZmxleDogMTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICAuaW5hY3RpdmU6bm90KDpob3Zlcikge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLXZhcmlhbnQpO1xuICB9XG5cbiAgLmluYWN0aXZlOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWRlZmF1bHQpO1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IFRZUEVfQ0FSRCA9IHtcbiAgQUNUSU9OQUJMRTogJ2FjdGlvbicsXG4gIElORk9STUFUSU9OQUw6ICdpbmZvcm1hdGlvbmFsJyxcbiAgU0VMRUNUQUJMRTogJ3NlbGVjdCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDYXJkVHlwZSA9ICh0eXBlb2YgVFlQRV9DQVJEKVtrZXlvZiB0eXBlb2YgVFlQRV9DQVJEXTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG9uVXBkYXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVCdXR0b25JY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgUFJJT1JJVFkgfSBmcm9tICdAL3R5cGVzL1ByaW9yaXR5JztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIGltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGJsZWVkPzogbnVtYmVyO1xuICAgIGlzRmxvYXRpbmc/OiBib29sZWFuO1xuICAgIGlzSGVhZGxpbmUxPzogYm9vbGVhbjtcbiAgICBpc0hpZGVhd2F5QnV0dG9ucz86IGJvb2xlYW47XG4gICAgaXNUb3VjaHNjcmVlbj86IGJvb2xlYW47XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBibGVlZDogdW5kZWZpbmVkLFxuICAgIGlzRmxvYXRpbmc6IGZhbHNlLFxuICAgIGlzSGVhZGxpbmUxOiBmYWxzZSxcbiAgICBpc0hpZGVhd2F5QnV0dG9uczogdHJ1ZSxcbiAgICBpc1RvdWNoc2NyZWVuOiB1bmRlZmluZWQsXG4gICAgc3VidGl0bGU6IHVuZGVmaW5lZCxcbiAgICB0aXRsZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICB0eXBlIEVtaXRzID0ge1xuICAgIChldmVudDogJ3NsaWRlQ2hhbmdlJywgc2xpZGVJbmRleDogbnVtYmVyKTogdm9pZDtcbiAgICAoZXZlbnQ6ICdzbGlkZXNBZGRlZFRvVmlldycsIHNsaWRlc0luVmlldzogbnVtYmVyW10pOiB2b2lkO1xuICB9O1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czxFbWl0cz4oKTtcblxuICBjb25zdCBjb250YWluZXJSZWY6IFJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuICBjb25zdCBzbGlkZU9ic2VydmVyID0gcmVmPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHNsb3RPYnNlcnZlciA9IHJlZjxNdXRhdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRSaWdodEVkZ2UgPSByZWYoKTtcbiAgY29uc3QgY29udGVudFdpZHRoID0gcmVmKCk7XG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHJlZigwKTtcbiAgY29uc3QgZnJhbWVXaWR0aCA9IHJlZigpO1xuICBjb25zdCBoYXNPdmVyZmxvdyA9IHJlZigpO1xuICBjb25zdCBpc0ZpcnN0U2xpZGUgPSByZWYoKTtcbiAgY29uc3QgaXNMYXN0U2xpZGUgPSByZWYoKTtcbiAgY29uc3QgbGFzdFBvc2l0aW9uID0gcmVmKCk7XG4gIGNvbnN0IHNob3dCdXR0b25zID0gcmVmKCk7XG5cbiAgY29uc3QgdXBkYXRlQ29udGFpbmVyQmxlZWQgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLmJsZWVkID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChjb250YWluZXJSZWYudmFsdWUgPT09IG51bGwpIHJldHVybjtcblxuICAgIGlmIChpc0xhc3RTbGlkZS52YWx1ZSAmJiBzaG93QnV0dG9ucy52YWx1ZSkge1xuICAgICAgLy8gUHJldmVudCBncmFkaWVudCBmcm9tIGJsZWVkaW5nIG9mZiBsZWZ0IGVkZ2UgaW4gbGFzdCBwb3NpdGlvbi5cbiAgICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zdHlsZS5tYXJnaW4gPSBgLSR7cHJvcHMuYmxlZWR9cHggLSR7cHJvcHMuYmxlZWR9cHggLSR7cHJvcHMuYmxlZWR9cHggMGA7XG4gICAgICBjb250YWluZXJSZWYudmFsdWUuc3R5bGUucGFkZGluZyA9IGAke3Byb3BzLmJsZWVkfXB4ICR7cHJvcHMuYmxlZWR9cHggJHtwcm9wcy5ibGVlZH1weCAwYDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJldmVudCBncmFkaWVudCBmcm9tIGJsZWVkaW5nIG9mZiByaWdodCBlZGdlIGluIGZpcnN0IHBvc2l0aW9uLlxuICAgICAgY29udGFpbmVyUmVmLnZhbHVlLnN0eWxlLm1hcmdpbiA9IGAtJHtwcm9wcy5ibGVlZH1weCAwIC0ke3Byb3BzLmJsZWVkfXB4IC0ke3Byb3BzLmJsZWVkfXB4YDtcbiAgICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zdHlsZS5wYWRkaW5nID0gYCR7cHJvcHMuYmxlZWR9cHggMCAke3Byb3BzLmJsZWVkfXB4ICR7cHJvcHMuYmxlZWR9cHhgO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTWVhc3VyZSB0aGUgY3VycmVudCBzbGlkZSBiYXNlZCBvbiB0aGUgc2Nyb2xsXG4gICAqIHBvc2l0aW9uIG9mIHRoZSBmcmFtZS4gVGhlIGN1cnJlbnQgc2xpZGUgaXNcbiAgICogdGhlIHNsaWRlIHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgbGVmdCBlZGdlIG9mXG4gICAqIHRoZSBmcmFtZS5cbiAgICovXG4gIGNvbnN0IG1lYXN1cmVDdXJyZW50U2xpZGUgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUmVmLnZhbHVlO1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAvLyBDYXN0IG9uY2UsIHNvIFRTIGtub3dzIHRoZXNlIGFyZSBIVE1MRWxlbWVudHNcbiAgICBjb25zdCBzbGlkZU9mZnNldHMgPSBBcnJheS5mcm9tKGNvbnRhaW5lci5jaGlsZHJlbiBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50PikubWFwKFxuICAgICAgKHNsaWRlKSA9PiBzbGlkZS5vZmZzZXRMZWZ0XG4gICAgKTtcblxuICAgIGlmIChzbGlkZU9mZnNldHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XG5cbiAgICBjb25zdCBjbG9zZXN0U2xpZGVPZmZzZXQgPSBzbGlkZU9mZnNldHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PlxuICAgICAgTWF0aC5hYnMoY3VyciAtIHNjcm9sbExlZnQpIDwgTWF0aC5hYnMocHJldiAtIHNjcm9sbExlZnQpID8gY3VyciA6IHByZXZcbiAgICApO1xuXG4gICAgY3VycmVudFNsaWRlLnZhbHVlID0gc2xpZGVPZmZzZXRzLmluZGV4T2YoY2xvc2VzdFNsaWRlT2Zmc2V0KTtcblxuICAgIHVwZGF0ZUNvbnRhaW5lckJsZWVkKCk7XG4gIH07XG5cbiAgY29uc3QgbWVhc3VyZURvbSA9ICgpID0+IHtcbiAgICBpZiAoY29udGFpbmVyUmVmLnZhbHVlID09PSBudWxsKSByZXR1cm47XG4gICAgY29udGVudFJpZ2h0RWRnZS52YWx1ZSA9IE1hdGgucm91bmQoY29udGFpbmVyUmVmLnZhbHVlLnNjcm9sbExlZnQgKyBjb250YWluZXJSZWYudmFsdWUuY2xpZW50V2lkdGgpO1xuICAgIGNvbnRlbnRXaWR0aC52YWx1ZSA9IGNvbnRhaW5lclJlZi52YWx1ZS5zY3JvbGxXaWR0aDtcbiAgICBmcmFtZVdpZHRoLnZhbHVlID0gY29udGFpbmVyUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIGhhc092ZXJmbG93LnZhbHVlID0gY29udGVudFdpZHRoLnZhbHVlID4gZnJhbWVXaWR0aC52YWx1ZTtcbiAgICBpc0ZpcnN0U2xpZGUudmFsdWUgPSBjdXJyZW50U2xpZGUudmFsdWUgPT09IDA7XG4gICAgaXNMYXN0U2xpZGUudmFsdWUgPSBjb250ZW50UmlnaHRFZGdlLnZhbHVlID09PSBjb250ZW50V2lkdGgudmFsdWU7XG4gICAgbGFzdFBvc2l0aW9uLnZhbHVlID0gY29udGFpbmVyUmVmLnZhbHVlLnNjcm9sbFdpZHRoIC0gY29udGFpbmVyUmVmLnZhbHVlLmNsaWVudFdpZHRoO1xuICAgIHNob3dCdXR0b25zLnZhbHVlID0gaGFzT3ZlcmZsb3cudmFsdWUgJiYgIXByb3BzLmlzVG91Y2hzY3JlZW47XG5cbiAgICBtZWFzdXJlQ3VycmVudFNsaWRlKCk7XG4gIH07XG5cbiAgLy8gVE9ETzogZGVib3VuY2UgdGhpc1xuICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvU2xpZGUgPSAoc2xpZGVJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5lclJlZi52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zY3JvbGxUbyh7XG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICBsZWZ0OiAoY29udGFpbmVyUmVmLnZhbHVlLmNoaWxkcmVuW3NsaWRlSW5kZXhdIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRMZWZ0LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNob3dOZXh0U2xpZGUgPSAoKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5lclJlZi52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmIChjb250ZW50UmlnaHRFZGdlLnZhbHVlID4gY29udGVudFdpZHRoLnZhbHVlKSB7XG4gICAgICBjb250YWluZXJSZWYudmFsdWUuc2Nyb2xsVG8oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGxlZnQ6IGNvbnRlbnRXaWR0aC52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWlzTGFzdFNsaWRlLnZhbHVlKSB7XG4gICAgICBzY3JvbGxUb1NsaWRlKGN1cnJlbnRTbGlkZS52YWx1ZSArIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaG93UHJldmlvdXNTbGlkZSA9ICgpID0+IHtcbiAgICBpZiAoIWlzRmlyc3RTbGlkZS52YWx1ZSkge1xuICAgICAgc2Nyb2xsVG9TbGlkZShjdXJyZW50U2xpZGUudmFsdWUgLSAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb2JzZXJ2ZVNsaWRlcyA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogY29udGFpbmVyUmVmPy52YWx1ZSxcbiAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgdGhyZXNob2xkOiAwLjUsXG4gICAgfTtcblxuICAgIHNsaWRlT2JzZXJ2ZXIudmFsdWUgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGxldCBzbGlkZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGVJbmRleCA9IEFycmF5LmZyb20oY29udGFpbmVyUmVmLnZhbHVlPy5jaGlsZHJlbiA/PyBbXSkuaW5kZXhPZihlbnRyeS50YXJnZXQpO1xuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICBzbGlkZXMucHVzaChzbGlkZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzbGlkZXMubGVuZ3RoID4gMCkgZW1pdCgnc2xpZGVzQWRkZWRUb1ZpZXcnLCBzbGlkZXMpO1xuICAgIH0sIG9wdGlvbnMpO1xuICAgIEFycmF5LmZyb20oY29udGFpbmVyUmVmLnZhbHVlPy5jaGlsZHJlbiA/PyBbXSkuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGlmIChzbGlkZU9ic2VydmVyLnZhbHVlKSBzbGlkZU9ic2VydmVyLnZhbHVlLm9ic2VydmUoY2hpbGQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9ic2VydmVTbG90ID0gKCkgPT4ge1xuICAgIGNvbnN0IG9ic2VydmVyQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBvYnNlcnZlU2xpZGVzKCk7XG4gICAgfTtcbiAgICBzbG90T2JzZXJ2ZXIudmFsdWUgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICBpZiAoY29udGFpbmVyUmVmLnZhbHVlKSBzbG90T2JzZXJ2ZXIudmFsdWUub2JzZXJ2ZShjb250YWluZXJSZWYudmFsdWUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICB9O1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgaWYgKHdpbmRvdykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG1lYXN1cmVEb20pO1xuICAgIH1cblxuICAgIG1lYXN1cmVEb20oKTtcbiAgICBvYnNlcnZlU2xpZGVzKCk7XG4gICAgb2JzZXJ2ZVNsb3QoKTtcbiAgfSk7XG5cbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlRG9tKTtcbiAgICBzbGlkZU9ic2VydmVyLnZhbHVlPy5kaXNjb25uZWN0KCk7XG4gICAgc2xvdE9ic2VydmVyLnZhbHVlPy5kaXNjb25uZWN0KCk7XG4gIH0pO1xuXG4gIG9uVXBkYXRlZCgoKSA9PiB7XG4gICAgbWVhc3VyZURvbSgpO1xuICB9KTtcblxuICB3YXRjaChjdXJyZW50U2xpZGUsICgpID0+IHtcbiAgICBlbWl0KCdzbGlkZUNoYW5nZScsIGN1cnJlbnRTbGlkZS52YWx1ZSk7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHNlY3Rpb25cbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1jYXJvdXNlbCcsXG4gICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkZMRVguRElSRUNUSU9OLkNPTFVNTixcbiAgICAgIENTUy5HQVAuT05FLFxuICAgICAgQ1NTLldJRFRILk1BWF9GVUxMLFxuICAgIF1cIlxuICAgIHJlZj1cImNhcm91c2VsUmVmXCJcbiAgPlxuICAgIDxzZWN0aW9uXG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgcHJvcHMudGl0bGUgPyBDU1MuQVhJUzEuQkVUV0VFTiA6IENTUy5BWElTMS5FTkQsIENTUy5BWElTMi5DRU5URVIsIENTUy5XSURUSC5GVUxMXVwiXG4gICAgICB2LWlmPVwiIXByb3BzLmlzRmxvYXRpbmcgJiYgKHNob3dCdXR0b25zIHx8IHByb3BzLnRpdGxlKVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5PTkVdXCJcbiAgICAgICAgdi1pZj1cInByb3BzLnRpdGxlIHx8IHByb3BzLnN1YnRpdGxlXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltpc0hlYWRsaW5lMSA/IENTUy5GT05ULlJPTEUuSEVBRExJTkVfMSA6IENTUy5GT05ULlJPTEUuSEVBRExJTkVfMl1cIlxuICAgICAgICAgIHYtaWY9XCJwcm9wcy50aXRsZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy50aXRsZSB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuTEFCRUxfMiwgQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnN1YnRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByb3BzLnN1YnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuT05FXVwiXG4gICAgICAgIHYtaWY9XCJzaG93QnV0dG9uc1wiXG4gICAgICA+XG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpkaXNhYmxlZD1cImN1cnJlbnRTbGlkZSA9PT0gMFwiXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuVEVSVElBUllcIlxuICAgICAgICAgIEBjbGljaz1cInNob3dQcmV2aW91c1NsaWRlXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xhc3RTbGlkZVwiXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fUklHSFRcIlxuICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlRFUlRJQVJZXCJcbiAgICAgICAgICBAY2xpY2s9XCJzaG93TmV4dFNsaWRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzbG90IG5hbWU9XCJtaXNjXCIgLz5cblxuICAgIDxkaXYgOmNsYXNzPVwiW0NTUy5QT1NJVElPTi5SRUxBVElWRV1cIj5cbiAgICAgIDx1bFxuICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgJ3RpZGUtY2Fyb3VzZWwtY29udGFpbmVyJyxcbiAgICAgICAgICBwcm9wcy5ibGVlZCAmJiAnYmxlZWQnLFxuICAgICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgICAgQ1NTLkdBUC5PTkUsXG4gICAgICAgICAgQ1NTLkxJU1RfQlVMTEVUUy5PRkYsXG4gICAgICAgICAgQ1NTLk9WRVJGTE9XLlguU0NST0xMLFxuICAgICAgICAgIENTUy5TQ1JPTExCQVIuT0ZGLFxuICAgICAgICAgIENTUy5TTkFQLk9OLFxuICAgICAgICBdXCJcbiAgICAgICAgcmVmPVwiY29udGFpbmVyUmVmXCJcbiAgICAgICAgQHNjcm9sbD1cImhhbmRsZVNjcm9sbFwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1jYXJvdXNlbC1idXR0b24tb3ZlcmxheScsXG4gICAgICAgIENTUy5QT1NJVElPTi5BQlNPTFVURSxcbiAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLlRPUCxcbiAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgQ1NTLkFYSVMxLkJFVFdFRU4sXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICBDU1MuSEVJR0hULkZVTEwsXG4gICAgICAgIENTUy5QT0lOVEVSX0VWRU5UUy5PRkYsXG4gICAgICAgIHByb3BzLmlzSGlkZWF3YXlCdXR0b25zID8gJ2hpZGVhd2F5JyA6ICcnLFxuICAgICAgXVwiXG4gICAgICB2LWlmPVwiaXNGbG9hdGluZyAmJiBzaG93QnV0dG9uc1wiXG4gICAgPlxuICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuTUFSR0lOLkxFRlQuT05FLCBDU1MuUE9JTlRFUl9FVkVOVFMuT05dXCJcbiAgICAgICAgOmRpc2FibGVkPVwiY3VycmVudFNsaWRlID09PSAwXCJcbiAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICBAY2xpY2s9XCJzaG93UHJldmlvdXNTbGlkZVwiXG4gICAgICAvPlxuXG4gICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5NQVJHSU4uUklHSFQuT05FLCBDU1MuUE9JTlRFUl9FVkVOVFMuT05dXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMYXN0U2xpZGVcIlxuICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9SSUdIVFwiXG4gICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICBAY2xpY2s9XCJzaG93TmV4dFNsaWRlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLWNhcm91c2VsLWNvbnRhaW5lci5ibGVlZCB7XG4gICAgdHJhbnNpdGlvbjogbWFyZ2luIHZhcigtLXRpZGUtYW5pbWF0ZSksIHBhZGRpbmcgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWNhcm91c2VsLWJ1dHRvbi1vdmVybGF5LmhpZGVhd2F5IHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgLnRpZGUtY2Fyb3VzZWw6aG92ZXIgLnRpZGUtY2Fyb3VzZWwtYnV0dG9uLW92ZXJsYXkuaGlkZWF3YXkge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbjwvc3R5bGU+XG4iLCJleHBvcnQgY29uc3QgT0JKRUNUX0ZJVCA9IHtcbiAgQ09OVEFJTjogJ2NvbnRhaW4nLFxuICBDT1ZFUjogJ2NvdmVyJyxcbiAgU0NBTEVfRE9XTjogJ3NjYWxlLWRvd24nLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgT2JqZWN0Rml0ID0gKHR5cGVvZiBPQkpFQ1RfRklUKVtrZXlvZiB0eXBlb2YgT0JKRUNUX0ZJVF07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBPQkpFQ1RfRklUIH0gZnJvbSAnQC90eXBlcy9JbWFnZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICBpbXBvcnQgdHlwZSB7IE9iamVjdEZpdCB9IGZyb20gJ0AvdHlwZXMvSW1hZ2UnO1xuICBpbXBvcnQgdHlwZSB7IFNvdXJjZSB9IGZyb20gJ0AvdHlwZXMvU291cmNlJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGFsdDogc3RyaW5nO1xuICAgIGhlaWdodD86IHN0cmluZztcbiAgICBpc0xhenk/OiBib29sZWFuO1xuICAgIG9iamVjdEZpdD86IE9iamVjdEZpdDtcbiAgICBzb3VyY2VzPzogU291cmNlW107XG4gICAgc3JjPzogc3RyaW5nO1xuICAgIHdpZHRoPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYWx0OiAnJyxcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBpc0xhenk6IHRydWUsXG4gICAgb2JqZWN0Rml0OiBPQkpFQ1RfRklULkNPVkVSLFxuICAgIHNvdXJjZXM6ICgpID0+IFtdLFxuICAgIHNyYzogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIGNvbnN0IHBpY3R1cmUgPSByZWYoKTtcbiAgY29uc3QgaW1nID0gcmVmKCk7XG5cbiAgY29uc3QgaW1hZ2VEZWZhdWx0ID0gJ2h0dHBzOi8vY2RuLXN0YXRpYy50aWxhYnMuaW8vbWFya2V0cGxhY2UvY29tbW9uL2ltYWdlLWNvbWluZy1zb29uLnN2Zyc7XG5cbiAgY29uc3Qgb2JqZWN0Rml0Q2xhc3NOYW1lID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgc3dpdGNoIChwcm9wcy5vYmplY3RGaXQpIHtcbiAgICAgIGNhc2UgT0JKRUNUX0ZJVC5DT05UQUlOOlxuICAgICAgICByZXR1cm4gQ1NTLk9CSkVDVC5DT05UQUlOO1xuICAgICAgY2FzZSBPQkpFQ1RfRklULkNPVkVSOlxuICAgICAgICByZXR1cm4gQ1NTLk9CSkVDVC5DT1ZFUjtcbiAgICAgIGNhc2UgT0JKRUNUX0ZJVC5TQ0FMRV9ET1dOOlxuICAgICAgICByZXR1cm4gQ1NTLk9CSkVDVC5TQ0FMRV9ET1dOO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9CSkVDVF9GSVQuQ09WRVI7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBzZXRJbWFnZUZyb21EZWZhdWx0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTcmMgPSBpbWcudmFsdWU/LmN1cnJlbnRTcmM7XG4gICAgY29uc3QgcGljdHVyZVNvdXJjZSA9IHBpY3R1cmUudmFsdWU/LnF1ZXJ5U2VsZWN0b3IoYHNvdXJjZVtzcmNzZXQ9XCIke2N1cnJlbnRTcmN9XCJdYCk7XG5cbiAgICBpZiAoY3VycmVudFNyYyAmJiBwaWN0dXJlU291cmNlKSB7XG4gICAgICBwaWN0dXJlU291cmNlLnNyY3NldCA9IGltYWdlRGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKGltZy52YWx1ZSkge1xuICAgICAgaW1nLnZhbHVlLnNyYyA9IGltYWdlRGVmYXVsdDtcbiAgICB9XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8cGljdHVyZVxuICAgIDpjbGFzcz1cIlsndGlkZS1pbWFnZScsIENTUy5ESVNQTEFZLkJMT0NLXVwiXG4gICAgcmVmPVwicGljdHVyZVwiXG4gICAgOnN0eWxlPVwiXG4gICAgICB3aWR0aCB8fCBoZWlnaHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB3aWR0aDogd2lkdGggfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICBcIlxuICA+XG4gICAgPHNvdXJjZVxuICAgICAgOmtleT1cInNvdXJjZS5zcmNzZXRcIlxuICAgICAgOm1lZGlhPVwiYChtaW4td2lkdGg6JHtzb3VyY2UubWVkaWF9cHgpYFwiXG4gICAgICA6c3Jjc2V0PVwic291cmNlLnNyY3NldFwiXG4gICAgICB2LWZvcj1cInNvdXJjZSBpbiBwcm9wcy5zb3VyY2VzXCJcbiAgICAvPlxuXG4gICAgPGltZ1xuICAgICAgOmFsdD1cImFsdFwiXG4gICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLk9CSkVDVC5DRU5URVIsIG9iamVjdEZpdENsYXNzTmFtZV1cIlxuICAgICAgOmZldGNocHJpb3JpdHk9XCJpc0xhenkgPyB1bmRlZmluZWQgOiAnaGlnaCdcIlxuICAgICAgOmxvYWRpbmc9XCJwcm9wcy5pc0xhenkgPyAnbGF6eScgOiAnZWFnZXInXCJcbiAgICAgIHJlZj1cImltZ1wiXG4gICAgICA6c3JjPVwic3JjID8/IGltYWdlRGVmYXVsdFwiXG4gICAgICBAZXJyb3I9XCJzZXRJbWFnZUZyb21EZWZhdWx0XCJcbiAgICAvPlxuICA8L3BpY3R1cmU+XG48L3RlbXBsYXRlPlxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFNJWkUgfSBmcm9tICdAL3R5cGVzL1NpemUnO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG4gIGltcG9ydCB7IGZvcm1hdE51bWJlciB9IGZyb20gJ0AvdXRpbGl0aWVzL2Zvcm1hdCc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbnVtYmVyPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgY2hlY2tlZDogZmFsc2UsXG4gICAgZGF0YVRyYWNrOiAnJyxcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBpc0NoZWNrZWQgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5jaGVja2VkIHx8IHByb3BzLmluZGV0ZXJtaW5hdGUpO1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIDpjbGFzcz1cIltcbiAgICAgICd0aWRlLWlucHV0LWNoZWNrYm94JyxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgQ1NTLkdBUC5IQUxGLFxuICAgICAgQ1NTLkZPTlQuUk9MRS5CT0RZXzEsXG4gICAgICBkaXNhYmxlZCA/IFsnZGlzYWJsZWQnLCBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGXSA6IENTUy5DVVJTT1IuUE9JTlRFUixcbiAgICBdXCJcbiAgICA6ZGF0YS10cmFjaz1cInByb3BzLmRhdGFUcmFja1wiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIDpjaGVja2VkPVwiaXNDaGVja2VkXCJcbiAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5OT05FXVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICA6bmFtZT1cInByb3BzLm5hbWVcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgQGNsaWNrLnByZXZlbnRcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAvPlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1pbnB1dC1jaGVja2JveC1jdXN0b20nLFxuICAgICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMS5DRU5URVIsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5GTEVYLlNIUklOSy5PRkYsXG4gICAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICAgIGlzQ2hlY2tlZCA/IFtDU1MuQk9SREVSLkNPTE9SLkhJR0gsIENTUy5CRy5TRUNPTkRBUlldIDogW0NTUy5CT1JERVIuQ09MT1IuREVGQVVMVCwgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVF0sXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLlFVQVJURVIsXG4gICAgICAgIGlzQ2hlY2tlZCAmJiAnY2hlY2tlZCcsXG4gICAgICAgIGRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuUE9JTlRFUixcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU0VDT05EQVJZXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaW5kZXRlcm1pbmF0ZSA/IElDT04uUkVNT1ZFIDogSUNPTi5DSEVDS1wiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJpc0NoZWNrZWRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICBkaXNhYmxlZCA/IENTUy5DVVJTT1IuTk9UX0FMTE9XRUQgOiBDU1MuQ1VSU09SLlBPSU5URVIsXG4gICAgICBdXCJcbiAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgIEBjbGljay5wcmV2ZW50XG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVF1cIlxuICAgICAgICB2LWlmPVwicHJvcHMubnVtYmVyXCJcbiAgICAgID5cbiAgICAgICAgKHt7IGZvcm1hdE51bWJlcihwcm9wcy5udW1iZXIpIH19KVxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3guZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IHZhcigtLXRpZGUtZGlzYWJsZWQpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtY2hlY2tib3gtY3VzdG9tIHtcbiAgICB3aWR0aDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgICBoZWlnaHQ6IHZhcigtLXRpZGUtZm9udC0yOCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyByZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgY2hlY2tlZCA9IHJlZihwcm9wcy5jaGVja2VkKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5jaGVja2VkLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IGNoZWNrZWQudmFsdWUpIHtcbiAgICAgICAgY2hlY2tlZC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1yYWRpbycsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgIENTUy5QT0lOVEVSX0VWRU5UUy5PRkYsXG4gICAgICBwcm9wcy5kaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgIF1cIlxuICA+XG4gICAgPGlucHV0XG4gICAgICA6Y2hlY2tlZD1cImNoZWNrZWRcIlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLk5PTkVdXCJcbiAgICAgIDpkYXRhLXRyYWNrPVwicHJvcHMuZGF0YVRyYWNrXCJcbiAgICAgIDppZD1cInByb3BzLmlucHV0SWRcIlxuICAgICAgbmFtZT1cIlwiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgdmFsdWU9XCJcIlxuICAgIC8+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LXJhZGlvLWN1c3RvbScsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgQ1NTLkFYSVMxLkNFTlRFUixcbiAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLk9ORSxcbiAgICAgICAgY2hlY2tlZCA/IENTUy5CT1JERVIuQ09MT1IuSElHSCA6IENTUy5CT1JERVIuQ09MT1IuREVGQVVMVCxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgQ1NTLkNVUlNPUi5QT0lOVEVSLFxuICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT04sXG4gICAgICAgIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGRpdiA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtcmFkaW8tY2hlY2snLCBDU1MuQk9SREVSLlJBRElVUy5GVUxMLCBwcm9wcy5jaGVja2VkICYmIENTUy5CRy5TRUNPTkRBUlldXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxsYWJlbFxuICAgICAgOmNsYXNzPVwiW0NTUy5GT05ULlJPTEUuQk9EWV8xLCBDU1MuQ1VSU09SLlBPSU5URVIsIENTUy5QT0lOVEVSX0VWRU5UUy5PTl1cIlxuICAgICAgOmZvcj1cInByb3BzLmlucHV0SWRcIlxuICAgID5cbiAgICAgIHt7IHByb3BzLmxhYmVsIH19XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1pbnB1dC1yYWRpby5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1yYWRpby1jdXN0b20ge1xuICAgIHdpZHRoOiB2YXIoLS10aWRlLWZvbnQtMjgpO1xuICAgIGhlaWdodDogdmFyKC0tdGlkZS1mb250LTI4KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXJhZGlvLWNoZWNrIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBwcmljZVRvTnVtYmVyIH0gZnJvbSAnQC91dGlsaXRpZXMvZm9ybWF0JztcblxuaW1wb3J0IHR5cGUgeyBSYW5nZURhdGEgfSBmcm9tICdAL3R5cGVzL0ZhY2V0UmFuZ2UnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdJbnB1dCB9IGZyb20gJ0AvdHlwZXMvRm9ybSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJ0AvdHlwZXMvU2VsZWN0JztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uTGVuZ3RoLCBWYWxpZGF0aW9uUmVzdWx0LCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgY29uc3QgZXJyb3JNZXNzYWdlRGVmYXVsdCA9ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCB2YWx1ZS4nO1xuXG5leHBvcnQgY29uc3Qgbm9FcnJvciA9IHtcbiAgbWVzc2FnZTogJycsXG4gIHZhbGlkOiB0cnVlLFxufSBhcyBSZWFkb25seTxWYWxpZGF0aW9uUmVzdWx0PjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrRm9ybWF0ID0gKGZvcm1hdDogUmVnRXhwKSA9PiB7XG4gIHJldHVybiAodmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQgPT4ge1xuICAgIGxldCByZXN1bHQgPSBub0Vycm9yO1xuXG4gICAgaWYgKCF2YWx1ZS50cmltKCkubWF0Y2goZm9ybWF0KSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VEZWZhdWx0LFxuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3IsIGVycm9yRnJvbVJlZjogVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIC8vIGVycm9yIGluIHByb3BzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YWxpZGF0aW9uIGVycm9yXG4gIGlmICh0eXBlb2YgZXJyb3JGcm9tUHJvcHMgPT09ICdzdHJpbmcnICYmIGVycm9yRnJvbVByb3BzLmxlbmd0aCA+IDApIHJldHVybiBlcnJvckZyb21Qcm9wcztcblxuICByZXR1cm4gdHlwZW9mIGVycm9yRnJvbVJlZiA9PT0gJ3N0cmluZycgJiYgZXJyb3JGcm9tUmVmLmxlbmd0aCA+IDAgPyBlcnJvckZyb21SZWYgOiBlcnJvck1lc3NhZ2VEZWZhdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpZWxkSGFzRXJyb3IgPSAoZXJyb3JGcm9tUHJvcHM6IFZhbGlkYXRpb25FcnJvciwgZXJyb3JGcm9tUmVmOiBWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGVycm9yRnJvbVByb3BzICE9PSBmYWxzZSB8fCBlcnJvckZyb21SZWYgIT09IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRMZW5ndGhJc1ZhbGlkID0gKHsgbWF4bGVuZ3RoLCBtaW5sZW5ndGgsIHJlcXVpcmVkLCB2YWx1ZSB9OiBWYWxpZGF0aW9uTGVuZ3RoKSA9PiB7XG4gIGNvbnN0IGlzRW1wdHlBbmRVbnJlcXVpcmVkID0gdmFsdWUubGVuZ3RoID09PSAwICYmICFyZXF1aXJlZDtcbiAgY29uc3QgaXNUb29Mb25nID0gbWF4bGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heGxlbmd0aDtcbiAgY29uc3QgaXNUb29TaG9ydCA9ICFpc0VtcHR5QW5kVW5yZXF1aXJlZCAmJiBtaW5sZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWlubGVuZ3RoO1xuXG4gIHJldHVybiAhaXNUb29TaG9ydCAmJiAhaXNUb29Mb25nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1heFJhbmdlSXNWYWxpZCA9ICh7IG1pbiB9OiBQaWNrPFJhbmdlRGF0YSwgJ21pbic+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWF4OiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNYXggPSAhaXNOYU4obmV3TWF4KSA/IG5ld01heCA6IG51bGw7XG4gICAgaWYgKG1pbiAmJiBuZXdNYXgpIHtcbiAgICAgIGlmIChuZXdNYXggPj0gbWluKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5gLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pblJhbmdlSXNWYWxpZCA9ICh7IG1heCB9OiBQaWNrPFJhbmdlRGF0YSwgJ21heCc+LCB0eXBlPzogJ3ByaWNlJykgPT4ge1xuICByZXR1cm4gKHZhbHVlOiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBsZXQgbmV3TWluOiBudW1iZXIgfCBudWxsID0gdHlwZSA9PT0gJ3ByaWNlJyA/IHByaWNlVG9OdW1iZXIodmFsdWUpIDogTnVtYmVyKHZhbHVlKTtcbiAgICBuZXdNaW4gPSAhaXNOYU4obmV3TWluKSA/IG5ld01pbiA6IG51bGw7XG4gICAgaWYgKG1heCAmJiBuZXdNaW4pIHtcbiAgICAgIGlmIChuZXdNaW4gPD0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGBNdXN0IGJlIGxlc3MgdGhhbiBtYXhgLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vRXJyb3I7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdE9wdGlvbnNGcm9tU3RyaW5ncyA9IChzdHJpbmdzOiBzdHJpbmdbXSkgPT5cbiAgc3RyaW5ncy5tYXAoXG4gICAgKG9wdGlvbikgPT5cbiAgICAgICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24sXG4gICAgICAgIHZhbHVlOiBvcHRpb24sXG4gICAgICB9IGFzIFNlbGVjdE9wdGlvbilcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUZpZWxkVmFsaWRhdGlvbiA9ICh7XG4gIGVycm9yLFxuICBlcnJvckZyb21Qcm9wcyxcbiAgbWF4bGVuZ3RoLFxuICBtaW5sZW5ndGgsXG4gIHJlcXVpcmVkID0gZmFsc2UsXG4gIHZhbGlkYXRvcnMsXG4gIHZhbHVlLFxufToge1xuICBlcnJvcjogUmVmPFZhbGlkYXRpb25FcnJvcj47XG4gIGVycm9yRnJvbVByb3BzOiBWYWxpZGF0aW9uRXJyb3I7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JbXTtcbiAgdmFsdWU/OiBSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn0pID0+IHtcbiAgLy8gZXJyb3IgaW4gcHJvcHMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbGlkYXRpb24gZXJyb3JcblxuICBlcnJvci52YWx1ZSA9IGVycm9yRnJvbVByb3BzID8gZXJyb3JGcm9tUHJvcHMgOiBmYWxzZTtcblxuICBpZiAoIWVycm9yLnZhbHVlICYmIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZT8udmFsdWUgfHwgJycsIHZhbGlkYXRvcnMpO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBlcnJvci52YWx1ZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWVycm9yLnZhbHVlICYmIChtYXhsZW5ndGggfHwgbWlubGVuZ3RoKSkge1xuICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRpb24gPSB2YWxpZGF0ZUxlbmd0aCh7XG4gICAgICBtYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGgsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhbHVlOiB2YWx1ZT8udmFsdWUgfHwgJycsXG4gICAgfSk7XG5cbiAgICBpZiAoIWxlbmd0aFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGVycm9yLnZhbHVlID0gbGVuZ3RoVmFsaWRhdGlvbi5tZXNzYWdlO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGRzRnJvbVJlZnMoZmllbGRzOiB7IFtrZXk6IHN0cmluZ106IFJlZjxTdHJpbmdJbnB1dCB8IG51bGw+IH0pIHtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHMpIHtcbiAgICBpZiAoZmllbGRzW2tleV0udmFsdWU/LnJlcXVpcmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkc1trZXldLnZhbHVlPy52YWx1ZTtcbiAgICAgIHZhbGlkID0gdmFsaWQgJiYgISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkgIT09ICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmllbGRzW2tleV0udmFsdWU/LmVycm9yO1xuICAgIHZhbGlkID0gdmFsaWQgJiYgIWVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVMZW5ndGggPSAoe1xuICBtYXhsZW5ndGgsXG4gIG1pbmxlbmd0aCxcbiAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgdmFsdWUsXG59OiBWYWxpZGF0aW9uTGVuZ3RoKTogVmFsaWRhdGlvblJlc3VsdCA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIHZhbGlkOiB0cnVlLFxuICB9O1xuXG4gIHJlc3BvbnNlLnZhbGlkID0gZ2V0RmllbGRMZW5ndGhJc1ZhbGlkKHtcbiAgICBtYXhsZW5ndGgsXG4gICAgbWlubGVuZ3RoLFxuICAgIHJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcblxuICBpZiAocmVzcG9uc2UudmFsaWQpIHJldHVybiByZXNwb25zZTtcblxuICByZXNwb25zZS5tZXNzYWdlID0gZXJyb3JNZXNzYWdlRGVmYXVsdDtcblxuICBpZiAobWF4bGVuZ3RoICYmIG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiAke21pbmxlbmd0aH0gYW5kICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1heGxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbW9yZSB0aGFuICR7bWF4bGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9IGVsc2UgaWYgKG1pbmxlbmd0aCkge1xuICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsdWUgbm8gbGVzcyB0aGFuICR7bWlubGVuZ3RofSBjaGFyYWN0ZXJzIGluIGxlbmd0aC5gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodmFsdWU6IHN0cmluZywgdmFsaWRhdG9yczogKCh2YWx1ZTogc3RyaW5nKSA9PiBWYWxpZGF0aW9uUmVzdWx0KVtdKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogJycsXG4gICAgdmFsaWQ6IHRydWUsXG4gIH07XG59XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yIH0gZnJvbSAnQC91dGlsaXRpZXMvdmFsaWRhdGlvbic7XG5cbiAgaW1wb3J0IHR5cGUgeyBTZWxlY3RGaWVsZCB9IGZyb20gJ0AvdHlwZXMvRmllbGQnO1xuICBpbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiwgU2VsZWN0T3B0aW9uR3JvdXAgfSBmcm9tICdAL3R5cGVzL1NlbGVjdCc7XG5cbiAgaW50ZXJmYWNlIFByb3BzIGV4dGVuZHMgU2VsZWN0RmllbGQge1xuICAgIGlucHV0SWQ/OiBzdHJpbmc7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gIH1cblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVmKHByb3BzLnJlcXVpcmVkKTtcbiAgY29uc3QgdmFsdWUgPSByZWY8c3RyaW5nIHwgdW5kZWZpbmVkPihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmICF2YWx1ZS52YWx1ZSkgfHwgZ2V0RmllbGRIYXNFcnJvcihlcnJvci52YWx1ZSwgcHJvcHMuZXJyb3IpKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgZXhwYW5kT3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nKTtcbiAgICBpbnB1dD8udmFsdWU/LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7IGVycm9yLCB2YWx1ZSB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC1zZWxlY3QnLFxuICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgIENTUy5GTEVYLkRJUkVDVElPTi5DT0xVTU4sXG4gICAgICBDU1MuR0FQLlFVQVJURVIsXG4gICAgICBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLFxuICAgICAgaGFzRXJyb3IgJiYgJ2Vycm9yJyxcbiAgICBdXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtYm9yZGVyJyxcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkhBTEYsXG4gICAgICAgIENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6ICcnLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgXVwiXG4gICAgICBAY2xpY2s9XCJleHBhbmRPcHRpb25zXCJcbiAgICA+XG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgaGFzTWluaWxhYmVsID8gWydtaW5pbGFiZWwnLCBDU1MuRk9OVC5ST0xFLkxBQkVMXzNdIDogQ1NTLkZPTlQuUk9MRS5MQUJFTF8xLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OLkFCU09MVVRFLFxuICAgICAgICAgICAgQ1NTLlBPU0lUSU9OSU5HLkxFRlQsXG4gICAgICAgICAgICBDU1MuTUFSR0lOLlRPUC5IQUxGLFxuICAgICAgICAgICAgQ1NTLk1BUkdJTi5MRUZULk9ORSxcbiAgICAgICAgICAgICFoYXNFcnJvciAmJiBDU1MuRk9OVC5DT0xPUi5TVVJGQUNFLlZBUklBTlQsXG4gICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZm9ybWF0dGVkTGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgQ1NTLlBBRERJTkcuQk9UVE9NLkhBTEYsXG4gICAgICAgICAgICBDU1MuUEFERElORy5YLk9ORSxcbiAgICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICAgICAgZGlzYWJsZWQgJiYgQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgIF1cIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICA6cmVxdWlyZWQ9XCJyZXF1aXJlZFwiXG4gICAgICAgICAgQGZvY3VzPVwiaGFuZGxlRm9jdXNcIlxuICAgICAgICAgIEBmb2N1c291dD1cImhhbmRsZUZvY3VzT3V0XCJcbiAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwib3B0Z3JvdXAgaW4gcHJvcHMub3B0Z3JvdXBzXCI+XG4gICAgICAgICAgICA8b3B0Z3JvdXBcbiAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgIDprZXk9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLmxhYmVsXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiKG9wdGdyb3VwIGFzIFNlbGVjdE9wdGlvbkdyb3VwKS5sYWJlbFwiXG4gICAgICAgICAgICAgIHYtaWY9XCIob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICAgICAgOmtleT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiAob3B0Z3JvdXAgYXMgU2VsZWN0T3B0aW9uR3JvdXApLm9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9vcHRncm91cD5cblxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIENTUy5CRy5TVVJGQUNFLkRFRkFVTFRdXCJcbiAgICAgICAgICAgICAgOmtleT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgOnNlbGVjdGVkPVwidmFsdWUgPT09IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cIihvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLnZhbHVlXCJcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IChvcHRncm91cCBhcyBTZWxlY3RPcHRpb24pLmxhYmVsIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5XSURUSC5GVUxMLCBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUXVwiXG4gICAgICAgICAgICA6a2V5PVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIDpzZWxlY3RlZD1cInZhbHVlID09PSBvcHRpb24udmFsdWUgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUE9TSVRJT04uQUJTT0xVVEUsIENTUy5QT1NJVElPTklORy5SSUdIVCwgQ1NTLk1BUkdJTi5SSUdIVC5PTkUsIENTUy5QT0lOVEVSX0VWRU5UUy5PRkZdXCJcbiAgICAgICAgOmljb249XCJJQ09OLkVYUEFORF9NT1JFXCJcbiAgICAgICAgOnNpemU9XCJTSVpFLlNNQUxMXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5FUlJPUlwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIHYtaWY9XCJoYXNFcnJvclwiXG4gICAgICAvPlxuXG4gICAgICA8ZGl2IDpjbGFzcz1cIltDU1MuRk9OVC5ST0xFLkxBQkVMXzNdXCI+XG4gICAgICAgIHt7IGhhc0Vycm9yID8gZXJyb3JNZXNzYWdlIDogcHJvcHMuc3VwcG9ydGluZ1RleHQgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIHNlbGVjdCB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBoZWlnaHQ6IDEuMTg3NXJlbTtcbiAgICB0cmFuc2l0aW9uOiBmb250LXNpemUgdmFyKC0tdGlkZS1hbmltYXRlKSwgdHJhbnNmb3JtIHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cblxuICBsYWJlbDpub3QoLm1pbmlsYWJlbCkge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIGNhbGMoOSAvIDE2ICogMXJlbSkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiB2YXIoLS10aWRlLWRpc2FibGVkKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdC5lcnJvciAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXN1cmZhY2UpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLXRpZGUtZXJyb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXNlbGVjdDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGg6IHZhcigtLXRpZGUtYm9yZGVyLXdpZHRoLTEpO1xuICAgIG91dGxpbmU6IHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgc29saWQgdmFyKC0tdGlkZS1ib3JkZXIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiBjYWxjKHZhcigtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aCkgKiAtMSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC1zZWxlY3QuZXJyb3Ige1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLWVycm9yLXByaW1hcnkpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtc2VsZWN0LmVycm9yIG9wdGlvbiB7XG4gICAgY29sb3I6IHZhcigtLXRpZGUtb24tc3VyZmFjZSk7XG4gIH1cblxuICBzZWxlY3Qge1xuICAgIHBhZGRpbmctdG9wOiAyN3B4O1xuICB9XG48L3N0eWxlPlxuIiwiZXhwb3J0IGNvbnN0IFRFWFRfSU5QVVRfVFlQRSA9IHtcbiAgREFURTogJ2RhdGUnLFxuICBEQVRFVElNRV9MT0NBTDogJ2RhdGV0aW1lLWxvY2FsJyxcbiAgRU1BSUw6ICdlbWFpbCcsXG4gIE1PTlRIOiAnbW9udGgnLFxuICBOVU1CRVI6ICdudW1iZXInLFxuICBQQVNTV09SRDogJ3Bhc3N3b3JkJyxcbiAgU0VBUkNIOiAnc2VhcmNoJyxcbiAgVEVMOiAndGVsJyxcbiAgVEVYVDogJ3RleHQnLFxuICBUSU1FOiAndGltZScsXG4gIFVSTDogJ3VybCcsXG4gIFdFRUs6ICd3ZWVrJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFR5cGUgPSAodHlwZW9mIFRFWFRfSU5QVVRfVFlQRSlba2V5b2YgdHlwZW9mIFRFWFRfSU5QVVRfVFlQRV07XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgVEVYVF9JTlBVVF9UWVBFIH0gZnJvbSAnQC90eXBlcy9UZXh0SW5wdXQnO1xuICBpbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIGdldEZpZWxkSGFzRXJyb3IsIGhhbmRsZUZpZWxkVmFsaWRhdGlvbiB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZhbGlkYXRpb24nO1xuXG4gIGltcG9ydCB0eXBlIHsgRm9ybVZhbHVlVHJhbnNmb3JtZXIgfSBmcm9tICdAL3R5cGVzL0Zvcm0nO1xuICBpbXBvcnQgdHlwZSB7IEljb24gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgdHlwZSB7IFRleHRJbnB1dFR5cGUgfSBmcm9tICdAL3R5cGVzL1RleHRJbnB1dCc7XG4gIGltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICdAL3R5cGVzL1ZhbGlkYXRpb24nO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGVycm9yPzogVmFsaWRhdGlvbkVycm9yO1xuICAgIGhhc0NsZWFyPzogYm9vbGVhbjtcbiAgICBpY29uTGVhZGluZz86IEljb247XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG1heGxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBtaW5sZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgc3VmZml4Pzogc3RyaW5nO1xuICAgIHN1cHBvcnRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHRyYW5zZm9ybVZhbHVlPzogRm9ybVZhbHVlVHJhbnNmb3JtZXI7XG4gICAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gICAgdmFsaWRhdG9ycz86IFZhbGlkYXRvcltdO1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7XG4gICAgYXV0b2NvbXBsZXRlOiBmYWxzZSxcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgaGFzQ2xlYXI6IGZhbHNlLFxuICAgIGljb25MZWFkaW5nOiB1bmRlZmluZWQsXG4gICAgaW5wdXRJZDogdW5kZWZpbmVkLFxuICAgIGxhYmVsOiB1bmRlZmluZWQsXG4gICAgbWF4bGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgbWlubGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgcHJlZml4OiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHN1ZmZpeDogdW5kZWZpbmVkLFxuICAgIHN1cHBvcnRpbmdUZXh0OiB1bmRlZmluZWQsXG4gICAgdHJhbnNmb3JtVmFsdWU6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBURVhUX0lOUFVUX1RZUEUuVEVYVCxcbiAgICB2YWxpZGF0b3JzOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgY29uc3QgZXJyb3IgPSByZWYocHJvcHMuZXJyb3IpO1xuICBjb25zdCBoYXNGb2N1cyA9IHJlZihmYWxzZSk7XG4gIGNvbnN0IGlucHV0ID0gcmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgc2hvd1Bhc3N3b3JkID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgdmFsdWUgPSByZWYocHJvcHMudmFsdWUpO1xuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IGdldEVycm9yTWVzc2FnZShwcm9wcy5lcnJvciwgZXJyb3IudmFsdWUpKTtcbiAgY29uc3QgZm9ybWF0dGVkTGFiZWwgPSBjb21wdXRlZCgoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgcHJvcHMubGFiZWwgPyBgJHtwcm9wcy5sYWJlbH0gKmAgOiBwcm9wcy5sYWJlbCkpO1xuICBjb25zdCBoYXNDbGVhciA9IGNvbXB1dGVkKCgpID0+IHByb3BzLmhhc0NsZWFyICYmIHZhbHVlLnZhbHVlKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBjb21wdXRlZChcbiAgICAoKSA9PiAocHJvcHMucmVxdWlyZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUudmFsdWUpIHx8IGdldEZpZWxkSGFzRXJyb3IoZXJyb3IudmFsdWUsIHByb3BzLmVycm9yKVxuICApO1xuICBjb25zdCBoYXNNaW5pbGFiZWwgPSBjb21wdXRlZCgoKSA9PiBoYXNGb2N1cy52YWx1ZSB8fCAhaXNFbXB0eS52YWx1ZSk7XG4gIGNvbnN0IGlzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB2YWx1ZS52YWx1ZSA9PT0gJycgfHwgdmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHR5cGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRCAmJiBzaG93UGFzc3dvcmQudmFsdWUgPT09IHRydWUgPyBURVhUX0lOUFVUX1RZUEUuVEVYVCA6IHByb3BzLnR5cGVcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9ICcnO1xuICAgIGlucHV0LnZhbHVlPy5mb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBoYW5kbGVWYWxpZGF0aW9uKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLnRyYW5zZm9ybVZhbHVlKSB7XG4gICAgICBjb25zdCBkaWdpdHMgPSB2YWx1ZS52YWx1ZT8ubWF0Y2goL1xcZC9nKT8uam9pbignJykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICB2YWx1ZS52YWx1ZSA9IGRpZ2l0cyA/IHByb3BzLnRyYW5zZm9ybVZhbHVlKGRpZ2l0cykgOiAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICBoYW5kbGVGaWVsZFZhbGlkYXRpb24oe1xuICAgICAgZXJyb3IsXG4gICAgICBlcnJvckZyb21Qcm9wczogcHJvcHMuZXJyb3IsXG4gICAgICBtYXhsZW5ndGg6IHByb3BzLm1heGxlbmd0aCxcbiAgICAgIG1pbmxlbmd0aDogcHJvcHMubWlubGVuZ3RoLFxuICAgICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgICAgdmFsaWRhdG9yczogcHJvcHMudmFsaWRhdG9ycyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVZhbHVlID0gKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHVwZGF0ZVZhbHVlLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbXG4gICAgICAndGlkZS1pbnB1dC10ZXh0JyxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICAgICAgQ1NTLkdBUC5RVUFSVEVSLFxuICAgICAgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJyxcbiAgICAgIGhhc0Vycm9yICYmICdlcnJvcicsXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLWlucHV0LWJvcmRlcicsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5HQVAuSEFMRixcbiAgICAgICAgQ1NTLlBPU0lUSU9OLlJFTEFUSVZFLFxuICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICBoYXNDbGVhciA/IFtDU1MuUEFERElORy5SSUdIVC5IQUxGLCBDU1MuUEFERElORy5MRUZULk9ORV0gOiBbQ1NTLlBBRERJTkcuWC5PTkVdLFxuICAgICAgICBDU1MuUEFERElORy5ZLkhBTEYsXG4gICAgICAgIHByb3BzLmRpc2FibGVkID8gQ1NTLkNVUlNPUi5OT1RfQUxMT1dFRCA6IENTUy5DVVJTT1IuVEVYVCxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuQ09MT1IuU1VSRkFDRS5WQVJJQU5UXVwiXG4gICAgICAgIDppY29uPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwicHJvcHMuaWNvbkxlYWRpbmdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSLCBDU1MuV0lEVEguRlVMTF1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtcHJlZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnByZWZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5wcmVmaXggfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuV0lEVEguRlVMTF1cIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwiaW5wdXQ/LmZvY3VzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/IFsnbWluaWxhYmVsJywgQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXSA6IENTUy5GT05ULlJPTEUuTEFCRUxfMSxcbiAgICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgICAgQ1NTLkNVUlNPUi5URVhULFxuICAgICAgICAgICAgICBDU1MuUE9JTlRFUl9FVkVOVFMuT0ZGLFxuICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICA6Zm9yPVwicHJvcHMuaW5wdXRJZFwiXG4gICAgICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm1hdHRlZExhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZSA/ICdvbicgOiAnb2ZmJ1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLldJRFRILkZVTEwsIGRpc2FibGVkICYmIENTUy5DVVJTT1IuTk9UX0FMTE9XRUQsIENTUy5GT05ULlJPTEUuQk9EWV8xXVwiXG4gICAgICAgICAgICA6ZGF0YS10cmFjaz1cInByb3BzLmRhdGFUcmFja1wiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJwcm9wcy5kaXNhYmxlZFwiXG4gICAgICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgICAgIDptaW5sZW5ndGg9XCJwcm9wcy5taW5sZW5ndGhcIlxuICAgICAgICAgICAgOm5hbWU9XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgICAgIDpyZXF1aXJlZD1cInByb3BzLnJlcXVpcmVkXCJcbiAgICAgICAgICAgIDp0eXBlPVwidHlwZVwiXG4gICAgICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgICAgICBAZm9jdXM9XCJoYW5kbGVGb2N1c1wiXG4gICAgICAgICAgICBAZm9jdXNvdXQ9XCJoYW5kbGVGb2N1c091dFwiXG4gICAgICAgICAgICBAaW5wdXQ9XCJoYW5kbGVJbnB1dFwiXG4gICAgICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICd0aWRlLWlucHV0LXRleHQtc3VmZml4JyxcbiAgICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8xLFxuICAgICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICAgIGhhc01pbmlsYWJlbCA/ICcnIDogJ29mZnNldCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgdi1pZj1cInByb3BzLnN1ZmZpeFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcm9wcy5zdWZmaXggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRpZGVJY29uXG4gICAgICAgIDpjbGFzcz1cIltDU1MuUEFERElORy5ZLkhBTEYsIENTUy5QQURESU5HLkZVTEwuSEFMRiwgQ1NTLkNVUlNPUi5QT0lOVEVSXVwiXG4gICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgIDpzaXplPVwiU0laRS5TTUFMTFwiXG4gICAgICAgIEBjbGljaz1cImhhbmRsZUNsZWFyXCJcbiAgICAgICAgdi1pZj1cImhhc0NsZWFyICYmIHByb3BzLnR5cGUgIT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuXG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW0NTUy5QQURESU5HLlkuSEFMRiwgQ1NTLlBBRERJTkcuRlVMTC5IQUxGLCBDU1MuQ1VSU09SLlBPSU5URVJdXCJcbiAgICAgICAgOmljb249XCJJQ09OLlZJU0lCSUxJVFlcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICBAY2xpY2s9XCJzaG93UGFzc3dvcmQgPSAhc2hvd1Bhc3N3b3JkXCJcbiAgICAgICAgdi1pZj1cInByb3BzLnR5cGUgPT09IFRFWFRfSU5QVVRfVFlQRS5QQVNTV09SRFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuUVVBUlRFUl1cIlxuICAgICAgdi1pZj1cInByb3BzLnN1cHBvcnRpbmdUZXh0IHx8IGhhc0Vycm9yXCJcbiAgICA+XG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmNsYXNzPVwiW11cIlxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICBsYWJlbCB7XG4gICAgaGVpZ2h0OiAxLjE4NzVyZW07XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIHZhcigtLXRpZGUtYW5pbWF0ZSksIHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgbGFiZWw6bm90KC5taW5pbGFiZWwpLFxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeDpub3QoLm9mZnNldCksXG4gIC50aWRlLWlucHV0LXRleHQtc3VmZml4Om5vdCgub2Zmc2V0KSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgY2FsYyg5IC8gMTYgKiAxcmVtKSk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LXByZWZpeCxcbiAgLnRpZGUtaW5wdXQtdGV4dC1zdWZmaXgge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dC5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogdmFyKC0tdGlkZS1kaXNhYmxlZCk7XG4gIH1cblxuICAudGlkZS1pbnB1dC10ZXh0LmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3IgLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQuZXJyb3I6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LWJvcmRlciB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dDpmb2N1cy13aXRoaW4gLnRpZGUtaW5wdXQtYm9yZGVyIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHQgaW5wdXQge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAudGlkZS1pbnB1dC1ib3JkZXIge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCBnZXRGaWVsZEhhc0Vycm9yLCBoYW5kbGVGaWVsZFZhbGlkYXRpb24gfSBmcm9tICdAL3V0aWxpdGllcy92YWxpZGF0aW9uJztcblxuICBpbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0AvdHlwZXMvVmFsaWRhdGlvbic7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBkYXRhVHJhY2s/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBWYWxpZGF0aW9uRXJyb3I7XG4gICAgaW5wdXRJZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBtYXhsZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbWlubGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHJvd3M/OiBudW1iZXI7XG4gICAgc3VwcG9ydGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBkYXRhVHJhY2s6ICcnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBpbnB1dElkOiB1bmRlZmluZWQsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtYXhsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBtaW5sZW5ndGg6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHJvd3M6IDgsXG4gICAgc3VwcG9ydGluZ1RleHQ6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBlcnJvciA9IHJlZihwcm9wcy5lcnJvcik7XG4gIGNvbnN0IGhhc0ZvY3VzID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgaW5wdXQgPSByZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCB2YWx1ZSA9IHJlZihwcm9wcy52YWx1ZSk7XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gZ2V0RXJyb3JNZXNzYWdlKHByb3BzLmVycm9yLCBlcnJvci52YWx1ZSkpO1xuICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5yZXF1aXJlZCA/IGAke3Byb3BzLmxhYmVsfSAqYCA6IHByb3BzLmxhYmVsKSk7XG4gIGNvbnN0IGhhc0Vycm9yID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHByb3BzLnJlcXVpcmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLnZhbHVlKSB8fCBnZXRGaWVsZEhhc0Vycm9yKGVycm9yLnZhbHVlLCBwcm9wcy5lcnJvcilcbiAgKTtcbiAgY29uc3QgaGFzTWluaWxhYmVsID0gY29tcHV0ZWQoKCkgPT4gaGFzRm9jdXMudmFsdWUgfHwgIWlzRW1wdHkudmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY29tcHV0ZWQoKCkgPT4gdmFsdWUudmFsdWUgPT09ICcnIHx8IHZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGhhc0ZvY3VzLnZhbHVlID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1c091dCA9ICgpID0+IHtcbiAgICBoYXNGb2N1cy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF2YWx1ZS52YWx1ZSkge1xuICAgICAgdmFsdWUudmFsdWUgPSAnJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFuZGxlRmllbGRWYWxpZGF0aW9uKHtcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JGcm9tUHJvcHM6IHByb3BzLmVycm9yLFxuICAgICAgbWF4bGVuZ3RoOiBwcm9wcy5tYXhsZW5ndGgsXG4gICAgICBtaW5sZW5ndGg6IHByb3BzLm1pbmxlbmd0aCxcbiAgICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHdhdGNoKFxuICAgICgpID0+IHByb3BzLnZhbHVlLFxuICAgIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGRlZmluZUV4cG9zZSh7XG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIHZhbHVlLFxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXZcbiAgICA6Y2xhc3M9XCJbJ3RpZGUtaW5wdXQtdGV4dGFyZWEnLCBDU1MuRElTUExBWS5GTEVYLCBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLCBDU1MuR0FQLlFVQVJURVIsIGhhc0Vycm9yICYmICdlcnJvciddXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQnLFxuICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgICAgQ1NTLlBBRERJTkcuTEVGVC5PTkUsXG4gICAgICAgIENTUy5QQURESU5HLlRPUC5IQUxGLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICBoYXNNaW5pbGFiZWwgPyBbJ21pbmlsYWJlbCcsIENTUy5GT05ULlJPTEUuTEFCRUxfM10gOiBDU1MuRk9OVC5ST0xFLkxBQkVMXzEsXG4gICAgICAgICAgIWhhc0Vycm9yICYmIENTUy5GT05ULkNPTE9SLlNVUkZBQ0UuVkFSSUFOVCxcbiAgICAgICAgICBDU1MuQ1VSU09SLlRFWFQsXG4gICAgICAgICAgQ1NTLlBPSU5URVJfRVZFTlRTLk9GRixcbiAgICAgICAgXVwiXG4gICAgICAgIDpmb3I9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgcmVmPVwibGFiZWxcIlxuICAgICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgPlxuICAgICAgICB7eyBmb3JtYXR0ZWRMYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIDpjbGFzcz1cIltDU1MuV0lEVEguRlVMTCwgQ1NTLkZPTlQuUk9MRS5CT0RZXzFdXCJcbiAgICAgICAgOmRhdGEtdHJhY2s9XCJwcm9wcy5kYXRhVHJhY2tcIlxuICAgICAgICA6bWF4bGVuZ3RoPVwicHJvcHMubWF4bGVuZ3RoXCJcbiAgICAgICAgOm1pbmxlbmd0aD1cInByb3BzLm1pbmxlbmd0aFwiXG4gICAgICAgIDpuYW1lPVwicHJvcHMubmFtZVwiXG4gICAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgICAgOnJlcXVpcmVkPVwicHJvcHMucmVxdWlyZWRcIlxuICAgICAgICA6cm93cz1cInByb3BzLnJvd3NcIlxuICAgICAgICBAY2hhbmdlPVwiaGFuZGxlVmFsaWRhdGlvblwiXG4gICAgICAgIEBmb2N1cz1cImhhbmRsZUZvY3VzXCJcbiAgICAgICAgQGZvY3Vzb3V0PVwiaGFuZGxlRm9jdXNPdXRcIlxuICAgICAgICA6aWQ9XCJwcm9wcy5pbnB1dElkXCJcbiAgICAgICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLkFYSVMyLkNFTlRFUiwgQ1NTLkdBUC5RVUFSVEVSXVwiXG4gICAgICB2LWlmPVwicHJvcHMuc3VwcG9ydGluZ1RleHQgfHwgaGFzRXJyb3JcIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cIklDT04uRVJST1JcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuU01BTExcIlxuICAgICAgICB2LWlmPVwiaGFzRXJyb3JcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5MQUJFTF8zXVwiPlxuICAgICAgICB7eyBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IHByb3BzLnN1cHBvcnRpbmdUZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICB0ZXh0YXJlYSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxuPC9zdHlsZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgbGFiZWwge1xuICAgIGhlaWdodDogMS4xODc1cmVtO1xuICAgIHRyYW5zaXRpb246IGZvbnQtc2l6ZSB2YXIoLS10aWRlLWFuaW1hdGUpLCB0cmFuc2Zvcm0gdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIHtcbiAgICBjb2xvcjogdmFyKC0tdGlkZS1lcnJvci1wcmltYXJ5KTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS10aWRlLWVycm9yLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1zdXJmYWNlKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhLmVycm9yOmZvY3VzLXdpdGhpbiAudGlkZS1pbnB1dC10ZXh0YXJlYS1maWVsZCB7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1lcnJvci1ib3JkZXIpO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWE6Zm9jdXMtd2l0aGluIC50aWRlLWlucHV0LXRleHRhcmVhLWZpZWxkIHtcbiAgICAtLXRpZGUtaW5wdXQtb3V0bGluZS13aWR0aDogdmFyKC0tdGlkZS1ib3JkZXItd2lkdGgtMik7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tdGlkZS1zdXJmYWNlLWJvcmRlci1oaWdoKTtcbiAgfVxuXG4gIC50aWRlLWlucHV0LXRleHRhcmVhIHRleHRhcmVhIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLnRpZGUtaW5wdXQtdGV4dGFyZWEtZmllbGQge1xuICAgIC0tdGlkZS1pbnB1dC1vdXRsaW5lLXdpZHRoOiB2YXIoLS10aWRlLWJvcmRlci13aWR0aC0xKTtcbiAgICBvdXRsaW5lOiB2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpIHNvbGlkIHZhcigtLXRpZGUtYm9yZGVyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogY2FsYyh2YXIoLS10aWRlLWlucHV0LW91dGxpbmUtd2lkdGgpICogLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10aWRlLXN1cmZhY2UtZm9yZWdyb3VuZCk7XG4gIH1cbjwvc3R5bGU+XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvc29ydC1rZXlzICovXG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UID0ge1xuICBTTTogJ3NtJyxcbiAgTUQ6ICdtZCcsXG4gIExHOiAnbGcnLFxuICBYTDogJ3hsJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBNRURJQSA9IHtcbiAgU006IDc2OCxcbiAgTUQ6IDk5MixcbiAgTEc6IDEyMzIsXG4gIFhMOiAxOTIwLFxufTtcblxuZXhwb3J0IHR5cGUgQnJlYWtwb2ludCA9ICh0eXBlb2YgQlJFQUtQT0lOVClba2V5b2YgdHlwZW9mIEJSRUFLUE9JTlRdO1xuZXhwb3J0IHR5cGUgTWVkaWEgPSAodHlwZW9mIE1FRElBKVtrZXlvZiB0eXBlb2YgTUVESUFdO1xuIiwiaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIERpcmVjdGx5IG1vZGlmaWVzIHRoZSBgPGJvZHk+YCBlbGVtZW50IHRvIGFwcGx5IG9yIHJlbW92ZSBzY3JvbGwgbG9jay5cbiAqIFdoZW4gYGZhbHNlYCBpcyBwcm92aWRlZCwgaXQgb25seSB1bmxvY2tzIHNjcm9sbCBpZiB0aGVyZSBhcmUgbm8gb3BlblxuICogSFRNTCBkaWFsb2cgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTY3JvbGxMb2NrID0gYXN5bmMgKGlzTG9ja2VkOiBib29sZWFuKSA9PiB7XG4gIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gIC8vIGNvbnN0IEJPRFlfTE9DS19DTEFTUyA9ICdib2R5LXNjcm9sbC1sb2NrJztcblxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICBpZiAoaXNMb2NrZWQpIHtcbiAgICBpZiAoIWJvZHkuZGF0YXNldC5zY3JvbGxMb2NrWSkge1xuICAgICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgPSBzY3JvbGxZLnRvU3RyaW5nKCk7XG4gICAgICBib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15JywgYCR7c2Nyb2xsWX1weGApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnaW5zZXQnLCAnMCcpO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGBjYWxjKDBweCAtIHZhcigtLXNhdmVkLXNjcm9sbC15LCAwcHgpKWApO1xuICAgICAgYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdzY3JvbGwnKTtcbiAgICAgIGJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7XG5cbiAgICAgIC8vIENhbm5vdCBiZSBhcHBsaWVkIHRvIGJvZHkgdGFnIGluIG1hcmtldHBsYWNlIHJlcG8gZHVlIHRvIGRhdGEtY3NzLXNjb3BlXG4gICAgICAvLyBib2R5LmNsYXNzTGlzdC5hZGQoQk9EWV9MT0NLX0NMQVNTKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgbmV4dFRpY2soKTtcbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpYWxvZ1tvcGVuXScpKSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFkgPSBwYXJzZUludChib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1kgfHwgJzAnKTtcblxuICAgICAgLy8gQ2Fubm90IGJlIGFwcGxpZWQgdG8gYm9keSB0YWcgaW4gbWFya2V0cGxhY2UgcmVwbyBkdWUgdG8gZGF0YS1jc3Mtc2NvcGVcbiAgICAgIC8vIGJvZHkuY2xhc3NMaXN0LnJlbW92ZShCT0RZX0xPQ0tfQ0xBU1MpO1xuXG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdpbnNldCcpO1xuICAgICAgYm9keS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbWFyZ2luVG9wJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdvdmVyZmxvd1knKTtcbiAgICAgIGJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3Bvc2l0aW9uJyk7XG4gICAgICBib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXNhdmVkLXNjcm9sbC15Jyk7XG5cbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgIGJlaGF2aW9yOiAnYXV0bycsXG4gICAgICAgIHRvcDogc2F2ZWRTY3JvbGxZLFxuICAgICAgfSk7XG5cbiAgICAgIGRlbGV0ZSBib2R5LmRhdGFzZXQuc2Nyb2xsTG9ja1k7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgVE9QX0xBWUVSX0lEID0gJ3RpZGUtdG9wLWxheWVyJztcblxuZXhwb3J0IGNvbnN0IGluaXRGYXV4VG9wTGF5ZXIgPSAoKSA9PiB7XG4gIGxldCB0b3BMYXllciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRPUF9MQVlFUl9JRCk7XG4gIGlmICghdG9wTGF5ZXIpIHtcbiAgICB0b3BMYXllciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRvcExheWVyLmlkID0gVE9QX0xBWUVSX0lEO1xuICAgIHRvcExheWVyLnNldEF0dHJpYnV0ZSgnZGF0YS1jc3Mtc2NvcGUnLCAnJyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0b3BMYXllcik7XG4gIH1cbiAgdG9wTGF5ZXIuc3R5bGUuaXNvbGF0aW9uID0gJ2lzb2xhdGUnO1xufTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IG5leHRUaWNrLCBvbk1vdW50ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IHsgQlJFQUtQT0lOVCB9IGZyb20gJ0AvdHlwZXMvQnJlYWtwb2ludCc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBQUklPUklUWSB9IGZyb20gJ0AvdHlwZXMvUHJpb3JpdHknO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG4gIGltcG9ydCB7IHNldFNjcm9sbExvY2sgfSBmcm9tICdAL3V0aWxpdGllcy92aWV3cG9ydCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaXNCYWNrQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc21pc3NpYmxlPzogYm9vbGVhbjtcbiAgICBpc09wZW46IGJvb2xlYW47XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgd2lkdGg/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBpc0JhY2tCdXR0b246IGZhbHNlLFxuICAgIGlzRGlzbWlzc2libGU6IHRydWUsXG4gICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICB9KTtcblxuICB0eXBlIEVtaXRzID0ge1xuICAgIChlOiAnY2xvc2UnKTogdm9pZDtcbiAgICAoZTogJ2JhY2snKTogdm9pZDtcbiAgfTtcblxuICBjb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8RW1pdHM+KCk7XG5cbiAgY29uc3QgbW9kYWxDb250ZW50OiBSZWY8SFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ+ID0gcmVmKCk7XG4gIGNvbnN0IG1vZGFsRGlhbG9nOiBSZWY8SFRNTERpYWxvZ0VsZW1lbnQgfCB1bmRlZmluZWQ+ID0gcmVmKCk7XG5cbiAgY29uc3QgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4gPSAoKSA9PiB7XG4gICAgbW9kYWxEaWFsb2cudmFsdWU/LnNob3dNb2RhbCgpO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSA9ICgpID0+IHtcbiAgICBtb2RhbERpYWxvZy52YWx1ZT8uY2xvc2UoKTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxDb250ZW50VG9Ub3AgPSAoKSA9PiB7XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgaWYgKCFtb2RhbENvbnRlbnQudmFsdWUpIHJldHVybjtcbiAgICAgIG1vZGFsQ29udGVudC52YWx1ZS5zY3JvbGxUb3AgPSAwO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHByb3BzLmlzRGlzbWlzc2libGUpIGVtaXQoJ2Nsb3NlJyk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRXNjYXBlS2V5ZG93biA9IChlOiBFdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAocHJvcHMuaXNEaXNtaXNzaWJsZSkgZW1pdCgnY2xvc2UnKTtcbiAgfTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5pc09wZW4sXG4gICAgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAoIW1vZGFsRGlhbG9nLnZhbHVlKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4oKTtcbiAgICAgICAgc2Nyb2xsQ29udGVudFRvVG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nQ2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHNldFNjcm9sbExvY2sobmV3VmFsdWUpO1xuICAgIH1cbiAgKTtcblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIGlmIChwcm9wcy5pc09wZW4pIHtcbiAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuKCk7XG4gICAgfVxuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaWFsb2dcbiAgICA6Y2xhc3M9XCJbJ3RpZGUtbW9kYWwnLCBDU1MuQkcuSU5JVElBTCwgQ1NTLkhFSUdIVC5GVUxMLCBDU1MuV0lEVEguRlVMTCwgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTl1cIlxuICAgIHJlZj1cIm1vZGFsRGlhbG9nXCJcbiAgICA6c3R5bGU9XCJ7ICctLW1vZGFsLXdpZHRoJzogcHJvcHMud2lkdGggfVwiXG4gICAgQGNsaWNrLnNlbGY9XCJoYW5kbGVCYWNrZHJvcENsaWNrXCJcbiAgICBAY2xvc2UucHJldmVudFxuICAgIEBrZXlkb3duLmVzY2FwZT1cImhhbmRsZUVzY2FwZUtleWRvd25cIlxuICA+XG4gICAgPGRpdlxuICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAndGlkZS1tb2RhbC1ib2R5JyxcbiAgICAgICAgQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCxcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuT05FLFxuICAgICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgICBDU1MuUE9TSVRJT04uQUJTT0xVVEUsXG4gICAgICAgIENTUy5QT1NJVElPTklORy5CT1RUT00sXG4gICAgICAgIENTUy5TSEFET1cuVE9QLFxuICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgQ1NTLldJRFRILk1BWF9GVUxMLFxuICAgICAgICBDU1Mud2l0aEJyZWFrcG9pbnQoW0NTUy5TSEFET1cuQk9UVE9NXSwgQlJFQUtQT0lOVC5TTSksXG4gICAgICBdXCJcbiAgICA+XG4gICAgICA8aGVhZGVyXG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAndGlkZS1tb2RhbC1oZWFkZXInLFxuICAgICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgICBDU1MuR0FQLkhBTEYsXG4gICAgICAgICAgQ1NTLlBBRERJTkcuWS5PTkUsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5CT1RUT00uT05FLFxuICAgICAgICAgIENTUy5CT1JERVIuQ09MT1IuTE9XLFxuICAgICAgICBdXCJcbiAgICAgID5cbiAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwiZW1pdCgnYmFjaycpXCJcbiAgICAgICAgICB0aXRsZT1cIkJhY2tcIlxuICAgICAgICAgIHYtaWY9XCJpc0JhY2tCdXR0b25cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZPTlQuUk9MRS5IRUFETElORV8yXVwiXG4gICAgICAgICAgdi10ZXh0PVwidGl0bGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgIDpjbGFzcz1cIltDU1MuRkxFWC5HUk9XLk9GRiwgQ1NTLkZMRVguU0hSSU5LLk9GRiwgQ1NTLk1BUkdJTi5MRUZULkFVVE9dXCJcbiAgICAgICAgICA6aWNvbj1cIklDT04uQ0xPU0VcIlxuICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICAgIEBjbGljaz1cImVtaXQoJ2Nsb3NlJylcIlxuICAgICAgICAgIHYtaWY9XCJpc0Rpc21pc3NpYmxlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAndGlkZS1tb2RhbC1jb250ZW50JyxcbiAgICAgICAgICBDU1MuRElTUExBWS5HUklELFxuICAgICAgICAgIENTUy5PVkVSRkxPVy5ZLkFVVE8sXG4gICAgICAgICAgQ1NTLk9WRVJGTE9XLlguSElEREVOLFxuICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICAgIENTUy5QQURESU5HLlkuVFdPLFxuICAgICAgICBdXCJcbiAgICAgICAgcmVmPVwibW9kYWxDb250ZW50XCJcbiAgICAgID5cbiAgICAgICAgPHNsb3QgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8Zm9vdGVyXG4gICAgICAgIDpjbGFzcz1cIlsndGlkZS1tb2RhbC1mb290ZXInLCBDU1MuQVhJUzEuRU5ELCBDU1MuRElTUExBWS5GTEVYLCBDU1MuR0FQLlRXTywgQ1NTLlBBRERJTkcuWS5PTkUsIENTUy5TSEFET1cuVE9QXVwiXG4gICAgICAgIHYtaWY9XCIkc2xvdHMuZm9vdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNsb3QgbmFtZT1cImZvb3RlclwiIC8+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaWFsb2c+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1tb2RhbCB7XG4gICAgLS1tb2RhbC1wYWRkaW5nLXg6IDIwcHg7XG4gICAgbWF4LXdpZHRoOiB1bnNldDtcbiAgICBtYXgtaGVpZ2h0OiB1bnNldDtcbiAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRpZGUtYW5pbWF0ZSkgYWxsb3ctZGlzY3JldGU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICB9XG4gIC50aWRlLW1vZGFsW29wZW5dIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gIH1cbiAgLnRpZGUtbW9kYWw6OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdGlkZS1hbmltYXRlKSBhbGxvdy1kaXNjcmV0ZTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMHB4KTtcbiAgfVxuICAudGlkZS1tb2RhbFtvcGVuXTo6YmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRpZGUtdHJhbnNwYXJlbnQtNDAwKTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IHZhcigtLXRpZGUtYmctYmx1cik7XG4gIH1cbiAgQHN0YXJ0aW5nLXN0eWxlIHtcbiAgICAudGlkZS1tb2RhbFtvcGVuXSB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIH1cbiAgICAudGlkZS1tb2RhbFtvcGVuXTo6YmFja2Ryb3Age1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IHZhcigtLXRpZGUtYmctYmx1cik7XG4gICAgfVxuICB9XG4gIC50aWRlLW1vZGFsLWJvZHkge1xuICAgIHdpZHRoOiB2YXIoLS1tb2RhbC13aWR0aCwgNTc2cHgpO1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXRpZGUtc3BhY2luZy0yKSk7XG4gIH1cblxuICAudGlkZS1tb2RhbC1oZWFkZXIsXG4gIC50aWRlLW1vZGFsLWZvb3RlciB7XG4gICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLW1vZGFsLXBhZGRpbmcteCk7XG4gIH1cbiAgLnRpZGUtbW9kYWwtY29udGVudCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1tb2RhbC1wYWRkaW5nLXgpIDFmciB2YXIoLS1tb2RhbC1wYWRkaW5nLXgpO1xuICB9XG4gIDp3aGVyZSgudGlkZS1tb2RhbC1jb250ZW50KTpkZWVwKD4gOndoZXJlKCopKSB7XG4gICAgZ3JpZC1jb2x1bW46IDI7XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAudGlkZS1tb2RhbC1ib2R5IHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLnRpZGUtbW9kYWwge1xuICAgICAgLS1tb2RhbC1wYWRkaW5nLXg6IHZhcigtLXRpZGUtc3BhY2luZy0yKTtcbiAgICB9XG4gICAgLnRpZGUtbW9kYWwtYm9keSB7XG4gICAgICBtYXgtaGVpZ2h0OiA4NSU7XG4gICAgICBib3R0b206IGluaXRpYWw7XG4gICAgfVxuICB9XG48L3N0eWxlPlxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVCdXR0b25JY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uSWNvbi52dWUnO1xuICBpbXBvcnQgVGlkZUJ1dHRvblBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVCdXR0b25QYWdpbmF0aW9uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBQUklPUklUWSB9IGZyb20gJ0AvdHlwZXMvUHJpb3JpdHknO1xuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBwYWdlQ3VycmVudD86IG51bWJlcjtcbiAgICBwYWdlVG90YWw/OiBudW1iZXI7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBwYWdlQ3VycmVudDogMSxcbiAgICBwYWdlVG90YWw6IDEsXG4gIH0pO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NoYW5nZSddKTtcblxuICBjb25zdCBwYWdlQ3VycmVudCA9IHJlZihwcm9wcy5wYWdlQ3VycmVudCk7XG5cbiAgY29uc3QgcGFnaW5hdGlvbkJ1dHRvbnMgPSBjb21wdXRlZCgoKSA9PiBuZXcgQXJyYXkocHJvcHMucGFnZVRvdGFsKS5maWxsKCcnKS5tYXAoKGVtcHR5LCBpbmRleCkgPT4gaW5kZXggKyAxKSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHBhZ2VDdXJyZW50LnZhbHVlID0gaW5kZXg7XG5cbiAgICBlbWl0KCdjaGFuZ2UnLCBldmVudCwgaW5kZXgpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHNlY3Rpb25cbiAgICA6Y2xhc3M9XCJbJ3RpZGUtcGFnaW5hdGlvbicsIENTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMS5DRU5URVIsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuUVVBUlRFUiwgQ1NTLldJRFRILkZVTExdXCJcbiAgPlxuICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgOmRpc2FibGVkPVwicGFnZUN1cnJlbnQgPT09IDFcIlxuICAgICAgOmljb249XCJJQ09OLkNIRVZST05fTEVGVFwiXG4gICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgIEBjbGljaz1cImhhbmRsZUNsaWNrKHBhZ2VDdXJyZW50IC0gMSlcIlxuICAgIC8+XG5cbiAgICA8dWwgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5BWElTMi5DRU5URVIsIENTUy5HQVAuUVVBUlRFUiwgQ1NTLkxJU1RfQlVMTEVUUy5PRkZdXCI+XG4gICAgICA8bGlcbiAgICAgICAgOmtleT1cInBhZ2luYXRpb25CdXR0b25cIlxuICAgICAgICB2LWZvcj1cInBhZ2luYXRpb25CdXR0b24gaW4gcGFnaW5hdGlvbkJ1dHRvbnNcIlxuICAgICAgPlxuICAgICAgICA8VGlkZUJ1dHRvblBhZ2luYXRpb25cbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJwYWdlQ3VycmVudCA9PT0gcGFnaW5hdGlvbkJ1dHRvblwiXG4gICAgICAgICAgOmxhYmVsPVwicGFnaW5hdGlvbkJ1dHRvblwiXG4gICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgQGNsaWNrPVwiaGFuZGxlQ2xpY2socGFnaW5hdGlvbkJ1dHRvbilcIlxuICAgICAgICAvPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPFRpZGVCdXR0b25JY29uXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlQ3VycmVudCA9PT0gcGFnaW5hdGlvbkJ1dHRvbnNbcGFnaW5hdGlvbkJ1dHRvbnMubGVuZ3RoIC0gMV1cIlxuICAgICAgOmljb249XCJJQ09OLkNIRVZST05fUklHSFRcIlxuICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICBAY2xpY2s9XCJoYW5kbGVDbGljayhwYWdlQ3VycmVudCArIDEpXCJcbiAgICAvPlxuICA8L3NlY3Rpb24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPjwvc3R5bGU+XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUxpc3Qoc2lkZSwgaXNTdGFydCwgcnRsKSB7XG4gIGNvbnN0IGxyID0gWydsZWZ0JywgJ3JpZ2h0J107XG4gIGNvbnN0IHJsID0gWydyaWdodCcsICdsZWZ0J107XG4gIGNvbnN0IHRiID0gWyd0b3AnLCAnYm90dG9tJ107XG4gIGNvbnN0IGJ0ID0gWydib3R0b20nLCAndG9wJ107XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGlmIChydGwpIHJldHVybiBpc1N0YXJ0ID8gcmwgOiBscjtcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gbHIgOiBybDtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gaXNTdGFydCA/IHRiIDogYnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhwbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGRpcmVjdGlvbiwgcnRsKSB7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBsZXQgbGlzdCA9IGdldFNpZGVMaXN0KGdldFNpZGUocGxhY2VtZW50KSwgZGlyZWN0aW9uID09PSAnc3RhcnQnLCBydGwpO1xuICBpZiAoYWxpZ25tZW50KSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKHNpZGUgPT4gc2lkZSArIFwiLVwiICsgYWxpZ25tZW50KTtcbiAgICBpZiAoZmxpcEFsaWdubWVudCkge1xuICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGxpc3QubWFwKGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIHNpZGUgPT4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHJlY3Q7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICBsZWZ0OiB4LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iLCJpbXBvcnQgeyBnZXRTaWRlQXhpcywgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QXhpc0xlbmd0aCwgZ2V0U2lkZSwgZ2V0QWxpZ25tZW50LCBldmFsdWF0ZSwgZ2V0UGFkZGluZ09iamVjdCwgcmVjdFRvQ2xpZW50UmVjdCwgbWluLCBjbGFtcCwgcGxhY2VtZW50cywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBzaWRlcywgbWF4LCBnZXRPcHBvc2l0ZUF4aXMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuZXhwb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KF9yZWYsIHBsYWNlbWVudCwgcnRsKSB7XG4gIGxldCB7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzaWRlQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWduTGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IHNpZGVBeGlzID09PSAneSc7XG4gIGNvbnN0IGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBmbG9hdGluZy53aWR0aCAvIDI7XG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZmxvYXRpbmcuaGVpZ2h0IC8gMjtcbiAgY29uc3QgY29tbW9uQWxpZ24gPSByZWZlcmVuY2VbYWxpZ25MZW5ndGhdIC8gMiAtIGZsb2F0aW5nW2FsaWduTGVuZ3RoXSAvIDI7XG4gIGxldCBjb29yZHM7XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZmxvYXRpbmcuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGZsb2F0aW5nLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG4gIHN3aXRjaCAoZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gLT0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqXG4gKiBUaGlzIGV4cG9ydCBkb2VzIG5vdCBoYXZlIGFueSBgcGxhdGZvcm1gIGludGVyZmFjZSBsb2dpYy4gWW91IHdpbGwgbmVlZCB0b1xuICogd3JpdGUgb25lIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB1c2luZyBGbG9hdGluZyBVSSB3aXRoLlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSBhc3luYyAocmVmZXJlbmNlLCBmbG9hdGluZywgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHZhbGlkTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XG4gIGxldCByZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nLFxuICAgIHN0cmF0ZWd5XG4gIH0pO1xuICBsZXQge1xuICAgIHgsXG4gICAgeVxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcbiAgbGV0IHN0YXRlZnVsUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICBsZXQgbWlkZGxld2FyZURhdGEgPSB7fTtcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkTWlkZGxld2FyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBmblxuICAgIH0gPSB2YWxpZE1pZGRsZXdhcmVbaV07XG4gICAgY29uc3Qge1xuICAgICAgeDogbmV4dFgsXG4gICAgICB5OiBuZXh0WSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNldFxuICAgIH0gPSBhd2FpdCBmbih7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGluaXRpYWxQbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZmxvYXRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgICB4ID0gbmV4dFggIT0gbnVsbCA/IG5leHRYIDogeDtcbiAgICB5ID0gbmV4dFkgIT0gbnVsbCA/IG5leHRZIDogeTtcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcbiAgICAgIC4uLm1pZGRsZXdhcmVEYXRhLFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxuICAgICAgICAuLi5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVzZXQgJiYgcmVzZXRDb3VudCA8PSA1MCkge1xuICAgICAgcmVzZXRDb3VudCsrO1xuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlc2V0LnBsYWNlbWVudCkge1xuICAgICAgICAgIHN0YXRlZnVsUGxhY2VtZW50ID0gcmVzZXQucGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNldC5yZWN0cykge1xuICAgICAgICAgIHJlY3RzID0gcmVzZXQucmVjdHMgPT09IHRydWUgPyBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgZmxvYXRpbmcsXG4gICAgICAgICAgICBzdHJhdGVneVxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XG4gICAgICAgIH1cbiAgICAgICAgKHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHlcbiAgICAgICAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBzdGF0ZWZ1bFBsYWNlbWVudCwgcnRsKSk7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgc3RyYXRlZ3ksXG4gICAgbWlkZGxld2FyZURhdGFcbiAgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX2F3YWl0JHBsYXRmb3JtJGlzRWxlO1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhdGZvcm0sXG4gICAgcmVjdHMsXG4gICAgZWxlbWVudHMsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IHN0YXRlO1xuICBjb25zdCB7XG4gICAgYm91bmRhcnkgPSAnY2xpcHBpbmdBbmNlc3RvcnMnLFxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXG4gICAgZWxlbWVudENvbnRleHQgPSAnZmxvYXRpbmcnLFxuICAgIGFsdEJvdW5kYXJ5ID0gZmFsc2UsXG4gICAgcGFkZGluZyA9IDBcbiAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcbiAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgY29uc3QgY2xpcHBpbmdDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChhd2FpdCBwbGF0Zm9ybS5nZXRDbGlwcGluZ1JlY3Qoe1xuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSkpO1xuICBjb25zdCByZWN0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0cy5mbG9hdGluZy53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3RzLmZsb2F0aW5nLmhlaWdodFxuICB9IDogcmVjdHMucmVmZXJlbmNlO1xuICBjb25zdCBvZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgb2Zmc2V0U2NhbGUgPSAoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KG9mZnNldFBhcmVudCkpKSA/IChhd2FpdCAocGxhdGZvcm0uZ2V0U2NhbGUgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldFNjYWxlKG9mZnNldFBhcmVudCkpKSB8fCB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH0gOiB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCA/IGF3YWl0IHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9KSA6IHJlY3QpO1xuICByZXR1cm4ge1xuICAgIHRvcDogKGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGJvdHRvbTogKGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGxlZnQ6IChjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQpIC8gb2Zmc2V0U2NhbGUueCxcbiAgICByaWdodDogKGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCkgLyBvZmZzZXRTY2FsZS54XG4gIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gb3B0aW9ucyA9PiAoe1xuICBuYW1lOiAnYXJyb3cnLFxuICBvcHRpb25zLFxuICBhc3luYyBmbihzdGF0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgbWlkZGxld2FyZURhdGFcbiAgICB9ID0gc3RhdGU7XG4gICAgLy8gU2luY2UgYGVsZW1lbnRgIGlzIHJlcXVpcmVkLCB3ZSBkb24ndCBQYXJ0aWFsPD4gdGhlIHR5cGUuXG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhZGRpbmcgPSAwXG4gICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKSB8fCB7fTtcbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfTtcbiAgICBjb25zdCBheGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYXhpcyk7XG4gICAgY29uc3QgYXJyb3dEaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50KTtcbiAgICBjb25zdCBpc1lBeGlzID0gYXhpcyA9PT0gJ3knO1xuICAgIGNvbnN0IG1pblByb3AgPSBpc1lBeGlzID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgY29uc3QgbWF4UHJvcCA9IGlzWUF4aXMgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgY29uc3QgY2xpZW50UHJvcCA9IGlzWUF4aXMgPyAnY2xpZW50SGVpZ2h0JyA6ICdjbGllbnRXaWR0aCc7XG4gICAgY29uc3QgZW5kRGlmZiA9IHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdICsgcmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gY29vcmRzW2F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICBjb25zdCBzdGFydERpZmYgPSBjb29yZHNbYXhpc10gLSByZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gICAgY29uc3QgYXJyb3dPZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkpO1xuICAgIGxldCBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBhcnJvd09mZnNldFBhcmVudFtjbGllbnRQcm9wXSA6IDA7XG5cbiAgICAvLyBET00gcGxhdGZvcm0gY2FuIHJldHVybiBgd2luZG93YCBhcyB0aGUgYG9mZnNldFBhcmVudGAuXG4gICAgaWYgKCFjbGllbnRTaXplIHx8ICEoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGFycm93T2Zmc2V0UGFyZW50KSkpKSB7XG4gICAgICBjbGllbnRTaXplID0gZWxlbWVudHMuZmxvYXRpbmdbY2xpZW50UHJvcF0gfHwgcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICB9XG4gICAgY29uc3QgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7XG5cbiAgICAvLyBJZiB0aGUgcGFkZGluZyBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBjYXVzZXMgdGhlIGFycm93IHRvIG5vIGxvbmdlciBiZVxuICAgIC8vIGNlbnRlcmVkLCBtb2RpZnkgdGhlIHBhZGRpbmcgc28gdGhhdCBpdCBpcyBjZW50ZXJlZC5cbiAgICBjb25zdCBsYXJnZXN0UG9zc2libGVQYWRkaW5nID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgLSAxO1xuICAgIGNvbnN0IG1pblBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttaW5Qcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21heFByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgZmxvYXRpbmcgZWxlbWVudCBpZiB0aGUgY2VudGVyXG4gICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCdzIGJvdW5kcy5cbiAgICBjb25zdCBtaW4kMSA9IG1pblBhZGRpbmc7XG4gICAgY29uc3QgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC0gbWF4UGFkZGluZztcbiAgICBjb25zdCBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICAgIGNvbnN0IG9mZnNldCA9IGNsYW1wKG1pbiQxLCBjZW50ZXIsIG1heCk7XG5cbiAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBhcnJvdydzIHBhZGRpbmcgY2F1c2VzIGl0IHRvXG4gICAgLy8gdG8gcG9pbnQgdG8gbm90aGluZyBmb3IgYW4gYWxpZ25lZCBwbGFjZW1lbnQsIGFkanVzdCB0aGUgb2Zmc2V0IG9mIHRoZVxuICAgIC8vIGZsb2F0aW5nIGVsZW1lbnQgaXRzZWxmLiBUbyBlbnN1cmUgYHNoaWZ0KClgIGNvbnRpbnVlcyB0byB0YWtlIGFjdGlvbixcbiAgICAvLyBhIHNpbmdsZSByZXNldCBpcyBwZXJmb3JtZWQgd2hlbiB0aGlzIGlzIHRydWUuXG4gICAgY29uc3Qgc2hvdWxkQWRkT2Zmc2V0ID0gIW1pZGRsZXdhcmVEYXRhLmFycm93ICYmIGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9IG51bGwgJiYgY2VudGVyICE9PSBvZmZzZXQgJiYgcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gLyAyIC0gKGNlbnRlciA8IG1pbiQxID8gbWluUGFkZGluZyA6IG1heFBhZGRpbmcpIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIDwgMDtcbiAgICBjb25zdCBhbGlnbm1lbnRPZmZzZXQgPSBzaG91bGRBZGRPZmZzZXQgPyBjZW50ZXIgPCBtaW4kMSA/IGNlbnRlciAtIG1pbiQxIDogY2VudGVyIC0gbWF4IDogMDtcbiAgICByZXR1cm4ge1xuICAgICAgW2F4aXNdOiBjb29yZHNbYXhpc10gKyBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtheGlzXTogb2Zmc2V0LFxuICAgICAgICBjZW50ZXJPZmZzZXQ6IGNlbnRlciAtIG9mZnNldCAtIGFsaWdubWVudE9mZnNldCxcbiAgICAgICAgLi4uKHNob3VsZEFkZE9mZnNldCAmJiB7XG4gICAgICAgICAgYWxpZ25tZW50T2Zmc2V0XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmVzZXQ6IHNob3VsZEFkZE9mZnNldFxuICAgIH07XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIHtcbiAgY29uc3QgYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudCA9IGFsaWdubWVudCA/IFsuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQpLCAuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9PSBhbGlnbm1lbnQpXSA6IGFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0U2lkZShwbGFjZW1lbnQpID09PSBwbGFjZW1lbnQpO1xuICByZXR1cm4gYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudC5maWx0ZXIocGxhY2VtZW50ID0+IHtcbiAgICBpZiAoYWxpZ25tZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCB8fCAoYXV0b0FsaWdubWVudCA/IGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkgIT09IHBsYWNlbWVudCA6IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2F1dG9QbGFjZW1lbnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXV0b1AsIF9taWRkbGV3YXJlRGF0YSRhdXRvUDIsIF9wbGFjZW1lbnRzVGhhdEZpdE9uRTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMsXG4gICAgICAgIGF1dG9BbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzJDEgPSBhbGlnbm1lbnQgIT09IHVuZGVmaW5lZCB8fCBhbGxvd2VkUGxhY2VtZW50cyA9PT0gcGxhY2VtZW50cyA/IGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50IHx8IG51bGwsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSA6IGFsbG93ZWRQbGFjZW1lbnRzO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9ICgoX21pZGRsZXdhcmVEYXRhJGF1dG9QID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUC5pbmRleCkgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50UGxhY2VtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYWxpZ25tZW50U2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhjdXJyZW50UGxhY2VtZW50LCByZWN0cywgYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKTtcblxuICAgICAgLy8gTWFrZSBgY29tcHV0ZUNvb3Jkc2Agc3RhcnQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICBpZiAocGxhY2VtZW50ICE9PSBjdXJyZW50UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50cyQxWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE92ZXJmbG93cyA9IFtvdmVyZmxvd1tnZXRTaWRlKGN1cnJlbnRQbGFjZW1lbnQpXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMF1dLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1sxXV1dO1xuICAgICAgY29uc3QgYWxsT3ZlcmZsb3dzID0gWy4uLigoKF9taWRkbGV3YXJlRGF0YSRhdXRvUDIgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QMi5vdmVyZmxvd3MpIHx8IFtdKSwge1xuICAgICAgICBwbGFjZW1lbnQ6IGN1cnJlbnRQbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93czogY3VycmVudE92ZXJmbG93c1xuICAgICAgfV07XG4gICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAvLyBUaGVyZSBhcmUgbW9yZSBwbGFjZW1lbnRzIHRvIGNoZWNrLlxuICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlID0gYWxsT3ZlcmZsb3dzLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KGQucGxhY2VtZW50KTtcbiAgICAgICAgcmV0dXJuIFtkLnBsYWNlbWVudCwgYWxpZ25tZW50ICYmIGNyb3NzQXhpcyA/XG4gICAgICAgIC8vIENoZWNrIGFsb25nIHRoZSBtYWluQXhpcyBhbmQgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgZC5vdmVyZmxvd3Muc2xpY2UoMCwgMikucmVkdWNlKChhY2MsIHYpID0+IGFjYyArIHYsIDApIDpcbiAgICAgICAgLy8gQ2hlY2sgb25seSB0aGUgbWFpbkF4aXMuXG4gICAgICAgIGQub3ZlcmZsb3dzWzBdLCBkLm92ZXJmbG93c107XG4gICAgICB9KS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGUgPSBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UuZmlsdGVyKGQgPT4gZFsyXS5zbGljZSgwLFxuICAgICAgLy8gQWxpZ25lZCBwbGFjZW1lbnRzIHNob3VsZCBub3QgY2hlY2sgdGhlaXIgb3Bwb3NpdGUgY3Jvc3NBeGlzXG4gICAgICAvLyBzaWRlLlxuICAgICAgZ2V0QWxpZ25tZW50KGRbMF0pID8gMiA6IDMpLmV2ZXJ5KHYgPT4gdiA8PSAwKSk7XG4gICAgICBjb25zdCByZXNldFBsYWNlbWVudCA9ICgoX3BsYWNlbWVudHNUaGF0Rml0T25FID0gcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX3BsYWNlbWVudHNUaGF0Rml0T25FWzBdKSB8fCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2VbMF1bMF07XG4gICAgICBpZiAocmVzZXRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmbGlwJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGFycm93LCBfbWlkZGxld2FyZURhdGEkZmxpcDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIGluaXRpYWxQbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlLFxuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgICAgZmFsbGJhY2tTdHJhdGVneSA9ICdiZXN0Rml0JyxcbiAgICAgICAgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9ICdub25lJyxcbiAgICAgICAgZmxpcEFsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAgICAgLy8gSWYgYSByZXNldCBieSB0aGUgYXJyb3cgd2FzIGNhdXNlZCBkdWUgdG8gYW4gYWxpZ25tZW50IG9mZnNldCBiZWluZ1xuICAgICAgLy8gYWRkZWQsIHdlIHNob3VsZCBza2lwIGFueSBsb2dpYyBub3cgc2luY2UgYGZsaXAoKWAgaGFzIGFscmVhZHkgZG9uZSBpdHNcbiAgICAgIC8vIHdvcmsuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzI1NDkjaXNzdWVjb21tZW50LTE3MTk2MDE2NDNcbiAgICAgIGlmICgoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaW5pdGlhbFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoaW5pdGlhbFBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSBnZXRTaWRlKGluaXRpYWxQbGFjZW1lbnQpID09PSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICAgICAgY29uc3QgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBBbGlnbm1lbnQgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoaW5pdGlhbFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uICE9PSAnbm9uZSc7XG4gICAgICBpZiAoIXNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyAmJiBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50cy5wdXNoKC4uLmdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiwgcnRsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzID0gW2luaXRpYWxQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c107XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzID0gW107XG4gICAgICBsZXQgb3ZlcmZsb3dzRGF0YSA9ICgoX21pZGRsZXdhcmVEYXRhJGZsaXAgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAub3ZlcmZsb3dzKSB8fCBbXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBzaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCk7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVzWzBdXSwgb3ZlcmZsb3dbc2lkZXNbMV1dKTtcbiAgICAgIH1cbiAgICAgIG92ZXJmbG93c0RhdGEgPSBbLi4ub3ZlcmZsb3dzRGF0YSwge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93c1xuICAgICAgfV07XG5cbiAgICAgIC8vIE9uZSBvciBtb3JlIHNpZGVzIGlzIG92ZXJmbG93aW5nLlxuICAgICAgaWYgKCFvdmVyZmxvd3MuZXZlcnkoc2lkZSA9PiBzaWRlIDw9IDApKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkZmxpcDIsIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKCgoX21pZGRsZXdhcmVEYXRhJGZsaXAyID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwMi5pbmRleCkgfHwgMCkgKyAxO1xuICAgICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50c1tuZXh0SW5kZXhdO1xuICAgICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICAgIC8vIFRyeSBuZXh0IHBsYWNlbWVudCBhbmQgcmUtcnVuIHRoZSBsaWZlY3ljbGUuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgICAgICAgb3ZlcmZsb3dzOiBvdmVyZmxvd3NEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIEZvciB0eXBlIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCB0aGUgYE9mZnNldE9wdGlvbnNgIHR5cGUgd2FzIGFsc29cbi8vIERlcml2YWJsZS5cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCxcbiAgICBwbGF0Zm9ybSxcbiAgICBlbGVtZW50c1xuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gIGNvbnN0IG1haW5BeGlzTXVsdGkgPSBbJ2xlZnQnLCAndG9wJ10uaW5jbHVkZXMoc2lkZSkgPyAtMSA6IDE7XG4gIGNvbnN0IGNyb3NzQXhpc011bHRpID0gcnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDE7XG4gIGNvbnN0IHJhd1ZhbHVlID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgbGV0IHtcbiAgICBtYWluQXhpcyxcbiAgICBjcm9zc0F4aXMsXG4gICAgYWxpZ25tZW50QXhpc1xuICB9ID0gdHlwZW9mIHJhd1ZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUsXG4gICAgY3Jvc3NBeGlzOiAwLFxuICAgIGFsaWdubWVudEF4aXM6IG51bGxcbiAgfSA6IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUubWFpbkF4aXMgfHwgMCxcbiAgICBjcm9zc0F4aXM6IHJhd1ZhbHVlLmNyb3NzQXhpcyB8fCAwLFxuICAgIGFsaWdubWVudEF4aXM6IHJhd1ZhbHVlLmFsaWdubWVudEF4aXNcbiAgfTtcbiAgaWYgKGFsaWdubWVudCAmJiB0eXBlb2YgYWxpZ25tZW50QXhpcyA9PT0gJ251bWJlcicpIHtcbiAgICBjcm9zc0F4aXMgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gYWxpZ25tZW50QXhpcyAqIC0xIDogYWxpZ25tZW50QXhpcztcbiAgfVxuICByZXR1cm4gaXNWZXJ0aWNhbCA/IHtcbiAgICB4OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aSxcbiAgICB5OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGlcbiAgfSA6IHtcbiAgICB4OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGksXG4gICAgeTogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGlcbiAgfTtcbn1cblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ29mZnNldCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJGFycm93O1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBJZiB0aGUgcGxhY2VtZW50IGlzIHRoZSBzYW1lIGFuZCB0aGUgYXJyb3cgY2F1c2VkIGFuIGFsaWdubWVudCBvZmZzZXRcbiAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uaW5nIGNvb3JkaW5hdGVzLlxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UucGxhY2VtZW50KSAmJiAoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB4ICsgZGlmZkNvb3Jkcy54LFxuICAgICAgICB5OiB5ICsgZGlmZkNvb3Jkcy55LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4uZGlmZkNvb3JkcyxcbiAgICAgICAgICBwbGFjZW1lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NoaWZ0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudFxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgbGltaXRlciA9IHtcbiAgICAgICAgICBmbjogX3JlZiA9PiB7XG4gICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBtYWluQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IG1haW5BeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgbWFpbkF4aXNDb29yZCA9IGNsYW1wKG1pbiwgbWFpbkF4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBjcm9zc0F4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBjcm9zc0F4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGNsYW1wKG1pbiwgY3Jvc3NBeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdGVkQ29vcmRzID0gbGltaXRlci5mbih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubGltaXRlZENvb3JkcyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHg6IGxpbWl0ZWRDb29yZHMueCAtIHgsXG4gICAgICAgICAgeTogbGltaXRlZENvb3Jkcy55IC0geSxcbiAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICBbbWFpbkF4aXNdOiBjaGVja01haW5BeGlzLFxuICAgICAgICAgICAgW2Nyb3NzQXhpc106IGNoZWNrQ3Jvc3NBeGlzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBjb25zdCByYXdPZmZzZXQgPSBldmFsdWF0ZShvZmZzZXQsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvbXB1dGVkT2Zmc2V0ID0gdHlwZW9mIHJhd09mZnNldCA9PT0gJ251bWJlcicgPyB7XG4gICAgICAgIG1haW5BeGlzOiByYXdPZmZzZXQsXG4gICAgICAgIGNyb3NzQXhpczogMFxuICAgICAgfSA6IHtcbiAgICAgICAgbWFpbkF4aXM6IDAsXG4gICAgICAgIGNyb3NzQXhpczogMCxcbiAgICAgICAgLi4ucmF3T2Zmc2V0XG4gICAgICB9O1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSAtIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBpZiAobWFpbkF4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKG1haW5BeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRvZmZzZTI7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGlzT3JpZ2luU2lkZSA9IFsndG9wJywgJ2xlZnQnXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIChpc09yaWdpblNpZGUgPyAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZVtjcm9zc0F4aXNdKSB8fCAwIDogMCkgKyAoaXNPcmlnaW5TaWRlID8gMCA6IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSArIChpc09yaWdpblNpZGUgPyAwIDogKChfbWlkZGxld2FyZURhdGEkb2Zmc2UyID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlMltjcm9zc0F4aXNdKSB8fCAwKSAtIChpc09yaWdpblNpZGUgPyBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMgOiAwKTtcbiAgICAgICAgaWYgKGNyb3NzQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQg4oCUXG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaXplJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX3N0YXRlJG1pZGRsZXdhcmVEYXRhLCBfc3RhdGUkbWlkZGxld2FyZURhdGEyO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXBwbHkgPSAoKSA9PiB7fSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzWUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSByZWN0cy5mbG9hdGluZztcbiAgICAgIGxldCBoZWlnaHRTaWRlO1xuICAgICAgbGV0IHdpZHRoU2lkZTtcbiAgICAgIGlmIChzaWRlID09PSAndG9wJyB8fCBzaWRlID09PSAnYm90dG9tJykge1xuICAgICAgICBoZWlnaHRTaWRlID0gc2lkZTtcbiAgICAgICAgd2lkdGhTaWRlID0gYWxpZ25tZW50ID09PSAoKGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSkgPyAnc3RhcnQnIDogJ2VuZCcpID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoU2lkZSA9IHNpZGU7XG4gICAgICAgIGhlaWdodFNpZGUgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ0hlaWdodCA9IGhlaWdodCAtIG92ZXJmbG93LnRvcCAtIG92ZXJmbG93LmJvdHRvbTtcbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ1dpZHRoID0gd2lkdGggLSBvdmVyZmxvdy5sZWZ0IC0gb3ZlcmZsb3cucmlnaHQ7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodCA9IG1pbihoZWlnaHQgLSBvdmVyZmxvd1toZWlnaHRTaWRlXSwgbWF4aW11bUNsaXBwaW5nSGVpZ2h0KTtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSBtaW4od2lkdGggLSBvdmVyZmxvd1t3aWR0aFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCk7XG4gICAgICBjb25zdCBub1NoaWZ0ID0gIXN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0O1xuICAgICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0O1xuICAgICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gb3ZlcmZsb3dBdmFpbGFibGVXaWR0aDtcbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhID0gc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQpICE9IG51bGwgJiYgX3N0YXRlJG1pZGRsZXdhcmVEYXRhLmVuYWJsZWQueCkge1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IG1heGltdW1DbGlwcGluZ1dpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEyID0gc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQpICE9IG51bGwgJiYgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMi5lbmFibGVkLnkpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gbWF4aW11bUNsaXBwaW5nSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKG5vU2hpZnQgJiYgIWFsaWdubWVudCkge1xuICAgICAgICBjb25zdCB4TWluID0gbWF4KG92ZXJmbG93LmxlZnQsIDApO1xuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgeU1pbiA9IG1heChvdmVyZmxvdy50b3AsIDApO1xuICAgICAgICBjb25zdCB5TWF4ID0gbWF4KG92ZXJmbG93LmJvdHRvbSwgMCk7XG4gICAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIDIgKiAoeE1pbiAhPT0gMCB8fCB4TWF4ICE9PSAwID8geE1pbiArIHhNYXggOiBtYXgob3ZlcmZsb3cubGVmdCwgb3ZlcmZsb3cucmlnaHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcGx5KHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV4dERpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnRzLmZsb2F0aW5nKTtcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSB9O1xuIiwiZnVuY3Rpb24gaGFzV2luZG93KCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG59XG5mdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5FbGVtZW50O1xufVxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpIHx8IHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTaGFkb3dSb290IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5TaGFkb3dSb290O1xufVxuZnVuY3Rpb24gaXNPdmVyZmxvd0VsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgb3ZlcmZsb3csXG4gICAgb3ZlcmZsb3dYLFxuICAgIG92ZXJmbG93WSxcbiAgICBkaXNwbGF5XG4gIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpICYmICFbJ2lubGluZScsICdjb250ZW50cyddLmluY2x1ZGVzKGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddLnNvbWUoc2VsZWN0b3IgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmluZ0Jsb2NrKGVsZW1lbnRPckNzcykge1xuICBjb25zdCB3ZWJraXQgPSBpc1dlYktpdCgpO1xuICBjb25zdCBjc3MgPSBpc0VsZW1lbnQoZWxlbWVudE9yQ3NzKSA/IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudE9yQ3NzKSA6IGVsZW1lbnRPckNzcztcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMi8jaW5kaXZpZHVhbC10cmFuc2Zvcm1zXG4gIHJldHVybiBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ10uc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxYLFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgaWYgKGdldE5vZGVOYW1lKG5vZGUpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPVxuICAvLyBTdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZS5cbiAgbm9kZS5hc3NpZ25lZFNsb3QgfHxcbiAgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWQuXG4gIG5vZGUucGFyZW50Tm9kZSB8fFxuICAvLyBTaGFkb3dSb290IGRldGVjdGVkLlxuICBpc1NoYWRvd1Jvb3Qobm9kZSkgJiYgbm9kZS5ob3N0IHx8XG4gIC8vIEZhbGxiYWNrLlxuICBnZXREb2N1bWVudEVsZW1lbnQobm9kZSk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3QocmVzdWx0KSA/IHJlc3VsdC5ob3N0IDogcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93bmVyRG9jdW1lbnQuYm9keSA6IG5vZGUuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE92ZXJmbG93QW5jZXN0b3JzKG5vZGUsIGxpc3QsIHRyYXZlcnNlSWZyYW1lcykge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDI7XG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cbiAgaWYgKHRyYXZlcnNlSWZyYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgdHJhdmVyc2VJZnJhbWVzID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQyID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudDIuYm9keSk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxhYmxlQW5jZXN0b3IpO1xuICBpZiAoaXNCb2R5KSB7XG4gICAgY29uc3QgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KHdpbik7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHdpbiwgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc092ZXJmbG93RWxlbWVudChzY3JvbGxhYmxlQW5jZXN0b3IpID8gc2Nyb2xsYWJsZUFuY2VzdG9yIDogW10sIGZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhmcmFtZUVsZW1lbnQpIDogW10pO1xuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChzY3JvbGxhYmxlQW5jZXN0b3IsIGdldE92ZXJmbG93QW5jZXN0b3JzKHNjcm9sbGFibGVBbmNlc3RvciwgW10sIHRyYXZlcnNlSWZyYW1lcykpO1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVFbGVtZW50KHdpbikge1xuICByZXR1cm4gd2luLnBhcmVudCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2luLnBhcmVudCkgPyB3aW4uZnJhbWVFbGVtZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldEZyYW1lRWxlbWVudCwgZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IsIGdldE5vZGVOYW1lLCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgZ2V0V2luZG93LCBpc0NvbnRhaW5pbmdCbG9jaywgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzTm9kZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGlzU2hhZG93Um9vdCwgaXNUYWJsZUVsZW1lbnQsIGlzVG9wTGF5ZXIsIGlzV2ViS2l0IH07XG4iLCJpbXBvcnQgeyByZWN0VG9DbGllbnRSZWN0LCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBvZmZzZXQgYXMgb2Zmc2V0JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBmbGlwIGFzIGZsaXAkMSwgc2l6ZSBhcyBzaXplJDEsIGhpZGUgYXMgaGlkZSQxLCBhcnJvdyBhcyBhcnJvdyQxLCBpbmxpbmUgYXMgaW5saW5lJDEsIGxpbWl0U2hpZnQgYXMgbGltaXRTaGlmdCQxLCBjb21wdXRlUG9zaXRpb24gYXMgY29tcHV0ZVBvc2l0aW9uJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZSc7XG5pbXBvcnQgeyByb3VuZCwgY3JlYXRlQ29vcmRzLCBtYXgsIG1pbiwgZmxvb3IgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIC8vIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzLCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBhcmUgZW1wdHlcbiAgLy8gc3RyaW5ncyBmb3IgU1ZHIGVsZW1lbnRzLCByZXR1cm5pbmcgTmFOLiBGYWxsYmFjayB0byBgMGAgaW4gdGhpcyBjYXNlLlxuICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNzcy53aWR0aCkgfHwgMDtcbiAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoY3NzLmhlaWdodCkgfHwgMDtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkOiBzaG91bGRGYWxsYmFja1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50LmNvbnRleHRFbGVtZW50IDogZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvb3JkcygxKTtcbiAgfVxuICBjb25zdCByZWN0ID0gZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9ICgkID8gcm91bmQocmVjdC53aWR0aCkgOiByZWN0LndpZHRoKSAvIHdpZHRoO1xuICBsZXQgeSA9ICgkID8gcm91bmQocmVjdC5oZWlnaHQpIDogcmVjdC5oZWlnaHQpIC8gaGVpZ2h0O1xuXG4gIC8vIDAsIE5hTiwgb3IgSW5maW5pdHkgc2hvdWxkIGFsd2F5cyBmYWxsYmFjayB0byAxLlxuXG4gIGlmICgheCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgeCA9IDE7XG4gIH1cbiAgaWYgKCF5IHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICB5ID0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBub09mZnNldHMgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29vcmRzKDApO1xuZnVuY3Rpb24gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc1dlYktpdCgpIHx8ICF3aW4udmlzdWFsVmlld3BvcnQpIHtcbiAgICByZXR1cm4gbm9PZmZzZXRzO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQsXG4gICAgeTogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcFxuICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhlbGVtZW50LCBpc0ZpeGVkLCBmbG9hdGluZ09mZnNldFBhcmVudCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG4gIGlmICghZmxvYXRpbmdPZmZzZXRQYXJlbnQgfHwgaXNGaXhlZCAmJiBmbG9hdGluZ09mZnNldFBhcmVudCAhPT0gZ2V0V2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSA/IGdldFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGxldCB4ID0gKGNsaWVudFJlY3QubGVmdCArIHZpc3VhbE9mZnNldHMueCkgLyBzY2FsZS54O1xuICBsZXQgeSA9IChjbGllbnRSZWN0LnRvcCArIHZpc3VhbE9mZnNldHMueSkgLyBzY2FsZS55O1xuICBsZXQgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGUueDtcbiAgbGV0IGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGUueTtcbiAgaWYgKGRvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZG9tRWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0V2luID0gb2Zmc2V0UGFyZW50ICYmIGlzRWxlbWVudChvZmZzZXRQYXJlbnQpID8gZ2V0V2luZG93KG9mZnNldFBhcmVudCkgOiBvZmZzZXRQYXJlbnQ7XG4gICAgbGV0IGN1cnJlbnRXaW4gPSB3aW47XG4gICAgbGV0IGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgd2hpbGUgKGN1cnJlbnRJRnJhbWUgJiYgb2Zmc2V0UGFyZW50ICYmIG9mZnNldFdpbiAhPT0gY3VycmVudFdpbikge1xuICAgICAgY29uc3QgaWZyYW1lU2NhbGUgPSBnZXRTY2FsZShjdXJyZW50SUZyYW1lKTtcbiAgICAgIGNvbnN0IGlmcmFtZVJlY3QgPSBjdXJyZW50SUZyYW1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50SUZyYW1lKTtcbiAgICAgIGNvbnN0IGxlZnQgPSBpZnJhbWVSZWN0LmxlZnQgKyAoY3VycmVudElGcmFtZS5jbGllbnRMZWZ0ICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ0xlZnQpKSAqIGlmcmFtZVNjYWxlLng7XG4gICAgICBjb25zdCB0b3AgPSBpZnJhbWVSZWN0LnRvcCArIChjdXJyZW50SUZyYW1lLmNsaWVudFRvcCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdUb3ApKSAqIGlmcmFtZVNjYWxlLnk7XG4gICAgICB4ICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICB5ICo9IGlmcmFtZVNjYWxlLnk7XG4gICAgICB3aWR0aCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgaGVpZ2h0ICo9IGlmcmFtZVNjYWxlLnk7XG4gICAgICB4ICs9IGxlZnQ7XG4gICAgICB5ICs9IHRvcDtcbiAgICAgIGN1cnJlbnRXaW4gPSBnZXRXaW5kb3coY3VycmVudElGcmFtZSk7XG4gICAgICBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdCh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9KTtcbn1cblxuLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuLy8gaW5jb3JyZWN0IGZvciBSVEwuXG5mdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQsIHJlY3QpIHtcbiAgY29uc3QgbGVmdFNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgaWYgKCFyZWN0KSB7XG4gICAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBsZWZ0U2Nyb2xsO1xuICB9XG4gIHJldHVybiByZWN0LmxlZnQgKyBsZWZ0U2Nyb2xsO1xufVxuXG5mdW5jdGlvbiBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsLCBpZ25vcmVTY3JvbGxiYXJYKSB7XG4gIGlmIChpZ25vcmVTY3JvbGxiYXJYID09PSB2b2lkIDApIHtcbiAgICBpZ25vcmVTY3JvbGxiYXJYID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgaHRtbFJlY3QgPSBkb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHggPSBodG1sUmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSAoaWdub3JlU2Nyb2xsYmFyWCA/IDAgOlxuICAvLyBSVEwgPGJvZHk+IHNjcm9sbGJhci5cbiAgZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQsIGh0bWxSZWN0KSk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgdHJ1ZSkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keS5jbGllbnRXaWR0aCkgLSB3aWR0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBSZXR1cm5zIHRoZSBpbm5lciBjbGllbnQgcmVjdCwgc3VidHJhY3Rpbmcgc2Nyb2xsYmFycyBpZiBwcmVzZW50LlxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIGNvbnN0IHRvcCA9IGNsaWVudFJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIGNvbnN0IGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIGNvbnN0IHNjYWxlID0gaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldFNjYWxlKGVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGggKiBzY2FsZS54O1xuICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodCAqIHNjYWxlLnk7XG4gIGNvbnN0IHggPSBsZWZ0ICogc2NhbGUueDtcbiAgY29uc3QgeSA9IHRvcCAqIHNjYWxlLnk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSB7XG4gIGxldCByZWN0O1xuICBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIHJlY3QgPSBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpO1xuICB9IGVsc2UgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICdkb2N1bWVudCcpIHtcbiAgICByZWN0ID0gZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSBpZiAoaXNFbGVtZW50KGNsaXBwaW5nQW5jZXN0b3IpKSB7XG4gICAgcmVjdCA9IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2aXN1YWxPZmZzZXRzID0gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KTtcbiAgICByZWN0ID0ge1xuICAgICAgeDogY2xpcHBpbmdBbmNlc3Rvci54IC0gdmlzdWFsT2Zmc2V0cy54LFxuICAgICAgeTogY2xpcHBpbmdBbmNlc3Rvci55IC0gdmlzdWFsT2Zmc2V0cy55LFxuICAgICAgd2lkdGg6IGNsaXBwaW5nQW5jZXN0b3Iud2lkdGgsXG4gICAgICBoZWlnaHQ6IGNsaXBwaW5nQW5jZXN0b3IuaGVpZ2h0XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdChyZWN0KTtcbn1cbmZ1bmN0aW9uIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBzdG9wTm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgaWYgKHBhcmVudE5vZGUgPT09IHN0b3BOb2RlIHx8ICFpc0VsZW1lbnQocGFyZW50Tm9kZSkgfHwgaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuICBsZXQgY3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/IGdldFBhcmVudE5vZGUoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHdoaWxlIChpc0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlSXNDb250YWluaW5nID0gaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpO1xuICAgIGlmICghY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGREcm9wQ3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiAhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgOiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycgJiYgISFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSAmJiBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5jbHVkZXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gaXNUb3BMYXllcihlbGVtZW50KSA/IFtdIDogZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAvLyBJZiB0aGUgPGJvZHk+IHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSBsZWZ0IChlLmcuIFJUTCBzeXN0ZW1zKS4gVXNlXG4gICAgICAvLyBGaXJlZm94IHdpdGggbGF5b3V0LnNjcm9sbGJhci5zaWRlID0gMyBpbiBhYm91dDpjb25maWcgdG8gdGVzdCB0aGlzLlxuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwpIDogY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCB4ID0gcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLnggLSBodG1sT2Zmc2V0Lng7XG4gIGNvbnN0IHkgPSByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnkgLSBodG1sT2Zmc2V0Lnk7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNTdGF0aWNQb3NpdGlvbmVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIGxldCByYXdPZmZzZXRQYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblxuICAvLyBGaXJlZm94IHJldHVybnMgdGhlIDxodG1sPiBlbGVtZW50IGFzIHRoZSBvZmZzZXRQYXJlbnQgaWYgaXQncyBub24tc3RhdGljLFxuICAvLyB3aGlsZSBDaHJvbWUgYW5kIFNhZmFyaSByZXR1cm4gdGhlIDxib2R5PiBlbGVtZW50LiBUaGUgPGJvZHk+IGVsZW1lbnQgbXVzdFxuICAvLyBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvcnJlY3QgY2FsY3VsYXRpb25zIGV2ZW4gaWYgdGhlIDxodG1sPiBlbGVtZW50IGlzXG4gIC8vIG5vbi1zdGF0aWMuXG4gIGlmIChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgPT09IHJhd09mZnNldFBhcmVudCkge1xuICAgIHJhd09mZnNldFBhcmVudCA9IHJhd09mZnNldFBhcmVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cbiAgcmV0dXJuIHJhd09mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmIChpc1RvcExheWVyKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBsZXQgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgICB3aGlsZSAoc3ZnT2Zmc2V0UGFyZW50ICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgaWYgKGlzRWxlbWVudChzdmdPZmZzZXRQYXJlbnQpICYmICFpc1N0YXRpY1Bvc2l0aW9uZWQoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgICByZXR1cm4gc3ZnT2Zmc2V0UGFyZW50O1xuICAgICAgfVxuICAgICAgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShzdmdPZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGxldCBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKTtcbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQsIHBvbHlmaWxsKTtcbiAgfVxuICBpZiAob2Zmc2V0UGFyZW50ICYmIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW47XG59XG5cbmNvbnN0IGdldEVsZW1lbnRSZWN0cyA9IGFzeW5jIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICBjb25zdCBnZXREaW1lbnNpb25zRm4gPSB0aGlzLmdldERpbWVuc2lvbnM7XG4gIGNvbnN0IGZsb2F0aW5nRGltZW5zaW9ucyA9IGF3YWl0IGdldERpbWVuc2lvbnNGbihkYXRhLmZsb2F0aW5nKTtcbiAgcmV0dXJuIHtcbiAgICByZWZlcmVuY2U6IGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGRhdGEucmVmZXJlbmNlLCBhd2FpdCBnZXRPZmZzZXRQYXJlbnRGbihkYXRhLmZsb2F0aW5nKSwgZGF0YS5zdHJhdGVneSksXG4gICAgZmxvYXRpbmc6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IGZsb2F0aW5nRGltZW5zaW9ucy53aWR0aCxcbiAgICAgIGhlaWdodDogZmxvYXRpbmdEaW1lbnNpb25zLmhlaWdodFxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUlRMKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlyZWN0aW9uID09PSAncnRsJztcbn1cblxuY29uc3QgcGxhdGZvcm0gPSB7XG4gIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0LFxuICBnZXREb2N1bWVudEVsZW1lbnQsXG4gIGdldENsaXBwaW5nUmVjdCxcbiAgZ2V0T2Zmc2V0UGFyZW50LFxuICBnZXRFbGVtZW50UmVjdHMsXG4gIGdldENsaWVudFJlY3RzLFxuICBnZXREaW1lbnNpb25zLFxuICBnZXRTY2FsZSxcbiAgaXNFbGVtZW50LFxuICBpc1JUTFxufTtcblxuZnVuY3Rpb24gcmVjdHNBcmVFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhLnggPT09IGIueCAmJiBhLnkgPT09IGIueSAmJiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cblxuLy8gaHR0cHM6Ly9zYW10aG9yLmF1LzIwMjEvb2JzZXJ2aW5nLWRvbS9cbmZ1bmN0aW9uIG9ic2VydmVNb3ZlKGVsZW1lbnQsIG9uTW92ZSkge1xuICBsZXQgaW8gPSBudWxsO1xuICBsZXQgdGltZW91dElkO1xuICBjb25zdCByb290ID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHZhciBfaW87XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgKF9pbyA9IGlvKSA9PSBudWxsIHx8IF9pby5kaXNjb25uZWN0KCk7XG4gICAgaW8gPSBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHJlZnJlc2goc2tpcCwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHNraXAgPT09IHZvaWQgMCkge1xuICAgICAgc2tpcCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICAgIHRocmVzaG9sZCA9IDE7XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgICBjb25zdCBlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBlbGVtZW50UmVjdEZvclJvb3RNYXJnaW47XG4gICAgaWYgKCFza2lwKSB7XG4gICAgICBvbk1vdmUoKTtcbiAgICB9XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2V0VG9wID0gZmxvb3IodG9wKTtcbiAgICBjb25zdCBpbnNldFJpZ2h0ID0gZmxvb3Iocm9vdC5jbGllbnRXaWR0aCAtIChsZWZ0ICsgd2lkdGgpKTtcbiAgICBjb25zdCBpbnNldEJvdHRvbSA9IGZsb29yKHJvb3QuY2xpZW50SGVpZ2h0IC0gKHRvcCArIGhlaWdodCkpO1xuICAgIGNvbnN0IGluc2V0TGVmdCA9IGZsb29yKGxlZnQpO1xuICAgIGNvbnN0IHJvb3RNYXJnaW4gPSAtaW5zZXRUb3AgKyBcInB4IFwiICsgLWluc2V0UmlnaHQgKyBcInB4IFwiICsgLWluc2V0Qm90dG9tICsgXCJweCBcIiArIC1pbnNldExlZnQgKyBcInB4XCI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGQ6IG1heCgwLCBtaW4oMSwgdGhyZXNob2xkKSkgfHwgMVxuICAgIH07XG4gICAgbGV0IGlzRmlyc3RVcGRhdGUgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGhhbmRsZU9ic2VydmUoZW50cmllcykge1xuICAgICAgY29uc3QgcmF0aW8gPSBlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvO1xuICAgICAgaWYgKHJhdGlvICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBjbGlwcGVkLCB0aGUgcmF0aW8gaXMgMC4gVGhyb3R0bGUgdGhlIHJlZnJlc2hcbiAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgdXBkYXRlcy5cbiAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2goZmFsc2UsIDFlLTcpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnJlc2goZmFsc2UsIHJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJhdGlvID09PSAxICYmICFyZWN0c0FyZUVxdWFsKGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkpIHtcbiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZSByYXRpbyBpcyByZXBvcnRlZCBhcyAxLCB0aGVcbiAgICAgICAgLy8gZWxlbWVudCBpcyBub3QgYWN0dWFsbHkgZnVsbHkgd2l0aGluIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlcidzIHJvb3RcbiAgICAgICAgLy8gYXJlYSBhbnltb3JlLiBUaGlzIGNhbiBoYXBwZW4gdW5kZXIgcGVyZm9ybWFuY2UgY29uc3RyYWludHMuIFRoaXMgbWF5XG4gICAgICAgIC8vIGJlIGEgYnVnIGluIHRoZSBicm93c2VyJ3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24uIFRvXG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIHRoaXMsIHdlIGNvbXBhcmUgdGhlIGVsZW1lbnQncyBib3VuZGluZyByZWN0IG5vdyB3aXRoXG4gICAgICAgIC8vIHdoYXQgaXQgd2FzIGF0IHRoZSB0aW1lIHdlIGNyZWF0ZWQgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiBJZiB0aGV5XG4gICAgICAgIC8vIGFyZSBub3QgZXF1YWwgdGhlbiB0aGUgZWxlbWVudCBtb3ZlZCwgc28gd2UgcmVmcmVzaC5cbiAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgfVxuICAgICAgaXNGaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgYSBgZG9jdW1lbnRgIGFzIHRoZSByb290IGFuZCB3aWxsIHRocm93IGFuXG4gICAgLy8gZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gSGFuZGxlIDxpZnJhbWU+c1xuICAgICAgICByb290OiByb290Lm93bmVyRG9jdW1lbnRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgIXJlY3RzQXJlRXF1YWwocHJldlJlZlJlY3QsIG5leHRSZWZSZWN0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuY29uc3QgZGV0ZWN0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyQxO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBvZmZzZXQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwiaW1wb3J0IHsgYXJyb3cgYXMgYXJyb3ckMSwgY29tcHV0ZVBvc2l0aW9uIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5leHBvcnQgeyBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgaXNOb2RlLCBnZXROb2RlTmFtZSB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuaW1wb3J0IHsgdW5yZWYsIGNvbXB1dGVkLCByZWYsIHNoYWxsb3dSZWYsIHdhdGNoLCBnZXRDdXJyZW50U2NvcGUsIG9uU2NvcGVEaXNwb3NlLCBzaGFsbG93UmVhZG9ubHkgfSBmcm9tICd2dWUtZGVtaSc7XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50UHVibGljSW5zdGFuY2UodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgIT0gbnVsbCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JyAmJiAnJGVsJyBpbiB0YXJnZXQ7XG59XG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KHRhcmdldCkge1xuICBpZiAoaXNDb21wb25lbnRQdWJsaWNJbnN0YW5jZSh0YXJnZXQpKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRhcmdldC4kZWw7XG4gICAgcmV0dXJuIGlzTm9kZShlbGVtZW50KSAmJiBnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJyNjb21tZW50JyA/IG51bGwgOiBlbGVtZW50O1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHRvVmFsdWUoc291cmNlKSB7XG4gIHJldHVybiB0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nID8gc291cmNlKCkgOiB1bnJlZihzb3VyY2UpO1xufVxuXG4vKipcbiAqIFBvc2l0aW9ucyBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHN1Y2ggdGhhdCBpdCBpcyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgYXJyb3cgb3B0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5mdW5jdGlvbiBhcnJvdyhvcHRpb25zKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2Fycm93JyxcbiAgICBvcHRpb25zLFxuICAgIGZuKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB1bndyYXBFbGVtZW50KHRvVmFsdWUob3B0aW9ucy5lbGVtZW50KSk7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJvdyQxKHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcGFkZGluZzogb3B0aW9ucy5wYWRkaW5nXG4gICAgICB9KS5mbihhcmdzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERQUihlbGVtZW50KSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHJldHVybiB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xufVxuXG5mdW5jdGlvbiByb3VuZEJ5RFBSKGVsZW1lbnQsIHZhbHVlKSB7XG4gIGNvbnN0IGRwciA9IGdldERQUihlbGVtZW50KTtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnQgbmV4dCB0byBhIHJlZmVyZW5jZSBlbGVtZW50IHdoZW4gaXQgaXMgZ2l2ZW4gYSBjZXJ0YWluIENTUyBwb3NpdGlvbmluZyBzdHJhdGVneS5cbiAqIEBwYXJhbSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSB0ZW1wbGF0ZSByZWYuXG4gKiBAcGFyYW0gZmxvYXRpbmcgVGhlIGZsb2F0aW5nIHRlbXBsYXRlIHJlZi5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBmbG9hdGluZyBvcHRpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3Z1ZVxuICovXG5mdW5jdGlvbiB1c2VGbG9hdGluZyhyZWZlcmVuY2UsIGZsb2F0aW5nLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qgd2hpbGVFbGVtZW50c01vdW50ZWRPcHRpb24gPSBvcHRpb25zLndoaWxlRWxlbWVudHNNb3VudGVkO1xuICBjb25zdCBvcGVuT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfdG9WYWx1ZTtcbiAgICByZXR1cm4gKF90b1ZhbHVlID0gdG9WYWx1ZShvcHRpb25zLm9wZW4pKSAhPSBudWxsID8gX3RvVmFsdWUgOiB0cnVlO1xuICB9KTtcbiAgY29uc3QgbWlkZGxld2FyZU9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRvVmFsdWUob3B0aW9ucy5taWRkbGV3YXJlKSk7XG4gIGNvbnN0IHBsYWNlbWVudE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX3RvVmFsdWUyO1xuICAgIHJldHVybiAoX3RvVmFsdWUyID0gdG9WYWx1ZShvcHRpb25zLnBsYWNlbWVudCkpICE9IG51bGwgPyBfdG9WYWx1ZTIgOiAnYm90dG9tJztcbiAgfSk7XG4gIGNvbnN0IHN0cmF0ZWd5T3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfdG9WYWx1ZTM7XG4gICAgcmV0dXJuIChfdG9WYWx1ZTMgPSB0b1ZhbHVlKG9wdGlvbnMuc3RyYXRlZ3kpKSAhPSBudWxsID8gX3RvVmFsdWUzIDogJ2Fic29sdXRlJztcbiAgfSk7XG4gIGNvbnN0IHRyYW5zZm9ybU9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX3RvVmFsdWU0O1xuICAgIHJldHVybiAoX3RvVmFsdWU0ID0gdG9WYWx1ZShvcHRpb25zLnRyYW5zZm9ybSkpICE9IG51bGwgPyBfdG9WYWx1ZTQgOiB0cnVlO1xuICB9KTtcbiAgY29uc3QgcmVmZXJlbmNlRWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IHVud3JhcEVsZW1lbnQocmVmZXJlbmNlLnZhbHVlKSk7XG4gIGNvbnN0IGZsb2F0aW5nRWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IHVud3JhcEVsZW1lbnQoZmxvYXRpbmcudmFsdWUpKTtcbiAgY29uc3QgeCA9IHJlZigwKTtcbiAgY29uc3QgeSA9IHJlZigwKTtcbiAgY29uc3Qgc3RyYXRlZ3kgPSByZWYoc3RyYXRlZ3lPcHRpb24udmFsdWUpO1xuICBjb25zdCBwbGFjZW1lbnQgPSByZWYocGxhY2VtZW50T3B0aW9uLnZhbHVlKTtcbiAgY29uc3QgbWlkZGxld2FyZURhdGEgPSBzaGFsbG93UmVmKHt9KTtcbiAgY29uc3QgaXNQb3NpdGlvbmVkID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgZmxvYXRpbmdTdHlsZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBzdHJhdGVneS52YWx1ZSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnXG4gICAgfTtcbiAgICBpZiAoIWZsb2F0aW5nRWxlbWVudC52YWx1ZSkge1xuICAgICAgcmV0dXJuIGluaXRpYWxTdHlsZXM7XG4gICAgfVxuICAgIGNvbnN0IHhWYWwgPSByb3VuZEJ5RFBSKGZsb2F0aW5nRWxlbWVudC52YWx1ZSwgeC52YWx1ZSk7XG4gICAgY29uc3QgeVZhbCA9IHJvdW5kQnlEUFIoZmxvYXRpbmdFbGVtZW50LnZhbHVlLCB5LnZhbHVlKTtcbiAgICBpZiAodHJhbnNmb3JtT3B0aW9uLnZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbml0aWFsU3R5bGVzLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKFwiICsgeFZhbCArIFwicHgsIFwiICsgeVZhbCArIFwicHgpXCIsXG4gICAgICAgIC4uLihnZXREUFIoZmxvYXRpbmdFbGVtZW50LnZhbHVlKSA+PSAxLjUgJiYge1xuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nXG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHN0cmF0ZWd5LnZhbHVlLFxuICAgICAgbGVmdDogeFZhbCArIFwicHhcIixcbiAgICAgIHRvcDogeVZhbCArIFwicHhcIlxuICAgIH07XG4gIH0pO1xuICBsZXQgd2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwO1xuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgaWYgKHJlZmVyZW5jZUVsZW1lbnQudmFsdWUgPT0gbnVsbCB8fCBmbG9hdGluZ0VsZW1lbnQudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVuID0gb3Blbk9wdGlvbi52YWx1ZTtcbiAgICBjb21wdXRlUG9zaXRpb24ocmVmZXJlbmNlRWxlbWVudC52YWx1ZSwgZmxvYXRpbmdFbGVtZW50LnZhbHVlLCB7XG4gICAgICBtaWRkbGV3YXJlOiBtaWRkbGV3YXJlT3B0aW9uLnZhbHVlLFxuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRPcHRpb24udmFsdWUsXG4gICAgICBzdHJhdGVneTogc3RyYXRlZ3lPcHRpb24udmFsdWVcbiAgICB9KS50aGVuKHBvc2l0aW9uID0+IHtcbiAgICAgIHgudmFsdWUgPSBwb3NpdGlvbi54O1xuICAgICAgeS52YWx1ZSA9IHBvc2l0aW9uLnk7XG4gICAgICBzdHJhdGVneS52YWx1ZSA9IHBvc2l0aW9uLnN0cmF0ZWd5O1xuICAgICAgcGxhY2VtZW50LnZhbHVlID0gcG9zaXRpb24ucGxhY2VtZW50O1xuICAgICAgbWlkZGxld2FyZURhdGEudmFsdWUgPSBwb3NpdGlvbi5taWRkbGV3YXJlRGF0YTtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGZsb2F0aW5nIGVsZW1lbnQncyBwb3NpdGlvbiBtYXkgYmUgcmVjb21wdXRlZCB3aGlsZSBpdCdzIGNsb3NlZFxuICAgICAgICogYnV0IHN0aWxsIG1vdW50ZWQgKHN1Y2ggYXMgd2hlbiB0cmFuc2l0aW9uaW5nIG91dCkuIFRvIGVuc3VyZVxuICAgICAgICogYGlzUG9zaXRpb25lZGAgd2lsbCBiZSBgZmFsc2VgIGluaXRpYWxseSBvbiB0aGUgbmV4dCBvcGVuLCBhdm9pZFxuICAgICAgICogc2V0dGluZyBpdCB0byBgdHJ1ZWAgd2hlbiBgb3BlbiA9PT0gZmFsc2VgIChtdXN0IGJlIHNwZWNpZmllZCkuXG4gICAgICAgKi9cbiAgICAgIGlzUG9zaXRpb25lZC52YWx1ZSA9IG9wZW4gIT09IGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgaWYgKHR5cGVvZiB3aGlsZUVsZW1lbnRzTW91bnRlZENsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCgpO1xuICAgICAgd2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhdHRhY2goKSB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmICh3aGlsZUVsZW1lbnRzTW91bnRlZE9wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlZmVyZW5jZUVsZW1lbnQudmFsdWUgIT0gbnVsbCAmJiBmbG9hdGluZ0VsZW1lbnQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgd2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwID0gd2hpbGVFbGVtZW50c01vdW50ZWRPcHRpb24ocmVmZXJlbmNlRWxlbWVudC52YWx1ZSwgZmxvYXRpbmdFbGVtZW50LnZhbHVlLCB1cGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBpZiAoIW9wZW5PcHRpb24udmFsdWUpIHtcbiAgICAgIGlzUG9zaXRpb25lZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICB3YXRjaChbbWlkZGxld2FyZU9wdGlvbiwgcGxhY2VtZW50T3B0aW9uLCBzdHJhdGVneU9wdGlvbiwgb3Blbk9wdGlvbl0sIHVwZGF0ZSwge1xuICAgIGZsdXNoOiAnc3luYydcbiAgfSk7XG4gIHdhdGNoKFtyZWZlcmVuY2VFbGVtZW50LCBmbG9hdGluZ0VsZW1lbnRdLCBhdHRhY2gsIHtcbiAgICBmbHVzaDogJ3N5bmMnXG4gIH0pO1xuICB3YXRjaChvcGVuT3B0aW9uLCByZXNldCwge1xuICAgIGZsdXNoOiAnc3luYydcbiAgfSk7XG4gIGlmIChnZXRDdXJyZW50U2NvcGUoKSkge1xuICAgIG9uU2NvcGVEaXNwb3NlKGNsZWFudXApO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogc2hhbGxvd1JlYWRvbmx5KHgpLFxuICAgIHk6IHNoYWxsb3dSZWFkb25seSh5KSxcbiAgICBzdHJhdGVneTogc2hhbGxvd1JlYWRvbmx5KHN0cmF0ZWd5KSxcbiAgICBwbGFjZW1lbnQ6IHNoYWxsb3dSZWFkb25seShwbGFjZW1lbnQpLFxuICAgIG1pZGRsZXdhcmVEYXRhOiBzaGFsbG93UmVhZG9ubHkobWlkZGxld2FyZURhdGEpLFxuICAgIGlzUG9zaXRpb25lZDogc2hhbGxvd1JlYWRvbmx5KGlzUG9zaXRpb25lZCksXG4gICAgZmxvYXRpbmdTdHlsZXMsXG4gICAgdXBkYXRlXG4gIH07XG59XG5cbmV4cG9ydCB7IGFycm93LCB1c2VGbG9hdGluZyB9O1xuIiwiZXhwb3J0IGNvbnN0IGlzQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBlbGVtZW50czogSFRNTEVsZW1lbnQgfCBIVE1MRWxlbWVudFtdKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHRhcmdldHMgPSBBcnJheS5pc0FycmF5KGVsZW1lbnRzKSA/IGVsZW1lbnRzIDogW2VsZW1lbnRzXTtcbiAgcmV0dXJuICF0YXJnZXRzLnNvbWUoKGVsKSA9PiBlbC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpO1xufTtcbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IGF1dG9QbGFjZW1lbnQsIGF1dG9VcGRhdGUsIG9mZnNldCBhcyBvZmZzZXRNaWRkbGV3YXJlLCBzaGlmdCwgdXNlRmxvYXRpbmcgfSBmcm9tICdAZmxvYXRpbmctdWkvdnVlJztcbiAgaW1wb3J0IHsgY29tcHV0ZWQsIG9uQmVmb3JlTW91bnQsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIHJlZiwgd2F0Y2gsIHdhdGNoRWZmZWN0IH0gZnJvbSAndnVlJztcblxuICBpbXBvcnQgeyBDU1MgfSBmcm9tICdAL3R5cGVzL1N0eWxlcyc7XG4gIGltcG9ydCB7IGlzQ2xpY2tPdXRzaWRlIH0gZnJvbSAnQC91dGlsaXRpZXMvZXZlbnQnO1xuICBpbXBvcnQgeyBUT1BfTEFZRVJfSUQsIGluaXRGYXV4VG9wTGF5ZXIgfSBmcm9tICdAL3V0aWxpdGllcy92aWV3cG9ydCc7XG5cbiAgaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgYW5jaG9ySWQ6IHN0cmluZztcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBvZmZzZXQ6IDE2LFxuICB9KTtcblxuICBjb25zdCBhbmNob3I6IFJlZjxIVE1MRWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuICBjb25zdCBmbG9hdGluZzogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG4gIGNvbnN0IHJvb3Q6IFJlZjxIVE1MRWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuICBjb25zdCBpc0hvdmVyZWQgPSByZWYoZmFsc2UpO1xuICBjb25zdCBpc1RvZ2dsZWRPcGVuID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgbWlkZGxld2FyZSA9IHJlZihbYXV0b1BsYWNlbWVudCgpLCBvZmZzZXRNaWRkbGV3YXJlKHsgbWFpbkF4aXM6IHByb3BzLm9mZnNldCB9KSwgc2hpZnQoeyBwYWRkaW5nOiAxNiB9KV0pO1xuXG4gIGNvbnN0IGlzU2hvd1BvcG92ZXIgPSBjb21wdXRlZCgoKSA9PiBpc0hvdmVyZWQudmFsdWUgfHwgaXNUb2dnbGVkT3Blbi52YWx1ZSk7XG5cbiAgY29uc3QgeyBmbG9hdGluZ1N0eWxlcyB9ID0gdXNlRmxvYXRpbmcoYW5jaG9yLCBmbG9hdGluZywge1xuICAgIG1pZGRsZXdhcmUsXG4gICAgc3RyYXRlZ3k6ICdmaXhlZCcsXG4gICAgd2hpbGVFbGVtZW50c01vdW50ZWQ6IGF1dG9VcGRhdGUsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghYW5jaG9yLnZhbHVlIHx8ICFmbG9hdGluZy52YWx1ZSkgcmV0dXJuO1xuICAgIGlmIChpc0NsaWNrT3V0c2lkZShlLCBbYW5jaG9yLnZhbHVlLCBmbG9hdGluZy52YWx1ZV0pKSB7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgaXNUb2dnbGVkT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyID0gKCkgPT4ge1xuICAgIGlzSG92ZXJlZC52YWx1ZSA9IHRydWU7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgaXNIb3ZlcmVkLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrID0gKCkgPT4ge1xuICAgIGlzVG9nZ2xlZE9wZW4udmFsdWUgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGFkZExpc3RlbmVyc1RvQW5jaG9yRWxlbWVudCA9ICgpID0+IHtcbiAgICBpZiAoIWFuY2hvci52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgYW5jaG9yLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZU92ZXIpO1xuICAgIGFuY2hvci52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUpO1xuICAgIGFuY2hvci52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUFuY2hvckVsZW1lbnRDbGljayk7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFhbmNob3IudmFsdWUpIHJldHVybiBudWxsO1xuICAgIGFuY2hvci52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyKTtcbiAgICBhbmNob3IudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZUxlYXZlKTtcbiAgICBhbmNob3IudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2spO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93biA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgaXNUb2dnbGVkT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhZGRPcGVuTGlzdGVuZXJzVG9Sb290ID0gKCkgPT4ge1xuICAgIGlmICghcm9vdC52YWx1ZSkgcmV0dXJuO1xuICAgIHJvb3QudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUNsaWNrLCB0cnVlKTtcbiAgICByb290LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24pO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU9wZW5MaXN0ZW5lcnNGcm9tUm9vdCA9ICgpID0+IHtcbiAgICBpZiAoIXJvb3QudmFsdWUpIHJldHVybjtcbiAgICByb290LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljaywgdHJ1ZSk7XG4gICAgcm9vdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlLZXlkb3duKTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVBbmNob3JFbGVtZW50ID0gKCkgPT4ge1xuICAgIGFuY2hvci52YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmFuY2hvcklkKTtcbiAgfTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBpc1RvZ2dsZWRPcGVuLnZhbHVlLFxuICAgIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIGFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZU9wZW5MaXN0ZW5lcnNGcm9tUm9vdCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICB3YXRjaChcbiAgICAoKSA9PiBwcm9wcy5hbmNob3JJZCxcbiAgICAoKSA9PiB7XG4gICAgICByZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCgpO1xuICAgICAgdXBkYXRlQW5jaG9yRWxlbWVudCgpO1xuICAgICAgYWRkTGlzdGVuZXJzVG9BbmNob3JFbGVtZW50KCk7XG4gICAgfVxuICApO1xuXG4gIHdhdGNoRWZmZWN0KCgpID0+IHtcbiAgICBtaWRkbGV3YXJlLnZhbHVlID0gW2F1dG9QbGFjZW1lbnQoKSwgb2Zmc2V0TWlkZGxld2FyZSh7IG1haW5BeGlzOiBwcm9wcy5vZmZzZXQgfSksIHNoaWZ0KHsgcGFkZGluZzogMTYgfSldO1xuICB9KTtcblxuICBvbkJlZm9yZU1vdW50KCgpID0+IHtcbiAgICBpbml0RmF1eFRvcExheWVyKCk7XG4gIH0pO1xuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgdXBkYXRlQW5jaG9yRWxlbWVudCgpO1xuICAgIHJvb3QudmFsdWUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgYWRkTGlzdGVuZXJzVG9BbmNob3JFbGVtZW50KCk7XG4gIH0pO1xuXG4gIG9uVW5tb3VudGVkKCgpID0+IHtcbiAgICByZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCgpO1xuICB9KTtcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxUZWxlcG9ydCA6dG89XCJgIyR7VE9QX0xBWUVSX0lEfWBcIj5cbiAgICA8VHJhbnNpdGlvbj5cbiAgICAgIDxkaXZcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICd0aWRlLXBvcG92ZXInLFxuICAgICAgICAgIENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5DT0xPUi5MT1csXG4gICAgICAgICAgQ1NTLkJPUkRFUi5GVUxMLk9ORSxcbiAgICAgICAgICBDU1MuQk9SREVSLlJBRElVUy5IQUxGLFxuICAgICAgICAgIENTUy5GT05ULlJPTEUuQk9EWV8yLFxuICAgICAgICAgIENTUy5QQURESU5HLkZVTEwuT05FLFxuICAgICAgICAgIENTUy5TSEFET1cuQk9UVE9NLFxuICAgICAgICBdXCJcbiAgICAgICAgcmVmPVwiZmxvYXRpbmdcIlxuICAgICAgICA6c3R5bGU9XCJ7IC4uLmZsb2F0aW5nU3R5bGVzIH1cIlxuICAgICAgICB2LXNob3c9XCJpc1Nob3dQb3BvdmVyXCJcbiAgICAgID5cbiAgICAgICAgPHNsb3QgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvVHJhbnNpdGlvbj5cbiAgPC9UZWxlcG9ydD5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLXBvcG92ZXIge1xuICAgIG1heC13aWR0aDogMjU2cHg7XG4gIH1cbiAgLnYtZW50ZXItZnJvbSxcbiAgLnYtbGVhdmUtdG8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgLnYtZW50ZXItYWN0aXZlLFxuICAudi1sZWF2ZS1hY3RpdmUge1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgfVxuICAudi1lbnRlci10byxcbiAgLnYtbGVhdmUtZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XG4gIGltcG9ydCB7IG9uQmVmb3JlTW91bnQsIG9uTW91bnRlZCwgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbiAgaW1wb3J0IFRpZGVCdXR0b25JY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlQnV0dG9uSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgUFJJT1JJVFkgfSBmcm9tICdAL3R5cGVzL1ByaW9yaXR5JztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuICBpbXBvcnQgeyBUT1BfTEFZRVJfSUQsIGluaXRGYXV4VG9wTGF5ZXIsIHNldFNjcm9sbExvY2sgfSBmcm9tICdAL3V0aWxpdGllcy92aWV3cG9ydCc7XG5cbiAgaW1wb3J0IFRpZGVEaXZpZGVyIGZyb20gJy4vVGlkZURpdmlkZXIudnVlJztcblxuICBpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5cbiAgdHlwZSBQcm9wcyA9IHtcbiAgICBpc09wZW46IGJvb2xlYW47XG4gICAgaXNCYWNrQnV0dG9uPzogYm9vbGVhbjtcbiAgfTtcbiAgY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczxQcm9wcz4oKTtcblxuICB0eXBlIEVtaXRzID0ge1xuICAgIChlOiAnYmFjaycpOiB2b2lkO1xuICAgIChlOiAnY2xvc2UnKTogdm9pZDtcbiAgfTtcblxuICBjb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8RW1pdHM+KCk7XG5cbiAgY29uc3QgZGlhbG9nRWxlbWVudDogUmVmPEhUTUxEaWFsb2dFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG5cbiAgY29uc3QgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4gPSAoKSA9PiB7XG4gICAgZGlhbG9nRWxlbWVudC52YWx1ZT8uc2hvd01vZGFsKCk7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlID0gKCkgPT4ge1xuICAgIGRpYWxvZ0VsZW1lbnQudmFsdWU/LmNsb3NlKCk7XG4gIH07XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gcHJvcHMuaXNPcGVuLFxuICAgIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCFkaWFsb2dFbGVtZW50LnZhbHVlKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSgpO1xuICAgICAgfVxuICAgICAgc2V0U2Nyb2xsTG9jayhuZXdWYWx1ZSk7XG4gICAgfVxuICApO1xuXG4gIG9uQmVmb3JlTW91bnQoKCkgPT4ge1xuICAgIGluaXRGYXV4VG9wTGF5ZXIoKTtcbiAgfSk7XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICBpZiAocHJvcHMuaXNPcGVuKSB7XG4gICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbigpO1xuICAgIH1cbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8VGVsZXBvcnQgOnRvPVwiYCMke1RPUF9MQVlFUl9JRH1gXCI+XG4gICAgPGRpYWxvZ1xuICAgICAgOmNsYXNzPVwiWyd0aWRlLXNoZWV0JywgQ1NTLkJHLklOSVRJQUwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLldJRFRILkZVTEwsIENTUy5PVkVSRkxPVy5YWS5ISURERU5dXCJcbiAgICAgIHJlZj1cImRpYWxvZ0VsZW1lbnRcIlxuICAgICAgQGNsaWNrLnNlbGY9XCJlbWl0KCdjbG9zZScpXCJcbiAgICAgIEBjbG9zZT1cImVtaXQoJ2Nsb3NlJylcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICd0aWRlLXNoZWV0LWJvZHknLFxuICAgICAgICAgIENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgICBDU1MuRkxFWC5ESVJFQ1RJT04uQ09MVU1OLFxuICAgICAgICAgIENTUy5IRUlHSFQuRlVMTCxcbiAgICAgICAgICBDU1MuT1ZFUkZMT1cuWFkuSElEREVOLFxuICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICBdXCJcbiAgICAgID5cbiAgICAgICAgPGhlYWRlciA6Y2xhc3M9XCJbQ1NTLkRJU1BMQVkuRkxFWCwgQ1NTLlBBRERJTkcuWC5PTkUsIENTUy5QQURESU5HLlRPUC5PTkVdXCI+XG4gICAgICAgICAgPFRpZGVCdXR0b25JY29uXG4gICAgICAgICAgICA6Y2xhc3M9XCJbQ1NTLkZMRVguR1JPVy5PRkYsIENTUy5GTEVYLlNIUklOSy5PRkZdXCJcbiAgICAgICAgICAgIDppY29uPVwiSUNPTi5DSEVWUk9OX0xFRlRcIlxuICAgICAgICAgICAgOnByaW9yaXR5PVwiUFJJT1JJVFkuUVVBVEVSTkFSWVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJlbWl0KCdiYWNrJylcIlxuICAgICAgICAgICAgdi1pZj1cImlzQmFja0J1dHRvblwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5GTEVYLkdST1cuT0ZGLCBDU1MuRkxFWC5TSFJJTksuT0ZGLCBDU1MuTUFSR0lOLkxFRlQuQVVUT11cIlxuICAgICAgICAgICAgOmljb249XCJJQ09OLkNMT1NFXCJcbiAgICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICAgICAgQGNsaWNrPVwidHJpZ2dlck5hdGl2ZURpYWxvZ0Nsb3NlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICA8VGlkZURpdmlkZXIgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgJ3RpZGUtc2hlZXQtY29udGVudCcsXG4gICAgICAgICAgICBDU1MuRElTUExBWS5HUklELFxuICAgICAgICAgICAgQ1NTLk9WRVJGTE9XLlkuQVVUTyxcbiAgICAgICAgICAgIENTUy5PVkVSRkxPVy5YLkhJRERFTixcbiAgICAgICAgICAgIENTUy5XSURUSC5GVUxMLFxuICAgICAgICAgICAgQ1NTLlBBRERJTkcuQk9UVE9NLk9ORSxcbiAgICAgICAgICBdXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzbG90IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaWFsb2c+XG4gIDwvVGVsZXBvcnQ+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1zaGVldCB7XG4gICAgLS1zaGVldC1wYWRkaW5nLXg6IHZhcigtLXRpZGUtc3BhY2luZy0xKTtcbiAgICBtYXgtd2lkdGg6IHVuc2V0O1xuICAgIG1heC1oZWlnaHQ6IHVuc2V0O1xuICAgIGp1c3RpZnktaXRlbXM6IHJpZ2h0O1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRpZGUtYW5pbWF0ZSkgYWxsb3ctZGlzY3JldGU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICB9XG5cbiAgLnRpZGUtc2hlZXRbb3Blbl0ge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAlKTtcbiAgfVxuXG4gIC50aWRlLXNoZWV0OjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRpZGUtYW5pbWF0ZSkgYWxsb3ctZGlzY3JldGU7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCk7XG4gIH1cblxuICAudGlkZS1zaGVldFtvcGVuXTo6YmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRpZGUtdHJhbnNwYXJlbnQtNDAwKTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IHZhcigtLXRpZGUtYmctYmx1cik7XG4gIH1cblxuICAudGlkZS1zaGVldC1ib2R5IHtcbiAgICBtYXgtd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gdmFyKC0tdGlkZS1zcGFjaW5nLTIpKSwgMzExcHgpO1xuICB9XG5cbiAgLnRpZGUtc2hlZXQtY29udGVudCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1zaGVldC1wYWRkaW5nLXgpIDFmciB2YXIoLS1zaGVldC1wYWRkaW5nLXgpO1xuICB9XG5cbiAgOndoZXJlKC50aWRlLXNoZWV0LWNvbnRlbnQpOmRlZXAoPiA6d2hlcmUoKikpIHtcbiAgICBncmlkLWNvbHVtbjogMjtcbiAgfVxuXG4gIEBzdGFydGluZy1zdHlsZSB7XG4gICAgLnRpZGUtc2hlZXRbb3Blbl0ge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICB9XG5cbiAgICAudGlkZS1zaGVldFtvcGVuXTo6YmFja2Ryb3Age1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IHZhcigtLXRpZGUtYmctYmx1cik7XG4gICAgfVxuICB9XG48L3N0eWxlPlxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cbiAgaW1wb3J0IFRpZGVJY29uIGZyb20gJ0AvY29tcG9uZW50cy9UaWRlSWNvbi52dWUnO1xuICBpbXBvcnQgeyBJQ09OIH0gZnJvbSAnQC90eXBlcy9JY29uJztcbiAgaW1wb3J0IHsgU0laRSB9IGZyb20gJ0AvdHlwZXMvU2l6ZSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcblxuICB0eXBlIFByb3BzID0ge1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIH07XG5cbiAgY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8UHJvcHM+KCksIHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgaXNBY3RpdmU6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWydjaGFuZ2UnXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgZW1pdCgnY2hhbmdlJyk7XG4gICAgfVxuICB9O1xuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGJ1dHRvblxuICAgIDpjbGFzcz1cIltcbiAgICAgICd0aWRlLXN3aXRjaCcsXG4gICAgICBwcm9wcy5pc0FjdGl2ZSA/ICdhY3RpdmUnIDogJycsXG4gICAgICBDU1MuRElTUExBWS5GTEVYLFxuICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICBDU1MuQk9SREVSLlJBRElVUy5GVUxMLFxuICAgICAgcHJvcHMuaXNBY3RpdmUgPyAnJyA6IENTUy5CT1JERVIuQ09MT1IuREVGQVVMVCxcbiAgICAgIENTUy5PVkVSRkxPVy5YWS5ISURERU4sXG4gICAgICBwcm9wcy5pc0FjdGl2ZSA/IENTUy5CRy5TRUNPTkRBUlkgOiBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgIF1cIlxuICAgIDpkaXNhYmxlZD1cInByb3BzLmRpc2FibGVkXCJcbiAgICBAY2xpY2s9XCJoYW5kbGVDbGlja1wiXG4gICAgYXJpYS1sYWJlbD1cIlN3aXRjaFwiXG4gID5cbiAgICA8ZGl2XG4gICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICd0aWRlLXN3aXRjaC1pbmRpY2F0b3InLFxuICAgICAgICBDU1MuUE9TSVRJT04uUkVMQVRJVkUsXG4gICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgIENTUy5BWElTMS5DRU5URVIsXG4gICAgICAgIENTUy5BWElTMi5DRU5URVIsXG4gICAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICAgIHByb3BzLmlzQWN0aXZlID8gQ1NTLkJHLlNVUkZBQ0UuREVGQVVMVCA6IENTUy5CRy5TRUNPTkRBUlksXG4gICAgICBdXCJcbiAgICA+XG4gICAgICA8VGlkZUljb25cbiAgICAgICAgOmljb249XCJJQ09OLkNIRUNLXCJcbiAgICAgICAgOnNpemU9XCJTSVpFLkxBUkdFXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvYnV0dG9uPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbiAgLnRpZGUtc3dpdGNoIHtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yO1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjMyO1xuICB9XG5cbiAgLnRpZGUtc3dpdGNoLmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10aWRlLXNlY29uZGFyeSk7XG4gIH1cblxuICAudGlkZS1zd2l0Y2guYWN0aXZlIC50aWRlLXN3aXRjaC1pbmRpY2F0b3Ige1xuICAgIGxlZnQ6IDM2cHg7XG4gIH1cblxuICAudGlkZS1zd2l0Y2gtaW5kaWNhdG9yIHtcbiAgICBsZWZ0OiA0cHg7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tdGlkZS1hbmltYXRlKTtcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0LCBib3JkZXItY29sb3IsIGJhY2tncm91bmQtY29sb3I7XG4gIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBmb3JtYXROdW1iZXIsIGZvcm1hdFBob25lLCBmb3JtYXRQcmljZSB9IGZyb20gJ0AvdXRpbGl0aWVzL2Zvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdHRlZCA9IHtcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfCBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgRk9STUFUID0ge1xuICBOVU1CRVI6IGZvcm1hdE51bWJlcixcbiAgUEhPTkU6IGZvcm1hdFBob25lLFxuICBQUklDRTogZm9ybWF0UHJpY2UsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRk9STUFUX1JFR0VYID0ge1xuICBhbHBoYTogL15bYS16QS1aXSskL2csXG4gIGFscGhhTnVtYmVyT3JFbXB0eTogL14kfF5bYS16MC05XSskL2ksXG4gIGFscGhhU3BhY2U6IC9eW2EtekEtWiBdKyQvZyxcbiAgZW1haWw6XG4gICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvLFxuICBudW1iZXJGb3JtYXR0ZWQ6IC9eJHwoPz0uKV5cXCQ/KChbMS05XVswLTldezAsMn0oLFswLTldezN9KSopfDApPyhcXC5bMC05XXsxLDJ9KT8kLyxcbiAgcGhvbmU6IC9eKD86XFxkezN9LVxcZHszfS1cXGR7NH18XFxkezF9LVxcZHszfS1cXGR7M30tXFxkezR9KT8kLyxcbiAgcHJpY2U6IC8oPz0uKV5cXCQ/KChbMS05XVswLTldezAsMn0oLFswLTldezN9KSopfDApPyhcXC5bMC05XXsxLDJ9KT8kLyxcbn07XG4iLCIvKipcbiAqIFRoZXNlIHNsaWRlcyBhcmUgdXNlZCBpbiBib3RoIHRoZSBpbmxpbmUgZGV0YWlsIHBhZ2UgcGhvdG8gc2xpZGVyXG4gKiBhbmQgdGhlIGZ1bGxzY3JlZW4gbWVkaWEgZ2FsbGVyeS5cbiAqL1xuXG5leHBvcnQgY29uc3QgTUVESUFfU0xJREVfVFlQRVMgPSB7XG4gIElNQUdFOiB7XG4gICAgRkxPT1JQTEFOOiAnZmxvb3JwbGFuJyxcbiAgICBJTUFHRTogJ2ltYWdlJyxcbiAgfSxcbiAgVklERU86ICd2aWRlbycsXG4gIFZSOiAndnInLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgTWVkaWFTbGlkZVR5cGUgPVxuICB8ICh0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0UpW2tleW9mIHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRV1cbiAgfCB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVklERU9cbiAgfCB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVlI7XG5cbmV4cG9ydCB0eXBlIEltYWdlU2xpZGVUeXBlID0gKHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRSlba2V5b2YgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFXTtcblxudHlwZSBJbWFnZVNsaWRlID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICB0eXBlOiBJbWFnZVNsaWRlVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFZpZGVvU2xpZGVUeXBlID0gdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZJREVPO1xuXG50eXBlIFZpZGVvU2xpZGUgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHR5cGU6IFZpZGVvU2xpZGVUeXBlO1xuICB2aWRlb1VybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVnJTbGlkZVR5cGUgPSB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVlI7XG5cbnR5cGUgVnJTbGlkZSA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZztcbiAgdHlwZTogVnJTbGlkZVR5cGU7XG4gIHZyVXJsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0aW5nTWVkaWEgPSBJbWFnZVNsaWRlIHwgVmlkZW9TbGlkZSB8IFZyU2xpZGU7XG4iLCJpbXBvcnQgeyBGT1JNQVRfUkVHRVggfSBmcm9tICdAL3R5cGVzL0Zvcm1hdHRlZCc7XG5pbXBvcnQgeyBjaGVja0Zvcm1hdCB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZhbGlkYXRpb24nO1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICBBTFBIQV9OVU1CRVJfRU1QVFk6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5hbHBoYU51bWJlck9yRW1wdHkpLFxuICBBTFBIQV9TUEFDRTogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLmFscGhhU3BhY2UpLFxuICBFTUFJTDogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLmVtYWlsKSxcbiAgTlVNQkVSOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVgubnVtYmVyRm9ybWF0dGVkKSxcbiAgUEhPTkU6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5waG9uZSksXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRXJyb3IgPSBzdHJpbmcgfCBib29sZWFuO1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblJlc3VsdCA9IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB2YWxpZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25MZW5ndGggPSB7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0b3IgPSAodmFsdWU6IHN0cmluZykgPT4gVmFsaWRhdGlvblJlc3VsdDtcbiJdLCJuYW1lcyI6WyJPUklFTlRBVElPTiIsIkNTUyIsInV0aWxpdGllcyIsImJyZWFrcG9pbnQiLCJ1dGlsaXR5IiwiUkVBTE0iLCJTSVpFIiwiU0laRV9CVVRUT04iLCJmb3JtYXROdW1iZXIiLCJpbnB1dCIsIm91dHB1dCIsImRpZ2l0cyIsImZvcm1hdFBhc2NhbENhc2UiLCJ3b3JkIiwiZm9ybWF0UGhvbmUiLCJmb3JtYXRQcmljZSIsImlubmVyU1ZHIiwicmVmIiwid2F0Y2giLCJwcm9wcyIsImlkIiwibmFtZSIsInByZWZpeCIsInJlYWxtRm9sZGVyIiwiY29tcG9uZW50IiwiZGVmaW5lQXN5bmNDb21wb25lbnQiLCJfX3ZhcmlhYmxlRHluYW1pY0ltcG9ydFJ1bnRpbWVIZWxwZXIiLCJtYXJrUmF3IiwiSUNPTiIsIklDT05fUkVBTE0iLCJoYW5kbGVUb2dnbGVDbGljayIsImVtaXQiLCJFTEVNRU5UIiwiRUxFTUVOVF9URVhUX0FTX0lDT04iLCJQUklPUklUWSIsIlRBUkdFVCIsIkFMRVJUIiwiQkFER0VfQ09MT1IiLCJCQURHRV9DT0xPUl9ERVRBSUxTIiwiQkFER0VfVFJVU1RFRCIsImhhbmRsZUNsaWNrIiwiaW5kZXgiLCJUWVBFX0NBUkQiLCJjb250YWluZXJSZWYiLCJzbGlkZU9ic2VydmVyIiwic2xvdE9ic2VydmVyIiwiY29udGVudFJpZ2h0RWRnZSIsImNvbnRlbnRXaWR0aCIsImN1cnJlbnRTbGlkZSIsImZyYW1lV2lkdGgiLCJoYXNPdmVyZmxvdyIsImlzRmlyc3RTbGlkZSIsImlzTGFzdFNsaWRlIiwibGFzdFBvc2l0aW9uIiwic2hvd0J1dHRvbnMiLCJ1cGRhdGVDb250YWluZXJCbGVlZCIsIm1lYXN1cmVDdXJyZW50U2xpZGUiLCJjb250YWluZXIiLCJzbGlkZU9mZnNldHMiLCJzbGlkZSIsInNjcm9sbExlZnQiLCJjbG9zZXN0U2xpZGVPZmZzZXQiLCJwcmV2IiwiY3VyciIsIm1lYXN1cmVEb20iLCJoYW5kbGVTY3JvbGwiLCJzY3JvbGxUb1NsaWRlIiwic2xpZGVJbmRleCIsInNob3dOZXh0U2xpZGUiLCJzaG93UHJldmlvdXNTbGlkZSIsIm9ic2VydmVTbGlkZXMiLCJvcHRpb25zIiwiZW50cmllcyIsInNsaWRlcyIsImVudHJ5IiwiX2EiLCJjaGlsZCIsIm9ic2VydmVTbG90Iiwib2JzZXJ2ZXJDYWxsYmFjayIsIm9uTW91bnRlZCIsIm9uVW5tb3VudGVkIiwiX2IiLCJvblVwZGF0ZWQiLCJPQkpFQ1RfRklUIiwiaW1hZ2VEZWZhdWx0IiwicGljdHVyZSIsImltZyIsIm9iamVjdEZpdENsYXNzTmFtZSIsImNvbXB1dGVkIiwic2V0SW1hZ2VGcm9tRGVmYXVsdCIsImN1cnJlbnRTcmMiLCJwaWN0dXJlU291cmNlIiwiaXNDaGVja2VkIiwiY2hlY2tlZCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJlcnJvck1lc3NhZ2VEZWZhdWx0Iiwibm9FcnJvciIsImNoZWNrRm9ybWF0IiwiZm9ybWF0IiwidmFsdWUiLCJyZXN1bHQiLCJnZXRFcnJvck1lc3NhZ2UiLCJlcnJvckZyb21Qcm9wcyIsImVycm9yRnJvbVJlZiIsImdldEZpZWxkSGFzRXJyb3IiLCJnZXRGaWVsZExlbmd0aElzVmFsaWQiLCJtYXhsZW5ndGgiLCJtaW5sZW5ndGgiLCJyZXF1aXJlZCIsImlzRW1wdHlBbmRVbnJlcXVpcmVkIiwiaXNUb29Mb25nIiwiaGFuZGxlRmllbGRWYWxpZGF0aW9uIiwiZXJyb3IiLCJ2YWxpZGF0b3JzIiwidmFsaWRhdGlvbiIsInZhbGlkYXRlUHJvcGVydHkiLCJsZW5ndGhWYWxpZGF0aW9uIiwidmFsaWRhdGVMZW5ndGgiLCJyZXNwb25zZSIsInZhbGlkYXRvciIsImhhc0ZvY3VzIiwiZXJyb3JNZXNzYWdlIiwiZm9ybWF0dGVkTGFiZWwiLCJoYXNFcnJvciIsImhhc01pbmlsYWJlbCIsImlzRW1wdHkiLCJleHBhbmRPcHRpb25zIiwiZXZlbnQiLCJoYW5kbGVGb2N1cyIsImhhbmRsZUZvY3VzT3V0IiwiX19leHBvc2UiLCJURVhUX0lOUFVUX1RZUEUiLCJzaG93UGFzc3dvcmQiLCJoYXNDbGVhciIsInR5cGUiLCJoYW5kbGVDbGVhciIsImhhbmRsZVZhbGlkYXRpb24iLCJoYW5kbGVJbnB1dCIsInVwZGF0ZVZhbHVlIiwiQlJFQUtQT0lOVCIsIk1FRElBIiwic2V0U2Nyb2xsTG9jayIsImlzTG9ja2VkIiwiYm9keSIsInNjcm9sbFkiLCJuZXh0VGljayIsInNhdmVkU2Nyb2xsWSIsIlRPUF9MQVlFUl9JRCIsImluaXRGYXV4VG9wTGF5ZXIiLCJ0b3BMYXllciIsIm1vZGFsQ29udGVudCIsIm1vZGFsRGlhbG9nIiwidHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4iLCJ0cmlnZ2VyTmF0aXZlRGlhbG9nQ2xvc2UiLCJzY3JvbGxDb250ZW50VG9Ub3AiLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiaGFuZGxlRXNjYXBlS2V5ZG93biIsImUiLCJwYWdlQ3VycmVudCIsInBhZ2luYXRpb25CdXR0b25zIiwiZW1wdHkiLCJzaWRlcyIsImFsaWdubWVudHMiLCJwbGFjZW1lbnRzIiwiYWNjIiwic2lkZSIsIm1pbiIsIm1heCIsInJvdW5kIiwiZmxvb3IiLCJjcmVhdGVDb29yZHMiLCJ2Iiwib3Bwb3NpdGVTaWRlTWFwIiwib3Bwb3NpdGVBbGlnbm1lbnRNYXAiLCJjbGFtcCIsInN0YXJ0IiwiZW5kIiwiZXZhbHVhdGUiLCJwYXJhbSIsImdldFNpZGUiLCJwbGFjZW1lbnQiLCJnZXRBbGlnbm1lbnQiLCJnZXRPcHBvc2l0ZUF4aXMiLCJheGlzIiwiZ2V0QXhpc0xlbmd0aCIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50IiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwiY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQiLCJfcmVmIiwicmVmZXJlbmNlIiwiZmxvYXRpbmciLCJzaWRlQXhpcyIsImFsaWduTGVuZ3RoIiwiaXNWZXJ0aWNhbCIsImNvbW1vblgiLCJjb21tb25ZIiwiY29tbW9uQWxpZ24iLCJjb29yZHMiLCJjb21wdXRlUG9zaXRpb24iLCJjb25maWciLCJzdHJhdGVneSIsIm1pZGRsZXdhcmUiLCJwbGF0Zm9ybSIsInZhbGlkTWlkZGxld2FyZSIsInN0YXRlZnVsUGxhY2VtZW50IiwibWlkZGxld2FyZURhdGEiLCJyZXNldENvdW50IiwiaSIsImZuIiwibmV4dFgiLCJuZXh0WSIsImRhdGEiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJlbGVtZW50IiwiY2xpcHBpbmdDbGllbnRSZWN0Iiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0U2NhbGUiLCJlbGVtZW50Q2xpZW50UmVjdCIsImdldFBsYWNlbWVudExpc3QiLCJhdXRvQWxpZ25tZW50IiwiYWxsb3dlZFBsYWNlbWVudHMiLCJhdXRvUGxhY2VtZW50IiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QIiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QMiIsIl9wbGFjZW1lbnRzVGhhdEZpdE9uRSIsImNyb3NzQXhpcyIsImRldGVjdE92ZXJmbG93T3B0aW9ucyIsInBsYWNlbWVudHMkMSIsIm92ZXJmbG93IiwiY3VycmVudEluZGV4IiwiY3VycmVudFBsYWNlbWVudCIsImFsaWdubWVudFNpZGVzIiwiY3VycmVudE92ZXJmbG93cyIsImFsbE92ZXJmbG93cyIsIm5leHRQbGFjZW1lbnQiLCJwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UiLCJkIiwiYSIsImIiLCJyZXNldFBsYWNlbWVudCIsImNvbnZlcnRWYWx1ZVRvQ29vcmRzIiwibWFpbkF4aXNNdWx0aSIsImNyb3NzQXhpc011bHRpIiwicmF3VmFsdWUiLCJtYWluQXhpcyIsIm9mZnNldCIsIl9taWRkbGV3YXJlRGF0YSRvZmZzZSIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsImRpZmZDb29yZHMiLCJzaGlmdCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsImxpbWl0ZXIiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJoYXNXaW5kb3ciLCJnZXROb2RlTmFtZSIsIm5vZGUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImlzT3ZlcmZsb3dFbGVtZW50Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZGlzcGxheSIsImdldENvbXB1dGVkU3R5bGUiLCJpc1RhYmxlRWxlbWVudCIsImlzVG9wTGF5ZXIiLCJzZWxlY3RvciIsImlzQ29udGFpbmluZ0Jsb2NrIiwiZWxlbWVudE9yQ3NzIiwid2Via2l0IiwiaXNXZWJLaXQiLCJjc3MiLCJnZXRDb250YWluaW5nQmxvY2siLCJjdXJyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJpc0xhc3RUcmF2ZXJzYWJsZU5vZGUiLCJnZXROb2RlU2Nyb2xsIiwiZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IiLCJwYXJlbnROb2RlIiwiZ2V0T3ZlcmZsb3dBbmNlc3RvcnMiLCJsaXN0IiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJsZWZ0IiwidG9wIiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaWdub3JlU2Nyb2xsYmFyWCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJlbCIsImN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIiwiZWxlbWVudElzRml4ZWQiLCJjb21wdXRlZFN0eWxlIiwiY3VycmVudE5vZGVJc0NvbnRhaW5pbmciLCJhbmNlc3RvciIsImdldENsaXBwaW5nUmVjdCIsImNsaXBwaW5nQW5jZXN0b3JzIiwiZmlyc3RDbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldERpbWVuc2lvbnMiLCJnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsInJvb3QiLCJjbGVhbnVwIiwiX2lvIiwicmVmcmVzaCIsInNraXAiLCJ0aHJlc2hvbGQiLCJlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4iLCJpbnNldFRvcCIsImluc2V0UmlnaHQiLCJpbnNldEJvdHRvbSIsImluc2V0TGVmdCIsImlzRmlyc3RVcGRhdGUiLCJoYW5kbGVPYnNlcnZlIiwicmF0aW8iLCJhdXRvVXBkYXRlIiwidXBkYXRlIiwiYW5jZXN0b3JTY3JvbGwiLCJhbmNlc3RvclJlc2l6ZSIsImVsZW1lbnRSZXNpemUiLCJsYXlvdXRTaGlmdCIsImFuaW1hdGlvbkZyYW1lIiwicmVmZXJlbmNlRWwiLCJhbmNlc3RvcnMiLCJjbGVhbnVwSW8iLCJyZW9ic2VydmVGcmFtZSIsInJlc2l6ZU9ic2VydmVyIiwiZmlyc3RFbnRyeSIsIl9yZXNpemVPYnNlcnZlciIsImZyYW1lSWQiLCJwcmV2UmVmUmVjdCIsImZyYW1lTG9vcCIsIm5leHRSZWZSZWN0IiwiX3Jlc2l6ZU9ic2VydmVyMiIsIm9mZnNldCQxIiwiYXV0b1BsYWNlbWVudCQxIiwic2hpZnQkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiaXNDb21wb25lbnRQdWJsaWNJbnN0YW5jZSIsInRhcmdldCIsInRvVmFsdWUiLCJzb3VyY2UiLCJ1bnJlZiIsImdldERQUiIsInJvdW5kQnlEUFIiLCJkcHIiLCJ1c2VGbG9hdGluZyIsIndoaWxlRWxlbWVudHNNb3VudGVkT3B0aW9uIiwib3Blbk9wdGlvbiIsIl90b1ZhbHVlIiwibWlkZGxld2FyZU9wdGlvbiIsInBsYWNlbWVudE9wdGlvbiIsIl90b1ZhbHVlMiIsInN0cmF0ZWd5T3B0aW9uIiwiX3RvVmFsdWUzIiwidHJhbnNmb3JtT3B0aW9uIiwiX3RvVmFsdWU0IiwicmVmZXJlbmNlRWxlbWVudCIsImZsb2F0aW5nRWxlbWVudCIsInNoYWxsb3dSZWYiLCJpc1Bvc2l0aW9uZWQiLCJmbG9hdGluZ1N0eWxlcyIsImluaXRpYWxTdHlsZXMiLCJ4VmFsIiwieVZhbCIsIndoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCIsIm9wZW4iLCJwb3NpdGlvbiIsImF0dGFjaCIsImdldEN1cnJlbnRTY29wZSIsIm9uU2NvcGVEaXNwb3NlIiwic2hhbGxvd1JlYWRvbmx5IiwiaXNDbGlja091dHNpZGUiLCJhbmNob3IiLCJpc0hvdmVyZWQiLCJpc1RvZ2dsZWRPcGVuIiwib2Zmc2V0TWlkZGxld2FyZSIsImlzU2hvd1BvcG92ZXIiLCJoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUNsaWNrIiwiaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3ZlciIsImhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZUxlYXZlIiwiaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrIiwiYWRkTGlzdGVuZXJzVG9BbmNob3JFbGVtZW50IiwicmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQiLCJoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24iLCJhZGRPcGVuTGlzdGVuZXJzVG9Sb290IiwicmVtb3ZlT3Blbkxpc3RlbmVyc0Zyb21Sb290IiwidXBkYXRlQW5jaG9yRWxlbWVudCIsIndhdGNoRWZmZWN0Iiwib25CZWZvcmVNb3VudCIsImRpYWxvZ0VsZW1lbnQiLCJGT1JNQVQiLCJGT1JNQVRfUkVHRVgiLCJNRURJQV9TTElERV9UWVBFUyIsIlZBTElEQVRPUiJdLCJtYXBwaW5ncyI6IjtBQUFPLE1BQU1BLEtBQWM7QUFBQSxFQUN6QixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQ1osR0NDYUMsSUFBTTtBQUFBLEVBQ2pCLGdCQUFnQixDQUFDQyxHQUFxQkMsTUFDN0JELEVBQVUsSUFBSSxDQUFDRSxNQUFZLEdBQUdELENBQVUsSUFBSUMsQ0FBTyxFQUFFO0FBQUEsRUFFOUQsT0FBTztBQUFBLElBQ0wsR0FBRztBQUFBLE1BQ0QsUUFBUTtBQUFBLE1BQ1IsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxJQUNWO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxJQUFJO0FBQUEsSUFDRixRQUFRO0FBQUEsTUFDTixTQUFTO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsTUFDWDtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBRVQsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLE1BQ1Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsSUFDWDtBQUFBLElBQ0EsYUFBYTtBQUFBLE1BQ1gsYUFBYTtBQUFBLE1BQ2IsYUFBYTtBQUFBLE1BQ2IsZUFBZTtBQUFBLE1BQ2YsY0FBYztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sT0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBRVQsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLFNBQVM7QUFBQSxNQUNULFNBQVM7QUFBQSxNQUNULFVBQVU7QUFBQSxNQUNWLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxFQUNmO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDWixjQUFjO0FBQUEsRUFDaEI7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLElBQUk7QUFBQSxFQUNOO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsRUFDUjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxFQUNSO0FBQUEsRUFDQSxVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsSUFDSixPQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsV0FBVztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsZ0JBQWdCO0FBQUEsTUFDaEIsS0FBSztBQUFBLE1BQ0wsYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNKLEtBQUs7QUFBQSxNQUNMLElBQUk7QUFBQSxJQUNOO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxJQUFJO0FBQUEsSUFDTjtBQUFBLElBQ0EsTUFBTTtBQUFBLEVBQ1I7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE9BQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxRQUVULE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLEtBQUs7QUFBQSxRQUNMLFFBQVE7QUFBQSxRQUNSLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUVSLFNBQVM7QUFBQSxVQUNQLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxVQUNQLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLEtBQUs7QUFBQSxVQUNMLFFBQVE7QUFBQSxVQUNSLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxRQUNWO0FBQUEsTUFDRjtBQUFBLE1BQ0EsU0FBUztBQUFBLE1BQ1QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBQ1QsaUJBQWlCO0FBQUEsTUFDbkI7QUFBQSxJQUNGO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixXQUFXO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixZQUFZO0FBQUEsTUFDWixZQUFZO0FBQUEsTUFDWixTQUFTO0FBQUEsTUFDVCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxrQkFBa0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsTUFDVCxrQkFBa0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsSUFDWjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osUUFBUTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsYUFBYTtBQUFBLE1BQ2IsWUFBWTtBQUFBLElBQ2Q7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLGNBQWM7QUFBQSxNQUNkLGNBQWM7QUFBQSxNQUNkLGFBQWE7QUFBQSxNQUNiLGVBQWU7QUFBQSxJQUNqQjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLEtBQUs7QUFBQSxJQUNILE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLEtBQUs7QUFBQSxJQUNMLE1BQU07QUFBQSxFQUNSO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixJQUFJO0FBQUEsRUFDTjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBLFdBQVc7QUFBQSxJQUNULFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDWixLQUFLO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsRUFDZDtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsSUFBSTtBQUFBLEVBQ047QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNSLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxJQUNWO0FBQUEsSUFDQSxJQUFJO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFTO0FB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OENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsbUNBQUEsTUFBQSxPQUFBLHVCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsa0RBQUEsTUFBQSxPQUFBLHNDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsOENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsOENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsa0RBQUEsTUFBQSxPQUFBLHNDQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsbUNBQUEsTUFBQSxPQUFBLHVCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsZ0RBQUEsTUFBQSxPQUFBLG9DQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsbUNBQUEsTUFBQSxPQUFBLHVCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsOENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsZ0RBQUEsTUFBQSxPQUFBLG9DQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEVBQUEsQ0FBQSxHQUFBLDJCQUFBTCxDQUFBLE1BQUEsQ0FDUjtBQUVRLFFBQUFMLEVBQUEsUUFBUVcsR0FBUUgsQ0FBUztBQUFBLE1BQ3BDO0FBQUEsTUFDQSxFQUFFLFdBQVcsR0FBSztBQUFBLElBQUE7Ozs7Ozs7Ozs7OztBQ3RDZixNQUFNSSxJQUFPO0FBQUEsRUFDbEIsaUJBQWlCO0FBQUEsRUFDakIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsZ0JBQWdCO0FBQUEsRUFDaEIsa0JBQWtCO0FBQUEsRUFDbEIsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2YsYUFBYTtBQUFBLEVBQ2IsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osWUFBWTtBQUFBLEVBQ1osS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUFBLEVBQ2YsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AscUJBQXFCO0FBQUEsRUFDckIsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsaUJBQWlCO0FBQUEsRUFDakIsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsaUJBQWlCO0FBQUEsRUFDakIsTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1Asb0JBQW9CO0FBQUEsRUFDcEIsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsZ0JBQWdCO0FBQUEsRUFDaEIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osZUFBZTtBQUFBLEVBQ2YsVUFBVTtBQUFBLEVBQ1YsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsY0FBYztBQUFBLEVBQ2QsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsZUFBZTtBQUFBLEVBQ2YsUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsY0FBYztBQUFBLEVBQ2QsTUFBTTtBQUFBLEVBQ04sZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUFBLEVBQ2YsUUFBUTtBQUFBLEVBQ1IsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVB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
|