tide-design-system 2.2.13 → 2.2.15
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/IconAccountBalance-Ck1QODok.js +16 -0
- package/dist/IconAccountBalance-DUpdmQFe.cjs +2 -0
- package/dist/IconAcute-Dy5x_yJL.js +16 -0
- package/dist/IconAcute-bU4QJ8V7.cjs +2 -0
- package/dist/IconAdd-CoVrVzyk.js +16 -0
- package/dist/IconAdd-DcDrqXYF.cjs +2 -0
- package/dist/IconAiDescription-6Pv0Y_Yt.js +20 -0
- package/dist/IconAiDescription-CEkom1qc.cjs +2 -0
- package/dist/IconAlignSpaceEven-BF_GmIrK.js +16 -0
- package/dist/IconAlignSpaceEven-cqO2Dlov.cjs +2 -0
- package/dist/IconApplePay-C56V1wAj.cjs +2 -0
- package/dist/IconApplePay-oQ4zV5vN.js +16 -0
- package/dist/IconArrowBack-BP2TEpuq.js +16 -0
- package/dist/IconArrowBack-FzFtQ6Wh.cjs +2 -0
- package/dist/IconArrowCycle-CqKlSl5d.cjs +2 -0
- package/dist/IconArrowCycle-TQa-fbVD.js +16 -0
- package/dist/IconArrowForward-CkA2-WZe.cjs +2 -0
- package/dist/IconArrowForward-VWVINc35.js +16 -0
- package/dist/IconArrowRight-BJYT2e-d.js +16 -0
- package/dist/IconArrowRight-BxQWtz80.cjs +2 -0
- package/dist/IconArrowUp-BM37-Uxb.cjs +2 -0
- package/dist/IconArrowUp-JSl5zOyP.js +16 -0
- package/dist/IconAssignment-B13NJfNm.cjs +2 -0
- package/dist/IconAssignment-CSn4vDyt.js +16 -0
- package/dist/IconAttachMoney-CIYp4I2h.js +16 -0
- package/dist/IconAttachMoney-CUjPtX-U.cjs +2 -0
- package/dist/IconAtvAtv-DDtMKkiz.cjs +2 -0
- package/dist/IconAtvAtv-GFhgoQXA.js +20 -0
- package/dist/IconAtvDuneBuggy-CmVFELlj.cjs +2 -0
- package/dist/IconAtvDuneBuggy-Eou8hc_1.js +20 -0
- package/dist/IconAtvGoKart-Cj3k54oS.js +20 -0
- package/dist/IconAtvGoKart-D200V7pq.cjs +2 -0
- package/dist/IconAtvGolfCart-BGqnqb3G.cjs +2 -0
- package/dist/IconAtvGolfCart-CCQwt0_I.js +20 -0
- package/dist/IconAtvSandRail-C5P5lWt6.cjs +2 -0
- package/dist/IconAtvSandRail-HpaJVocj.js +20 -0
- package/dist/IconAtvSideBySide-BxqtCex8.js +20 -0
- package/dist/IconAtvSideBySide-dbhLoB1-.cjs +2 -0
- package/dist/IconAtvTrailer-CTlZZ8Wn.js +20 -0
- package/dist/IconAtvTrailer-tohF8f6D.cjs +2 -0
- package/dist/IconAutoRenew-C77Hq4T0.cjs +2 -0
- package/dist/IconAutoRenew-Dp5h0lzF.js +16 -0
- package/dist/IconAwardStar-CNBpPsCx.cjs +2 -0
- package/dist/IconAwardStar-CdAw4NY5.js +16 -0
- package/dist/IconBed-B1u5P61X.js +16 -0
- package/dist/IconBed-Du8uU-Fq.cjs +2 -0
- package/dist/IconBoatmartPwc-CcE6IBYS.cjs +2 -0
- package/dist/IconBoatmartPwc-D6wQ7mNA.js +20 -0
- package/dist/IconBoatmartTrailer-CfIANY7t.cjs +2 -0
- package/dist/IconBoatmartTrailer-hKiD_NXI.js +20 -0
- package/dist/IconBolt-CskRJDT1.js +16 -0
- package/dist/IconBolt-D3QlzyVv.cjs +2 -0
- package/dist/IconBookmark-Dc_xQALq.cjs +2 -0
- package/dist/IconBookmark-DsEGlmme.js +16 -0
- package/dist/IconBunkhouse-BLo-n_Mb.js +16 -0
- package/dist/IconBunkhouse-BUPqUZFs.cjs +2 -0
- package/dist/IconCalendarMonth-Cfs-ZKLJ.js +16 -0
- package/dist/IconCalendarMonth-ztc4w4Tw.cjs +2 -0
- package/dist/IconCall-BCjepEju.js +16 -0
- package/dist/IconCall-BKYdkS16.cjs +2 -0
- package/dist/IconCallQuality-BRfc8Y1K.cjs +2 -0
- package/dist/IconCallQuality-c7UaokVa.js +16 -0
- package/dist/IconCarRental-CkVWcpTh.cjs +2 -0
- package/dist/IconCarRental-D-qYjRe5.js +16 -0
- package/dist/IconCheck-D0w_fKOH.cjs +2 -0
- package/dist/IconCheck-DVE4Knnl.js +16 -0
- package/dist/IconChevronLeft-DStWQfoj.js +16 -0
- package/dist/IconChevronLeft-DhX3pOQ3.cjs +2 -0
- package/dist/IconChevronRight-3vFVvnNb.js +16 -0
- package/dist/IconChevronRight-BCv__YUh.cjs +2 -0
- package/dist/IconClear-D5yRmb93.cjs +2 -0
- package/dist/IconClear-F6afoxzY.js +16 -0
- package/dist/IconClose-Y-mY3AiS.cjs +2 -0
- package/dist/IconClose-eMGGtfEC.js +16 -0
- package/dist/IconContract-D6nGc_5y.cjs +2 -0
- package/dist/IconContract-f9bj5j-_.js +16 -0
- package/dist/IconCrash-B2l3Ie38.js +16 -0
- package/dist/IconCrash-BhwhKaB1.cjs +2 -0
- package/dist/IconDashboardCustomize-CyQTFASs.js +16 -0
- package/dist/IconDashboardCustomize-N7cHDhjT.cjs +2 -0
- package/dist/IconDelete-Couv2iBA.js +16 -0
- package/dist/IconDelete-LlUqnq04.cjs +2 -0
- package/dist/IconDiamond-sol6SUrB.js +16 -0
- package/dist/IconDiamond-t4Tf48_s.cjs +2 -0
- package/dist/IconDirectionsBoat-IZhI7oCN.cjs +2 -0
- package/dist/IconDirectionsBoat-S07T_dm_.js +16 -0
- package/dist/IconDomain-DSyC0Set.cjs +2 -0
- package/dist/IconDomain-ECxC_qj-.js +16 -0
- package/dist/IconDraft-BFxB85ro.js +16 -0
- package/dist/IconDraft-DL8E6d1f.cjs +2 -0
- package/dist/IconEdit-BoLO_nL5.js +16 -0
- package/dist/IconEdit-HzbIdd3z.cjs +2 -0
- package/dist/IconEngine-BBaqQJ6N.js +20 -0
- package/dist/IconEngine-DCKjsg0s.cjs +2 -0
- package/dist/IconEngineering-C60OP34_.js +16 -0
- package/dist/IconEngineering-WPQWx43h.cjs +2 -0
- package/dist/IconError-CAjFP9Jy.cjs +2 -0
- package/dist/IconError-Dd2H7cOG.js +16 -0
- package/dist/IconExpandContent-C1xzfkui.js +16 -0
- package/dist/IconExpandContent-UDkqNF-G.cjs +2 -0
- package/dist/IconExpandLess-Bf6Nypx3.js +16 -0
- package/dist/IconExpandLess-HiL8c2v-.cjs +2 -0
- package/dist/IconExpandMore-BffI3rnY.js +16 -0
- package/dist/IconExpandMore-tOo2Ynbv.cjs +2 -0
- package/dist/IconFacebook-7dq6Uz6i.cjs +2 -0
- package/dist/IconFacebook-Cki8sZRt.js +16 -0
- package/dist/IconFavorite-C6ZJCuY6.cjs +2 -0
- package/dist/IconFavorite-CyRSAVdw.js +16 -0
- package/dist/IconFavoriteFilled-DJIL-WYR.cjs +2 -0
- package/dist/IconFavoriteFilled-DeNJvMmm.js +16 -0
- package/dist/IconFlag-a6YLysex.cjs +2 -0
- package/dist/IconFlag-aeogw6hc.js +16 -0
- package/dist/IconFormatBold-CtYxihT6.js +16 -0
- package/dist/IconFormatBold-Yo5bdAwc.cjs +2 -0
- package/dist/IconFormatItalic-DSJCzNMj.cjs +2 -0
- package/dist/IconFormatItalic-EUVbp7Qb.js +16 -0
- package/dist/IconFormatListBulleted-CT9Ocq27.cjs +2 -0
- package/dist/IconFormatListBulleted-D-VQIabf.js +16 -0
- package/dist/IconForum-BrjEMf33.js +16 -0
- package/dist/IconForum-DQrwT4Pb.cjs +2 -0
- package/dist/IconGas-D_rJSqnT.js +16 -0
- package/dist/IconGas-DaKcTfiu.cjs +2 -0
- package/dist/IconGavel-D9XWUMJt.js +16 -0
- package/dist/IconGavel-ZdfEJ5bP.cjs +2 -0
- package/dist/IconGears-BlhP9t4o.cjs +2 -0
- package/dist/IconGears-Cavx6RDS.js +16 -0
- package/dist/IconGlobeLocationPin-CdwVS7ad.js +16 -0
- package/dist/IconGlobeLocationPin-Dz_hajhl.cjs +2 -0
- package/dist/IconGoogle-CW-JtHsA.js +31 -0
- package/dist/IconGoogle-DaDS3i9U.cjs +2 -0
- package/dist/IconGooglePay-ByaG5WLE.cjs +2 -0
- package/dist/IconGooglePay-lhVEuNTf.js +16 -0
- package/dist/IconGrid-4jZ_E7sN.cjs +2 -0
- package/dist/IconGrid-B-Z-t5S5.js +16 -0
- package/dist/IconHandshake-CCtEDb5s.js +16 -0
- package/dist/IconHandshake-Dm6HyjPZ.cjs +2 -0
- package/dist/IconHandyman-CeFGeaUD.js +16 -0
- package/dist/IconHandyman-DWBuUdrY.cjs +2 -0
- package/dist/IconHeight-CU7292SF.js +16 -0
- package/dist/IconHeight-DdZD0XDB.cjs +2 -0
- package/dist/IconHelp-CpHZAsX2.js +16 -0
- package/dist/IconHelp-Ks-iBsna.cjs +2 -0
- package/dist/IconInfo-Du8txE_y.js +16 -0
- package/dist/IconInfo-xZBbCBpg.cjs +2 -0
- package/dist/IconInformation-DnC1dUkM.cjs +2 -0
- package/dist/IconInformation-fpX8-lfe.js +16 -0
- package/dist/IconInsertText-B50Ml556.js +16 -0
- package/dist/IconInsertText-DRLSQCif.cjs +2 -0
- package/dist/IconInstagram-BAydhrdp.cjs +2 -0
- package/dist/IconInstagram-x9ut2Rvt.js +16 -0
- package/dist/IconIosShare-BAZa5TGR.js +16 -0
- package/dist/IconIosShare-ln3UX-op.cjs +2 -0
- package/dist/IconLayout-B7PSx75m.cjs +2 -0
- package/dist/IconLayout-Ctl5Nh6E.js +16 -0
- package/dist/IconLevellingJack-Cv_L_Xt-.cjs +2 -0
- package/dist/IconLevellingJack-OIJRh7On.js +20 -0
- package/dist/IconLinkedIn-DpuBRGWk.js +16 -0
- package/dist/IconLinkedIn-yIN3rQkH.cjs +2 -0
- package/dist/IconLocalShipping-CECgkii_.cjs +2 -0
- package/dist/IconLocalShipping-DFGIrDiT.js +16 -0
- package/dist/IconLock-CgnOY2yE.cjs +2 -0
- package/dist/IconLock-Kkxyx6xF.js +16 -0
- package/dist/IconMail-C52wU0bj.cjs +2 -0
- package/dist/IconMail-C_KZ99bY.js +16 -0
- package/dist/IconMenu-Bgr0cuPj.cjs +2 -0
- package/dist/IconMenu-DdVdEPQY.js +16 -0
- package/dist/IconMoneyBag-Bpwqj4h_.js +16 -0
- package/dist/IconMoneyBag-DIgjDYQp.cjs +2 -0
- package/dist/IconMoreHoriz-CMqeM-vy.js +16 -0
- package/dist/IconMoreHoriz-CopFNsjL.cjs +2 -0
- package/dist/IconNotifications-C-5jqVsp.js +16 -0
- package/dist/IconNotifications-CowlXF8e.cjs +2 -0
- package/dist/IconOdometer-8X8BZK7G.cjs +2 -0
- package/dist/IconOdometer-DOvJTqMC.js +16 -0
- package/dist/IconOpenInNew-BECM_cge.js +16 -0
- package/dist/IconOpenInNew-NIE7_GBf.cjs +2 -0
- package/dist/IconPalette-BnkMmdjx.cjs +2 -0
- package/dist/IconPalette-cNHa_Dl9.js +16 -0
- package/dist/IconPaypal-0MB9NiPi.js +16 -0
- package/dist/IconPaypal-Cm4sbOWR.cjs +2 -0
- package/dist/IconPerson-BlD3wl56.cjs +2 -0
- package/dist/IconPerson-C9FdsFRF.js +16 -0
- package/dist/IconPersonSearch-BAwODsOw.js +16 -0
- package/dist/IconPersonSearch-CvzxD13q.cjs +2 -0
- package/dist/IconPhotoCamera-Dhq3zkZ1.js +16 -0
- package/dist/IconPhotoCamera-LE83ELYg.cjs +2 -0
- package/dist/IconPinterest-B2ilympx.js +16 -0
- package/dist/IconPinterest-LMg3EmCf.cjs +2 -0
- package/dist/IconPlayArrow-DWY4o6mi.js +16 -0
- package/dist/IconPlayArrow-DaK8Rma5.cjs +2 -0
- package/dist/IconPolicy-CPfGoBvS.cjs +2 -0
- package/dist/IconPolicy-CTm0qx9m.js +16 -0
- package/dist/IconPower-BNYJxFS-.cjs +2 -0
- package/dist/IconPower-El-f1YpW.js +16 -0
- package/dist/IconPowerOff-BeF6a0I_.js +16 -0
- package/dist/IconPowerOff-BzVbrhfQ.cjs +2 -0
- package/dist/IconPriorityHigh-BOUPMj-c.js +16 -0
- package/dist/IconPriorityHigh-De-QwFs9.cjs +2 -0
- package/dist/IconRemove-DJ8Ats3O.js +16 -0
- package/dist/IconRemove-FRKIQpXX.cjs +2 -0
- package/dist/IconRequestQuote-63Pc7nFl.cjs +2 -0
- package/dist/IconRequestQuote-Dx73kEAB.js +16 -0
- package/dist/IconResetWrench-Cszjots_.cjs +2 -0
- package/dist/IconResetWrench-afPLSCCR.js +16 -0
- package/dist/IconRoad-CXNsqXt3.cjs +2 -0
- package/dist/IconRoad-D8LbDPzU.js +16 -0
- package/dist/IconRoundedCorner-CBFrVTjO.js +16 -0
- package/dist/IconRoundedCorner-s0eqhrw-.cjs +2 -0
- package/dist/IconRuler-BbrDrxik.js +16 -0
- package/dist/IconRuler-CS4llN2v.cjs +2 -0
- package/dist/IconRvClassA-IHRP4eXR.cjs +2 -0
- package/dist/IconRvClassA-pAChL2Qm.js +20 -0
- package/dist/IconRvClassB-BWEVHWYh.cjs +2 -0
- package/dist/IconRvClassB-BWaLlkdV.js +20 -0
- package/dist/IconRvClassC-CeDhPBYp.js +20 -0
- package/dist/IconRvClassC-CiUYMt7R.cjs +2 -0
- package/dist/IconRvFifthWheel-D98H64pq.js +20 -0
- package/dist/IconRvFifthWheel-tllq5hmh.cjs +2 -0
- package/dist/IconRvFishHouse-B9v3_c4m.js +20 -0
- package/dist/IconRvFishHouse-C5B0w81b.cjs +2 -0
- package/dist/IconRvParkModel-DJjJJFrS.js +20 -0
- package/dist/IconRvParkModel-DU9WYpvA.cjs +2 -0
- package/dist/IconRvPopUpCamper-C_L-wpFq.cjs +2 -0
- package/dist/IconRvPopUpCamper-DC5JLH5u.js +20 -0
- package/dist/IconRvTravelTrailer-CUzyIoJH.js +20 -0
- package/dist/IconRvTravelTrailer-DfoQmo80.cjs +2 -0
- package/dist/IconRvTruckCamper-CHLJEty2.js +20 -0
- package/dist/IconRvTruckCamper-CI5jKToo.cjs +2 -0
- package/dist/IconSailing-CP278bNv.cjs +2 -0
- package/dist/IconSailing-Ct5A7oe-.js +16 -0
- package/dist/IconSchool-DCJoiRB2.cjs +2 -0
- package/dist/IconSchool-DkD-by-f.js +16 -0
- package/dist/IconSearch-C3_cVelm.js +16 -0
- package/dist/IconSearch-CG3sTqyY.cjs +2 -0
- package/dist/IconSeating-B2-FR2aI.js +16 -0
- package/dist/IconSeating-DPz7Itl5.cjs +2 -0
- package/dist/IconSell-B01QAmJJ.js +16 -0
- package/dist/IconSell-tiqkK8HB.cjs +2 -0
- package/dist/IconSensors-B2yoU18I.cjs +2 -0
- package/dist/IconSensors-C9ikFDSl.js +16 -0
- package/dist/IconSettings-6iUt_j-N.cjs +2 -0
- package/dist/IconSettings-C7CzSyB_.js +16 -0
- package/dist/IconShare-CC3TgzM9.js +16 -0
- package/dist/IconShare-z3eso-fS.cjs +2 -0
- package/dist/IconShieldCheck-BKdiIhJ-.js +16 -0
- package/dist/IconShieldCheck-Dn0h4Aut.cjs +2 -0
- package/dist/IconShoppingCart-CQZWosiy.js +16 -0
- package/dist/IconShoppingCart-Dn7aCgYi.cjs +2 -0
- package/dist/IconSleeps-DDIWvIh8.js +16 -0
- package/dist/IconSleeps-DMXZj5P6.cjs +2 -0
- package/dist/IconSms-Bb3mhfHH.cjs +2 -0
- package/dist/IconSms-C22lp6yM.js +16 -0
- package/dist/IconSnowflake-DEJHKYBl.cjs +2 -0
- package/dist/IconSnowflake-aBZ4o4X2.js +16 -0
- package/dist/IconStar-2gDebu9X.js +16 -0
- package/dist/IconStar-COuoApVn.cjs +2 -0
- package/dist/IconStarFilled-BvH24VJ3.cjs +2 -0
- package/dist/IconStarFilled-CI8JFRKm.js +16 -0
- package/dist/IconStarHalf-9Mtxrxy2.js +16 -0
- package/dist/IconStarHalf-Cf3yNdfW.cjs +2 -0
- package/dist/IconSummarize-DdMTFwCZ.cjs +2 -0
- package/dist/IconSummarize-DjgKmXYf.js +16 -0
- package/dist/IconSwapHoriz-BI3V7cXl.js +16 -0
- package/dist/IconSwapHoriz-CHbH-rb1.cjs +2 -0
- package/dist/IconSwapVert-Bxn4iSnZ.js +16 -0
- package/dist/IconSwapVert-DT_2E9ir.cjs +2 -0
- package/dist/IconThreeDRotation-C5sf5vQe.js +29 -0
- package/dist/IconThreeDRotation-tzEyR04j.cjs +2 -0
- package/dist/IconThumbUp-Bewoaeaz.js +16 -0
- package/dist/IconThumbUp-Cv6VtGa7.cjs +2 -0
- package/dist/IconTrendingDown-ClqzR4Gm.js +16 -0
- package/dist/IconTrendingDown-YxmY8_d7.cjs +2 -0
- package/dist/IconTrophy-BvyInFpa.js +16 -0
- package/dist/IconTrophy-D68upC1Z.cjs +2 -0
- package/dist/IconTune-BeT6cJNb.cjs +2 -0
- package/dist/IconTune-DM9oNvly.js +16 -0
- package/dist/IconTwitter-CDK1k6Um.cjs +2 -0
- package/dist/IconTwitter-Di3mFm4J.js +16 -0
- package/dist/IconUmbrella-DdgZRF8v.cjs +2 -0
- package/dist/IconUmbrella-KarDrV_0.js +16 -0
- package/dist/IconVerified-BSLc-Tng.js +20 -0
- package/dist/IconVerified-CE6bl5Tr.cjs +2 -0
- package/dist/IconVideocam-Bk2i6zSL.js +16 -0
- package/dist/IconVideocam-DFAhIy60.cjs +2 -0
- package/dist/IconViewInAr-CyH3TuS9.js +16 -0
- package/dist/IconViewInAr-cJRKU-n8.cjs +2 -0
- package/dist/IconVisibility-C7r-OBqZ.js +16 -0
- package/dist/IconVisibility-CoZqOmFs.cjs +2 -0
- package/dist/IconVolumeOff-B1VwsF7D.cjs +2 -0
- package/dist/IconVolumeOff-DrXwzNlx.js +16 -0
- package/dist/IconVolumeOn-ByK04AMO.cjs +2 -0
- package/dist/IconVolumeOn-DMqPq3mL.js +16 -0
- package/dist/IconWarehouse-B-WGdkxc.cjs +2 -0
- package/dist/IconWarehouse-BLILe5TP.js +16 -0
- package/dist/IconWarning-BGb_hd4L.js +16 -0
- package/dist/IconWarning-BmJVooFC.cjs +2 -0
- package/dist/IconWater-BFIBeGBM.js +16 -0
- package/dist/IconWater-BcVoUC58.cjs +2 -0
- package/dist/IconWeight-BzjjPVJo.cjs +2 -0
- package/dist/IconWeight-IXMjxgaM.js +16 -0
- package/dist/IconWidth-CWT_XoXm.js +16 -0
- package/dist/IconWidth-DK12b7aq.cjs +2 -0
- package/dist/IconWorkspacePremium-B_CTpaCF.js +16 -0
- package/dist/IconWorkspacePremium-Dwj3FxW1.cjs +2 -0
- package/dist/IconWrench-CHHIpkKv.cjs +2 -0
- package/dist/IconWrench-CgaRK8xS.js +16 -0
- package/dist/IconYoutube-BBBj6jXd.js +16 -0
- package/dist/IconYoutube-DIFl6ykK.cjs +2 -0
- package/dist/style.css +1 -1
- package/dist/tide-design-system.cjs +2 -2
- package/dist/tide-design-system.esm.js +548 -567
- package/package.json +2 -2
- package/src/components/TideBadgeTrustedPartner.vue +0 -2
- package/src/components/TidePopover.vue +3 -1
- package/src/components/TideSheet.vue +13 -3
- package/dist/IconAccountBalance-0a430d19.cjs +0 -2
- package/dist/IconAccountBalance-ad4f4a95.js +0 -16
- package/dist/IconAcute-ad6bc5da.js +0 -16
- package/dist/IconAcute-b1e43123.cjs +0 -2
- package/dist/IconAdd-917e055b.js +0 -16
- package/dist/IconAdd-91de604b.cjs +0 -2
- package/dist/IconAiDescription-674cca6d.cjs +0 -2
- package/dist/IconAiDescription-e6f8ed46.js +0 -20
- package/dist/IconAlignSpaceEven-7ee811f8.cjs +0 -2
- package/dist/IconAlignSpaceEven-a1d90758.js +0 -16
- package/dist/IconApplePay-7742e162.js +0 -16
- package/dist/IconApplePay-92395240.cjs +0 -2
- package/dist/IconArrowBack-1810092d.js +0 -16
- package/dist/IconArrowBack-3d47d166.cjs +0 -2
- package/dist/IconArrowCycle-7b7c7325.cjs +0 -2
- package/dist/IconArrowCycle-f8d882fe.js +0 -16
- package/dist/IconArrowForward-613e128c.cjs +0 -2
- package/dist/IconArrowForward-ddabefc9.js +0 -16
- package/dist/IconArrowRight-9f39cdbb.cjs +0 -2
- package/dist/IconArrowRight-d93347c3.js +0 -16
- package/dist/IconArrowUp-75edebad.js +0 -16
- package/dist/IconArrowUp-c0afd43d.cjs +0 -2
- package/dist/IconAssignment-7171d067.cjs +0 -2
- package/dist/IconAssignment-b1d2ffa2.js +0 -16
- package/dist/IconAttachMoney-1360c507.js +0 -16
- package/dist/IconAttachMoney-6d3087ab.cjs +0 -2
- package/dist/IconAtvAtv-c2e11398.cjs +0 -2
- package/dist/IconAtvAtv-d10d11c0.js +0 -20
- package/dist/IconAtvDuneBuggy-458e7a9c.js +0 -20
- package/dist/IconAtvDuneBuggy-ff1f7a23.cjs +0 -2
- package/dist/IconAtvGoKart-0eab678e.js +0 -20
- package/dist/IconAtvGoKart-d1ad6a03.cjs +0 -2
- package/dist/IconAtvGolfCart-9b3569bc.cjs +0 -2
- package/dist/IconAtvGolfCart-c549f7f3.js +0 -20
- package/dist/IconAtvSandRail-d71aa55b.cjs +0 -2
- package/dist/IconAtvSandRail-e8913dd9.js +0 -20
- package/dist/IconAtvSideBySide-50377701.js +0 -20
- package/dist/IconAtvSideBySide-f734e90f.cjs +0 -2
- package/dist/IconAtvTrailer-062da3ab.js +0 -20
- package/dist/IconAtvTrailer-ee1d6ec1.cjs +0 -2
- package/dist/IconAutoRenew-00afcc33.js +0 -16
- package/dist/IconAutoRenew-bcd665a4.cjs +0 -2
- package/dist/IconAwardStar-447cf4fc.cjs +0 -2
- package/dist/IconAwardStar-8128aca1.js +0 -16
- package/dist/IconBed-3b1fa670.js +0 -16
- package/dist/IconBed-8bcac0c0.cjs +0 -2
- package/dist/IconBoatmartPwc-7a3c368a.js +0 -20
- package/dist/IconBoatmartPwc-9de80564.cjs +0 -2
- package/dist/IconBoatmartTrailer-68276601.js +0 -20
- package/dist/IconBoatmartTrailer-ff1f376f.cjs +0 -2
- package/dist/IconBolt-36fc8ef9.cjs +0 -2
- package/dist/IconBolt-83121ee2.js +0 -16
- package/dist/IconBookmark-3f6454d9.cjs +0 -2
- package/dist/IconBookmark-7d88d664.js +0 -16
- package/dist/IconBunkhouse-348a1518.cjs +0 -2
- package/dist/IconBunkhouse-e7cb965d.js +0 -16
- package/dist/IconCalendarMonth-2fd1e713.js +0 -16
- package/dist/IconCalendarMonth-bb5bbb9b.cjs +0 -2
- package/dist/IconCall-08f3119f.cjs +0 -2
- package/dist/IconCall-8aa582d9.js +0 -16
- package/dist/IconCallQuality-1edf4c35.js +0 -16
- package/dist/IconCallQuality-56ee01fb.cjs +0 -2
- package/dist/IconCarRental-7709e091.js +0 -16
- package/dist/IconCarRental-b0af42ff.cjs +0 -2
- package/dist/IconCheck-910929df.cjs +0 -2
- package/dist/IconCheck-cf7470ee.js +0 -16
- package/dist/IconChevronLeft-558206bb.js +0 -16
- package/dist/IconChevronLeft-6626777e.cjs +0 -2
- package/dist/IconChevronRight-28930a0b.js +0 -16
- package/dist/IconChevronRight-91bc7ad1.cjs +0 -2
- package/dist/IconClear-4db1f7d4.cjs +0 -2
- package/dist/IconClear-5cf9e8be.js +0 -16
- package/dist/IconClose-538a540f.cjs +0 -2
- package/dist/IconClose-abfb6177.js +0 -16
- package/dist/IconContract-0acea45b.cjs +0 -2
- package/dist/IconContract-289a7094.js +0 -16
- package/dist/IconCrash-8d91a8db.cjs +0 -2
- package/dist/IconCrash-d87f6517.js +0 -16
- package/dist/IconDashboardCustomize-5321091b.cjs +0 -2
- package/dist/IconDashboardCustomize-f74fde35.js +0 -16
- package/dist/IconDelete-5cc224a1.cjs +0 -2
- package/dist/IconDelete-67b69553.js +0 -16
- package/dist/IconDiamond-4e736f5f.cjs +0 -2
- package/dist/IconDiamond-93af488a.js +0 -16
- package/dist/IconDirectionsBoat-11aaf49c.cjs +0 -2
- package/dist/IconDirectionsBoat-4d41fb87.js +0 -16
- package/dist/IconDomain-05540c31.cjs +0 -2
- package/dist/IconDomain-377b91aa.js +0 -16
- package/dist/IconDraft-26850369.cjs +0 -2
- package/dist/IconDraft-6e70e48f.js +0 -16
- package/dist/IconEdit-16d34325.js +0 -16
- package/dist/IconEdit-b4d5f175.cjs +0 -2
- package/dist/IconEngine-e51389f9.cjs +0 -2
- package/dist/IconEngine-ee5f92d4.js +0 -20
- package/dist/IconEngineering-a74e5efe.cjs +0 -2
- package/dist/IconEngineering-e18db558.js +0 -16
- package/dist/IconError-4ad48be1.cjs +0 -2
- package/dist/IconError-a2922b95.js +0 -16
- package/dist/IconExpandContent-03a28bfb.cjs +0 -2
- package/dist/IconExpandContent-7e144d1c.js +0 -16
- package/dist/IconExpandLess-3a8a0552.js +0 -16
- package/dist/IconExpandLess-59a80211.cjs +0 -2
- package/dist/IconExpandMore-c600148e.js +0 -16
- package/dist/IconExpandMore-edf55cdd.cjs +0 -2
- package/dist/IconFacebook-a83c1949.cjs +0 -2
- package/dist/IconFacebook-fb3f93e3.js +0 -16
- package/dist/IconFavorite-43091cef.cjs +0 -2
- package/dist/IconFavorite-d23faefe.js +0 -16
- package/dist/IconFavoriteFilled-71277849.cjs +0 -2
- package/dist/IconFavoriteFilled-aa0d6d5e.js +0 -16
- package/dist/IconFlag-0243bbb9.cjs +0 -2
- package/dist/IconFlag-8bafa50c.js +0 -16
- package/dist/IconFormatBold-4faa5f99.cjs +0 -2
- package/dist/IconFormatBold-70a5cacf.js +0 -16
- package/dist/IconFormatItalic-c06504d7.js +0 -16
- package/dist/IconFormatItalic-fee490fc.cjs +0 -2
- package/dist/IconFormatListBulleted-9493858a.js +0 -16
- package/dist/IconFormatListBulleted-d0a77d0e.cjs +0 -2
- package/dist/IconForum-22217aa0.cjs +0 -2
- package/dist/IconForum-ae4ad63f.js +0 -16
- package/dist/IconGas-198d529d.js +0 -16
- package/dist/IconGas-9d623313.cjs +0 -2
- package/dist/IconGavel-44c29036.js +0 -16
- package/dist/IconGavel-aacae653.cjs +0 -2
- package/dist/IconGears-a52f8ce9.js +0 -16
- package/dist/IconGears-c3b1ba71.cjs +0 -2
- package/dist/IconGlobeLocationPin-4b7fb00b.js +0 -16
- package/dist/IconGlobeLocationPin-b869a4e7.cjs +0 -2
- package/dist/IconGoogle-77ec192e.cjs +0 -2
- package/dist/IconGoogle-febad0d8.js +0 -31
- package/dist/IconGooglePay-049e93ec.cjs +0 -2
- package/dist/IconGooglePay-8cf0286e.js +0 -16
- package/dist/IconGrid-1693599f.cjs +0 -2
- package/dist/IconGrid-25f665e0.js +0 -16
- package/dist/IconHandshake-33b452a7.cjs +0 -2
- package/dist/IconHandshake-7c9f1e84.js +0 -16
- package/dist/IconHandyman-73c7c329.js +0 -16
- package/dist/IconHandyman-ffc0fafb.cjs +0 -2
- package/dist/IconHeight-4fae7545.js +0 -16
- package/dist/IconHeight-d8ee424f.cjs +0 -2
- package/dist/IconHelp-340ee4fb.js +0 -16
- package/dist/IconHelp-43137a66.cjs +0 -2
- package/dist/IconInfo-2d14575c.cjs +0 -2
- package/dist/IconInfo-efead10b.js +0 -16
- package/dist/IconInformation-790c598a.js +0 -16
- package/dist/IconInformation-be043a15.cjs +0 -2
- package/dist/IconInsertText-00236a65.js +0 -16
- package/dist/IconInsertText-14c80b9a.cjs +0 -2
- package/dist/IconInstagram-9f642623.cjs +0 -2
- package/dist/IconInstagram-db345e15.js +0 -16
- package/dist/IconIosShare-167aa8c4.js +0 -16
- package/dist/IconIosShare-526a016a.cjs +0 -2
- package/dist/IconLayout-6963184f.js +0 -16
- package/dist/IconLayout-d0d278c5.cjs +0 -2
- package/dist/IconLevellingJack-04860178.js +0 -20
- package/dist/IconLevellingJack-40c63f7c.cjs +0 -2
- package/dist/IconLinkedIn-2fa1ac20.cjs +0 -2
- package/dist/IconLinkedIn-9c4740a6.js +0 -16
- package/dist/IconLocalShipping-901a3e4c.js +0 -16
- package/dist/IconLocalShipping-9bca5a95.cjs +0 -2
- package/dist/IconLock-1c996287.cjs +0 -2
- package/dist/IconLock-47669e20.js +0 -16
- package/dist/IconMail-9b85058a.js +0 -16
- package/dist/IconMail-f2b8fee4.cjs +0 -2
- package/dist/IconMenu-4bed57f3.js +0 -16
- package/dist/IconMenu-c7c2b143.cjs +0 -2
- package/dist/IconMoneyBag-4a01a10a.js +0 -16
- package/dist/IconMoneyBag-a3d297f5.cjs +0 -2
- package/dist/IconMoreHoriz-2aabe29f.js +0 -16
- package/dist/IconMoreHoriz-2c82da62.cjs +0 -2
- package/dist/IconNotifications-01f7658b.cjs +0 -2
- package/dist/IconNotifications-bcbf1d8c.js +0 -16
- package/dist/IconOdometer-709f4f00.js +0 -16
- package/dist/IconOdometer-a1bc108b.cjs +0 -2
- package/dist/IconOpenInNew-78fffcfe.js +0 -16
- package/dist/IconOpenInNew-9032f1db.cjs +0 -2
- package/dist/IconPalette-22865300.js +0 -16
- package/dist/IconPalette-269c7286.cjs +0 -2
- package/dist/IconPaypal-427e8667.cjs +0 -2
- package/dist/IconPaypal-c28e6dbe.js +0 -16
- package/dist/IconPerson-7ada8b07.js +0 -16
- package/dist/IconPerson-ee87961e.cjs +0 -2
- package/dist/IconPersonSearch-1ccccee1.js +0 -16
- package/dist/IconPersonSearch-b0c1a4e5.cjs +0 -2
- package/dist/IconPhotoCamera-31a58b85.js +0 -16
- package/dist/IconPhotoCamera-56cb060d.cjs +0 -2
- package/dist/IconPinterest-87034fbf.cjs +0 -2
- package/dist/IconPinterest-fe5cc414.js +0 -16
- package/dist/IconPlayArrow-1ed5d884.js +0 -16
- package/dist/IconPlayArrow-80f601bf.cjs +0 -2
- package/dist/IconPolicy-0a3a02bc.js +0 -16
- package/dist/IconPolicy-8f5ca682.cjs +0 -2
- package/dist/IconPower-bfe4f81a.js +0 -16
- package/dist/IconPower-d41e067d.cjs +0 -2
- package/dist/IconPowerOff-0e3118bf.cjs +0 -2
- package/dist/IconPowerOff-dbade32b.js +0 -16
- package/dist/IconPriorityHigh-aae28a02.cjs +0 -2
- package/dist/IconPriorityHigh-ab1b4a95.js +0 -16
- package/dist/IconRemove-73b05132.cjs +0 -2
- package/dist/IconRemove-bab221ba.js +0 -16
- package/dist/IconRequestQuote-e24db541.cjs +0 -2
- package/dist/IconRequestQuote-f6364b1e.js +0 -16
- package/dist/IconResetWrench-5b5c4f74.cjs +0 -2
- package/dist/IconResetWrench-8791a5a9.js +0 -16
- package/dist/IconRoad-3124bbd8.cjs +0 -2
- package/dist/IconRoad-efce130e.js +0 -16
- package/dist/IconRoundedCorner-53cb2cfc.cjs +0 -2
- package/dist/IconRoundedCorner-adbcfd09.js +0 -16
- package/dist/IconRuler-0ceea80a.js +0 -16
- package/dist/IconRuler-5feb5a83.cjs +0 -2
- package/dist/IconRvClassA-80da0dc5.cjs +0 -2
- package/dist/IconRvClassA-e2335760.js +0 -20
- package/dist/IconRvClassB-2032c703.cjs +0 -2
- package/dist/IconRvClassB-ae8261fe.js +0 -20
- package/dist/IconRvClassC-1d11671a.cjs +0 -2
- package/dist/IconRvClassC-c1ff2a5a.js +0 -20
- package/dist/IconRvFifthWheel-b234c67c.cjs +0 -2
- package/dist/IconRvFifthWheel-d201d502.js +0 -20
- package/dist/IconRvFishHouse-b35e6ac1.js +0 -20
- package/dist/IconRvFishHouse-f6edfbbd.cjs +0 -2
- package/dist/IconRvParkModel-20bf39bc.js +0 -20
- package/dist/IconRvParkModel-3707f77a.cjs +0 -2
- package/dist/IconRvPopUpCamper-14ac6a8d.js +0 -20
- package/dist/IconRvPopUpCamper-912c58c2.cjs +0 -2
- package/dist/IconRvTravelTrailer-44a5f64d.cjs +0 -2
- package/dist/IconRvTravelTrailer-e7c21b4c.js +0 -20
- package/dist/IconRvTruckCamper-661b0c28.js +0 -20
- package/dist/IconRvTruckCamper-ce2393f4.cjs +0 -2
- package/dist/IconSailing-19762955.js +0 -16
- package/dist/IconSailing-fa136eea.cjs +0 -2
- package/dist/IconSchool-0bca17f9.cjs +0 -2
- package/dist/IconSchool-2f3ff8d7.js +0 -16
- package/dist/IconSearch-45b2c0e5.cjs +0 -2
- package/dist/IconSearch-f8faefb4.js +0 -16
- package/dist/IconSeating-2ca8921d.js +0 -16
- package/dist/IconSeating-bc19b98f.cjs +0 -2
- package/dist/IconSell-b011ac2d.js +0 -16
- package/dist/IconSell-bcede586.cjs +0 -2
- package/dist/IconSensors-c4387bc9.js +0 -16
- package/dist/IconSensors-f35e7566.cjs +0 -2
- package/dist/IconSettings-32dd2125.js +0 -16
- package/dist/IconSettings-b8848783.cjs +0 -2
- package/dist/IconShare-57f28ce3.js +0 -16
- package/dist/IconShare-ff50a973.cjs +0 -2
- package/dist/IconShieldCheck-0c47755d.js +0 -16
- package/dist/IconShieldCheck-b57fd628.cjs +0 -2
- package/dist/IconShoppingCart-b532dab0.js +0 -16
- package/dist/IconShoppingCart-eee95744.cjs +0 -2
- package/dist/IconSleeps-b994bd2f.js +0 -16
- package/dist/IconSleeps-ffe0dd67.cjs +0 -2
- package/dist/IconSms-0575f458.cjs +0 -2
- package/dist/IconSms-378f373a.js +0 -16
- package/dist/IconSnowflake-2fccf99d.cjs +0 -2
- package/dist/IconSnowflake-9d956143.js +0 -16
- package/dist/IconStar-1b8ad0f9.js +0 -16
- package/dist/IconStar-e2a88836.cjs +0 -2
- package/dist/IconStarFilled-9f4d0d62.cjs +0 -2
- package/dist/IconStarFilled-b73e12dc.js +0 -16
- package/dist/IconStarHalf-0b663cd6.js +0 -16
- package/dist/IconStarHalf-65db4ff6.cjs +0 -2
- package/dist/IconSummarize-69ab122a.js +0 -16
- package/dist/IconSummarize-f73dec0e.cjs +0 -2
- package/dist/IconSwapHoriz-2d9550c3.js +0 -16
- package/dist/IconSwapHoriz-4a33bd68.cjs +0 -2
- package/dist/IconSwapVert-29258e96.cjs +0 -2
- package/dist/IconSwapVert-8085e942.js +0 -16
- package/dist/IconThreeDRotation-33f086a7.js +0 -29
- package/dist/IconThreeDRotation-7be89ff8.cjs +0 -2
- package/dist/IconThumbUp-722d3c77.cjs +0 -2
- package/dist/IconThumbUp-72caf64e.js +0 -16
- package/dist/IconTrendingDown-3da4b7d4.cjs +0 -2
- package/dist/IconTrendingDown-ff3969c7.js +0 -16
- package/dist/IconTrophy-4d05eb75.cjs +0 -2
- package/dist/IconTrophy-f4be8b54.js +0 -16
- package/dist/IconTune-0913ba01.js +0 -16
- package/dist/IconTune-1276696d.cjs +0 -2
- package/dist/IconTwitter-55b8ba63.cjs +0 -2
- package/dist/IconTwitter-9acefb07.js +0 -16
- package/dist/IconUmbrella-775b11b8.js +0 -16
- package/dist/IconUmbrella-81fdaa63.cjs +0 -2
- package/dist/IconVerified-000f615f.js +0 -20
- package/dist/IconVerified-b71255f2.cjs +0 -2
- package/dist/IconVideocam-33650e6f.js +0 -16
- package/dist/IconVideocam-f5b07935.cjs +0 -2
- package/dist/IconViewInAr-a583aff8.cjs +0 -2
- package/dist/IconViewInAr-d1534ef2.js +0 -16
- package/dist/IconVisibility-4984bcac.cjs +0 -2
- package/dist/IconVisibility-a1c21dd0.js +0 -16
- package/dist/IconVolumeOff-35d350ee.cjs +0 -2
- package/dist/IconVolumeOff-8e121ef3.js +0 -16
- package/dist/IconVolumeOn-386ad18b.cjs +0 -2
- package/dist/IconVolumeOn-992e16dd.js +0 -16
- package/dist/IconWarehouse-23085045.cjs +0 -2
- package/dist/IconWarehouse-764da944.js +0 -16
- package/dist/IconWarning-54f3a9ac.cjs +0 -2
- package/dist/IconWarning-6f490acf.js +0 -16
- package/dist/IconWater-0b57b8cc.cjs +0 -2
- package/dist/IconWater-a5f94879.js +0 -16
- package/dist/IconWeight-c6ddd367.cjs +0 -2
- package/dist/IconWeight-e3b3daa6.js +0 -16
- package/dist/IconWidth-a556befc.cjs +0 -2
- package/dist/IconWidth-c81dbc7a.js +0 -16
- package/dist/IconWorkspacePremium-bc3aeb0c.cjs +0 -2
- package/dist/IconWorkspacePremium-efd0a531.js +0 -16
- package/dist/IconWrench-6c52ef4f.js +0 -16
- package/dist/IconWrench-bd1d2907.cjs +0 -2
- package/dist/IconYoutube-a6224033.js +0 -16
- package/dist/IconYoutube-ed951c21.cjs +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as b, createElementBlock as p, openBlock as E, normalizeClass as c, createElementVNode as v, unref as e, ref as F, watch as K, defineAsyncComponent as Mt, markRaw as xt, createBlock as P, createCommentVNode as S, resolveDynamicComponent as Le, createVNode as x, toDisplayString as C, renderSlot as V, withCtx as Re, Fragment as ee, renderList as le, createTextVNode as Yt, onMounted as we, onUnmounted as It, onUpdated as Wt, computed as U, normalizeStyle as Ke, withModifiers as Ee, withDirectives as Ge, vModelSelect as Xt, vModelDynamic as Vt, vModelText as $t, nextTick as Tt, withKeys as gt, shallowRef as Kt, getCurrentScope as zt, onScopeDispose as Qt, shallowReadonly as fe, watchEffect as Zt, onBeforeMount as mt, Teleport as Nt, Transition as qt, vShow as jt } from "vue";
|
|
2
2
|
const it = {
|
|
3
3
|
HORIZONTAL: "horizontal",
|
|
4
4
|
VERTICAL: "vertical"
|
|
@@ -507,7 +507,7 @@ const it = {
|
|
|
507
507
|
}
|
|
508
508
|
}, Jt = {
|
|
509
509
|
class: /* @__PURE__ */ c(["tide-divider"])
|
|
510
|
-
}, es = /* @__PURE__ */
|
|
510
|
+
}, es = /* @__PURE__ */ b({
|
|
511
511
|
__name: "TideDivider",
|
|
512
512
|
props: {
|
|
513
513
|
orientation: { default: it.HORIZONTAL }
|
|
@@ -523,16 +523,22 @@ const it = {
|
|
|
523
523
|
}, null, 2)
|
|
524
524
|
]));
|
|
525
525
|
}
|
|
526
|
-
})
|
|
527
|
-
const w = (i, s) => {
|
|
526
|
+
}), G = (i, s) => {
|
|
528
527
|
const o = i.__vccOpts || i;
|
|
529
528
|
for (const [n, a] of s)
|
|
530
529
|
o[n] = a;
|
|
531
530
|
return o;
|
|
532
|
-
}, Ve = /* @__PURE__ */
|
|
533
|
-
const
|
|
534
|
-
return
|
|
535
|
-
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
|
|
531
|
+
}, Ve = /* @__PURE__ */ G(es, [["__scopeId", "data-v-c2dc7d09"]]), nt = (i, s, o) => {
|
|
532
|
+
const n = i[s];
|
|
533
|
+
return n ? typeof n == "function" ? n() : Promise.resolve(n) : new Promise((a, d) => {
|
|
534
|
+
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
|
|
535
|
+
d.bind(
|
|
536
|
+
null,
|
|
537
|
+
new Error(
|
|
538
|
+
"Unknown variable dynamic import: " + s + (s.split("/").length !== o ? ". Note that variables only represent file names one level deep." : "")
|
|
539
|
+
)
|
|
540
|
+
)
|
|
541
|
+
);
|
|
536
542
|
});
|
|
537
543
|
}, ts = {
|
|
538
544
|
AERO: "aero",
|
|
@@ -570,34 +576,33 @@ const w = (i, s) => {
|
|
|
570
576
|
break;
|
|
571
577
|
}
|
|
572
578
|
return s;
|
|
573
|
-
}, is = (i) => `$${i ? ze(i) : String(i || "0")}`, H = /* @__PURE__ */
|
|
579
|
+
}, is = (i) => `$${i ? ze(i) : String(i || "0")}`, H = /* @__PURE__ */ b({
|
|
574
580
|
__name: "TideIcon",
|
|
575
581
|
props: {
|
|
576
582
|
icon: {},
|
|
577
583
|
size: { default: Y.SMALL }
|
|
578
584
|
},
|
|
579
585
|
setup(i) {
|
|
580
|
-
const s = i, o =
|
|
586
|
+
const s = i, o = F();
|
|
581
587
|
return K(
|
|
582
588
|
() => s.icon,
|
|
583
589
|
async () => {
|
|
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 =
|
|
590
|
+
const n = s.icon, a = ss(n), [d] = n.split("-"), r = ts[d == null ? void 0 : d.toUpperCase()], l = Mt(() => r ? nt(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/realm/atv/IconAtvAtv.svg": () => import("./IconAtvAtv-GFhgoQXA.js"), "../assets/svg/icons/realm/atv/IconAtvDuneBuggy.svg": () => import("./IconAtvDuneBuggy-Eou8hc_1.js"), "../assets/svg/icons/realm/atv/IconAtvGoKart.svg": () => import("./IconAtvGoKart-Cj3k54oS.js"), "../assets/svg/icons/realm/atv/IconAtvGolfCart.svg": () => import("./IconAtvGolfCart-CCQwt0_I.js"), "../assets/svg/icons/realm/atv/IconAtvSandRail.svg": () => import("./IconAtvSandRail-HpaJVocj.js"), "../assets/svg/icons/realm/atv/IconAtvSideBySide.svg": () => import("./IconAtvSideBySide-BxqtCex8.js"), "../assets/svg/icons/realm/atv/IconAtvTrailer.svg": () => import("./IconAtvTrailer-CTlZZ8Wn.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartPwc.svg": () => import("./IconBoatmartPwc-D6wQ7mNA.js"), "../assets/svg/icons/realm/boatmart/IconBoatmartTrailer.svg": () => import("./IconBoatmartTrailer-hKiD_NXI.js"), "../assets/svg/icons/realm/rv/IconRvClassA.svg": () => import("./IconRvClassA-pAChL2Qm.js"), "../assets/svg/icons/realm/rv/IconRvClassB.svg": () => import("./IconRvClassB-BWaLlkdV.js"), "../assets/svg/icons/realm/rv/IconRvClassC.svg": () => import("./IconRvClassC-CeDhPBYp.js"), "../assets/svg/icons/realm/rv/IconRvFifthWheel.svg": () => import("./IconRvFifthWheel-D98H64pq.js"), "../assets/svg/icons/realm/rv/IconRvFishHouse.svg": () => import("./IconRvFishHouse-B9v3_c4m.js"), "../assets/svg/icons/realm/rv/IconRvParkModel.svg": () => import("./IconRvParkModel-DJjJJFrS.js"), "../assets/svg/icons/realm/rv/IconRvPopUpCamper.svg": () => import("./IconRvPopUpCamper-DC5JLH5u.js"), "../assets/svg/icons/realm/rv/IconRvTravelTrailer.svg": () => import("./IconRvTravelTrailer-CUzyIoJH.js"), "../assets/svg/icons/realm/rv/IconRvTruckCamper.svg": () => import("./IconRvTruckCamper-CHLJEty2.js") }), `../assets/svg/icons/realm/${r}/Icon${a}.svg`, 7) : nt(/* @__PURE__ */ Object.assign({ "../assets/svg/icons/IconAccountBalance.svg": () => import("./IconAccountBalance-Ck1QODok.js"), "../assets/svg/icons/IconAcute.svg": () => import("./IconAcute-Dy5x_yJL.js"), "../assets/svg/icons/IconAdd.svg": () => import("./IconAdd-CoVrVzyk.js"), "../assets/svg/icons/IconAiDescription.svg": () => import("./IconAiDescription-6Pv0Y_Yt.js"), "../assets/svg/icons/IconAlignSpaceEven.svg": () => import("./IconAlignSpaceEven-BF_GmIrK.js"), "../assets/svg/icons/IconApplePay.svg": () => import("./IconApplePay-oQ4zV5vN.js"), "../assets/svg/icons/IconArrowBack.svg": () => import("./IconArrowBack-BP2TEpuq.js"), "../assets/svg/icons/IconArrowCycle.svg": () => import("./IconArrowCycle-TQa-fbVD.js"), "../assets/svg/icons/IconArrowForward.svg": () => import("./IconArrowForward-VWVINc35.js"), "../assets/svg/icons/IconArrowRight.svg": () => import("./IconArrowRight-BJYT2e-d.js"), "../assets/svg/icons/IconArrowUp.svg": () => import("./IconArrowUp-JSl5zOyP.js"), "../assets/svg/icons/IconAssignment.svg": () => import("./IconAssignment-CSn4vDyt.js"), "../assets/svg/icons/IconAttachMoney.svg": () => import("./IconAttachMoney-CIYp4I2h.js"), "../assets/svg/icons/IconAutoRenew.svg": () => import("./IconAutoRenew-Dp5h0lzF.js"), "../assets/svg/icons/IconAwardStar.svg": () => import("./IconAwardStar-CdAw4NY5.js"), "../assets/svg/icons/IconBed.svg": () => import("./IconBed-B1u5P61X.js"), "../assets/svg/icons/IconBolt.svg": () => import("./IconBolt-CskRJDT1.js"), "../assets/svg/icons/IconBookmark.svg": () => import("./IconBookmark-DsEGlmme.js"), "../assets/svg/icons/IconBunkhouse.svg": () => import("./IconBunkhouse-BLo-n_Mb.js"), "../assets/svg/icons/IconCalendarMonth.svg": () => import("./IconCalendarMonth-Cfs-ZKLJ.js"), "../assets/svg/icons/IconCall.svg": () => import("./IconCall-BCjepEju.js"), "../assets/svg/icons/IconCallQuality.svg": () => import("./IconCallQuality-c7UaokVa.js"), "../assets/svg/icons/IconCarRental.svg": () => import("./IconCarRental-D-qYjRe5.js"), "../assets/svg/icons/IconCheck.svg": () => import("./IconCheck-DVE4Knnl.js"), "../assets/svg/icons/IconChevronLeft.svg": () => import("./IconChevronLeft-DStWQfoj.js"), "../assets/svg/icons/IconChevronRight.svg": () => import("./IconChevronRight-3vFVvnNb.js"), "../assets/svg/icons/IconClear.svg": () => import("./IconClear-F6afoxzY.js"), "../assets/svg/icons/IconClose.svg": () => import("./IconClose-eMGGtfEC.js"), "../assets/svg/icons/IconContract.svg": () => import("./IconContract-f9bj5j-_.js"), "../assets/svg/icons/IconCrash.svg": () => import("./IconCrash-B2l3Ie38.js"), "../assets/svg/icons/IconDashboardCustomize.svg": () => import("./IconDashboardCustomize-CyQTFASs.js"), "../assets/svg/icons/IconDelete.svg": () => import("./IconDelete-Couv2iBA.js"), "../assets/svg/icons/IconDiamond.svg": () => import("./IconDiamond-sol6SUrB.js"), "../assets/svg/icons/IconDirectionsBoat.svg": () => import("./IconDirectionsBoat-S07T_dm_.js"), "../assets/svg/icons/IconDomain.svg": () => import("./IconDomain-ECxC_qj-.js"), "../assets/svg/icons/IconDraft.svg": () => import("./IconDraft-BFxB85ro.js"), "../assets/svg/icons/IconEdit.svg": () => import("./IconEdit-BoLO_nL5.js"), "../assets/svg/icons/IconEngine.svg": () => import("./IconEngine-BBaqQJ6N.js"), "../assets/svg/icons/IconEngineering.svg": () => import("./IconEngineering-C60OP34_.js"), "../assets/svg/icons/IconError.svg": () => import("./IconError-Dd2H7cOG.js"), "../assets/svg/icons/IconExpandContent.svg": () => import("./IconExpandContent-C1xzfkui.js"), "../assets/svg/icons/IconExpandLess.svg": () => import("./IconExpandLess-Bf6Nypx3.js"), "../assets/svg/icons/IconExpandMore.svg": () => import("./IconExpandMore-BffI3rnY.js"), "../assets/svg/icons/IconFacebook.svg": () => import("./IconFacebook-Cki8sZRt.js"), "../assets/svg/icons/IconFavorite.svg": () => import("./IconFavorite-CyRSAVdw.js"), "../assets/svg/icons/IconFavoriteFilled.svg": () => import("./IconFavoriteFilled-DeNJvMmm.js"), "../assets/svg/icons/IconFlag.svg": () => import("./IconFlag-aeogw6hc.js"), "../assets/svg/icons/IconFormatBold.svg": () => import("./IconFormatBold-CtYxihT6.js"), "../assets/svg/icons/IconFormatItalic.svg": () => import("./IconFormatItalic-EUVbp7Qb.js"), "../assets/svg/icons/IconFormatListBulleted.svg": () => import("./IconFormatListBulleted-D-VQIabf.js"), "../assets/svg/icons/IconForum.svg": () => import("./IconForum-BrjEMf33.js"), "../assets/svg/icons/IconGas.svg": () => import("./IconGas-D_rJSqnT.js"), "../assets/svg/icons/IconGavel.svg": () => import("./IconGavel-D9XWUMJt.js"), "../assets/svg/icons/IconGears.svg": () => import("./IconGears-Cavx6RDS.js"), "../assets/svg/icons/IconGlobeLocationPin.svg": () => import("./IconGlobeLocationPin-CdwVS7ad.js"), "../assets/svg/icons/IconGoogle.svg": () => import("./IconGoogle-CW-JtHsA.js"), "../assets/svg/icons/IconGooglePay.svg": () => import("./IconGooglePay-lhVEuNTf.js"), "../assets/svg/icons/IconGrid.svg": () => import("./IconGrid-B-Z-t5S5.js"), "../assets/svg/icons/IconHandshake.svg": () => import("./IconHandshake-CCtEDb5s.js"), "../assets/svg/icons/IconHandyman.svg": () => import("./IconHandyman-CeFGeaUD.js"), "../assets/svg/icons/IconHeight.svg": () => import("./IconHeight-CU7292SF.js"), "../assets/svg/icons/IconHelp.svg": () => import("./IconHelp-CpHZAsX2.js"), "../assets/svg/icons/IconInfo.svg": () => import("./IconInfo-Du8txE_y.js"), "../assets/svg/icons/IconInformation.svg": () => import("./IconInformation-fpX8-lfe.js"), "../assets/svg/icons/IconInsertText.svg": () => import("./IconInsertText-B50Ml556.js"), "../assets/svg/icons/IconInstagram.svg": () => import("./IconInstagram-x9ut2Rvt.js"), "../assets/svg/icons/IconIosShare.svg": () => import("./IconIosShare-BAZa5TGR.js"), "../assets/svg/icons/IconLayout.svg": () => import("./IconLayout-Ctl5Nh6E.js"), "../assets/svg/icons/IconLevellingJack.svg": () => import("./IconLevellingJack-OIJRh7On.js"), "../assets/svg/icons/IconLinkedIn.svg": () => import("./IconLinkedIn-DpuBRGWk.js"), "../assets/svg/icons/IconLocalShipping.svg": () => import("./IconLocalShipping-DFGIrDiT.js"), "../assets/svg/icons/IconLock.svg": () => import("./IconLock-Kkxyx6xF.js"), "../assets/svg/icons/IconMail.svg": () => import("./IconMail-C_KZ99bY.js"), "../assets/svg/icons/IconMenu.svg": () => import("./IconMenu-DdVdEPQY.js"), "../assets/svg/icons/IconMoneyBag.svg": () => import("./IconMoneyBag-Bpwqj4h_.js"), "../assets/svg/icons/IconMoreHoriz.svg": () => import("./IconMoreHoriz-CMqeM-vy.js"), "../assets/svg/icons/IconNotifications.svg": () => import("./IconNotifications-C-5jqVsp.js"), "../assets/svg/icons/IconOdometer.svg": () => import("./IconOdometer-DOvJTqMC.js"), "../assets/svg/icons/IconOpenInNew.svg": () => import("./IconOpenInNew-BECM_cge.js"), "../assets/svg/icons/IconPalette.svg": () => import("./IconPalette-cNHa_Dl9.js"), "../assets/svg/icons/IconPaypal.svg": () => import("./IconPaypal-0MB9NiPi.js"), "../assets/svg/icons/IconPerson.svg": () => import("./IconPerson-C9FdsFRF.js"), "../assets/svg/icons/IconPersonSearch.svg": () => import("./IconPersonSearch-BAwODsOw.js"), "../assets/svg/icons/IconPhotoCamera.svg": () => import("./IconPhotoCamera-Dhq3zkZ1.js"), "../assets/svg/icons/IconPinterest.svg": () => import("./IconPinterest-B2ilympx.js"), "../assets/svg/icons/IconPlayArrow.svg": () => import("./IconPlayArrow-DWY4o6mi.js"), "../assets/svg/icons/IconPolicy.svg": () => import("./IconPolicy-CTm0qx9m.js"), "../assets/svg/icons/IconPower.svg": () => import("./IconPower-El-f1YpW.js"), "../assets/svg/icons/IconPowerOff.svg": () => import("./IconPowerOff-BeF6a0I_.js"), "../assets/svg/icons/IconPriorityHigh.svg": () => import("./IconPriorityHigh-BOUPMj-c.js"), "../assets/svg/icons/IconRemove.svg": () => import("./IconRemove-DJ8Ats3O.js"), "../assets/svg/icons/IconRequestQuote.svg": () => import("./IconRequestQuote-Dx73kEAB.js"), "../assets/svg/icons/IconResetWrench.svg": () => import("./IconResetWrench-afPLSCCR.js"), "../assets/svg/icons/IconRoad.svg": () => import("./IconRoad-D8LbDPzU.js"), "../assets/svg/icons/IconRoundedCorner.svg": () => import("./IconRoundedCorner-CBFrVTjO.js"), "../assets/svg/icons/IconRuler.svg": () => import("./IconRuler-BbrDrxik.js"), "../assets/svg/icons/IconSailing.svg": () => import("./IconSailing-Ct5A7oe-.js"), "../assets/svg/icons/IconSchool.svg": () => import("./IconSchool-DkD-by-f.js"), "../assets/svg/icons/IconSearch.svg": () => import("./IconSearch-C3_cVelm.js"), "../assets/svg/icons/IconSeating.svg": () => import("./IconSeating-B2-FR2aI.js"), "../assets/svg/icons/IconSell.svg": () => import("./IconSell-B01QAmJJ.js"), "../assets/svg/icons/IconSensors.svg": () => import("./IconSensors-C9ikFDSl.js"), "../assets/svg/icons/IconSettings.svg": () => import("./IconSettings-C7CzSyB_.js"), "../assets/svg/icons/IconShare.svg": () => import("./IconShare-CC3TgzM9.js"), "../assets/svg/icons/IconShieldCheck.svg": () => import("./IconShieldCheck-BKdiIhJ-.js"), "../assets/svg/icons/IconShoppingCart.svg": () => import("./IconShoppingCart-CQZWosiy.js"), "../assets/svg/icons/IconSleeps.svg": () => import("./IconSleeps-DDIWvIh8.js"), "../assets/svg/icons/IconSms.svg": () => import("./IconSms-C22lp6yM.js"), "../assets/svg/icons/IconSnowflake.svg": () => import("./IconSnowflake-aBZ4o4X2.js"), "../assets/svg/icons/IconStar.svg": () => import("./IconStar-2gDebu9X.js"), "../assets/svg/icons/IconStarFilled.svg": () => import("./IconStarFilled-CI8JFRKm.js"), "../assets/svg/icons/IconStarHalf.svg": () => import("./IconStarHalf-9Mtxrxy2.js"), "../assets/svg/icons/IconSummarize.svg": () => import("./IconSummarize-DjgKmXYf.js"), "../assets/svg/icons/IconSwapHoriz.svg": () => import("./IconSwapHoriz-BI3V7cXl.js"), "../assets/svg/icons/IconSwapVert.svg": () => import("./IconSwapVert-Bxn4iSnZ.js"), "../assets/svg/icons/IconThreeDRotation.svg": () => import("./IconThreeDRotation-C5sf5vQe.js"), "../assets/svg/icons/IconThumbUp.svg": () => import("./IconThumbUp-Bewoaeaz.js"), "../assets/svg/icons/IconTrendingDown.svg": () => import("./IconTrendingDown-ClqzR4Gm.js"), "../assets/svg/icons/IconTrophy.svg": () => import("./IconTrophy-BvyInFpa.js"), "../assets/svg/icons/IconTune.svg": () => import("./IconTune-DM9oNvly.js"), "../assets/svg/icons/IconTwitter.svg": () => import("./IconTwitter-Di3mFm4J.js"), "../assets/svg/icons/IconUmbrella.svg": () => import("./IconUmbrella-KarDrV_0.js"), "../assets/svg/icons/IconVerified.svg": () => import("./IconVerified-BSLc-Tng.js"), "../assets/svg/icons/IconVideocam.svg": () => import("./IconVideocam-Bk2i6zSL.js"), "../assets/svg/icons/IconViewInAr.svg": () => import("./IconViewInAr-CyH3TuS9.js"), "../assets/svg/icons/IconVisibility.svg": () => import("./IconVisibility-C7r-OBqZ.js"), "../assets/svg/icons/IconVolumeOff.svg": () => import("./IconVolumeOff-DrXwzNlx.js"), "../assets/svg/icons/IconVolumeOn.svg": () => import("./IconVolumeOn-DMqPq3mL.js"), "../assets/svg/icons/IconWarehouse.svg": () => import("./IconWarehouse-BLILe5TP.js"), "../assets/svg/icons/IconWarning.svg": () => import("./IconWarning-BGb_hd4L.js"), "../assets/svg/icons/IconWater.svg": () => import("./IconWater-BFIBeGBM.js"), "../assets/svg/icons/IconWeight.svg": () => import("./IconWeight-IXMjxgaM.js"), "../assets/svg/icons/IconWidth.svg": () => import("./IconWidth-CWT_XoXm.js"), "../assets/svg/icons/IconWorkspacePremium.svg": () => import("./IconWorkspacePremium-B_CTpaCF.js"), "../assets/svg/icons/IconWrench.svg": () => import("./IconWrench-CgaRK8xS.js"), "../assets/svg/icons/IconYoutube.svg": () => import("./IconYoutube-BBBj6jXd.js") }), `../assets/svg/icons/Icon${a}.svg`, 5));
|
|
591
|
+
o.value = xt(l);
|
|
586
592
|
},
|
|
587
593
|
{ immediate: !0 }
|
|
588
594
|
), (n, a) => (E(), p("div", {
|
|
589
595
|
class: c(["tide-icon", s.size])
|
|
590
596
|
}, [
|
|
591
|
-
o.value ? (E(), P(
|
|
597
|
+
o.value ? (E(), P(Le(o.value), {
|
|
592
598
|
key: 0,
|
|
593
599
|
class: c([e(t).DISPLAY.BLOCK]),
|
|
594
600
|
"data-icon": n.icon,
|
|
595
601
|
fill: "currentColor"
|
|
596
|
-
}, null, 8, ["class", "data-icon"])) :
|
|
602
|
+
}, null, 8, ["class", "data-icon"])) : S("", !0)
|
|
597
603
|
], 2));
|
|
598
604
|
}
|
|
599
|
-
})
|
|
600
|
-
const G = {
|
|
605
|
+
}), w = {
|
|
601
606
|
ACCOUNT_BALANCE: "account-balance",
|
|
602
607
|
ACUTE: "acute",
|
|
603
608
|
ADD: "add",
|
|
@@ -731,7 +736,7 @@ const G = {
|
|
|
731
736
|
WORKSPACE_PREMIUM: "workspace-premium",
|
|
732
737
|
WRENCH: "wrench",
|
|
733
738
|
YOUTUBE: "youtube"
|
|
734
|
-
},
|
|
739
|
+
}, Jo = {
|
|
735
740
|
ATV: {
|
|
736
741
|
ATV: "atv-atv",
|
|
737
742
|
DUNE_BUGGY: "atv-dune-buggy",
|
|
@@ -756,7 +761,7 @@ const G = {
|
|
|
756
761
|
TRAVEL_TRAILER: "rv-travel-trailer",
|
|
757
762
|
TRUCK_CAMPER: "rv-truck-camper"
|
|
758
763
|
}
|
|
759
|
-
}, ns = { class: "tide-accordion-item" }, as = /* @__PURE__ */
|
|
764
|
+
}, ns = { class: "tide-accordion-item" }, as = /* @__PURE__ */ b({
|
|
760
765
|
__name: "TideAccordionItem",
|
|
761
766
|
props: {
|
|
762
767
|
hasBottomDivider: { type: Boolean, default: !1 },
|
|
@@ -771,7 +776,7 @@ const G = {
|
|
|
771
776
|
s("toggle");
|
|
772
777
|
};
|
|
773
778
|
return (a, d) => (E(), p("div", ns, [
|
|
774
|
-
o.hasTopDivider ? (E(), P(Ve, { key: 0 })) :
|
|
779
|
+
o.hasTopDivider ? (E(), P(Ve, { key: 0 })) : S("", !0),
|
|
775
780
|
v("div", {
|
|
776
781
|
class: c(["tide-accordion-head", e(t).DISPLAY.FLEX, e(t).AXIS1.BETWEEN, e(t).PADDING.Y.HALF, e(t).CURSOR.POINTER]),
|
|
777
782
|
onClick: n
|
|
@@ -779,14 +784,14 @@ const G = {
|
|
|
779
784
|
v("div", {
|
|
780
785
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.HALF, e(t).FONT.ROLE.LABEL_1_SEMIBOLD])
|
|
781
786
|
}, [
|
|
782
|
-
v("span", null,
|
|
787
|
+
v("span", null, C(o.label), 1),
|
|
783
788
|
o.isOptional ? (E(), p("span", {
|
|
784
789
|
key: 0,
|
|
785
790
|
class: c([e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
786
|
-
}, " (optional) ", 2)) :
|
|
791
|
+
}, " (optional) ", 2)) : S("", !0)
|
|
787
792
|
], 2),
|
|
788
|
-
|
|
789
|
-
icon: a.isExpanded ? e(
|
|
793
|
+
x(H, {
|
|
794
|
+
icon: a.isExpanded ? e(w).EXPAND_LESS : e(w).EXPAND_MORE,
|
|
790
795
|
size: e(Y).LARGE
|
|
791
796
|
}, null, 8, ["icon", "size"])
|
|
792
797
|
], 2),
|
|
@@ -799,11 +804,10 @@ const G = {
|
|
|
799
804
|
V(a.$slots, "default", {}, void 0, !0)
|
|
800
805
|
], 2)
|
|
801
806
|
], 2),
|
|
802
|
-
o.hasBottomDivider ? (E(), P(Ve, { key: 1 })) :
|
|
807
|
+
o.hasBottomDivider ? (E(), P(Ve, { key: 1 })) : S("", !0)
|
|
803
808
|
]));
|
|
804
809
|
}
|
|
805
|
-
})
|
|
806
|
-
const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
810
|
+
}), ei = /* @__PURE__ */ G(as, [["__scopeId", "data-v-d5fdff3b"]]), M = {
|
|
807
811
|
BUTTON: "button",
|
|
808
812
|
LINK: "a"
|
|
809
813
|
}, re = {
|
|
@@ -819,11 +823,11 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
819
823
|
}, se = {
|
|
820
824
|
BLANK: "_blank",
|
|
821
825
|
SELF: void 0
|
|
822
|
-
}, Z = /* @__PURE__ */
|
|
826
|
+
}, Z = /* @__PURE__ */ b({
|
|
823
827
|
__name: "TideButtonIcon",
|
|
824
828
|
props: {
|
|
825
829
|
disabled: { type: Boolean, default: !1 },
|
|
826
|
-
element: { default:
|
|
830
|
+
element: { default: M.BUTTON },
|
|
827
831
|
href: { default: void 0 },
|
|
828
832
|
icon: { default: void 0 },
|
|
829
833
|
isNewTab: { type: Boolean, default: !1 },
|
|
@@ -831,24 +835,24 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
831
835
|
},
|
|
832
836
|
setup(i) {
|
|
833
837
|
const s = i;
|
|
834
|
-
return (o, n) => (E(), P(
|
|
838
|
+
return (o, n) => (E(), P(Le(s.element === e(M).LINK ? "a" : "button"), {
|
|
835
839
|
"aria-label": s.icon,
|
|
836
840
|
class: c([
|
|
837
|
-
s.element === e(
|
|
841
|
+
s.element === e(M).LINK ? "tide-link-as-button-icon" : "tide-button-icon",
|
|
838
842
|
s.priority && `tide-button-${s.priority}`,
|
|
839
843
|
[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(
|
|
844
|
+
s.element === e(M).LINK ? [e(t).UNDERLINE.REST.OFF] : ""
|
|
841
845
|
]),
|
|
842
|
-
disabled: s.element === e(
|
|
843
|
-
href: s.element === e(
|
|
844
|
-
target: s.element === e(
|
|
846
|
+
disabled: s.element === e(M).BUTTON && s.disabled,
|
|
847
|
+
href: s.element === e(M).LINK && s.href ? s.href : void 0,
|
|
848
|
+
target: s.element === e(M).LINK && s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
845
849
|
}, {
|
|
846
|
-
default:
|
|
850
|
+
default: Re(() => [
|
|
847
851
|
s.icon ? (E(), P(H, {
|
|
848
852
|
key: 0,
|
|
849
853
|
icon: s.icon,
|
|
850
854
|
size: e(Y).LARGE
|
|
851
|
-
}, null, 8, ["icon", "size"])) :
|
|
855
|
+
}, null, 8, ["icon", "size"])) : S("", !0)
|
|
852
856
|
]),
|
|
853
857
|
_: 1
|
|
854
858
|
}, 8, ["aria-label", "class", "disabled", "href", "target"]));
|
|
@@ -858,7 +862,7 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
858
862
|
INFO: "info",
|
|
859
863
|
SUCCESS: "success",
|
|
860
864
|
WARNING: "warning"
|
|
861
|
-
}, rs = /* @__PURE__ */
|
|
865
|
+
}, rs = /* @__PURE__ */ b({
|
|
862
866
|
__name: "TideAlert",
|
|
863
867
|
props: {
|
|
864
868
|
heading: { default: void 0 },
|
|
@@ -884,7 +888,7 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
884
888
|
o.isToast ? [e(t).BG.SECONDARY, e(t).FONT.COLOR.SECONDARY, e(t).SHADOW.BOTTOM] : e(t).BORDER.LEFT.TWO
|
|
885
889
|
])
|
|
886
890
|
}, [
|
|
887
|
-
o.isToast ?
|
|
891
|
+
o.isToast ? S("", !0) : (E(), p("div", {
|
|
888
892
|
key: 0,
|
|
889
893
|
class: c([
|
|
890
894
|
"tide-alert-icon",
|
|
@@ -897,8 +901,8 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
897
901
|
o.type === e(ae).WARNING && e(t).BG.GLOBAL.PRIMARY.WARNING
|
|
898
902
|
])
|
|
899
903
|
}, [
|
|
900
|
-
|
|
901
|
-
icon: e(
|
|
904
|
+
x(H, {
|
|
905
|
+
icon: e(w).INFORMATION,
|
|
902
906
|
size: e(Y).SMALL
|
|
903
907
|
}, null, 8, ["icon", "size"])
|
|
904
908
|
], 2)),
|
|
@@ -907,16 +911,16 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
907
911
|
}, [
|
|
908
912
|
v("h2", {
|
|
909
913
|
class: c([e(t).FONT.ROLE.LABEL_1_SEMIBOLD])
|
|
910
|
-
},
|
|
914
|
+
}, C(o.heading), 3)
|
|
911
915
|
], 2),
|
|
912
916
|
n.isDismissible ? (E(), P(Z, {
|
|
913
917
|
key: 1,
|
|
914
918
|
class: c(["tide-alert-close", e(t).AXIS2.CENTER, e(t).FONT.COLOR.SURFACE.DEFAULT]),
|
|
915
|
-
icon: e(
|
|
919
|
+
icon: e(w).CLOSE,
|
|
916
920
|
priority: e($).QUATERNARY,
|
|
917
921
|
onClick: a[0] || (a[0] = (d) => s("close")),
|
|
918
922
|
"aria-label": "Close alert"
|
|
919
|
-
}, null, 8, ["class", "icon", "priority"])) :
|
|
923
|
+
}, null, 8, ["class", "icon", "priority"])) : S("", !0),
|
|
920
924
|
v("div", {
|
|
921
925
|
class: c(["tide-alert-body", e(t).FONT.ROLE.LABEL_1, !o.isToast && e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
922
926
|
}, [
|
|
@@ -924,8 +928,7 @@ const Jo = /* @__PURE__ */ w(as, [["__scopeId", "data-v-d5fdff3b"]]), k = {
|
|
|
924
928
|
], 2)
|
|
925
929
|
], 2));
|
|
926
930
|
}
|
|
927
|
-
})
|
|
928
|
-
const ei = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
931
|
+
}), ti = /* @__PURE__ */ G(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
929
932
|
BLACK: "black",
|
|
930
933
|
BLUE: "blue",
|
|
931
934
|
GREEN: "green",
|
|
@@ -981,7 +984,7 @@ const ei = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
981
984
|
YEARS_10: "10",
|
|
982
985
|
YEARS_15: "15",
|
|
983
986
|
YEARS_5: "5"
|
|
984
|
-
},
|
|
987
|
+
}, si = /* @__PURE__ */ b({
|
|
985
988
|
__name: "TideBadge",
|
|
986
989
|
props: {
|
|
987
990
|
color: { default: void 0 },
|
|
@@ -1011,13 +1014,13 @@ const ei = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1011
1014
|
key: 0,
|
|
1012
1015
|
class: c([e(t).FLEX.SHRINK.OFF, s.color && e(at)[s.color].iconColor]),
|
|
1013
1016
|
icon: s.iconLeading
|
|
1014
|
-
}, null, 8, ["class", "icon"])) :
|
|
1017
|
+
}, null, 8, ["class", "icon"])) : S("", !0),
|
|
1015
1018
|
v("span", {
|
|
1016
1019
|
class: c([e(t).ELLIPSIS])
|
|
1017
|
-
},
|
|
1020
|
+
}, C(s.label), 3)
|
|
1018
1021
|
], 2));
|
|
1019
1022
|
}
|
|
1020
|
-
}),
|
|
1023
|
+
}), oi = /* @__PURE__ */ b({
|
|
1021
1024
|
__name: "TideBadgeTrustedPartner",
|
|
1022
1025
|
props: {
|
|
1023
1026
|
years: { default: ls.YEARS_5 }
|
|
@@ -1031,25 +1034,23 @@ const ei = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1031
1034
|
e(t).DISPLAY.INLINE_FLEX,
|
|
1032
1035
|
e(t).AXIS2.CENTER,
|
|
1033
1036
|
e(t).GAP.QUARTER,
|
|
1034
|
-
e(t).PADDING.Y.QUARTER,
|
|
1035
|
-
e(t).PADDING.X.HALF,
|
|
1036
1037
|
e(t).ELLIPSIS,
|
|
1037
1038
|
e(t).FONT.ROLE.LABEL_2,
|
|
1038
1039
|
e(t).WHITESPACE_WRAP.OFF
|
|
1039
1040
|
])
|
|
1040
1041
|
}, [
|
|
1041
|
-
|
|
1042
|
+
x(H, {
|
|
1042
1043
|
class: c([e(t).FLEX.SHRINK.OFF]),
|
|
1043
|
-
icon: e(
|
|
1044
|
+
icon: e(w).AWARD_STAR
|
|
1044
1045
|
}, null, 8, ["class", "icon"]),
|
|
1045
1046
|
v("div", {
|
|
1046
1047
|
class: c([e(t).ELLIPSIS])
|
|
1047
1048
|
}, [
|
|
1048
|
-
v("span", null,
|
|
1049
|
+
v("span", null, C(s.years) + " year trusted partner", 1)
|
|
1049
1050
|
], 2)
|
|
1050
1051
|
], 2));
|
|
1051
1052
|
}
|
|
1052
|
-
}), cs = /* @__PURE__ */
|
|
1053
|
+
}), cs = /* @__PURE__ */ b({
|
|
1053
1054
|
__name: "TideBadgeVerifiedVehicle",
|
|
1054
1055
|
setup(i) {
|
|
1055
1056
|
return (s, o) => (E(), p("div", {
|
|
@@ -1068,17 +1069,16 @@ const ei = /* @__PURE__ */ w(rs, [["__scopeId", "data-v-4ce7b6b8"]]), J = {
|
|
|
1068
1069
|
e(t).WHITESPACE_WRAP.OFF
|
|
1069
1070
|
])
|
|
1070
1071
|
}, [
|
|
1071
|
-
|
|
1072
|
+
x(H, {
|
|
1072
1073
|
class: c([e(t).FLEX.SHRINK.OFF]),
|
|
1073
|
-
icon: e(
|
|
1074
|
+
icon: e(w).VERIFIED
|
|
1074
1075
|
}, null, 8, ["class", "icon"]),
|
|
1075
1076
|
v("span", {
|
|
1076
1077
|
class: c([e(t).ELLIPSIS])
|
|
1077
1078
|
}, "Verified vehicle", 2)
|
|
1078
1079
|
], 2));
|
|
1079
1080
|
}
|
|
1080
|
-
})
|
|
1081
|
-
const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["data-track", "href"], us = ["data-track"], Es = { key: 0 }, ii = /* @__PURE__ */ C({
|
|
1081
|
+
}), ii = /* @__PURE__ */ G(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["data-track", "href"], us = ["data-track"], Es = { key: 0 }, ni = /* @__PURE__ */ b({
|
|
1082
1082
|
__name: "TideBreadCrumbs",
|
|
1083
1083
|
props: {
|
|
1084
1084
|
breadCrumbs: { default: void 0 }
|
|
@@ -1099,26 +1099,26 @@ const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["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
|
-
},
|
|
1102
|
+
}, C(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
|
-
},
|
|
1106
|
+
}, C(a.label), 11, us))
|
|
1107
1107
|
], 2),
|
|
1108
1108
|
s.breadCrumbs && d < s.breadCrumbs.length - 1 ? (E(), p("li", Es, [
|
|
1109
|
-
|
|
1110
|
-
icon: e(
|
|
1109
|
+
x(H, {
|
|
1110
|
+
icon: e(w).ARROW_RIGHT,
|
|
1111
1111
|
size: e(Y).SMALL
|
|
1112
1112
|
}, null, 8, ["icon", "size"])
|
|
1113
|
-
])) :
|
|
1113
|
+
])) : S("", !0)
|
|
1114
1114
|
], 64))), 128))
|
|
1115
1115
|
], 2));
|
|
1116
1116
|
}
|
|
1117
|
-
}),
|
|
1117
|
+
}), ai = /* @__PURE__ */ b({
|
|
1118
1118
|
__name: "TideButton",
|
|
1119
1119
|
props: {
|
|
1120
1120
|
disabled: { type: Boolean, default: !1 },
|
|
1121
|
-
element: { default:
|
|
1121
|
+
element: { default: M.BUTTON },
|
|
1122
1122
|
href: { default: void 0 },
|
|
1123
1123
|
iconLeading: { default: void 0 },
|
|
1124
1124
|
iconTrailing: { default: void 0 },
|
|
@@ -1129,12 +1129,12 @@ const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["dat
|
|
|
1129
1129
|
},
|
|
1130
1130
|
setup(i) {
|
|
1131
1131
|
const s = i;
|
|
1132
|
-
return (o, n) => (E(), P(
|
|
1132
|
+
return (o, n) => (E(), P(Le(s.element === e(M).LINK ? e(M).LINK : e(M).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(
|
|
1136
|
+
s.element === e(M).LINK ? [e(t).DISPLAY.INLINE_FLEX] : [e(t).DISPLAY.FLEX],
|
|
1137
|
+
s.element === e(M).LINK ? e(t).UNDERLINE.REST.OFF : "",
|
|
1138
1138
|
o.size === e(me).SMALL && [e(t).FONT.ROLE.BUTTON_2, e(t).PADDING.X.ONE, e(t).PADDING.Y.HALF],
|
|
1139
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,
|
|
@@ -1143,27 +1143,27 @@ const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["dat
|
|
|
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(M).BUTTON && s.disabled,
|
|
1147
|
+
href: s.element === e(M).LINK && s.href ? s.href : void 0,
|
|
1148
|
+
target: s.element === e(M).LINK && s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
1149
1149
|
}, {
|
|
1150
|
-
default:
|
|
1150
|
+
default: Re(() => [
|
|
1151
1151
|
s.iconLeading ? (E(), P(H, {
|
|
1152
1152
|
key: 0,
|
|
1153
1153
|
icon: s.iconLeading,
|
|
1154
1154
|
size: o.size === e(me).LARGE ? e(Y).LARGE : e(Y).SMALL
|
|
1155
|
-
}, null, 8, ["icon", "size"])) :
|
|
1156
|
-
|
|
1155
|
+
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
1156
|
+
Yt(" " + C(s.label) + " ", 1),
|
|
1157
1157
|
s.iconTrailing ? (E(), P(H, {
|
|
1158
1158
|
key: 1,
|
|
1159
1159
|
icon: s.iconTrailing,
|
|
1160
1160
|
size: o.size === e(me).LARGE ? e(Y).LARGE : e(Y).SMALL
|
|
1161
|
-
}, null, 8, ["icon", "size"])) :
|
|
1161
|
+
}, null, 8, ["icon", "size"])) : S("", !0)
|
|
1162
1162
|
]),
|
|
1163
1163
|
_: 1
|
|
1164
1164
|
}, 8, ["class", "disabled", "href", "target"]));
|
|
1165
1165
|
}
|
|
1166
|
-
}), Os = /* @__PURE__ */
|
|
1166
|
+
}), Os = /* @__PURE__ */ b({
|
|
1167
1167
|
__name: "TideButtonPagination",
|
|
1168
1168
|
props: {
|
|
1169
1169
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -1173,7 +1173,7 @@ const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["dat
|
|
|
1173
1173
|
},
|
|
1174
1174
|
setup(i) {
|
|
1175
1175
|
const s = i;
|
|
1176
|
-
return (o, n) => (E(), P(
|
|
1176
|
+
return (o, n) => (E(), P(Le(
|
|
1177
1177
|
s.element === e(re).LINK ? "a" : s.element === e(re).BUTTON ? "button" : "div"
|
|
1178
1178
|
), {
|
|
1179
1179
|
class: c([
|
|
@@ -1186,16 +1186,15 @@ const oi = /* @__PURE__ */ w(cs, [["__scopeId", "data-v-c6d1b806"]]), ds = ["dat
|
|
|
1186
1186
|
disabled: s.element === e(re).BUTTON && s.disabled,
|
|
1187
1187
|
href: s.element === e(re).LINK && s.href ? s.href : void 0
|
|
1188
1188
|
}, {
|
|
1189
|
-
default:
|
|
1189
|
+
default: Re(() => [
|
|
1190
1190
|
v("span", {
|
|
1191
1191
|
class: c(["label", e(t).DISPLAY.FLEX, e(t).AXIS1.CENTER, e(t).AXIS2.CENTER])
|
|
1192
|
-
},
|
|
1192
|
+
}, C(s.label), 3)
|
|
1193
1193
|
]),
|
|
1194
1194
|
_: 1
|
|
1195
1195
|
}, 8, ["class", "disabled", "href"]));
|
|
1196
1196
|
}
|
|
1197
|
-
})
|
|
1198
|
-
const Ls = /* @__PURE__ */ w(Os, [["__scopeId", "data-v-0e4f62c0"]]), Rs = ["data-track", "onClick"], ps = /* @__PURE__ */ C({
|
|
1197
|
+
}), Ls = /* @__PURE__ */ G(Os, [["__scopeId", "data-v-0e4f62c0"]]), Rs = ["data-track", "onClick"], ps = /* @__PURE__ */ b({
|
|
1199
1198
|
__name: "TideButtonSegmented",
|
|
1200
1199
|
props: {
|
|
1201
1200
|
activeTab: { default: 0 },
|
|
@@ -1236,20 +1235,19 @@ const Ls = /* @__PURE__ */ w(Os, [["__scopeId", "data-v-0e4f62c0"]]), Rs = ["dat
|
|
|
1236
1235
|
}, [
|
|
1237
1236
|
v("span", {
|
|
1238
1237
|
class: c([e(t).FONT.ROLE.LABEL_2_SEMIBOLD])
|
|
1239
|
-
},
|
|
1238
|
+
}, C(r.label), 3),
|
|
1240
1239
|
r.count && r.count > 0 ? (E(), p("span", {
|
|
1241
1240
|
key: 0,
|
|
1242
1241
|
class: c([e(t).FONT.ROLE.LABEL_2_SEMIBOLD])
|
|
1243
|
-
}, " (" +
|
|
1242
|
+
}, " (" + C(r.count) + ") ", 3)) : S("", !0)
|
|
1244
1243
|
], 10, Rs))), 128))
|
|
1245
1244
|
], 2));
|
|
1246
1245
|
}
|
|
1247
|
-
})
|
|
1248
|
-
const ai = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-4e385d0b"]]), ye = {
|
|
1246
|
+
}), ri = /* @__PURE__ */ G(ps, [["__scopeId", "data-v-4e385d0b"]]), ye = {
|
|
1249
1247
|
ACTIONABLE: "action",
|
|
1250
1248
|
INFORMATIONAL: "informational",
|
|
1251
1249
|
SELECTABLE: "select"
|
|
1252
|
-
}, vs = /* @__PURE__ */
|
|
1250
|
+
}, vs = /* @__PURE__ */ b({
|
|
1253
1251
|
__name: "TideCard",
|
|
1254
1252
|
props: {
|
|
1255
1253
|
description: { default: void 0 },
|
|
@@ -1260,7 +1258,7 @@ const ai = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-4e385d0b"]]), ye = {
|
|
|
1260
1258
|
href: { default: void 0 }
|
|
1261
1259
|
},
|
|
1262
1260
|
setup(i) {
|
|
1263
|
-
return (s, o) => (E(), P(
|
|
1261
|
+
return (s, o) => (E(), P(Le(s.href ? "a" : s.type === e(ye).INFORMATIONAL ? "div" : "button"), {
|
|
1264
1262
|
class: c([
|
|
1265
1263
|
"tide-card",
|
|
1266
1264
|
e(t).BORDER.COLOR.LOW,
|
|
@@ -1277,30 +1275,29 @@ const ai = /* @__PURE__ */ w(ps, [["__scopeId", "data-v-4e385d0b"]]), ye = {
|
|
|
1277
1275
|
]),
|
|
1278
1276
|
href: s.href
|
|
1279
1277
|
}, {
|
|
1280
|
-
default:
|
|
1278
|
+
default: Re(() => [
|
|
1281
1279
|
s.icon ? (E(), P(H, {
|
|
1282
1280
|
key: 0,
|
|
1283
1281
|
class: c([e(t).FLEX.GROW.OFF, e(t).FLEX.SHRINK.OFF]),
|
|
1284
1282
|
icon: s.icon,
|
|
1285
1283
|
size: e(Y).SMALL
|
|
1286
|
-
}, null, 8, ["class", "icon", "size"])) :
|
|
1284
|
+
}, null, 8, ["class", "icon", "size"])) : S("", !0),
|
|
1287
1285
|
v("div", {
|
|
1288
1286
|
class: c([e(t).AXIS2.START, e(t).DISPLAY.FLEX, e(t).FLEX.DIRECTION.COLUMN, e(t).GAP.HALF])
|
|
1289
1287
|
}, [
|
|
1290
1288
|
v("div", {
|
|
1291
1289
|
class: c([e(t).FONT.ROLE.LABEL_1_SEMIBOLD, e(t).FONT.COLOR.SURFACE.DEFAULT])
|
|
1292
|
-
},
|
|
1290
|
+
}, C(s.heading), 3),
|
|
1293
1291
|
s.description ? (E(), p("div", {
|
|
1294
1292
|
key: 0,
|
|
1295
1293
|
class: c([e(t).FONT.ROLE.LABEL_2, e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
1296
|
-
},
|
|
1294
|
+
}, C(s.description), 3)) : S("", !0)
|
|
1297
1295
|
], 2)
|
|
1298
1296
|
]),
|
|
1299
1297
|
_: 1
|
|
1300
1298
|
}, 8, ["class", "href"]));
|
|
1301
1299
|
}
|
|
1302
|
-
})
|
|
1303
|
-
const ri = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @__PURE__ */ C({
|
|
1300
|
+
}), li = /* @__PURE__ */ G(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @__PURE__ */ b({
|
|
1304
1301
|
__name: "TideCarousel",
|
|
1305
1302
|
props: {
|
|
1306
1303
|
bleed: { default: void 0 },
|
|
@@ -1313,38 +1310,36 @@ const ri = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @_
|
|
|
1313
1310
|
},
|
|
1314
1311
|
emits: ["slideChange", "slidesAddedToView"],
|
|
1315
1312
|
setup(i, { emit: s }) {
|
|
1316
|
-
const o = i, n =
|
|
1313
|
+
const o = i, n = F(null), a = F(null), d = F(null), r = F(), l = F(), u = F(0), O = F(), L = F(), R = F(), A = F(), f = F(), m = F(), N = () => {
|
|
1317
1314
|
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
1315
|
}, I = () => {
|
|
1319
1316
|
const B = n.value;
|
|
1320
|
-
if (!B)
|
|
1321
|
-
return;
|
|
1317
|
+
if (!B) return;
|
|
1322
1318
|
const X = Array.from(B.children).map(
|
|
1323
1319
|
(ne) => ne.offsetLeft
|
|
1324
1320
|
);
|
|
1325
|
-
if (X.length === 0)
|
|
1326
|
-
return;
|
|
1321
|
+
if (X.length === 0) return;
|
|
1327
1322
|
const W = B.scrollLeft, Q = X.reduce(
|
|
1328
|
-
(ne,
|
|
1323
|
+
(ne, ve) => Math.abs(ve - W) < Math.abs(ne - W) ? ve : ne
|
|
1329
1324
|
);
|
|
1330
1325
|
u.value = X.indexOf(Q), N();
|
|
1331
1326
|
}, T = () => {
|
|
1332
1327
|
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
1328
|
}, g = () => {
|
|
1334
1329
|
T();
|
|
1335
|
-
},
|
|
1330
|
+
}, D = (B) => {
|
|
1336
1331
|
n.value !== null && n.value.scrollTo({
|
|
1337
1332
|
behavior: "smooth",
|
|
1338
1333
|
left: n.value.children[B].offsetLeft
|
|
1339
1334
|
});
|
|
1340
|
-
},
|
|
1335
|
+
}, y = () => {
|
|
1341
1336
|
n.value !== null && (r.value > l.value ? n.value.scrollTo({
|
|
1342
1337
|
behavior: "smooth",
|
|
1343
1338
|
left: l.value
|
|
1344
|
-
}) : A.value ||
|
|
1345
|
-
},
|
|
1346
|
-
R.value ||
|
|
1347
|
-
},
|
|
1339
|
+
}) : A.value || D(u.value + 1));
|
|
1340
|
+
}, h = () => {
|
|
1341
|
+
R.value || D(u.value - 1);
|
|
1342
|
+
}, k = () => {
|
|
1348
1343
|
var X;
|
|
1349
1344
|
const B = {
|
|
1350
1345
|
root: n == null ? void 0 : n.value,
|
|
@@ -1355,24 +1350,24 @@ const ri = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @_
|
|
|
1355
1350
|
let Q = [];
|
|
1356
1351
|
W.forEach((ne) => {
|
|
1357
1352
|
var ot;
|
|
1358
|
-
const
|
|
1359
|
-
ne.isIntersecting && Q.push(
|
|
1353
|
+
const ve = Array.from(((ot = n.value) == null ? void 0 : ot.children) ?? []).indexOf(ne.target);
|
|
1354
|
+
ne.isIntersecting && Q.push(ve);
|
|
1360
1355
|
}), Q.length > 0 && s("slidesAddedToView", Q);
|
|
1361
1356
|
}, B), Array.from(((X = n.value) == null ? void 0 : X.children) ?? []).forEach((W) => {
|
|
1362
1357
|
a.value && a.value.observe(W);
|
|
1363
1358
|
});
|
|
1364
|
-
},
|
|
1359
|
+
}, _ = () => {
|
|
1365
1360
|
const B = () => {
|
|
1366
|
-
|
|
1361
|
+
k();
|
|
1367
1362
|
};
|
|
1368
1363
|
d.value = new MutationObserver(B), n.value && d.value.observe(n.value, { childList: !0 });
|
|
1369
1364
|
};
|
|
1370
|
-
return
|
|
1371
|
-
window && window.addEventListener("resize", T), T(),
|
|
1365
|
+
return we(() => {
|
|
1366
|
+
window && window.addEventListener("resize", T), T(), k(), _();
|
|
1372
1367
|
}), It(() => {
|
|
1373
1368
|
var B, X;
|
|
1374
1369
|
window.removeEventListener("resize", T), (B = a.value) == null || B.disconnect(), (X = d.value) == null || X.disconnect();
|
|
1375
|
-
}),
|
|
1370
|
+
}), Wt(() => {
|
|
1376
1371
|
T();
|
|
1377
1372
|
}), K(u, () => {
|
|
1378
1373
|
s("slideChange", u.value);
|
|
@@ -1398,30 +1393,30 @@ const ri = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @_
|
|
|
1398
1393
|
o.title ? (E(), p("div", {
|
|
1399
1394
|
key: 0,
|
|
1400
1395
|
class: c([B.isHeadline1 ? e(t).FONT.ROLE.HEADLINE_1 : e(t).FONT.ROLE.HEADLINE_2])
|
|
1401
|
-
},
|
|
1396
|
+
}, C(o.title), 3)) : S("", !0),
|
|
1402
1397
|
o.subtitle ? (E(), p("div", {
|
|
1403
1398
|
key: 1,
|
|
1404
1399
|
class: c([e(t).FONT.ROLE.LABEL_2, e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
1405
|
-
},
|
|
1406
|
-
], 2)) :
|
|
1400
|
+
}, C(o.subtitle), 3)) : S("", !0)
|
|
1401
|
+
], 2)) : S("", !0),
|
|
1407
1402
|
m.value ? (E(), p("div", {
|
|
1408
1403
|
key: 1,
|
|
1409
1404
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.ONE])
|
|
1410
1405
|
}, [
|
|
1411
|
-
|
|
1406
|
+
x(Z, {
|
|
1412
1407
|
disabled: u.value === 0,
|
|
1413
|
-
icon: e(
|
|
1408
|
+
icon: e(w).CHEVRON_LEFT,
|
|
1414
1409
|
priority: e($).TERTIARY,
|
|
1415
|
-
onClick:
|
|
1410
|
+
onClick: h
|
|
1416
1411
|
}, null, 8, ["disabled", "icon", "priority"]),
|
|
1417
|
-
|
|
1412
|
+
x(Z, {
|
|
1418
1413
|
disabled: A.value,
|
|
1419
|
-
icon: e(
|
|
1414
|
+
icon: e(w).CHEVRON_RIGHT,
|
|
1420
1415
|
priority: e($).TERTIARY,
|
|
1421
|
-
onClick:
|
|
1416
|
+
onClick: y
|
|
1422
1417
|
}, null, 8, ["disabled", "icon", "priority"])
|
|
1423
|
-
], 2)) :
|
|
1424
|
-
], 2)) :
|
|
1418
|
+
], 2)) : S("", !0)
|
|
1419
|
+
], 2)) : S("", !0),
|
|
1425
1420
|
V(B.$slots, "misc", {}, void 0, !0),
|
|
1426
1421
|
v("div", {
|
|
1427
1422
|
class: c([e(t).POSITION.RELATIVE])
|
|
@@ -1459,35 +1454,34 @@ const ri = /* @__PURE__ */ w(vs, [["__scopeId", "data-v-98f24c4f"]]), fs = /* @_
|
|
|
1459
1454
|
o.isHideawayButtons ? "hideaway" : ""
|
|
1460
1455
|
])
|
|
1461
1456
|
}, [
|
|
1462
|
-
|
|
1457
|
+
x(Z, {
|
|
1463
1458
|
class: c([e(t).MARGIN.LEFT.ONE, e(t).POINTER_EVENTS.ON]),
|
|
1464
1459
|
disabled: u.value === 0,
|
|
1465
|
-
icon: e(
|
|
1460
|
+
icon: e(w).CHEVRON_LEFT,
|
|
1466
1461
|
priority: e($).QUATERNARY,
|
|
1467
|
-
onClick:
|
|
1462
|
+
onClick: h
|
|
1468
1463
|
}, null, 8, ["class", "disabled", "icon", "priority"]),
|
|
1469
|
-
|
|
1464
|
+
x(Z, {
|
|
1470
1465
|
class: c([e(t).MARGIN.RIGHT.ONE, e(t).POINTER_EVENTS.ON]),
|
|
1471
1466
|
disabled: A.value,
|
|
1472
|
-
icon: e(
|
|
1467
|
+
icon: e(w).CHEVRON_RIGHT,
|
|
1473
1468
|
priority: e($).QUATERNARY,
|
|
1474
|
-
onClick:
|
|
1469
|
+
onClick: y
|
|
1475
1470
|
}, null, 8, ["class", "disabled", "icon", "priority"])
|
|
1476
|
-
], 2)) :
|
|
1471
|
+
], 2)) : S("", !0)
|
|
1477
1472
|
], 2));
|
|
1478
1473
|
}
|
|
1479
|
-
})
|
|
1480
|
-
const li = /* @__PURE__ */ w(fs, [["__scopeId", "data-v-f6e14c22"]]), As = /* @__PURE__ */ C({
|
|
1474
|
+
}), ci = /* @__PURE__ */ G(fs, [["__scopeId", "data-v-f6e14c22"]]), As = /* @__PURE__ */ b({
|
|
1481
1475
|
__name: "TideChipAction",
|
|
1482
1476
|
props: {
|
|
1483
|
-
element: { default:
|
|
1477
|
+
element: { default: M.LINK },
|
|
1484
1478
|
href: { default: void 0 },
|
|
1485
1479
|
isNewTab: { type: Boolean, default: !1 },
|
|
1486
1480
|
label: {}
|
|
1487
1481
|
},
|
|
1488
1482
|
setup(i) {
|
|
1489
1483
|
const s = i;
|
|
1490
|
-
return (o, n) => (E(), P(
|
|
1484
|
+
return (o, n) => (E(), P(Le(o.element), {
|
|
1491
1485
|
class: c([
|
|
1492
1486
|
"tide-chip-action",
|
|
1493
1487
|
e(t).DISPLAY.FLEX,
|
|
@@ -1505,17 +1499,16 @@ const li = /* @__PURE__ */ w(fs, [["__scopeId", "data-v-f6e14c22"]]), As = /* @_
|
|
|
1505
1499
|
href: s.href,
|
|
1506
1500
|
target: s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
1507
1501
|
}, {
|
|
1508
|
-
default:
|
|
1509
|
-
|
|
1510
|
-
icon: e(
|
|
1502
|
+
default: Re(() => [
|
|
1503
|
+
x(H, {
|
|
1504
|
+
icon: e(w).SEARCH
|
|
1511
1505
|
}, null, 8, ["icon"]),
|
|
1512
|
-
v("span", null,
|
|
1506
|
+
v("span", null, C(s.label), 1)
|
|
1513
1507
|
]),
|
|
1514
1508
|
_: 1
|
|
1515
1509
|
}, 8, ["class", "href", "target"]));
|
|
1516
1510
|
}
|
|
1517
|
-
})
|
|
1518
|
-
const ci = /* @__PURE__ */ w(As, [["__scopeId", "data-v-2f57438d"]]), Is = /* @__PURE__ */ C({
|
|
1511
|
+
}), di = /* @__PURE__ */ G(As, [["__scopeId", "data-v-2f57438d"]]), Is = /* @__PURE__ */ b({
|
|
1519
1512
|
__name: "TideChipFilter",
|
|
1520
1513
|
props: {
|
|
1521
1514
|
isActive: { type: Boolean },
|
|
@@ -1544,12 +1537,11 @@ const ci = /* @__PURE__ */ w(As, [["__scopeId", "data-v-2f57438d"]]), Is = /* @_
|
|
|
1544
1537
|
}, [
|
|
1545
1538
|
v("span", {
|
|
1546
1539
|
class: c([s.isActive ? "" : "icon-spacing", e(t).FONT.ROLE.LABEL_1, e(t).WHITESPACE_WRAP.OFF])
|
|
1547
|
-
},
|
|
1540
|
+
}, C(s.label), 3)
|
|
1548
1541
|
], 2)
|
|
1549
1542
|
], 2));
|
|
1550
1543
|
}
|
|
1551
|
-
})
|
|
1552
|
-
const di = /* @__PURE__ */ w(Is, [["__scopeId", "data-v-6ddce1c2"]]), Ts = /* @__PURE__ */ C({
|
|
1544
|
+
}), ui = /* @__PURE__ */ G(Is, [["__scopeId", "data-v-6ddce1c2"]]), Ts = /* @__PURE__ */ b({
|
|
1553
1545
|
__name: "TideChipInput",
|
|
1554
1546
|
props: {
|
|
1555
1547
|
label: {}
|
|
@@ -1571,14 +1563,13 @@ const di = /* @__PURE__ */ w(Is, [["__scopeId", "data-v-6ddce1c2"]]), Ts = /* @_
|
|
|
1571
1563
|
e(t).FONT.ROLE.LABEL_2
|
|
1572
1564
|
])
|
|
1573
1565
|
}, [
|
|
1574
|
-
v("span", null,
|
|
1575
|
-
|
|
1576
|
-
icon: e(
|
|
1566
|
+
v("span", null, C(s.label), 1),
|
|
1567
|
+
x(H, {
|
|
1568
|
+
icon: e(w).CLOSE
|
|
1577
1569
|
}, null, 8, ["icon"])
|
|
1578
1570
|
], 2));
|
|
1579
1571
|
}
|
|
1580
|
-
})
|
|
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({
|
|
1572
|
+
}), Ei = /* @__PURE__ */ G(Ts, [["__scopeId", "data-v-42611a29"]]), gs = { class: "tide-columns" }, ms = { class: "tide-columns-column" }, Ns = { class: "tide-columns-column" }, Fs = { class: "tide-columns-column" }, Ss = { class: "tide-columns-column" }, hs = /* @__PURE__ */ b({
|
|
1582
1573
|
__name: "TideColumns",
|
|
1583
1574
|
props: {
|
|
1584
1575
|
heading: { default: "" }
|
|
@@ -1588,7 +1579,7 @@ const ui = /* @__PURE__ */ w(Ts, [["__scopeId", "data-v-42611a29"]]), gs = { cla
|
|
|
1588
1579
|
return (o, n) => (E(), p("section", gs, [
|
|
1589
1580
|
v("h2", {
|
|
1590
1581
|
class: c([e(t).MARGIN.BOTTOM.HALF])
|
|
1591
|
-
},
|
|
1582
|
+
}, C(s.heading), 3),
|
|
1592
1583
|
v("ul", {
|
|
1593
1584
|
class: c([e(t).DISPLAY.FLEX, e(t).FLEX.WRAP, e(t).GAP.TWO, e(t).LIST_BULLETS.OFF])
|
|
1594
1585
|
}, [
|
|
@@ -1598,42 +1589,41 @@ const ui = /* @__PURE__ */ w(Ts, [["__scopeId", "data-v-42611a29"]]), gs = { cla
|
|
|
1598
1589
|
v("li", Ns, [
|
|
1599
1590
|
V(o.$slots, "section2", {}, void 0, !0)
|
|
1600
1591
|
]),
|
|
1601
|
-
v("li",
|
|
1592
|
+
v("li", Fs, [
|
|
1602
1593
|
V(o.$slots, "section3", {}, void 0, !0)
|
|
1603
1594
|
]),
|
|
1604
|
-
v("li",
|
|
1595
|
+
v("li", Ss, [
|
|
1605
1596
|
V(o.$slots, "section4", {}, void 0, !0)
|
|
1606
1597
|
])
|
|
1607
1598
|
], 2)
|
|
1608
1599
|
]));
|
|
1609
1600
|
}
|
|
1610
|
-
})
|
|
1611
|
-
const Ei = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
1601
|
+
}), Oi = /* @__PURE__ */ G(hs, [["__scopeId", "data-v-c92a6639"]]), Ae = {
|
|
1612
1602
|
CONTAIN: "contain",
|
|
1613
1603
|
COVER: "cover",
|
|
1614
1604
|
SCALE_DOWN: "scale-down"
|
|
1615
|
-
},
|
|
1605
|
+
}, Ds = ["media", "srcset"], Cs = ["alt", "fetchpriority", "loading", "src"], We = "https://cdn-static.tilabs.io/marketplace/common/image-coming-soon.svg", ys = /* @__PURE__ */ b({
|
|
1616
1606
|
__name: "TideImage",
|
|
1617
1607
|
props: {
|
|
1618
1608
|
alt: { default: "" },
|
|
1619
1609
|
height: { default: void 0 },
|
|
1620
1610
|
isLazy: { type: Boolean, default: !0 },
|
|
1621
|
-
objectFit: { default:
|
|
1611
|
+
objectFit: { default: Ae.COVER },
|
|
1622
1612
|
sources: { default: () => [] },
|
|
1623
1613
|
src: { default: void 0 },
|
|
1624
1614
|
width: { default: void 0 }
|
|
1625
1615
|
},
|
|
1626
1616
|
setup(i) {
|
|
1627
|
-
const s = i, o =
|
|
1617
|
+
const s = i, o = F(), n = F(), a = U(() => {
|
|
1628
1618
|
switch (s.objectFit) {
|
|
1629
|
-
case
|
|
1619
|
+
case Ae.CONTAIN:
|
|
1630
1620
|
return t.OBJECT.CONTAIN;
|
|
1631
|
-
case
|
|
1621
|
+
case Ae.COVER:
|
|
1632
1622
|
return t.OBJECT.COVER;
|
|
1633
|
-
case
|
|
1623
|
+
case Ae.SCALE_DOWN:
|
|
1634
1624
|
return t.OBJECT.SCALE_DOWN;
|
|
1635
1625
|
default:
|
|
1636
|
-
return
|
|
1626
|
+
return Ae.COVER;
|
|
1637
1627
|
}
|
|
1638
1628
|
}), d = () => {
|
|
1639
1629
|
var u, O;
|
|
@@ -1655,7 +1645,7 @@ const Ei = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1655
1645
|
key: u.srcset,
|
|
1656
1646
|
media: `(min-width:${u.media}px)`,
|
|
1657
1647
|
srcset: u.srcset
|
|
1658
|
-
}, null, 8,
|
|
1648
|
+
}, null, 8, Ds))), 128)),
|
|
1659
1649
|
v("img", {
|
|
1660
1650
|
alt: r.alt,
|
|
1661
1651
|
class: c([e(t).WIDTH.FULL, e(t).HEIGHT.FULL, e(t).OBJECT.CENTER, a.value]),
|
|
@@ -1665,10 +1655,10 @@ const Ei = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1665
1655
|
ref: n,
|
|
1666
1656
|
src: r.src ?? We,
|
|
1667
1657
|
onError: d
|
|
1668
|
-
}, null, 42,
|
|
1658
|
+
}, null, 42, Cs)
|
|
1669
1659
|
], 6));
|
|
1670
1660
|
}
|
|
1671
|
-
}),
|
|
1661
|
+
}), _s = /* @__PURE__ */ b({
|
|
1672
1662
|
__name: "TideImageBackground",
|
|
1673
1663
|
props: {
|
|
1674
1664
|
alt: { default: "" },
|
|
@@ -1691,11 +1681,11 @@ const Ei = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1691
1681
|
e(t).AXIS2.CENTER
|
|
1692
1682
|
])
|
|
1693
1683
|
}, [
|
|
1694
|
-
|
|
1684
|
+
x(ys, {
|
|
1695
1685
|
alt: s.alt,
|
|
1696
1686
|
class: c([e(t).WIDTH.FULL, e(t).HEIGHT.FULL]),
|
|
1697
1687
|
"is-lazy": s.isLazy,
|
|
1698
|
-
"object-fit": e(
|
|
1688
|
+
"object-fit": e(Ae).COVER,
|
|
1699
1689
|
sources: s.sources,
|
|
1700
1690
|
src: s.src
|
|
1701
1691
|
}, null, 8, ["alt", "class", "is-lazy", "object-fit", "sources", "src"])
|
|
@@ -1703,11 +1693,10 @@ const Ei = /* @__PURE__ */ w(Ss, [["__scopeId", "data-v-c92a6639"]]), fe = {
|
|
|
1703
1693
|
V(o.$slots, "default", {}, void 0, !0)
|
|
1704
1694
|
], 2));
|
|
1705
1695
|
}
|
|
1706
|
-
})
|
|
1707
|
-
const Oi = /* @__PURE__ */ w(Cs, [["__scopeId", "data-v-0d40d1c6"]]), bs = {
|
|
1696
|
+
}), Li = /* @__PURE__ */ G(_s, [["__scopeId", "data-v-0d40d1c6"]]), bs = {
|
|
1708
1697
|
key: 0,
|
|
1709
1698
|
class: /* @__PURE__ */ c(["tide-indicator-label"])
|
|
1710
|
-
}, Bs = /* @__PURE__ */
|
|
1699
|
+
}, Bs = /* @__PURE__ */ b({
|
|
1711
1700
|
__name: "TideIndicator",
|
|
1712
1701
|
props: {
|
|
1713
1702
|
label: { default: void 0 }
|
|
@@ -1726,11 +1715,10 @@ const Oi = /* @__PURE__ */ w(Cs, [["__scopeId", "data-v-0d40d1c6"]]), bs = {
|
|
|
1726
1715
|
s.label ? [e(t).POSITION.RELATIVE, e(t).FONT.ROLE.LABEL_3, e(t).FONT.COLOR.SURFACE.INVERSE] : [e(t).BORDER.FULL.ONE]
|
|
1727
1716
|
])
|
|
1728
1717
|
}, [
|
|
1729
|
-
s.label ? (E(), p("div", bs,
|
|
1718
|
+
s.label ? (E(), p("div", bs, C(s.label), 1)) : S("", !0)
|
|
1730
1719
|
], 2));
|
|
1731
1720
|
}
|
|
1732
|
-
})
|
|
1733
|
-
const Li = /* @__PURE__ */ w(Bs, [["__scopeId", "data-v-d402ac82"]]), Us = ["data-track"], Ps = ["checked", "disabled", "name", "id"], Gs = ["for"], ws = /* @__PURE__ */ C({
|
|
1721
|
+
}), Ri = /* @__PURE__ */ G(Bs, [["__scopeId", "data-v-d402ac82"]]), Us = ["data-track"], Ps = ["checked", "disabled", "name", "id"], ws = ["for"], Gs = /* @__PURE__ */ b({
|
|
1734
1722
|
__name: "TideInputCheckbox",
|
|
1735
1723
|
props: {
|
|
1736
1724
|
checked: { type: Boolean, default: !1 },
|
|
@@ -1761,7 +1749,7 @@ const Li = /* @__PURE__ */ w(Bs, [["__scopeId", "data-v-d402ac82"]]), Us = ["dat
|
|
|
1761
1749
|
disabled: s.disabled,
|
|
1762
1750
|
name: s.name,
|
|
1763
1751
|
ref: "input",
|
|
1764
|
-
onClick: a[0] || (a[0] =
|
|
1752
|
+
onClick: a[0] || (a[0] = Ee(() => {
|
|
1765
1753
|
}, ["prevent"])),
|
|
1766
1754
|
id: s.inputId,
|
|
1767
1755
|
type: "checkbox"
|
|
@@ -1784,9 +1772,9 @@ const Li = /* @__PURE__ */ w(Bs, [["__scopeId", "data-v-d402ac82"]]), Us = ["dat
|
|
|
1784
1772
|
o.value ? (E(), P(H, {
|
|
1785
1773
|
key: 0,
|
|
1786
1774
|
class: c([e(t).FONT.COLOR.SECONDARY]),
|
|
1787
|
-
icon: s.indeterminate ? e(
|
|
1775
|
+
icon: s.indeterminate ? e(w).REMOVE : e(w).CHECK,
|
|
1788
1776
|
size: e(Y).SMALL
|
|
1789
|
-
}, null, 8, ["class", "icon", "size"])) :
|
|
1777
|
+
}, null, 8, ["class", "icon", "size"])) : S("", !0)
|
|
1790
1778
|
], 2),
|
|
1791
1779
|
n.label ? (E(), p("label", {
|
|
1792
1780
|
key: 0,
|
|
@@ -1797,19 +1785,18 @@ const Li = /* @__PURE__ */ w(Bs, [["__scopeId", "data-v-d402ac82"]]), Us = ["dat
|
|
|
1797
1785
|
n.disabled ? e(t).CURSOR.NOT_ALLOWED : e(t).CURSOR.POINTER
|
|
1798
1786
|
]),
|
|
1799
1787
|
for: s.inputId,
|
|
1800
|
-
onClick: a[1] || (a[1] =
|
|
1788
|
+
onClick: a[1] || (a[1] = Ee(() => {
|
|
1801
1789
|
}, ["prevent"]))
|
|
1802
1790
|
}, [
|
|
1803
|
-
v("span", null,
|
|
1791
|
+
v("span", null, C(n.label), 1),
|
|
1804
1792
|
s.number ? (E(), p("span", {
|
|
1805
1793
|
key: 0,
|
|
1806
1794
|
class: c([e(t).FONT.COLOR.SURFACE.VARIANT])
|
|
1807
|
-
}, " (" +
|
|
1808
|
-
], 10,
|
|
1795
|
+
}, " (" + C(e(ze)(s.number)) + ") ", 3)) : S("", !0)
|
|
1796
|
+
], 10, ws)) : S("", !0)
|
|
1809
1797
|
], 10, Us));
|
|
1810
1798
|
}
|
|
1811
|
-
})
|
|
1812
|
-
const Ri = /* @__PURE__ */ w(ws, [["__scopeId", "data-v-1a2e222c"]]), Hs = ["checked", "data-track", "id"], xs = ["for"], ks = /* @__PURE__ */ C({
|
|
1799
|
+
}), pi = /* @__PURE__ */ G(Gs, [["__scopeId", "data-v-1a2e222c"]]), Hs = ["checked", "data-track", "id"], ks = ["for"], Ms = /* @__PURE__ */ b({
|
|
1813
1800
|
__name: "TideInputRadio",
|
|
1814
1801
|
props: {
|
|
1815
1802
|
checked: { type: Boolean, default: !1 },
|
|
@@ -1820,7 +1807,7 @@ const Ri = /* @__PURE__ */ w(ws, [["__scopeId", "data-v-1a2e222c"]]), Hs = ["che
|
|
|
1820
1807
|
name: {}
|
|
1821
1808
|
},
|
|
1822
1809
|
setup(i) {
|
|
1823
|
-
const s = i, o =
|
|
1810
|
+
const s = i, o = F(s.checked);
|
|
1824
1811
|
return K(
|
|
1825
1812
|
() => s.checked,
|
|
1826
1813
|
(n, a) => {
|
|
@@ -1868,15 +1855,14 @@ const Ri = /* @__PURE__ */ w(ws, [["__scopeId", "data-v-1a2e222c"]]), Hs = ["che
|
|
|
1868
1855
|
v("label", {
|
|
1869
1856
|
class: c([e(t).FONT.ROLE.BODY_1, e(t).CURSOR.POINTER, e(t).POINTER_EVENTS.ON]),
|
|
1870
1857
|
for: s.inputId
|
|
1871
|
-
},
|
|
1858
|
+
}, C(s.label), 11, ks)
|
|
1872
1859
|
], 2));
|
|
1873
1860
|
}
|
|
1874
|
-
})
|
|
1875
|
-
const pi = /* @__PURE__ */ w(ks, [["__scopeId", "data-v-3310d547"]]), Qe = "Please enter a valid value.", Ms = {
|
|
1861
|
+
}), vi = /* @__PURE__ */ G(Ms, [["__scopeId", "data-v-3310d547"]]), Qe = "Please enter a valid value.", xs = {
|
|
1876
1862
|
message: "",
|
|
1877
1863
|
valid: !0
|
|
1878
1864
|
}, Ne = (i) => (s) => {
|
|
1879
|
-
let o =
|
|
1865
|
+
let o = xs;
|
|
1880
1866
|
return s.trim().match(i) || (o = {
|
|
1881
1867
|
message: Qe,
|
|
1882
1868
|
valid: !1
|
|
@@ -1884,7 +1870,7 @@ const pi = /* @__PURE__ */ w(ks, [["__scopeId", "data-v-3310d547"]]), Qe = "Plea
|
|
|
1884
1870
|
}, 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 }) => {
|
|
1885
1871
|
const a = n.length === 0 && !o, d = i && n.length > i;
|
|
1886
1872
|
return !(!a && s && n.length < s) && !d;
|
|
1887
|
-
},
|
|
1873
|
+
}, Ft = ({
|
|
1888
1874
|
error: i,
|
|
1889
1875
|
errorFromProps: s,
|
|
1890
1876
|
maxlength: o,
|
|
@@ -1934,7 +1920,7 @@ function Xs(i, s) {
|
|
|
1934
1920
|
valid: !0
|
|
1935
1921
|
};
|
|
1936
1922
|
}
|
|
1937
|
-
const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"], zs = ["value"], Qs = ["selected", "value"], Zs = ["selected", "value"], qs = /* @__PURE__ */
|
|
1923
|
+
const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"], zs = ["value"], Qs = ["selected", "value"], Zs = ["selected", "value"], qs = /* @__PURE__ */ b({
|
|
1938
1924
|
__name: "TideInputSelect",
|
|
1939
1925
|
props: {
|
|
1940
1926
|
inputId: { default: void 0 },
|
|
@@ -1949,7 +1935,7 @@ const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"],
|
|
|
1949
1935
|
value: { default: void 0 }
|
|
1950
1936
|
},
|
|
1951
1937
|
setup(i, { expose: s }) {
|
|
1952
|
-
const o = i, n =
|
|
1938
|
+
const o = i, n = F(o.error), a = F(!1), d = F(null), r = F(o.required), l = F(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 = () => {
|
|
1953
1939
|
var T;
|
|
1954
1940
|
const I = new MouseEvent("mousedown");
|
|
1955
1941
|
(T = d == null ? void 0 : d.value) == null || T.dispatchEvent(I);
|
|
@@ -2002,8 +1988,8 @@ const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"],
|
|
|
2002
1988
|
e(t).POINTER_EVENTS.OFF
|
|
2003
1989
|
]),
|
|
2004
1990
|
for: o.inputId
|
|
2005
|
-
},
|
|
2006
|
-
|
|
1991
|
+
}, C(O.value), 11, Vs)) : S("", !0),
|
|
1992
|
+
Ge(v("select", {
|
|
2007
1993
|
class: c([
|
|
2008
1994
|
e(t).PADDING.BOTTOM.HALF,
|
|
2009
1995
|
e(t).PADDING.X.ONE,
|
|
@@ -2027,31 +2013,31 @@ const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"],
|
|
|
2027
2013
|
key: g.label,
|
|
2028
2014
|
label: g.label
|
|
2029
2015
|
}, [
|
|
2030
|
-
(E(!0), p(ee, null, le(g.options, (
|
|
2016
|
+
(E(!0), p(ee, null, le(g.options, (D) => (E(), p("option", {
|
|
2031
2017
|
class: c([e(t).WIDTH.FULL, e(t).BG.SURFACE.DEFAULT]),
|
|
2032
|
-
key:
|
|
2033
|
-
value:
|
|
2034
|
-
}, D
|
|
2018
|
+
key: D.value,
|
|
2019
|
+
value: D.value
|
|
2020
|
+
}, C(D.label), 11, zs))), 128))
|
|
2035
2021
|
], 10, Ks)) : (E(), p("option", {
|
|
2036
2022
|
class: c([e(t).WIDTH.FULL, e(t).BG.SURFACE.DEFAULT]),
|
|
2037
2023
|
key: g.value,
|
|
2038
2024
|
selected: l.value === g.value ? !0 : void 0,
|
|
2039
2025
|
value: g.value
|
|
2040
|
-
},
|
|
2026
|
+
}, C(g.label), 11, Qs))
|
|
2041
2027
|
], 64))), 256)),
|
|
2042
2028
|
(E(!0), p(ee, null, le(I.options, (g) => (E(), p("option", {
|
|
2043
2029
|
class: c([e(t).WIDTH.FULL, e(t).BG.SURFACE.DEFAULT]),
|
|
2044
2030
|
key: g.value,
|
|
2045
2031
|
selected: l.value === g.value ? !0 : void 0,
|
|
2046
2032
|
value: g.value
|
|
2047
|
-
},
|
|
2033
|
+
}, C(g.label), 11, Zs))), 128))
|
|
2048
2034
|
], 42, $s), [
|
|
2049
|
-
[
|
|
2035
|
+
[Xt, l.value]
|
|
2050
2036
|
])
|
|
2051
2037
|
], 2),
|
|
2052
|
-
|
|
2038
|
+
x(H, {
|
|
2053
2039
|
class: c([e(t).POSITION.ABSOLUTE, e(t).POSITIONING.RIGHT, e(t).MARGIN.RIGHT.ONE, e(t).POINTER_EVENTS.OFF]),
|
|
2054
|
-
icon: e(
|
|
2040
|
+
icon: e(w).EXPAND_MORE,
|
|
2055
2041
|
size: e(Y).SMALL
|
|
2056
2042
|
}, null, 8, ["class", "icon", "size"])
|
|
2057
2043
|
], 2),
|
|
@@ -2062,17 +2048,16 @@ const Vs = ["for"], $s = ["disabled", "name", "required", "id"], Ks = ["label"],
|
|
|
2062
2048
|
L.value ? (E(), P(H, {
|
|
2063
2049
|
key: 0,
|
|
2064
2050
|
class: c([]),
|
|
2065
|
-
icon: e(
|
|
2051
|
+
icon: e(w).ERROR,
|
|
2066
2052
|
size: e(Y).SMALL
|
|
2067
|
-
}, null, 8, ["icon", "size"])) :
|
|
2053
|
+
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
2068
2054
|
v("div", {
|
|
2069
2055
|
class: c([e(t).FONT.ROLE.LABEL_3])
|
|
2070
|
-
},
|
|
2071
|
-
], 2)) :
|
|
2056
|
+
}, C(L.value ? u.value : o.supportingText), 3)
|
|
2057
|
+
], 2)) : S("", !0)
|
|
2072
2058
|
], 2));
|
|
2073
2059
|
}
|
|
2074
|
-
})
|
|
2075
|
-
const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
2060
|
+
}), fi = /* @__PURE__ */ G(qs, [["__scopeId", "data-v-2da267e1"]]), Fe = {
|
|
2076
2061
|
DATE: "date",
|
|
2077
2062
|
DATETIME_LOCAL: "datetime-local",
|
|
2078
2063
|
EMAIL: "email",
|
|
@@ -2085,7 +2070,7 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2085
2070
|
TIME: "time",
|
|
2086
2071
|
URL: "url",
|
|
2087
2072
|
WEEK: "week"
|
|
2088
|
-
}, js = ["for"], Js = ["autocomplete", "data-track", "disabled", "maxlength", "minlength", "name", "required", "type", "id"], eo = /* @__PURE__ */
|
|
2073
|
+
}, js = ["for"], Js = ["autocomplete", "data-track", "disabled", "maxlength", "minlength", "name", "required", "type", "id"], eo = /* @__PURE__ */ b({
|
|
2089
2074
|
__name: "TideInputText",
|
|
2090
2075
|
props: {
|
|
2091
2076
|
autocomplete: { type: Boolean, default: !1 },
|
|
@@ -2104,30 +2089,30 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2104
2089
|
suffix: { default: void 0 },
|
|
2105
2090
|
supportingText: { default: void 0 },
|
|
2106
2091
|
transformValue: { type: Function, default: void 0 },
|
|
2107
|
-
type: { default:
|
|
2092
|
+
type: { default: Fe.TEXT },
|
|
2108
2093
|
validators: { default: void 0 },
|
|
2109
2094
|
value: { default: void 0 }
|
|
2110
2095
|
},
|
|
2111
2096
|
setup(i, { expose: s }) {
|
|
2112
|
-
const o = i, n =
|
|
2097
|
+
const o = i, n = F(o.error), a = F(!1), d = F(null), r = F(!1), l = F(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(
|
|
2113
2098
|
() => o.required && l.value !== void 0 && !l.value || qe(n.value, o.error)
|
|
2114
2099
|
), A = U(() => a.value || !f.value), f = U(() => l.value === "" || l.value === void 0), m = U(
|
|
2115
|
-
() => o.type ===
|
|
2100
|
+
() => o.type === Fe.PASSWORD && r.value === !0 ? Fe.TEXT : o.type
|
|
2116
2101
|
), N = () => {
|
|
2117
|
-
var
|
|
2118
|
-
l.value = "", (
|
|
2102
|
+
var h;
|
|
2103
|
+
l.value = "", (h = d.value) == null || h.focus();
|
|
2119
2104
|
}, I = () => {
|
|
2120
2105
|
a.value = !0;
|
|
2121
2106
|
}, T = () => {
|
|
2122
|
-
a.value = !1, l.value || (l.value = ""),
|
|
2107
|
+
a.value = !1, l.value || (l.value = ""), D();
|
|
2123
2108
|
}, g = () => {
|
|
2124
|
-
var
|
|
2109
|
+
var h, k;
|
|
2125
2110
|
if (o.transformValue) {
|
|
2126
|
-
const
|
|
2127
|
-
l.value =
|
|
2111
|
+
const _ = ((k = (h = l.value) == null ? void 0 : h.match(/\d/g)) == null ? void 0 : k.join("")) || void 0;
|
|
2112
|
+
l.value = _ ? o.transformValue(_) : "";
|
|
2128
2113
|
}
|
|
2129
|
-
},
|
|
2130
|
-
|
|
2114
|
+
}, D = () => {
|
|
2115
|
+
Ft({
|
|
2131
2116
|
error: n,
|
|
2132
2117
|
errorFromProps: o.error,
|
|
2133
2118
|
maxlength: o.maxlength,
|
|
@@ -2136,26 +2121,26 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2136
2121
|
validators: o.validators,
|
|
2137
2122
|
value: l
|
|
2138
2123
|
});
|
|
2139
|
-
},
|
|
2140
|
-
l.value =
|
|
2124
|
+
}, y = (h) => {
|
|
2125
|
+
l.value = h;
|
|
2141
2126
|
};
|
|
2142
2127
|
return K(
|
|
2143
2128
|
() => o.value,
|
|
2144
|
-
(
|
|
2145
|
-
(
|
|
2129
|
+
(h, k) => {
|
|
2130
|
+
(h !== k || h !== l.value) && (l.value = h);
|
|
2146
2131
|
}
|
|
2147
2132
|
), s({
|
|
2148
2133
|
error: n,
|
|
2149
2134
|
required: o.required,
|
|
2150
|
-
updateValue:
|
|
2135
|
+
updateValue: y,
|
|
2151
2136
|
value: l
|
|
2152
|
-
}), (
|
|
2137
|
+
}), (h, k) => (E(), p("div", {
|
|
2153
2138
|
class: c([
|
|
2154
2139
|
"tide-input-text",
|
|
2155
2140
|
e(t).DISPLAY.FLEX,
|
|
2156
2141
|
e(t).FLEX.DIRECTION.COLUMN,
|
|
2157
2142
|
e(t).GAP.QUARTER,
|
|
2158
|
-
|
|
2143
|
+
h.disabled && "disabled",
|
|
2159
2144
|
R.value && "error"
|
|
2160
2145
|
])
|
|
2161
2146
|
}, [
|
|
@@ -2178,7 +2163,7 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2178
2163
|
class: c([e(t).FONT.COLOR.SURFACE.VARIANT]),
|
|
2179
2164
|
icon: o.iconLeading,
|
|
2180
2165
|
size: e(Y).SMALL
|
|
2181
|
-
}, null, 8, ["class", "icon", "size"])) :
|
|
2166
|
+
}, null, 8, ["class", "icon", "size"])) : S("", !0),
|
|
2182
2167
|
v("div", {
|
|
2183
2168
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.QUARTER, e(t).WIDTH.FULL])
|
|
2184
2169
|
}, [
|
|
@@ -2191,15 +2176,15 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2191
2176
|
!R.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
2192
2177
|
A.value ? "" : "offset"
|
|
2193
2178
|
])
|
|
2194
|
-
},
|
|
2179
|
+
}, C(o.prefix), 3)) : S("", !0),
|
|
2195
2180
|
v("div", {
|
|
2196
2181
|
class: c([e(t).DISPLAY.FLEX, e(t).FLEX.DIRECTION.COLUMN, e(t).WIDTH.FULL]),
|
|
2197
|
-
onClick:
|
|
2182
|
+
onClick: k[1] || (k[1] = Ee((_) => {
|
|
2198
2183
|
var B;
|
|
2199
2184
|
return (B = d.value) == null ? void 0 : B.focus();
|
|
2200
2185
|
}, ["prevent"]))
|
|
2201
2186
|
}, [
|
|
2202
|
-
|
|
2187
|
+
h.label ? (E(), p("label", {
|
|
2203
2188
|
key: 0,
|
|
2204
2189
|
class: c([
|
|
2205
2190
|
A.value ? ["minilabel", e(t).FONT.ROLE.LABEL_3] : e(t).FONT.ROLE.LABEL_1,
|
|
@@ -2208,10 +2193,10 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2208
2193
|
e(t).POINTER_EVENTS.OFF
|
|
2209
2194
|
]),
|
|
2210
2195
|
for: o.inputId
|
|
2211
|
-
},
|
|
2212
|
-
|
|
2213
|
-
autocomplete:
|
|
2214
|
-
class: c([e(t).WIDTH.FULL,
|
|
2196
|
+
}, C(O.value), 11, js)) : S("", !0),
|
|
2197
|
+
Ge(v("input", {
|
|
2198
|
+
autocomplete: h.autocomplete ? "on" : "off",
|
|
2199
|
+
class: c([e(t).WIDTH.FULL, h.disabled && e(t).CURSOR.NOT_ALLOWED, e(t).FONT.ROLE.BODY_1]),
|
|
2215
2200
|
"data-track": o.dataTrack,
|
|
2216
2201
|
disabled: o.disabled,
|
|
2217
2202
|
maxlength: o.maxlength,
|
|
@@ -2221,14 +2206,14 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2221
2206
|
ref: d,
|
|
2222
2207
|
required: o.required,
|
|
2223
2208
|
type: m.value,
|
|
2224
|
-
onChange:
|
|
2209
|
+
onChange: D,
|
|
2225
2210
|
onFocus: I,
|
|
2226
2211
|
onFocusout: T,
|
|
2227
2212
|
onInput: g,
|
|
2228
2213
|
id: o.inputId,
|
|
2229
|
-
"onUpdate:modelValue":
|
|
2214
|
+
"onUpdate:modelValue": k[0] || (k[0] = (_) => l.value = _)
|
|
2230
2215
|
}, null, 42, Js), [
|
|
2231
|
-
[
|
|
2216
|
+
[Vt, l.value]
|
|
2232
2217
|
])
|
|
2233
2218
|
], 2),
|
|
2234
2219
|
o.suffix ? (E(), p("div", {
|
|
@@ -2239,22 +2224,22 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2239
2224
|
!R.value && e(t).FONT.COLOR.SURFACE.VARIANT,
|
|
2240
2225
|
A.value ? "" : "offset"
|
|
2241
2226
|
])
|
|
2242
|
-
},
|
|
2227
|
+
}, C(o.suffix), 3)) : S("", !0)
|
|
2243
2228
|
], 2),
|
|
2244
|
-
L.value && o.type !== e(
|
|
2229
|
+
L.value && o.type !== e(Fe).PASSWORD ? (E(), P(H, {
|
|
2245
2230
|
key: 1,
|
|
2246
2231
|
class: c([e(t).PADDING.Y.HALF, e(t).PADDING.FULL.HALF, e(t).CURSOR.POINTER]),
|
|
2247
|
-
icon: e(
|
|
2232
|
+
icon: e(w).CLOSE,
|
|
2248
2233
|
size: e(Y).SMALL,
|
|
2249
2234
|
onClick: N
|
|
2250
|
-
}, null, 8, ["class", "icon", "size"])) :
|
|
2251
|
-
o.type === e(
|
|
2235
|
+
}, null, 8, ["class", "icon", "size"])) : S("", !0),
|
|
2236
|
+
o.type === e(Fe).PASSWORD ? (E(), P(H, {
|
|
2252
2237
|
key: 2,
|
|
2253
2238
|
class: c([e(t).PADDING.Y.HALF, e(t).PADDING.FULL.HALF, e(t).CURSOR.POINTER]),
|
|
2254
|
-
icon: e(
|
|
2239
|
+
icon: e(w).VISIBILITY,
|
|
2255
2240
|
size: e(Y).SMALL,
|
|
2256
|
-
onClick:
|
|
2257
|
-
}, null, 8, ["class", "icon", "size"])) :
|
|
2241
|
+
onClick: k[2] || (k[2] = (_) => r.value = !r.value)
|
|
2242
|
+
}, null, 8, ["class", "icon", "size"])) : S("", !0)
|
|
2258
2243
|
], 2),
|
|
2259
2244
|
o.supportingText || R.value ? (E(), p("div", {
|
|
2260
2245
|
key: 0,
|
|
@@ -2263,17 +2248,16 @@ const vi = /* @__PURE__ */ w(qs, [["__scopeId", "data-v-2da267e1"]]), _e = {
|
|
|
2263
2248
|
R.value ? (E(), P(H, {
|
|
2264
2249
|
key: 0,
|
|
2265
2250
|
class: c([]),
|
|
2266
|
-
icon: e(
|
|
2251
|
+
icon: e(w).ERROR,
|
|
2267
2252
|
size: e(Y).SMALL
|
|
2268
|
-
}, null, 8, ["icon", "size"])) :
|
|
2253
|
+
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
2269
2254
|
v("div", {
|
|
2270
2255
|
class: c([e(t).FONT.ROLE.LABEL_3])
|
|
2271
|
-
},
|
|
2272
|
-
], 2)) :
|
|
2256
|
+
}, C(R.value ? u.value : o.supportingText), 3)
|
|
2257
|
+
], 2)) : S("", !0)
|
|
2273
2258
|
], 2));
|
|
2274
2259
|
}
|
|
2275
|
-
})
|
|
2276
|
-
const fi = /* @__PURE__ */ w(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for"], so = ["data-track", "maxlength", "minlength", "name", "required", "rows", "id"], oo = /* @__PURE__ */ C({
|
|
2260
|
+
}), Ai = /* @__PURE__ */ G(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for"], so = ["data-track", "maxlength", "minlength", "name", "required", "rows", "id"], oo = /* @__PURE__ */ b({
|
|
2277
2261
|
__name: "TideInputTextarea",
|
|
2278
2262
|
props: {
|
|
2279
2263
|
dataTrack: { default: "" },
|
|
@@ -2289,13 +2273,13 @@ const fi = /* @__PURE__ */ w(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for
|
|
|
2289
2273
|
value: { default: void 0 }
|
|
2290
2274
|
},
|
|
2291
2275
|
setup(i, { expose: s }) {
|
|
2292
|
-
const o = i, n =
|
|
2276
|
+
const o = i, n = F(o.error), a = F(!1), d = F(null), r = F(o.value), l = U(() => Ze(o.error, n.value)), u = U(() => o.required ? `${o.label} *` : o.label), O = U(
|
|
2293
2277
|
() => o.required && r.value !== void 0 && !r.value || qe(n.value, o.error)
|
|
2294
2278
|
), L = U(() => a.value || !R.value), R = U(() => r.value === "" || r.value === void 0), A = () => {
|
|
2295
2279
|
a.value = !0;
|
|
2296
2280
|
}, f = () => {
|
|
2297
2281
|
a.value = !1, r.value || (r.value = "");
|
|
2298
|
-
}, m = () =>
|
|
2282
|
+
}, m = () => Ft({
|
|
2299
2283
|
error: n,
|
|
2300
2284
|
errorFromProps: o.error,
|
|
2301
2285
|
maxlength: o.maxlength,
|
|
@@ -2337,8 +2321,8 @@ const fi = /* @__PURE__ */ w(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for
|
|
|
2337
2321
|
]),
|
|
2338
2322
|
for: o.inputId,
|
|
2339
2323
|
ref: "label"
|
|
2340
|
-
},
|
|
2341
|
-
|
|
2324
|
+
}, C(u.value), 11, to)) : S("", !0),
|
|
2325
|
+
Ge(v("textarea", {
|
|
2342
2326
|
class: c([e(t).WIDTH.FULL, e(t).FONT.ROLE.BODY_1]),
|
|
2343
2327
|
"data-track": o.dataTrack,
|
|
2344
2328
|
maxlength: o.maxlength,
|
|
@@ -2354,7 +2338,7 @@ const fi = /* @__PURE__ */ w(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for
|
|
|
2354
2338
|
id: o.inputId,
|
|
2355
2339
|
"onUpdate:modelValue": I[0] || (I[0] = (T) => r.value = T)
|
|
2356
2340
|
}, null, 42, so), [
|
|
2357
|
-
[
|
|
2341
|
+
[$t, r.value]
|
|
2358
2342
|
])
|
|
2359
2343
|
], 2),
|
|
2360
2344
|
o.supportingText || O.value ? (E(), p("div", {
|
|
@@ -2363,20 +2347,19 @@ const fi = /* @__PURE__ */ w(eo, [["__scopeId", "data-v-d369bda5"]]), to = ["for
|
|
|
2363
2347
|
}, [
|
|
2364
2348
|
O.value ? (E(), P(H, {
|
|
2365
2349
|
key: 0,
|
|
2366
|
-
icon: e(
|
|
2350
|
+
icon: e(w).ERROR,
|
|
2367
2351
|
size: e(Y).SMALL
|
|
2368
|
-
}, null, 8, ["icon", "size"])) :
|
|
2352
|
+
}, null, 8, ["icon", "size"])) : S("", !0),
|
|
2369
2353
|
v("div", {
|
|
2370
2354
|
class: c([e(t).FONT.ROLE.LABEL_3])
|
|
2371
|
-
},
|
|
2372
|
-
], 2)) :
|
|
2355
|
+
}, C(O.value ? l.value : o.supportingText), 3)
|
|
2356
|
+
], 2)) : S("", !0)
|
|
2373
2357
|
], 2));
|
|
2374
2358
|
}
|
|
2375
|
-
})
|
|
2376
|
-
const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @__PURE__ */ C({
|
|
2359
|
+
}), Ii = /* @__PURE__ */ G(oo, [["__scopeId", "data-v-2105ab99"]]), Ti = /* @__PURE__ */ b({
|
|
2377
2360
|
__name: "TideLink",
|
|
2378
2361
|
props: {
|
|
2379
|
-
element: { default:
|
|
2362
|
+
element: { default: M.LINK },
|
|
2380
2363
|
href: { default: void 0 },
|
|
2381
2364
|
iconLeading: { default: void 0 },
|
|
2382
2365
|
iconTrailing: { default: void 0 },
|
|
@@ -2386,7 +2369,7 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2386
2369
|
},
|
|
2387
2370
|
setup(i) {
|
|
2388
2371
|
const s = i;
|
|
2389
|
-
return (o, n) => (E(), P(
|
|
2372
|
+
return (o, n) => (E(), P(Le(s.element === e(M).LINK ? e(M).LINK : e(M).BUTTON), {
|
|
2390
2373
|
class: c([
|
|
2391
2374
|
"tide-link",
|
|
2392
2375
|
e(t).DISPLAY.INLINE,
|
|
@@ -2396,20 +2379,20 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2396
2379
|
href: s.href,
|
|
2397
2380
|
target: s.isNewTab ? e(se).BLANK : e(se).SELF
|
|
2398
2381
|
}, {
|
|
2399
|
-
default:
|
|
2382
|
+
default: Re(() => [
|
|
2400
2383
|
s.iconLeading ? (E(), P(H, {
|
|
2401
2384
|
key: 0,
|
|
2402
2385
|
class: c([e(t).DISPLAY.INLINE_BLOCK, e(t).ALIGN.Y.MIDDLE, e(t).MARGIN.RIGHT.QUARTER]),
|
|
2403
2386
|
icon: s.iconLeading
|
|
2404
|
-
}, null, 8, ["class", "icon"])) :
|
|
2387
|
+
}, null, 8, ["class", "icon"])) : S("", !0),
|
|
2405
2388
|
v("span", {
|
|
2406
2389
|
class: c([e(t).ALIGN.Y.MIDDLE])
|
|
2407
|
-
},
|
|
2390
|
+
}, C(s.label), 3),
|
|
2408
2391
|
s.iconTrailing ? (E(), P(H, {
|
|
2409
2392
|
key: 1,
|
|
2410
2393
|
class: c([e(t).DISPLAY.INLINE_BLOCK, e(t).ALIGN.Y.MIDDLE, e(t).MARGIN.LEFT.QUARTER]),
|
|
2411
2394
|
icon: s.iconTrailing
|
|
2412
|
-
}, null, 8, ["class", "icon"])) :
|
|
2395
|
+
}, null, 8, ["class", "icon"])) : S("", !0)
|
|
2413
2396
|
]),
|
|
2414
2397
|
_: 1
|
|
2415
2398
|
}, 8, ["class", "href", "target"]));
|
|
@@ -2419,12 +2402,12 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2419
2402
|
MD: "md",
|
|
2420
2403
|
LG: "lg",
|
|
2421
2404
|
XL: "xl"
|
|
2422
|
-
},
|
|
2405
|
+
}, gi = {
|
|
2423
2406
|
SM: 768,
|
|
2424
2407
|
MD: 992,
|
|
2425
2408
|
LG: 1232,
|
|
2426
2409
|
XL: 1920
|
|
2427
|
-
},
|
|
2410
|
+
}, St = async (i) => {
|
|
2428
2411
|
const s = document.body;
|
|
2429
2412
|
if (i) {
|
|
2430
2413
|
if (!s.dataset.scrollLockY) {
|
|
@@ -2438,10 +2421,10 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2438
2421
|
top: o
|
|
2439
2422
|
}), delete s.dataset.scrollLockY;
|
|
2440
2423
|
}
|
|
2441
|
-
}, be = "tide-top-layer",
|
|
2424
|
+
}, be = "tide-top-layer", ht = () => {
|
|
2442
2425
|
let i = document.getElementById(be);
|
|
2443
2426
|
i || (i = document.createElement("div"), i.id = be, i.setAttribute("data-css-scope", ""), document.body.appendChild(i)), i.style.isolation = "isolate";
|
|
2444
|
-
}, no = ["onClick", "onKeydown"], ao = ["textContent"], ro = /* @__PURE__ */
|
|
2427
|
+
}, no = ["onClick", "onKeydown"], ao = ["textContent"], ro = /* @__PURE__ */ b({
|
|
2445
2428
|
__name: "TideModal",
|
|
2446
2429
|
props: {
|
|
2447
2430
|
isBackButton: { type: Boolean, default: !1 },
|
|
@@ -2452,7 +2435,7 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2452
2435
|
},
|
|
2453
2436
|
emits: ["close", "back"],
|
|
2454
2437
|
setup(i, { emit: s }) {
|
|
2455
|
-
const o = i, n =
|
|
2438
|
+
const o = i, n = F(), a = F(), d = () => {
|
|
2456
2439
|
var L;
|
|
2457
2440
|
(L = a.value) == null || L.showModal();
|
|
2458
2441
|
}, r = () => {
|
|
@@ -2470,19 +2453,19 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2470
2453
|
return K(
|
|
2471
2454
|
() => o.isOpen,
|
|
2472
2455
|
(L) => {
|
|
2473
|
-
a.value && (L ? (d(), l()) : r(),
|
|
2456
|
+
a.value && (L ? (d(), l()) : r(), St(L));
|
|
2474
2457
|
}
|
|
2475
|
-
),
|
|
2458
|
+
), we(() => {
|
|
2476
2459
|
o.isOpen && d();
|
|
2477
2460
|
}), (L, R) => (E(), p("dialog", {
|
|
2478
2461
|
class: c(["tide-modal", e(t).BG.INITIAL, e(t).HEIGHT.FULL, e(t).WIDTH.FULL, e(t).OVERFLOW.XY.HIDDEN]),
|
|
2479
2462
|
ref_key: "modalDialog",
|
|
2480
2463
|
ref: a,
|
|
2481
2464
|
style: Ke({ "--modal-width": o.width }),
|
|
2482
|
-
onClick:
|
|
2483
|
-
onClose: R[2] || (R[2] =
|
|
2465
|
+
onClick: Ee(u, ["self"]),
|
|
2466
|
+
onClose: R[2] || (R[2] = Ee(() => {
|
|
2484
2467
|
}, ["prevent"])),
|
|
2485
|
-
onKeydown:
|
|
2468
|
+
onKeydown: gt(O, ["escape"])
|
|
2486
2469
|
}, [
|
|
2487
2470
|
v("div", {
|
|
2488
2471
|
class: c([
|
|
@@ -2513,22 +2496,22 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2513
2496
|
}, [
|
|
2514
2497
|
L.isBackButton ? (E(), P(Z, {
|
|
2515
2498
|
key: 0,
|
|
2516
|
-
icon: e(
|
|
2499
|
+
icon: e(w).CHEVRON_LEFT,
|
|
2517
2500
|
priority: e($).QUATERNARY,
|
|
2518
2501
|
onClick: R[0] || (R[0] = (A) => s("back")),
|
|
2519
2502
|
title: "Back"
|
|
2520
|
-
}, null, 8, ["icon", "priority"])) :
|
|
2503
|
+
}, null, 8, ["icon", "priority"])) : S("", !0),
|
|
2521
2504
|
v("div", {
|
|
2522
2505
|
class: c([e(t).FONT.ROLE.HEADLINE_2]),
|
|
2523
|
-
textContent:
|
|
2506
|
+
textContent: C(L.title)
|
|
2524
2507
|
}, null, 10, ao),
|
|
2525
2508
|
L.isDismissible ? (E(), P(Z, {
|
|
2526
2509
|
key: 1,
|
|
2527
2510
|
class: c([e(t).FLEX.GROW.OFF, e(t).FLEX.SHRINK.OFF, e(t).MARGIN.LEFT.AUTO]),
|
|
2528
|
-
icon: e(
|
|
2511
|
+
icon: e(w).CLOSE,
|
|
2529
2512
|
priority: e($).QUATERNARY,
|
|
2530
2513
|
onClick: R[1] || (R[1] = (A) => s("close"))
|
|
2531
|
-
}, null, 8, ["class", "icon", "priority"])) :
|
|
2514
|
+
}, null, 8, ["class", "icon", "priority"])) : S("", !0)
|
|
2532
2515
|
], 2),
|
|
2533
2516
|
v("div", {
|
|
2534
2517
|
class: c([
|
|
@@ -2549,12 +2532,11 @@ const Ai = /* @__PURE__ */ w(oo, [["__scopeId", "data-v-2105ab99"]]), Ii = /* @_
|
|
|
2549
2532
|
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])
|
|
2550
2533
|
}, [
|
|
2551
2534
|
V(L.$slots, "footer", {}, void 0, !0)
|
|
2552
|
-
], 2)) :
|
|
2535
|
+
], 2)) : S("", !0)
|
|
2553
2536
|
], 2)
|
|
2554
2537
|
], 46, no));
|
|
2555
2538
|
}
|
|
2556
|
-
})
|
|
2557
|
-
const gi = /* @__PURE__ */ w(ro, [["__scopeId", "data-v-1598252f"]]), mi = /* @__PURE__ */ C({
|
|
2539
|
+
}), mi = /* @__PURE__ */ G(ro, [["__scopeId", "data-v-1598252f"]]), Ni = /* @__PURE__ */ b({
|
|
2558
2540
|
__name: "TidePagination",
|
|
2559
2541
|
props: {
|
|
2560
2542
|
pageCurrent: { default: 1 },
|
|
@@ -2562,15 +2544,15 @@ const gi = /* @__PURE__ */ w(ro, [["__scopeId", "data-v-1598252f"]]), mi = /* @_
|
|
|
2562
2544
|
},
|
|
2563
2545
|
emits: ["change"],
|
|
2564
2546
|
setup(i, { emit: s }) {
|
|
2565
|
-
const o = i, n =
|
|
2547
|
+
const o = i, n = F(o.pageCurrent), a = U(() => new Array(o.pageTotal).fill("").map((r, l) => l + 1)), d = (r) => {
|
|
2566
2548
|
n.value = r, s("change", event, r);
|
|
2567
2549
|
};
|
|
2568
2550
|
return (r, l) => (E(), p("section", {
|
|
2569
2551
|
class: c(["tide-pagination", e(t).DISPLAY.FLEX, e(t).AXIS1.CENTER, e(t).AXIS2.CENTER, e(t).GAP.QUARTER, e(t).WIDTH.FULL])
|
|
2570
2552
|
}, [
|
|
2571
|
-
|
|
2553
|
+
x(Z, {
|
|
2572
2554
|
disabled: n.value === 1,
|
|
2573
|
-
icon: e(
|
|
2555
|
+
icon: e(w).CHEVRON_LEFT,
|
|
2574
2556
|
priority: e($).QUATERNARY,
|
|
2575
2557
|
onClick: l[0] || (l[0] = (u) => d(n.value - 1))
|
|
2576
2558
|
}, null, 8, ["disabled", "icon", "priority"]),
|
|
@@ -2578,7 +2560,7 @@ const gi = /* @__PURE__ */ w(ro, [["__scopeId", "data-v-1598252f"]]), mi = /* @_
|
|
|
2578
2560
|
class: c([e(t).DISPLAY.FLEX, e(t).AXIS2.CENTER, e(t).GAP.QUARTER, e(t).LIST_BULLETS.OFF])
|
|
2579
2561
|
}, [
|
|
2580
2562
|
(E(!0), p(ee, null, le(a.value, (u) => (E(), p("li", { key: u }, [
|
|
2581
|
-
|
|
2563
|
+
x(Ls, {
|
|
2582
2564
|
disabled: n.value === u,
|
|
2583
2565
|
label: u,
|
|
2584
2566
|
priority: e($).QUATERNARY,
|
|
@@ -2586,15 +2568,15 @@ const gi = /* @__PURE__ */ w(ro, [["__scopeId", "data-v-1598252f"]]), mi = /* @_
|
|
|
2586
2568
|
}, null, 8, ["disabled", "label", "priority", "onClick"])
|
|
2587
2569
|
]))), 128))
|
|
2588
2570
|
], 2),
|
|
2589
|
-
|
|
2571
|
+
x(Z, {
|
|
2590
2572
|
disabled: n.value === a.value[a.value.length - 1],
|
|
2591
|
-
icon: e(
|
|
2573
|
+
icon: e(w).CHEVRON_RIGHT,
|
|
2592
2574
|
priority: e($).QUATERNARY,
|
|
2593
2575
|
onClick: l[1] || (l[1] = (u) => d(n.value + 1))
|
|
2594
2576
|
}, null, 8, ["disabled", "icon", "priority"])
|
|
2595
2577
|
], 2));
|
|
2596
2578
|
}
|
|
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,
|
|
2579
|
+
}), 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, _e = Math.floor, te = (i) => ({
|
|
2598
2580
|
x: i,
|
|
2599
2581
|
y: i
|
|
2600
2582
|
}), co = {
|
|
@@ -2618,21 +2600,21 @@ function ge(i) {
|
|
|
2618
2600
|
function ce(i) {
|
|
2619
2601
|
return i.split("-")[1];
|
|
2620
2602
|
}
|
|
2621
|
-
function
|
|
2603
|
+
function Dt(i) {
|
|
2622
2604
|
return i === "x" ? "y" : "x";
|
|
2623
2605
|
}
|
|
2624
|
-
function
|
|
2606
|
+
function Ct(i) {
|
|
2625
2607
|
return i === "y" ? "height" : "width";
|
|
2626
2608
|
}
|
|
2627
|
-
function
|
|
2609
|
+
function ke(i) {
|
|
2628
2610
|
return ["top", "bottom"].includes(ge(i)) ? "y" : "x";
|
|
2629
2611
|
}
|
|
2630
|
-
function
|
|
2631
|
-
return
|
|
2612
|
+
function yt(i) {
|
|
2613
|
+
return Dt(ke(i));
|
|
2632
2614
|
}
|
|
2633
2615
|
function Eo(i, s, o) {
|
|
2634
2616
|
o === void 0 && (o = !1);
|
|
2635
|
-
const n = ce(i), a =
|
|
2617
|
+
const n = ce(i), a = yt(i), d = Ct(a);
|
|
2636
2618
|
let r = a === "x" ? n === (o ? "end" : "start") ? "right" : "left" : n === "start" ? "bottom" : "top";
|
|
2637
2619
|
return s.reference[d] > s.floating[d] && (r = dt(r)), [r, dt(r)];
|
|
2638
2620
|
}
|
|
@@ -2682,7 +2664,7 @@ function ut(i, s, o) {
|
|
|
2682
2664
|
reference: n,
|
|
2683
2665
|
floating: a
|
|
2684
2666
|
} = i;
|
|
2685
|
-
const d =
|
|
2667
|
+
const d = ke(s), r = yt(s), l = Ct(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;
|
|
2686
2668
|
let f;
|
|
2687
2669
|
switch (u) {
|
|
2688
2670
|
case "top":
|
|
@@ -2746,9 +2728,9 @@ const po = async (i, s, o) => {
|
|
|
2746
2728
|
fn: T
|
|
2747
2729
|
} = l[N], {
|
|
2748
2730
|
x: g,
|
|
2749
|
-
y:
|
|
2750
|
-
data:
|
|
2751
|
-
reset:
|
|
2731
|
+
y: D,
|
|
2732
|
+
data: y,
|
|
2733
|
+
reset: h
|
|
2752
2734
|
} = await T({
|
|
2753
2735
|
x: L,
|
|
2754
2736
|
y: R,
|
|
@@ -2763,17 +2745,17 @@ const po = async (i, s, o) => {
|
|
|
2763
2745
|
floating: s
|
|
2764
2746
|
}
|
|
2765
2747
|
});
|
|
2766
|
-
L = g ?? L, R =
|
|
2748
|
+
L = g ?? L, R = D ?? R, f = {
|
|
2767
2749
|
...f,
|
|
2768
2750
|
[I]: {
|
|
2769
2751
|
...f[I],
|
|
2770
|
-
...
|
|
2752
|
+
...y
|
|
2771
2753
|
}
|
|
2772
|
-
},
|
|
2754
|
+
}, h && m <= 50 && (m++, typeof h == "object" && (h.placement && (A = h.placement), h.rects && (O = h.rects === !0 ? await r.getElementRects({
|
|
2773
2755
|
reference: i,
|
|
2774
2756
|
floating: s,
|
|
2775
2757
|
strategy: a
|
|
2776
|
-
}) :
|
|
2758
|
+
}) : h.rects), {
|
|
2777
2759
|
x: L,
|
|
2778
2760
|
y: R
|
|
2779
2761
|
} = ut(O, A, u)), N = -1);
|
|
@@ -2786,7 +2768,7 @@ const po = async (i, s, o) => {
|
|
|
2786
2768
|
middlewareData: f
|
|
2787
2769
|
};
|
|
2788
2770
|
};
|
|
2789
|
-
async function
|
|
2771
|
+
async function _t(i, s) {
|
|
2790
2772
|
var o;
|
|
2791
2773
|
s === void 0 && (s = {});
|
|
2792
2774
|
const {
|
|
@@ -2812,23 +2794,23 @@ async function yt(i, s) {
|
|
|
2812
2794
|
y: a,
|
|
2813
2795
|
width: r.floating.width,
|
|
2814
2796
|
height: r.floating.height
|
|
2815
|
-
} : r.reference,
|
|
2797
|
+
} : r.reference, D = await (d.getOffsetParent == null ? void 0 : d.getOffsetParent(l.floating)), y = await (d.isElement == null ? void 0 : d.isElement(D)) ? await (d.getScale == null ? void 0 : d.getScale(D)) || {
|
|
2816
2798
|
x: 1,
|
|
2817
2799
|
y: 1
|
|
2818
2800
|
} : {
|
|
2819
2801
|
x: 1,
|
|
2820
2802
|
y: 1
|
|
2821
|
-
},
|
|
2803
|
+
}, h = Pe(d.convertOffsetParentRelativeRectToViewportRelativeRect ? await d.convertOffsetParentRelativeRectToViewportRelativeRect({
|
|
2822
2804
|
elements: l,
|
|
2823
2805
|
rect: g,
|
|
2824
|
-
offsetParent:
|
|
2806
|
+
offsetParent: D,
|
|
2825
2807
|
strategy: u
|
|
2826
2808
|
}) : g);
|
|
2827
2809
|
return {
|
|
2828
|
-
top: (T.top -
|
|
2829
|
-
bottom: (
|
|
2830
|
-
left: (T.left -
|
|
2831
|
-
right: (
|
|
2810
|
+
top: (T.top - h.top + m.top) / y.y,
|
|
2811
|
+
bottom: (h.bottom - T.bottom + m.bottom) / y.y,
|
|
2812
|
+
left: (T.left - h.left + m.left) / y.x,
|
|
2813
|
+
right: (h.right - T.right + m.right) / y.x
|
|
2832
2814
|
};
|
|
2833
2815
|
}
|
|
2834
2816
|
function vo(i, s, o) {
|
|
@@ -2852,49 +2834,49 @@ const fo = function(i) {
|
|
|
2852
2834
|
allowedPlacements: A = lt,
|
|
2853
2835
|
autoAlignment: f = !0,
|
|
2854
2836
|
...m
|
|
2855
|
-
} = He(i, s), N = R !== void 0 || A === lt ? vo(R || null, f, A) : A, I = await
|
|
2837
|
+
} = He(i, s), N = R !== void 0 || A === lt ? vo(R || null, f, A) : A, I = await _t(s, m), T = ((o = r.autoPlacement) == null ? void 0 : o.index) || 0, g = N[T];
|
|
2856
2838
|
if (g == null)
|
|
2857
2839
|
return {};
|
|
2858
|
-
const
|
|
2840
|
+
const D = Eo(g, d, await (u.isRTL == null ? void 0 : u.isRTL(O.floating)));
|
|
2859
2841
|
if (l !== g)
|
|
2860
2842
|
return {
|
|
2861
2843
|
reset: {
|
|
2862
2844
|
placement: N[0]
|
|
2863
2845
|
}
|
|
2864
2846
|
};
|
|
2865
|
-
const
|
|
2847
|
+
const y = [I[ge(g)], I[D[0]], I[D[1]]], h = [...((n = r.autoPlacement) == null ? void 0 : n.overflows) || [], {
|
|
2866
2848
|
placement: g,
|
|
2867
|
-
overflows:
|
|
2868
|
-
}],
|
|
2869
|
-
if (
|
|
2849
|
+
overflows: y
|
|
2850
|
+
}], k = N[T + 1];
|
|
2851
|
+
if (k)
|
|
2870
2852
|
return {
|
|
2871
2853
|
data: {
|
|
2872
2854
|
index: T + 1,
|
|
2873
|
-
overflows:
|
|
2855
|
+
overflows: h
|
|
2874
2856
|
},
|
|
2875
2857
|
reset: {
|
|
2876
|
-
placement:
|
|
2858
|
+
placement: k
|
|
2877
2859
|
}
|
|
2878
2860
|
};
|
|
2879
|
-
const
|
|
2861
|
+
const _ = h.map((W) => {
|
|
2880
2862
|
const Q = ce(W.placement);
|
|
2881
2863
|
return [W.placement, Q && L ? (
|
|
2882
2864
|
// Check along the mainAxis and main crossAxis side.
|
|
2883
|
-
W.overflows.slice(0, 2).reduce((ne,
|
|
2865
|
+
W.overflows.slice(0, 2).reduce((ne, ve) => ne + ve, 0)
|
|
2884
2866
|
) : (
|
|
2885
2867
|
// Check only the mainAxis.
|
|
2886
2868
|
W.overflows[0]
|
|
2887
2869
|
), W.overflows];
|
|
2888
|
-
}).sort((W, Q) => W[1] - Q[1]), X = ((a =
|
|
2870
|
+
}).sort((W, Q) => W[1] - Q[1]), X = ((a = _.filter((W) => W[2].slice(
|
|
2889
2871
|
0,
|
|
2890
2872
|
// Aligned placements should not check their opposite crossAxis
|
|
2891
2873
|
// side.
|
|
2892
2874
|
ce(W[0]) ? 2 : 3
|
|
2893
|
-
).every((Q) => Q <= 0))[0]) == null ? void 0 : a[0]) ||
|
|
2875
|
+
).every((Q) => Q <= 0))[0]) == null ? void 0 : a[0]) || _[0][0];
|
|
2894
2876
|
return X !== l ? {
|
|
2895
2877
|
data: {
|
|
2896
2878
|
index: T + 1,
|
|
2897
|
-
overflows:
|
|
2879
|
+
overflows: h
|
|
2898
2880
|
},
|
|
2899
2881
|
reset: {
|
|
2900
2882
|
placement: X
|
|
@@ -2908,7 +2890,7 @@ async function Ao(i, s) {
|
|
|
2908
2890
|
placement: o,
|
|
2909
2891
|
platform: n,
|
|
2910
2892
|
elements: a
|
|
2911
|
-
} = i, d = await (n.isRTL == null ? void 0 : n.isRTL(a.floating)), r = ge(o), l = ce(o), u =
|
|
2893
|
+
} = i, d = await (n.isRTL == null ? void 0 : n.isRTL(a.floating)), r = ge(o), l = ce(o), u = ke(o) === "y", O = ["left", "top"].includes(r) ? -1 : 1, L = d && u ? -1 : 1, R = He(s, i);
|
|
2912
2894
|
let {
|
|
2913
2895
|
mainAxis: A,
|
|
2914
2896
|
crossAxis: f,
|
|
@@ -2980,15 +2962,15 @@ const Io = function(i) {
|
|
|
2980
2962
|
} = He(i, s), O = {
|
|
2981
2963
|
x: o,
|
|
2982
2964
|
y: n
|
|
2983
|
-
}, L = await
|
|
2965
|
+
}, L = await _t(s, u), R = ke(ge(a)), A = Dt(R);
|
|
2984
2966
|
let f = O[A], m = O[R];
|
|
2985
2967
|
if (d) {
|
|
2986
|
-
const I = A === "y" ? "top" : "left", T = A === "y" ? "bottom" : "right", g = f + L[I],
|
|
2987
|
-
f = ct(g, f,
|
|
2968
|
+
const I = A === "y" ? "top" : "left", T = A === "y" ? "bottom" : "right", g = f + L[I], D = f - L[T];
|
|
2969
|
+
f = ct(g, f, D);
|
|
2988
2970
|
}
|
|
2989
2971
|
if (r) {
|
|
2990
|
-
const I = R === "y" ? "top" : "left", T = R === "y" ? "bottom" : "right", g = m + L[I],
|
|
2991
|
-
m = ct(g, m,
|
|
2972
|
+
const I = R === "y" ? "top" : "left", T = R === "y" ? "bottom" : "right", g = m + L[I], D = m - L[T];
|
|
2973
|
+
m = ct(g, m, D);
|
|
2992
2974
|
}
|
|
2993
2975
|
const N = l.fn({
|
|
2994
2976
|
...s,
|
|
@@ -3009,10 +2991,10 @@ const Io = function(i) {
|
|
|
3009
2991
|
}
|
|
3010
2992
|
};
|
|
3011
2993
|
};
|
|
3012
|
-
function
|
|
2994
|
+
function Me() {
|
|
3013
2995
|
return typeof window < "u";
|
|
3014
2996
|
}
|
|
3015
|
-
function
|
|
2997
|
+
function pe(i) {
|
|
3016
2998
|
return je(i) ? (i.nodeName || "").toLowerCase() : "#document";
|
|
3017
2999
|
}
|
|
3018
3000
|
function z(i) {
|
|
@@ -3024,18 +3006,18 @@ function ie(i) {
|
|
|
3024
3006
|
return (s = (je(i) ? i.ownerDocument : i.document) || window.document) == null ? void 0 : s.documentElement;
|
|
3025
3007
|
}
|
|
3026
3008
|
function je(i) {
|
|
3027
|
-
return
|
|
3009
|
+
return Me() ? i instanceof Node || i instanceof z(i).Node : !1;
|
|
3028
3010
|
}
|
|
3029
3011
|
function q(i) {
|
|
3030
|
-
return
|
|
3012
|
+
return Me() ? i instanceof Element || i instanceof z(i).Element : !1;
|
|
3031
3013
|
}
|
|
3032
3014
|
function oe(i) {
|
|
3033
|
-
return
|
|
3015
|
+
return Me() ? i instanceof HTMLElement || i instanceof z(i).HTMLElement : !1;
|
|
3034
3016
|
}
|
|
3035
3017
|
function Et(i) {
|
|
3036
|
-
return !
|
|
3018
|
+
return !Me() || typeof ShadowRoot > "u" ? !1 : i instanceof ShadowRoot || i instanceof z(i).ShadowRoot;
|
|
3037
3019
|
}
|
|
3038
|
-
function
|
|
3020
|
+
function Ce(i) {
|
|
3039
3021
|
const {
|
|
3040
3022
|
overflow: s,
|
|
3041
3023
|
overflowX: o,
|
|
@@ -3045,9 +3027,9 @@ function De(i) {
|
|
|
3045
3027
|
return /auto|scroll|overlay|hidden|clip/.test(s + n + o) && !["inline", "contents"].includes(a);
|
|
3046
3028
|
}
|
|
3047
3029
|
function go(i) {
|
|
3048
|
-
return ["table", "td", "th"].includes(
|
|
3030
|
+
return ["table", "td", "th"].includes(pe(i));
|
|
3049
3031
|
}
|
|
3050
|
-
function
|
|
3032
|
+
function xe(i) {
|
|
3051
3033
|
return [":popover-open", ":modal"].some((s) => {
|
|
3052
3034
|
try {
|
|
3053
3035
|
return i.matches(s);
|
|
@@ -3065,7 +3047,7 @@ function mo(i) {
|
|
|
3065
3047
|
for (; oe(s) && !Te(s); ) {
|
|
3066
3048
|
if (Je(s))
|
|
3067
3049
|
return s;
|
|
3068
|
-
if (
|
|
3050
|
+
if (xe(s))
|
|
3069
3051
|
return null;
|
|
3070
3052
|
s = de(s);
|
|
3071
3053
|
}
|
|
@@ -3075,7 +3057,7 @@ function et() {
|
|
|
3075
3057
|
return typeof CSS > "u" || !CSS.supports ? !1 : CSS.supports("-webkit-backdrop-filter", "none");
|
|
3076
3058
|
}
|
|
3077
3059
|
function Te(i) {
|
|
3078
|
-
return ["html", "body", "#document"].includes(
|
|
3060
|
+
return ["html", "body", "#document"].includes(pe(i));
|
|
3079
3061
|
}
|
|
3080
3062
|
function j(i) {
|
|
3081
3063
|
return z(i).getComputedStyle(i);
|
|
@@ -3090,7 +3072,7 @@ function Ye(i) {
|
|
|
3090
3072
|
};
|
|
3091
3073
|
}
|
|
3092
3074
|
function de(i) {
|
|
3093
|
-
if (
|
|
3075
|
+
if (pe(i) === "html")
|
|
3094
3076
|
return i;
|
|
3095
3077
|
const s = (
|
|
3096
3078
|
// Step into the shadow DOM of the parent of a slotted node.
|
|
@@ -3101,24 +3083,24 @@ function de(i) {
|
|
|
3101
3083
|
);
|
|
3102
3084
|
return Et(s) ? s.host : s;
|
|
3103
3085
|
}
|
|
3104
|
-
function
|
|
3086
|
+
function bt(i) {
|
|
3105
3087
|
const s = de(i);
|
|
3106
|
-
return Te(s) ? i.ownerDocument ? i.ownerDocument.body : i.body : oe(s) &&
|
|
3088
|
+
return Te(s) ? i.ownerDocument ? i.ownerDocument.body : i.body : oe(s) && Ce(s) ? s : bt(s);
|
|
3107
3089
|
}
|
|
3108
|
-
function
|
|
3090
|
+
function De(i, s, o) {
|
|
3109
3091
|
var n;
|
|
3110
3092
|
s === void 0 && (s = []), o === void 0 && (o = !0);
|
|
3111
|
-
const a =
|
|
3093
|
+
const a = bt(i), d = a === ((n = i.ownerDocument) == null ? void 0 : n.body), r = z(a);
|
|
3112
3094
|
if (d) {
|
|
3113
3095
|
const l = $e(r);
|
|
3114
|
-
return s.concat(r, r.visualViewport || [],
|
|
3096
|
+
return s.concat(r, r.visualViewport || [], Ce(a) ? a : [], l && o ? De(l) : []);
|
|
3115
3097
|
}
|
|
3116
|
-
return s.concat(a,
|
|
3098
|
+
return s.concat(a, De(a, [], o));
|
|
3117
3099
|
}
|
|
3118
3100
|
function $e(i) {
|
|
3119
3101
|
return i.parent && Object.getPrototypeOf(i.parent) ? i.frameElement : null;
|
|
3120
3102
|
}
|
|
3121
|
-
function
|
|
3103
|
+
function Bt(i) {
|
|
3122
3104
|
const s = j(i);
|
|
3123
3105
|
let o = parseFloat(s.width) || 0, n = parseFloat(s.height) || 0;
|
|
3124
3106
|
const a = oe(i), d = a ? i.offsetWidth : o, r = a ? i.offsetHeight : n, l = Ue(o) !== d || Ue(n) !== r;
|
|
@@ -3131,7 +3113,7 @@ function bt(i) {
|
|
|
3131
3113
|
function tt(i) {
|
|
3132
3114
|
return q(i) ? i : i.contextElement;
|
|
3133
3115
|
}
|
|
3134
|
-
function
|
|
3116
|
+
function Ie(i) {
|
|
3135
3117
|
const s = tt(i);
|
|
3136
3118
|
if (!oe(s))
|
|
3137
3119
|
return te(1);
|
|
@@ -3139,7 +3121,7 @@ function Ae(i) {
|
|
|
3139
3121
|
width: n,
|
|
3140
3122
|
height: a,
|
|
3141
3123
|
$: d
|
|
3142
|
-
} =
|
|
3124
|
+
} = Bt(s);
|
|
3143
3125
|
let r = (d ? Ue(o.width) : o.width) / n, l = (d ? Ue(o.height) : o.height) / a;
|
|
3144
3126
|
return (!r || !Number.isFinite(r)) && (r = 1), (!l || !Number.isFinite(l)) && (l = 1), {
|
|
3145
3127
|
x: r,
|
|
@@ -3147,29 +3129,29 @@ function Ae(i) {
|
|
|
3147
3129
|
};
|
|
3148
3130
|
}
|
|
3149
3131
|
const No = /* @__PURE__ */ te(0);
|
|
3150
|
-
function
|
|
3132
|
+
function Ut(i) {
|
|
3151
3133
|
const s = z(i);
|
|
3152
3134
|
return !et() || !s.visualViewport ? No : {
|
|
3153
3135
|
x: s.visualViewport.offsetLeft,
|
|
3154
3136
|
y: s.visualViewport.offsetTop
|
|
3155
3137
|
};
|
|
3156
3138
|
}
|
|
3157
|
-
function
|
|
3139
|
+
function Fo(i, s, o) {
|
|
3158
3140
|
return s === void 0 && (s = !1), !o || s && o !== z(i) ? !1 : s;
|
|
3159
3141
|
}
|
|
3160
|
-
function
|
|
3142
|
+
function Oe(i, s, o, n) {
|
|
3161
3143
|
s === void 0 && (s = !1), o === void 0 && (o = !1);
|
|
3162
3144
|
const a = i.getBoundingClientRect(), d = tt(i);
|
|
3163
3145
|
let r = te(1);
|
|
3164
|
-
s && (n ? q(n) && (r =
|
|
3165
|
-
const l =
|
|
3146
|
+
s && (n ? q(n) && (r = Ie(n)) : r = Ie(i));
|
|
3147
|
+
const l = Fo(d, o, n) ? Ut(d) : te(0);
|
|
3166
3148
|
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;
|
|
3167
3149
|
if (d) {
|
|
3168
3150
|
const A = z(d), f = n && q(n) ? z(n) : n;
|
|
3169
3151
|
let m = A, N = $e(m);
|
|
3170
3152
|
for (; N && n && f !== m; ) {
|
|
3171
|
-
const I =
|
|
3172
|
-
u *= I.x, O *= I.y, L *= I.x, R *= I.y, u +=
|
|
3153
|
+
const I = Ie(N), T = N.getBoundingClientRect(), g = j(N), D = T.left + (N.clientLeft + parseFloat(g.paddingLeft)) * I.x, y = T.top + (N.clientTop + parseFloat(g.paddingTop)) * I.y;
|
|
3154
|
+
u *= I.x, O *= I.y, L *= I.x, R *= I.y, u += D, O += y, m = z(N), N = $e(m);
|
|
3173
3155
|
}
|
|
3174
3156
|
}
|
|
3175
3157
|
return Pe({
|
|
@@ -3181,9 +3163,9 @@ function Ee(i, s, o, n) {
|
|
|
3181
3163
|
}
|
|
3182
3164
|
function st(i, s) {
|
|
3183
3165
|
const o = Ye(i).scrollLeft;
|
|
3184
|
-
return s ? s.left + o :
|
|
3166
|
+
return s ? s.left + o : Oe(ie(i)).left + o;
|
|
3185
3167
|
}
|
|
3186
|
-
function
|
|
3168
|
+
function Pt(i, s, o) {
|
|
3187
3169
|
o === void 0 && (o = !1);
|
|
3188
3170
|
const n = i.getBoundingClientRect(), a = n.left + s.scrollLeft - (o ? 0 : (
|
|
3189
3171
|
// RTL <body> scrollbar.
|
|
@@ -3194,14 +3176,14 @@ function Ut(i, s, o) {
|
|
|
3194
3176
|
y: d
|
|
3195
3177
|
};
|
|
3196
3178
|
}
|
|
3197
|
-
function
|
|
3179
|
+
function So(i) {
|
|
3198
3180
|
let {
|
|
3199
3181
|
elements: s,
|
|
3200
3182
|
rect: o,
|
|
3201
3183
|
offsetParent: n,
|
|
3202
3184
|
strategy: a
|
|
3203
3185
|
} = i;
|
|
3204
|
-
const d = a === "fixed", r = ie(n), l = s ?
|
|
3186
|
+
const d = a === "fixed", r = ie(n), l = s ? xe(s.floating) : !1;
|
|
3205
3187
|
if (n === r || l && d)
|
|
3206
3188
|
return o;
|
|
3207
3189
|
let u = {
|
|
@@ -3209,11 +3191,11 @@ function Fo(i) {
|
|
|
3209
3191
|
scrollTop: 0
|
|
3210
3192
|
}, O = te(1);
|
|
3211
3193
|
const L = te(0), R = oe(n);
|
|
3212
|
-
if ((R || !R && !d) && ((
|
|
3213
|
-
const f =
|
|
3214
|
-
O =
|
|
3194
|
+
if ((R || !R && !d) && ((pe(n) !== "body" || Ce(r)) && (u = Ye(n)), oe(n))) {
|
|
3195
|
+
const f = Oe(n);
|
|
3196
|
+
O = Ie(n), L.x = f.x + n.clientLeft, L.y = f.y + n.clientTop;
|
|
3215
3197
|
}
|
|
3216
|
-
const A = r && !R && !d ?
|
|
3198
|
+
const A = r && !R && !d ? Pt(r, u, !0) : te(0);
|
|
3217
3199
|
return {
|
|
3218
3200
|
width: o.width * O.x,
|
|
3219
3201
|
height: o.height * O.y,
|
|
@@ -3221,10 +3203,10 @@ function Fo(i) {
|
|
|
3221
3203
|
y: o.y * O.y - u.scrollTop * O.y + L.y + A.y
|
|
3222
3204
|
};
|
|
3223
3205
|
}
|
|
3224
|
-
function
|
|
3206
|
+
function ho(i) {
|
|
3225
3207
|
return Array.from(i.getClientRects());
|
|
3226
3208
|
}
|
|
3227
|
-
function
|
|
3209
|
+
function Do(i) {
|
|
3228
3210
|
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);
|
|
3229
3211
|
let r = -o.scrollLeft + st(i);
|
|
3230
3212
|
const l = -o.scrollTop;
|
|
@@ -3235,7 +3217,7 @@ function ho(i) {
|
|
|
3235
3217
|
y: l
|
|
3236
3218
|
};
|
|
3237
3219
|
}
|
|
3238
|
-
function
|
|
3220
|
+
function Co(i, s) {
|
|
3239
3221
|
const o = z(i), n = ie(i), a = o.visualViewport;
|
|
3240
3222
|
let d = n.clientWidth, r = n.clientHeight, l = 0, u = 0;
|
|
3241
3223
|
if (a) {
|
|
@@ -3251,7 +3233,7 @@ function Do(i, s) {
|
|
|
3251
3233
|
};
|
|
3252
3234
|
}
|
|
3253
3235
|
function yo(i, s) {
|
|
3254
|
-
const o =
|
|
3236
|
+
const o = Oe(i, !0, s === "fixed"), n = o.top + i.clientTop, a = o.left + i.clientLeft, d = oe(i) ? Ie(i) : te(1), r = i.clientWidth * d.x, l = i.clientHeight * d.y, u = a * d.x, O = n * d.y;
|
|
3255
3237
|
return {
|
|
3256
3238
|
width: r,
|
|
3257
3239
|
height: l,
|
|
@@ -3262,13 +3244,13 @@ function yo(i, s) {
|
|
|
3262
3244
|
function Ot(i, s, o) {
|
|
3263
3245
|
let n;
|
|
3264
3246
|
if (s === "viewport")
|
|
3265
|
-
n =
|
|
3247
|
+
n = Co(i, o);
|
|
3266
3248
|
else if (s === "document")
|
|
3267
|
-
n =
|
|
3249
|
+
n = Do(ie(i));
|
|
3268
3250
|
else if (q(s))
|
|
3269
3251
|
n = yo(s, o);
|
|
3270
3252
|
else {
|
|
3271
|
-
const a =
|
|
3253
|
+
const a = Ut(i);
|
|
3272
3254
|
n = {
|
|
3273
3255
|
x: s.x - a.x,
|
|
3274
3256
|
y: s.y - a.y,
|
|
@@ -3278,20 +3260,20 @@ function Ot(i, s, o) {
|
|
|
3278
3260
|
}
|
|
3279
3261
|
return Pe(n);
|
|
3280
3262
|
}
|
|
3281
|
-
function
|
|
3263
|
+
function wt(i, s) {
|
|
3282
3264
|
const o = de(i);
|
|
3283
|
-
return o === s || !q(o) || Te(o) ? !1 : j(o).position === "fixed" ||
|
|
3265
|
+
return o === s || !q(o) || Te(o) ? !1 : j(o).position === "fixed" || wt(o, s);
|
|
3284
3266
|
}
|
|
3285
|
-
function
|
|
3267
|
+
function _o(i, s) {
|
|
3286
3268
|
const o = s.get(i);
|
|
3287
3269
|
if (o)
|
|
3288
3270
|
return o;
|
|
3289
|
-
let n =
|
|
3271
|
+
let n = De(i, [], !1).filter((l) => q(l) && pe(l) !== "body"), a = null;
|
|
3290
3272
|
const d = j(i).position === "fixed";
|
|
3291
3273
|
let r = d ? de(i) : i;
|
|
3292
3274
|
for (; q(r) && !Te(r); ) {
|
|
3293
3275
|
const l = j(r), u = Je(r);
|
|
3294
|
-
!u && l.position === "fixed" && (a = null), (d ? !u && !a : !u && l.position === "static" && !!a && ["absolute", "fixed"].includes(a.position) ||
|
|
3276
|
+
!u && l.position === "fixed" && (a = null), (d ? !u && !a : !u && l.position === "static" && !!a && ["absolute", "fixed"].includes(a.position) || Ce(r) && !u && wt(i, r)) ? n = n.filter((L) => L !== r) : a = l, r = de(r);
|
|
3295
3277
|
}
|
|
3296
3278
|
return s.set(i, n), n;
|
|
3297
3279
|
}
|
|
@@ -3302,7 +3284,7 @@ function bo(i) {
|
|
|
3302
3284
|
rootBoundary: n,
|
|
3303
3285
|
strategy: a
|
|
3304
3286
|
} = i;
|
|
3305
|
-
const r = [...o === "clippingAncestors" ?
|
|
3287
|
+
const r = [...o === "clippingAncestors" ? xe(s) ? [] : _o(s, this._c) : [].concat(o), n], l = r[0], u = r.reduce((O, L) => {
|
|
3306
3288
|
const R = Ot(s, L, a);
|
|
3307
3289
|
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;
|
|
3308
3290
|
}, Ot(s, l, a));
|
|
@@ -3317,26 +3299,25 @@ function Bo(i) {
|
|
|
3317
3299
|
const {
|
|
3318
3300
|
width: s,
|
|
3319
3301
|
height: o
|
|
3320
|
-
} =
|
|
3302
|
+
} = Bt(i);
|
|
3321
3303
|
return {
|
|
3322
3304
|
width: s,
|
|
3323
3305
|
height: o
|
|
3324
3306
|
};
|
|
3325
3307
|
}
|
|
3326
3308
|
function Uo(i, s, o) {
|
|
3327
|
-
const n = oe(s), a = ie(s), d = o === "fixed", r =
|
|
3309
|
+
const n = oe(s), a = ie(s), d = o === "fixed", r = Oe(i, !0, d, s);
|
|
3328
3310
|
let l = {
|
|
3329
3311
|
scrollLeft: 0,
|
|
3330
3312
|
scrollTop: 0
|
|
3331
3313
|
};
|
|
3332
3314
|
const u = te(0);
|
|
3333
3315
|
if (n || !n && !d)
|
|
3334
|
-
if ((
|
|
3335
|
-
const A =
|
|
3316
|
+
if ((pe(s) !== "body" || Ce(a)) && (l = Ye(s)), n) {
|
|
3317
|
+
const A = Oe(s, !0, d, s);
|
|
3336
3318
|
u.x = A.x + s.clientLeft, u.y = A.y + s.clientTop;
|
|
3337
|
-
} else
|
|
3338
|
-
|
|
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;
|
|
3319
|
+
} else a && (u.x = st(a));
|
|
3320
|
+
const O = a && !n && !d ? Pt(a, l) : te(0), L = r.left + l.scrollLeft - u.x - O.x, R = r.top + l.scrollTop - u.y - O.y;
|
|
3340
3321
|
return {
|
|
3341
3322
|
x: L,
|
|
3342
3323
|
y: R,
|
|
@@ -3357,7 +3338,7 @@ function Lt(i, s) {
|
|
|
3357
3338
|
}
|
|
3358
3339
|
function Gt(i, s) {
|
|
3359
3340
|
const o = z(i);
|
|
3360
|
-
if (
|
|
3341
|
+
if (xe(i))
|
|
3361
3342
|
return o;
|
|
3362
3343
|
if (!oe(i)) {
|
|
3363
3344
|
let a = de(i);
|
|
@@ -3385,22 +3366,22 @@ const Po = async function(i) {
|
|
|
3385
3366
|
}
|
|
3386
3367
|
};
|
|
3387
3368
|
};
|
|
3388
|
-
function
|
|
3369
|
+
function wo(i) {
|
|
3389
3370
|
return j(i).direction === "rtl";
|
|
3390
3371
|
}
|
|
3391
|
-
const
|
|
3392
|
-
convertOffsetParentRelativeRectToViewportRelativeRect:
|
|
3372
|
+
const Go = {
|
|
3373
|
+
convertOffsetParentRelativeRectToViewportRelativeRect: So,
|
|
3393
3374
|
getDocumentElement: ie,
|
|
3394
3375
|
getClippingRect: bo,
|
|
3395
3376
|
getOffsetParent: Gt,
|
|
3396
3377
|
getElementRects: Po,
|
|
3397
|
-
getClientRects:
|
|
3378
|
+
getClientRects: ho,
|
|
3398
3379
|
getDimensions: Bo,
|
|
3399
|
-
getScale:
|
|
3380
|
+
getScale: Ie,
|
|
3400
3381
|
isElement: q,
|
|
3401
|
-
isRTL:
|
|
3382
|
+
isRTL: wo
|
|
3402
3383
|
};
|
|
3403
|
-
function
|
|
3384
|
+
function Ht(i, s) {
|
|
3404
3385
|
return i.x === s.x && i.y === s.y && i.width === s.width && i.height === s.height;
|
|
3405
3386
|
}
|
|
3406
3387
|
function Ho(i, s) {
|
|
@@ -3420,36 +3401,36 @@ function Ho(i, s) {
|
|
|
3420
3401
|
} = O;
|
|
3421
3402
|
if (l || s(), !A || !f)
|
|
3422
3403
|
return;
|
|
3423
|
-
const m =
|
|
3404
|
+
const m = _e(R), N = _e(a.clientWidth - (L + A)), I = _e(a.clientHeight - (R + f)), T = _e(L), D = {
|
|
3424
3405
|
rootMargin: -m + "px " + -N + "px " + -I + "px " + -T + "px",
|
|
3425
3406
|
threshold: ue(0, Be(1, u)) || 1
|
|
3426
3407
|
};
|
|
3427
|
-
let
|
|
3428
|
-
function
|
|
3429
|
-
const
|
|
3430
|
-
if (
|
|
3431
|
-
if (!
|
|
3408
|
+
let y = !0;
|
|
3409
|
+
function h(k) {
|
|
3410
|
+
const _ = k[0].intersectionRatio;
|
|
3411
|
+
if (_ !== u) {
|
|
3412
|
+
if (!y)
|
|
3432
3413
|
return r();
|
|
3433
|
-
|
|
3414
|
+
_ ? r(!1, _) : n = setTimeout(() => {
|
|
3434
3415
|
r(!1, 1e-7);
|
|
3435
3416
|
}, 1e3);
|
|
3436
3417
|
}
|
|
3437
|
-
|
|
3418
|
+
_ === 1 && !Ht(O, i.getBoundingClientRect()) && r(), y = !1;
|
|
3438
3419
|
}
|
|
3439
3420
|
try {
|
|
3440
|
-
o = new IntersectionObserver(
|
|
3441
|
-
...
|
|
3421
|
+
o = new IntersectionObserver(h, {
|
|
3422
|
+
...D,
|
|
3442
3423
|
// Handle <iframe>s
|
|
3443
3424
|
root: a.ownerDocument
|
|
3444
3425
|
});
|
|
3445
3426
|
} catch {
|
|
3446
|
-
o = new IntersectionObserver(
|
|
3427
|
+
o = new IntersectionObserver(h, D);
|
|
3447
3428
|
}
|
|
3448
3429
|
o.observe(i);
|
|
3449
3430
|
}
|
|
3450
3431
|
return r(!0), d;
|
|
3451
3432
|
}
|
|
3452
|
-
function
|
|
3433
|
+
function ko(i, s, o, n) {
|
|
3453
3434
|
n === void 0 && (n = {});
|
|
3454
3435
|
const {
|
|
3455
3436
|
ancestorScroll: a = !0,
|
|
@@ -3457,7 +3438,7 @@ function xo(i, s, o, n) {
|
|
|
3457
3438
|
elementResize: r = typeof ResizeObserver == "function",
|
|
3458
3439
|
layoutShift: l = typeof IntersectionObserver == "function",
|
|
3459
3440
|
animationFrame: u = !1
|
|
3460
|
-
} = n, O = tt(i), L = a || d ? [...O ?
|
|
3441
|
+
} = n, O = tt(i), L = a || d ? [...O ? De(O) : [], ...De(s)] : [];
|
|
3461
3442
|
L.forEach((T) => {
|
|
3462
3443
|
a && T.addEventListener("scroll", o, {
|
|
3463
3444
|
passive: !0
|
|
@@ -3468,15 +3449,15 @@ function xo(i, s, o, n) {
|
|
|
3468
3449
|
r && (f = new ResizeObserver((T) => {
|
|
3469
3450
|
let [g] = T;
|
|
3470
3451
|
g && g.target === O && f && (f.unobserve(s), cancelAnimationFrame(A), A = requestAnimationFrame(() => {
|
|
3471
|
-
var
|
|
3472
|
-
(
|
|
3452
|
+
var D;
|
|
3453
|
+
(D = f) == null || D.observe(s);
|
|
3473
3454
|
})), o();
|
|
3474
3455
|
}), O && !u && f.observe(O), f.observe(s));
|
|
3475
|
-
let m, N = u ?
|
|
3456
|
+
let m, N = u ? Oe(i) : null;
|
|
3476
3457
|
u && I();
|
|
3477
3458
|
function I() {
|
|
3478
|
-
const T =
|
|
3479
|
-
N && !
|
|
3459
|
+
const T = Oe(i);
|
|
3460
|
+
N && !Ht(N, T) && o(), N = T, m = requestAnimationFrame(I);
|
|
3480
3461
|
}
|
|
3481
3462
|
return o(), () => {
|
|
3482
3463
|
var T;
|
|
@@ -3485,9 +3466,9 @@ function xo(i, s, o, n) {
|
|
|
3485
3466
|
}), R == null || R(), (T = f) == null || T.disconnect(), f = null, u && cancelAnimationFrame(m);
|
|
3486
3467
|
};
|
|
3487
3468
|
}
|
|
3488
|
-
const Rt = Io, pt = fo, vt = To,
|
|
3469
|
+
const Rt = Io, pt = fo, vt = To, Mo = (i, s, o) => {
|
|
3489
3470
|
const n = /* @__PURE__ */ new Map(), a = {
|
|
3490
|
-
platform:
|
|
3471
|
+
platform: Go,
|
|
3491
3472
|
...o
|
|
3492
3473
|
}, d = {
|
|
3493
3474
|
...a.platform,
|
|
@@ -3498,53 +3479,53 @@ const Rt = Io, pt = fo, vt = To, ko = (i, s, o) => {
|
|
|
3498
3479
|
platform: d
|
|
3499
3480
|
});
|
|
3500
3481
|
};
|
|
3501
|
-
function
|
|
3482
|
+
function xo(i) {
|
|
3502
3483
|
return i != null && typeof i == "object" && "$el" in i;
|
|
3503
3484
|
}
|
|
3504
3485
|
function ft(i) {
|
|
3505
|
-
if (
|
|
3486
|
+
if (xo(i)) {
|
|
3506
3487
|
const s = i.$el;
|
|
3507
|
-
return je(s) &&
|
|
3488
|
+
return je(s) && pe(s) === "#comment" ? null : s;
|
|
3508
3489
|
}
|
|
3509
3490
|
return i;
|
|
3510
3491
|
}
|
|
3511
|
-
function
|
|
3492
|
+
function Se(i) {
|
|
3512
3493
|
return typeof i == "function" ? i() : e(i);
|
|
3513
3494
|
}
|
|
3514
|
-
function
|
|
3495
|
+
function kt(i) {
|
|
3515
3496
|
return typeof window > "u" ? 1 : (i.ownerDocument.defaultView || window).devicePixelRatio || 1;
|
|
3516
3497
|
}
|
|
3517
3498
|
function At(i, s) {
|
|
3518
|
-
const o =
|
|
3499
|
+
const o = kt(i);
|
|
3519
3500
|
return Math.round(s * o) / o;
|
|
3520
3501
|
}
|
|
3521
3502
|
function Yo(i, s, o) {
|
|
3522
3503
|
o === void 0 && (o = {});
|
|
3523
3504
|
const n = o.whileElementsMounted, a = U(() => {
|
|
3524
|
-
var
|
|
3525
|
-
return (
|
|
3526
|
-
}), d = U(() =>
|
|
3527
|
-
var
|
|
3528
|
-
return (
|
|
3505
|
+
var _;
|
|
3506
|
+
return (_ = Se(o.open)) != null ? _ : !0;
|
|
3507
|
+
}), d = U(() => Se(o.middleware)), r = U(() => {
|
|
3508
|
+
var _;
|
|
3509
|
+
return (_ = Se(o.placement)) != null ? _ : "bottom";
|
|
3529
3510
|
}), l = U(() => {
|
|
3530
|
-
var
|
|
3531
|
-
return (
|
|
3511
|
+
var _;
|
|
3512
|
+
return (_ = Se(o.strategy)) != null ? _ : "absolute";
|
|
3532
3513
|
}), u = U(() => {
|
|
3533
|
-
var
|
|
3534
|
-
return (
|
|
3535
|
-
}), O = U(() => ft(i.value)), L = U(() => ft(s.value)), R =
|
|
3536
|
-
const
|
|
3514
|
+
var _;
|
|
3515
|
+
return (_ = Se(o.transform)) != null ? _ : !0;
|
|
3516
|
+
}), O = U(() => ft(i.value)), L = U(() => ft(s.value)), R = F(0), A = F(0), f = F(l.value), m = F(r.value), N = Kt({}), I = F(!1), T = U(() => {
|
|
3517
|
+
const _ = {
|
|
3537
3518
|
position: f.value,
|
|
3538
3519
|
left: "0",
|
|
3539
3520
|
top: "0"
|
|
3540
3521
|
};
|
|
3541
3522
|
if (!L.value)
|
|
3542
|
-
return
|
|
3523
|
+
return _;
|
|
3543
3524
|
const B = At(L.value, R.value), X = At(L.value, A.value);
|
|
3544
3525
|
return u.value ? {
|
|
3545
|
-
...
|
|
3526
|
+
..._,
|
|
3546
3527
|
transform: "translate(" + B + "px, " + X + "px)",
|
|
3547
|
-
...
|
|
3528
|
+
...kt(L.value) >= 1.5 && {
|
|
3548
3529
|
willChange: "transform"
|
|
3549
3530
|
}
|
|
3550
3531
|
} : {
|
|
@@ -3554,111 +3535,109 @@ function Yo(i, s, o) {
|
|
|
3554
3535
|
};
|
|
3555
3536
|
});
|
|
3556
3537
|
let g;
|
|
3557
|
-
function
|
|
3538
|
+
function D() {
|
|
3558
3539
|
if (O.value == null || L.value == null)
|
|
3559
3540
|
return;
|
|
3560
|
-
const
|
|
3561
|
-
|
|
3541
|
+
const _ = a.value;
|
|
3542
|
+
Mo(O.value, L.value, {
|
|
3562
3543
|
middleware: d.value,
|
|
3563
3544
|
placement: r.value,
|
|
3564
3545
|
strategy: l.value
|
|
3565
3546
|
}).then((B) => {
|
|
3566
|
-
R.value = B.x, A.value = B.y, f.value = B.strategy, m.value = B.placement, N.value = B.middlewareData, I.value =
|
|
3547
|
+
R.value = B.x, A.value = B.y, f.value = B.strategy, m.value = B.placement, N.value = B.middlewareData, I.value = _ !== !1;
|
|
3567
3548
|
});
|
|
3568
3549
|
}
|
|
3569
|
-
function
|
|
3550
|
+
function y() {
|
|
3570
3551
|
typeof g == "function" && (g(), g = void 0);
|
|
3571
3552
|
}
|
|
3572
|
-
function
|
|
3573
|
-
if (
|
|
3574
|
-
|
|
3553
|
+
function h() {
|
|
3554
|
+
if (y(), n === void 0) {
|
|
3555
|
+
D();
|
|
3575
3556
|
return;
|
|
3576
3557
|
}
|
|
3577
3558
|
if (O.value != null && L.value != null) {
|
|
3578
|
-
g = n(O.value, L.value,
|
|
3559
|
+
g = n(O.value, L.value, D);
|
|
3579
3560
|
return;
|
|
3580
3561
|
}
|
|
3581
3562
|
}
|
|
3582
|
-
function
|
|
3563
|
+
function k() {
|
|
3583
3564
|
a.value || (I.value = !1);
|
|
3584
3565
|
}
|
|
3585
|
-
return K([d, r, l, a],
|
|
3566
|
+
return K([d, r, l, a], D, {
|
|
3586
3567
|
flush: "sync"
|
|
3587
|
-
}), K([O, L],
|
|
3568
|
+
}), K([O, L], h, {
|
|
3588
3569
|
flush: "sync"
|
|
3589
|
-
}), K(a,
|
|
3570
|
+
}), K(a, k, {
|
|
3590
3571
|
flush: "sync"
|
|
3591
|
-
}), zt() && Qt(
|
|
3592
|
-
x:
|
|
3593
|
-
y:
|
|
3594
|
-
strategy:
|
|
3595
|
-
placement:
|
|
3596
|
-
middlewareData:
|
|
3597
|
-
isPositioned:
|
|
3572
|
+
}), zt() && Qt(y), {
|
|
3573
|
+
x: fe(R),
|
|
3574
|
+
y: fe(A),
|
|
3575
|
+
strategy: fe(f),
|
|
3576
|
+
placement: fe(m),
|
|
3577
|
+
middlewareData: fe(N),
|
|
3578
|
+
isPositioned: fe(I),
|
|
3598
3579
|
floatingStyles: T,
|
|
3599
|
-
update:
|
|
3580
|
+
update: D
|
|
3600
3581
|
};
|
|
3601
3582
|
}
|
|
3602
|
-
const Wo = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.target)), Xo = /* @__PURE__ */
|
|
3583
|
+
const Wo = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.target)), Xo = /* @__PURE__ */ b({
|
|
3603
3584
|
__name: "TidePopover",
|
|
3604
3585
|
props: {
|
|
3605
3586
|
anchorId: {},
|
|
3606
3587
|
offset: { default: 16 }
|
|
3607
3588
|
},
|
|
3608
3589
|
setup(i) {
|
|
3609
|
-
const s = i, o =
|
|
3590
|
+
const s = i, o = F(null), n = F(null), a = F(null), d = F(!1), r = F(!1), l = F([pt(), Rt({ mainAxis: s.offset }), vt({ padding: 16 })]), u = U(() => d.value || r.value), { floatingStyles: O } = Yo(o, n, {
|
|
3610
3591
|
middleware: l,
|
|
3611
3592
|
strategy: "fixed",
|
|
3612
|
-
whileElementsMounted:
|
|
3613
|
-
}), L = (
|
|
3614
|
-
!o.value || !n.value || Wo(
|
|
3593
|
+
whileElementsMounted: ko
|
|
3594
|
+
}), L = (y) => {
|
|
3595
|
+
!o.value || !n.value || Wo(y, [o.value, n.value]) && (y.stopImmediatePropagation(), r.value = !1);
|
|
3615
3596
|
}, R = () => {
|
|
3616
3597
|
d.value = !0;
|
|
3617
3598
|
}, A = () => {
|
|
3618
3599
|
d.value = !1;
|
|
3619
|
-
}, f = () => {
|
|
3620
|
-
r.value = !0;
|
|
3600
|
+
}, f = (y) => {
|
|
3601
|
+
r.value = !0, y.stopPropagation(), y.preventDefault();
|
|
3621
3602
|
}, m = () => {
|
|
3622
|
-
if (!o.value)
|
|
3623
|
-
return null;
|
|
3603
|
+
if (!o.value) return null;
|
|
3624
3604
|
o.value.addEventListener("mouseover", R), o.value.addEventListener("mouseleave", A), o.value.addEventListener("click", f);
|
|
3625
3605
|
}, N = () => {
|
|
3626
|
-
if (!o.value)
|
|
3627
|
-
return null;
|
|
3606
|
+
if (!o.value) return null;
|
|
3628
3607
|
o.value.removeEventListener("mouseover", R), o.value.removeEventListener("mouseleave", A), o.value.removeEventListener("click", f);
|
|
3629
|
-
}, I = (
|
|
3630
|
-
|
|
3608
|
+
}, I = (y) => {
|
|
3609
|
+
y.key === "Escape" && (r.value = !1);
|
|
3631
3610
|
}, T = () => {
|
|
3632
3611
|
a.value && (a.value.addEventListener("click", L, !0), a.value.addEventListener("keydown", I));
|
|
3633
3612
|
}, g = () => {
|
|
3634
3613
|
a.value && (a.value.removeEventListener("click", L, !0), a.value.removeEventListener("keydown", I));
|
|
3635
|
-
},
|
|
3614
|
+
}, D = () => {
|
|
3636
3615
|
o.value = document.getElementById(s.anchorId);
|
|
3637
3616
|
};
|
|
3638
3617
|
return K(
|
|
3639
3618
|
() => r.value,
|
|
3640
|
-
(
|
|
3641
|
-
|
|
3619
|
+
(y) => {
|
|
3620
|
+
y ? T() : g();
|
|
3642
3621
|
}
|
|
3643
3622
|
), K(
|
|
3644
3623
|
() => s.anchorId,
|
|
3645
3624
|
() => {
|
|
3646
|
-
N(),
|
|
3625
|
+
N(), D(), m();
|
|
3647
3626
|
}
|
|
3648
3627
|
), Zt(() => {
|
|
3649
3628
|
l.value = [pt(), Rt({ mainAxis: s.offset }), vt({ padding: 16 })];
|
|
3650
|
-
}),
|
|
3651
|
-
|
|
3652
|
-
}),
|
|
3653
|
-
|
|
3629
|
+
}), mt(() => {
|
|
3630
|
+
ht();
|
|
3631
|
+
}), we(() => {
|
|
3632
|
+
D(), a.value = document.documentElement, m();
|
|
3654
3633
|
}), It(() => {
|
|
3655
3634
|
N();
|
|
3656
|
-
}), (
|
|
3635
|
+
}), (y, h) => (E(), P(Nt, {
|
|
3657
3636
|
to: `#${e(be)}`
|
|
3658
3637
|
}, [
|
|
3659
|
-
|
|
3660
|
-
default:
|
|
3661
|
-
|
|
3638
|
+
x(qt, null, {
|
|
3639
|
+
default: Re(() => [
|
|
3640
|
+
Ge(v("div", {
|
|
3662
3641
|
class: c([
|
|
3663
3642
|
"tide-popover",
|
|
3664
3643
|
e(t).BG.SURFACE.DEFAULT,
|
|
@@ -3673,7 +3652,7 @@ const Wo = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3673
3652
|
ref: n,
|
|
3674
3653
|
style: Ke({ ...e(O) })
|
|
3675
3654
|
}, [
|
|
3676
|
-
V(
|
|
3655
|
+
V(y.$slots, "default", {}, void 0, !0)
|
|
3677
3656
|
], 6), [
|
|
3678
3657
|
[jt, u.value]
|
|
3679
3658
|
])
|
|
@@ -3682,8 +3661,7 @@ const Wo = (i, s) => !(Array.isArray(s) ? s : [s]).some((n) => n.contains(i.targ
|
|
|
3682
3661
|
})
|
|
3683
3662
|
], 8, ["to"]));
|
|
3684
3663
|
}
|
|
3685
|
-
})
|
|
3686
|
-
const Ni = /* @__PURE__ */ w(Xo, [["__scopeId", "data-v-d3e831ff"]]), Vo = { class: "tide-seo-links" }, $o = ["href", "target"], Ko = /* @__PURE__ */ C({
|
|
3664
|
+
}), Fi = /* @__PURE__ */ G(Xo, [["__scopeId", "data-v-49335fed"]]), Vo = { class: "tide-seo-links" }, $o = ["href", "target"], Ko = /* @__PURE__ */ b({
|
|
3687
3665
|
__name: "TideSeoLinks",
|
|
3688
3666
|
props: {
|
|
3689
3667
|
heading: { default: "" },
|
|
@@ -3694,7 +3672,7 @@ const Ni = /* @__PURE__ */ w(Xo, [["__scopeId", "data-v-d3e831ff"]]), Vo = { cla
|
|
|
3694
3672
|
return (o, n) => (E(), p("section", Vo, [
|
|
3695
3673
|
v("h2", {
|
|
3696
3674
|
class: c([e(t).MARGIN.BOTTOM.HALF])
|
|
3697
|
-
},
|
|
3675
|
+
}, C(s.heading), 3),
|
|
3698
3676
|
v("ul", {
|
|
3699
3677
|
class: c([e(t).DISPLAY.FLEX, e(t).FLEX.WRAP, e(t).GAP.TWO, e(t).LIST_BULLETS.OFF])
|
|
3700
3678
|
}, [
|
|
@@ -3706,13 +3684,12 @@ const Ni = /* @__PURE__ */ w(Xo, [["__scopeId", "data-v-d3e831ff"]]), Vo = { cla
|
|
|
3706
3684
|
class: c([e(t).UNDERLINE.REST.OFF]),
|
|
3707
3685
|
href: a.url,
|
|
3708
3686
|
target: a.isNewTab ? e(se).BLANK : e(se).SELF
|
|
3709
|
-
},
|
|
3687
|
+
}, C(a.label), 11, $o)
|
|
3710
3688
|
], 2))), 128))
|
|
3711
3689
|
], 2)
|
|
3712
3690
|
]));
|
|
3713
3691
|
}
|
|
3714
|
-
})
|
|
3715
|
-
const _i = /* @__PURE__ */ w(Ko, [["__scopeId", "data-v-e655eb08"]]), zo = /* @__PURE__ */ C({
|
|
3692
|
+
}), Si = /* @__PURE__ */ G(Ko, [["__scopeId", "data-v-e655eb08"]]), zo = ["onClick", "onKeydown"], Qo = /* @__PURE__ */ b({
|
|
3716
3693
|
__name: "TideSheet",
|
|
3717
3694
|
props: {
|
|
3718
3695
|
isOpen: { type: Boolean },
|
|
@@ -3720,31 +3697,37 @@ const _i = /* @__PURE__ */ w(Ko, [["__scopeId", "data-v-e655eb08"]]), zo = /* @_
|
|
|
3720
3697
|
},
|
|
3721
3698
|
emits: ["back", "close"],
|
|
3722
3699
|
setup(i, { emit: s }) {
|
|
3723
|
-
const o = i, n =
|
|
3724
|
-
var
|
|
3725
|
-
(
|
|
3700
|
+
const o = i, n = F(null), a = () => {
|
|
3701
|
+
var u;
|
|
3702
|
+
(u = n.value) == null || u.showModal();
|
|
3726
3703
|
}, d = () => {
|
|
3727
|
-
var
|
|
3728
|
-
(
|
|
3704
|
+
var u;
|
|
3705
|
+
(u = n.value) == null || u.close();
|
|
3706
|
+
}, r = () => {
|
|
3707
|
+
s("close");
|
|
3708
|
+
}, l = (u) => {
|
|
3709
|
+
u.preventDefault(), s("close");
|
|
3729
3710
|
};
|
|
3730
3711
|
return K(
|
|
3731
3712
|
() => o.isOpen,
|
|
3732
|
-
(
|
|
3733
|
-
n.value && (
|
|
3713
|
+
(u) => {
|
|
3714
|
+
n.value && (u ? a() : d(), St(u));
|
|
3734
3715
|
}
|
|
3735
|
-
),
|
|
3736
|
-
|
|
3737
|
-
}),
|
|
3716
|
+
), mt(() => {
|
|
3717
|
+
ht();
|
|
3718
|
+
}), we(() => {
|
|
3738
3719
|
o.isOpen && a();
|
|
3739
|
-
}), (
|
|
3720
|
+
}), (u, O) => (E(), P(Nt, {
|
|
3740
3721
|
to: `#${e(be)}`
|
|
3741
3722
|
}, [
|
|
3742
3723
|
v("dialog", {
|
|
3743
3724
|
class: c(["tide-sheet", e(t).BG.INITIAL, e(t).HEIGHT.FULL, e(t).WIDTH.FULL, e(t).OVERFLOW.XY.HIDDEN]),
|
|
3744
3725
|
ref_key: "dialogElement",
|
|
3745
3726
|
ref: n,
|
|
3746
|
-
onClick:
|
|
3747
|
-
onClose:
|
|
3727
|
+
onClick: Ee(r, ["self"]),
|
|
3728
|
+
onClose: O[2] || (O[2] = Ee(() => {
|
|
3729
|
+
}, ["prevent"])),
|
|
3730
|
+
onKeydown: gt(l, ["escape"])
|
|
3748
3731
|
}, [
|
|
3749
3732
|
v("div", {
|
|
3750
3733
|
class: c([
|
|
@@ -3760,21 +3743,21 @@ const _i = /* @__PURE__ */ w(Ko, [["__scopeId", "data-v-e655eb08"]]), zo = /* @_
|
|
|
3760
3743
|
v("header", {
|
|
3761
3744
|
class: c([e(t).DISPLAY.FLEX, e(t).PADDING.X.ONE, e(t).PADDING.TOP.ONE])
|
|
3762
3745
|
}, [
|
|
3763
|
-
|
|
3746
|
+
u.isBackButton ? (E(), P(Z, {
|
|
3764
3747
|
key: 0,
|
|
3765
3748
|
class: c([e(t).FLEX.GROW.OFF, e(t).FLEX.SHRINK.OFF]),
|
|
3766
|
-
icon: e(
|
|
3749
|
+
icon: e(w).CHEVRON_LEFT,
|
|
3767
3750
|
priority: e($).QUATERNARY,
|
|
3768
|
-
onClick:
|
|
3769
|
-
}, null, 8, ["class", "icon", "priority"])) :
|
|
3770
|
-
|
|
3751
|
+
onClick: O[0] || (O[0] = (L) => s("back"))
|
|
3752
|
+
}, null, 8, ["class", "icon", "priority"])) : S("", !0),
|
|
3753
|
+
x(Z, {
|
|
3771
3754
|
class: c([e(t).FLEX.GROW.OFF, e(t).FLEX.SHRINK.OFF, e(t).MARGIN.LEFT.AUTO]),
|
|
3772
|
-
icon: e(
|
|
3755
|
+
icon: e(w).CLOSE,
|
|
3773
3756
|
priority: e($).QUATERNARY,
|
|
3774
|
-
onClick:
|
|
3757
|
+
onClick: O[1] || (O[1] = (L) => s("close"))
|
|
3775
3758
|
}, null, 8, ["class", "icon", "priority"])
|
|
3776
3759
|
], 2),
|
|
3777
|
-
|
|
3760
|
+
x(Ve),
|
|
3778
3761
|
v("div", {
|
|
3779
3762
|
class: c([
|
|
3780
3763
|
"tide-sheet-content",
|
|
@@ -3785,14 +3768,13 @@ const _i = /* @__PURE__ */ w(Ko, [["__scopeId", "data-v-e655eb08"]]), zo = /* @_
|
|
|
3785
3768
|
e(t).PADDING.BOTTOM.ONE
|
|
3786
3769
|
])
|
|
3787
3770
|
}, [
|
|
3788
|
-
V(
|
|
3771
|
+
V(u.$slots, "default", {}, void 0, !0)
|
|
3789
3772
|
], 2)
|
|
3790
3773
|
], 2)
|
|
3791
|
-
],
|
|
3774
|
+
], 42, zo)
|
|
3792
3775
|
], 8, ["to"]));
|
|
3793
3776
|
}
|
|
3794
|
-
})
|
|
3795
|
-
const Fi = /* @__PURE__ */ w(zo, [["__scopeId", "data-v-57dc17f8"]]), Qo = ["disabled"], Zo = /* @__PURE__ */ C({
|
|
3777
|
+
}), hi = /* @__PURE__ */ G(Qo, [["__scopeId", "data-v-55f9b807"]]), Zo = ["disabled"], qo = /* @__PURE__ */ b({
|
|
3796
3778
|
__name: "TideSwitch",
|
|
3797
3779
|
props: {
|
|
3798
3780
|
disabled: { type: Boolean, default: !1 },
|
|
@@ -3830,19 +3812,18 @@ const Fi = /* @__PURE__ */ w(zo, [["__scopeId", "data-v-57dc17f8"]]), Qo = ["dis
|
|
|
3830
3812
|
o.isActive ? e(t).BG.SURFACE.DEFAULT : e(t).BG.SECONDARY
|
|
3831
3813
|
])
|
|
3832
3814
|
}, [
|
|
3833
|
-
|
|
3834
|
-
icon: e(
|
|
3815
|
+
x(H, {
|
|
3816
|
+
icon: e(w).CHECK,
|
|
3835
3817
|
size: e(Y).LARGE
|
|
3836
3818
|
}, null, 8, ["icon", "size"])
|
|
3837
3819
|
], 2)
|
|
3838
|
-
], 10,
|
|
3820
|
+
], 10, Zo));
|
|
3839
3821
|
}
|
|
3840
|
-
})
|
|
3841
|
-
const Si = /* @__PURE__ */ w(Zo, [["__scopeId", "data-v-9bdb658a"]]), hi = {
|
|
3822
|
+
}), Di = /* @__PURE__ */ G(qo, [["__scopeId", "data-v-9bdb658a"]]), Ci = {
|
|
3842
3823
|
NUMBER: ze,
|
|
3843
3824
|
PHONE: os,
|
|
3844
3825
|
PRICE: is
|
|
3845
|
-
},
|
|
3826
|
+
}, he = {
|
|
3846
3827
|
alpha: /^[a-zA-Z]+$/g,
|
|
3847
3828
|
alphaNumberOrEmpty: /^$|^[a-z0-9]+$/i,
|
|
3848
3829
|
alphaSpace: /^[a-zA-Z ]+$/g,
|
|
@@ -3850,75 +3831,75 @@ const Si = /* @__PURE__ */ w(Zo, [["__scopeId", "data-v-9bdb658a"]]), hi = {
|
|
|
3850
3831
|
numberFormatted: /^$|(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/,
|
|
3851
3832
|
phone: /^(?:\d{3}-\d{3}-\d{4}|\d{1}-\d{3}-\d{3}-\d{4})?$/,
|
|
3852
3833
|
price: /(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/
|
|
3853
|
-
},
|
|
3834
|
+
}, yi = {
|
|
3854
3835
|
IMAGE: {
|
|
3855
3836
|
FLOORPLAN: "floorplan",
|
|
3856
3837
|
IMAGE: "image"
|
|
3857
3838
|
},
|
|
3858
3839
|
VIDEO: "video",
|
|
3859
3840
|
VR: "vr"
|
|
3860
|
-
},
|
|
3861
|
-
ALPHA_NUMBER_EMPTY: Ne(
|
|
3862
|
-
ALPHA_SPACE: Ne(
|
|
3863
|
-
EMAIL: Ne(
|
|
3864
|
-
NUMBER: Ne(
|
|
3865
|
-
PHONE: Ne(
|
|
3841
|
+
}, _i = {
|
|
3842
|
+
ALPHA_NUMBER_EMPTY: Ne(he.alphaNumberOrEmpty),
|
|
3843
|
+
ALPHA_SPACE: Ne(he.alphaSpace),
|
|
3844
|
+
EMAIL: Ne(he.email),
|
|
3845
|
+
NUMBER: Ne(he.numberFormatted),
|
|
3846
|
+
PHONE: Ne(he.phone)
|
|
3866
3847
|
};
|
|
3867
3848
|
export {
|
|
3868
3849
|
ae as ALERT,
|
|
3869
3850
|
ls as BADGE_TRUSTED,
|
|
3870
3851
|
io as BREAKPOINT,
|
|
3871
3852
|
t as CSS,
|
|
3872
|
-
|
|
3853
|
+
M as ELEMENT,
|
|
3873
3854
|
re as ELEMENT_TEXT_AS_ICON,
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3855
|
+
Ci as FORMAT,
|
|
3856
|
+
he as FORMAT_REGEX,
|
|
3857
|
+
w as ICON,
|
|
3858
|
+
Jo as ICON_REALM,
|
|
3859
|
+
gi as MEDIA,
|
|
3860
|
+
yi as MEDIA_SLIDE_TYPES,
|
|
3861
|
+
Ae as OBJECT_FIT,
|
|
3881
3862
|
it as ORIENTATION,
|
|
3882
3863
|
$ as PRIORITY,
|
|
3883
3864
|
ts as REALM,
|
|
3884
3865
|
Y as SIZE,
|
|
3885
3866
|
me as SIZE_BUTTON,
|
|
3886
3867
|
se as TARGET,
|
|
3887
|
-
|
|
3868
|
+
Fe as TEXT_INPUT_TYPE,
|
|
3888
3869
|
ye as TYPE_CARD,
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3870
|
+
ei as TideAccordionItem,
|
|
3871
|
+
ti as TideAlert,
|
|
3872
|
+
si as TideBadge,
|
|
3873
|
+
oi as TideBadgeTrustedPartner,
|
|
3874
|
+
ii as TideBadgeVerifiedVehicle,
|
|
3875
|
+
ni as TideBreadCrumbs,
|
|
3876
|
+
ai as TideButton,
|
|
3896
3877
|
Z as TideButtonIcon,
|
|
3897
3878
|
Ls as TideButtonPagination,
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3879
|
+
ri as TideButtonSegmented,
|
|
3880
|
+
li as TideCard,
|
|
3881
|
+
ci as TideCarousel,
|
|
3882
|
+
di as TideChipAction,
|
|
3883
|
+
ui as TideChipFilter,
|
|
3884
|
+
Ei as TideChipInput,
|
|
3885
|
+
Oi as TideColumns,
|
|
3905
3886
|
Ve as TideDivider,
|
|
3906
3887
|
H as TideIcon,
|
|
3907
3888
|
ys as TideImage,
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
3911
|
-
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3889
|
+
Li as TideImageBackground,
|
|
3890
|
+
Ri as TideIndicator,
|
|
3891
|
+
pi as TideInputCheckbox,
|
|
3892
|
+
vi as TideInputRadio,
|
|
3893
|
+
fi as TideInputSelect,
|
|
3894
|
+
Ai as TideInputText,
|
|
3895
|
+
Ii as TideInputTextarea,
|
|
3896
|
+
Ti as TideLink,
|
|
3897
|
+
mi as TideModal,
|
|
3898
|
+
Ni as TidePagination,
|
|
3899
|
+
Fi as TidePopover,
|
|
3900
|
+
Si as TideSeoLinks,
|
|
3901
|
+
hi as TideSheet,
|
|
3902
|
+
Di as TideSwitch,
|
|
3903
|
+
_i as VALIDATOR
|
|
3923
3904
|
};
|
|
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/KChbMS05XVswLTldezAsMn0oLFswLTldezN9KSopfDApPyhcXC5bMC05XXsxLDJ9KT8kLyxcbn07XG4iLCIvKipcbiAqIFRoZXNlIHNsaWRlcyBhcmUgdXNlZCBpbiBib3RoIHRoZSBpbmxpbmUgZGV0YWlsIHBhZ2UgcGhvdG8gc2xpZGVyXG4gKiBhbmQgdGhlIGZ1bGxzY3JlZW4gbWVkaWEgZ2FsbGVyeS5cbiAqL1xuXG5leHBvcnQgY29uc3QgTUVESUFfU0xJREVfVFlQRVMgPSB7XG4gIElNQUdFOiB7XG4gICAgRkxPT1JQTEFOOiAnZmxvb3JwbGFuJyxcbiAgICBJTUFHRTogJ2ltYWdlJyxcbiAgfSxcbiAgVklERU86ICd2aWRlbycsXG4gIFZSOiAndnInLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgTWVkaWFTbGlkZVR5cGUgPVxuICB8ICh0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0UpW2tleW9mIHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRV1cbiAgfCB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVklERU9cbiAgfCB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVlI7XG5cbmV4cG9ydCB0eXBlIEltYWdlU2xpZGVUeXBlID0gKHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRSlba2V5b2YgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFXTtcblxudHlwZSBJbWFnZVNsaWRlID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICB0eXBlOiBJbWFnZVNsaWRlVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFZpZGVvU2xpZGVUeXBlID0gdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLlZJREVPO1xuXG50eXBlIFZpZGVvU2xpZGUgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHR5cGU6IFZpZGVvU2xpZGVUeXBlO1xuICB2aWRlb1VybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVnJTbGlkZVR5cGUgPSB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVlI7XG5cbnR5cGUgVnJTbGlkZSA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZztcbiAgdHlwZTogVnJTbGlkZVR5cGU7XG4gIHZyVXJsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0aW5nTWVkaWEgPSBJbWFnZVNsaWRlIHwgVmlkZW9TbGlkZSB8IFZyU2xpZGU7XG4iLCJpbXBvcnQgeyBGT1JNQVRfUkVHRVggfSBmcm9tICdAL3R5cGVzL0Zvcm1hdHRlZCc7XG5pbXBvcnQgeyBjaGVja0Zvcm1hdCB9IGZyb20gJ0AvdXRpbGl0aWVzL3ZhbGlkYXRpb24nO1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICBBTFBIQV9OVU1CRVJfRU1QVFk6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5hbHBoYU51bWJlck9yRW1wdHkpLFxuICBBTFBIQV9TUEFDRTogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLmFscGhhU3BhY2UpLFxuICBFTUFJTDogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLmVtYWlsKSxcbiAgTlVNQkVSOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVgubnVtYmVyRm9ybWF0dGVkKSxcbiAgUEhPTkU6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5waG9uZSksXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uRXJyb3IgPSBzdHJpbmcgfCBib29sZWFuO1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblJlc3VsdCA9IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB2YWxpZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25MZW5ndGggPSB7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0b3IgPSAodmFsdWU6IHN0cmluZykgPT4gVmFsaWRhdGlvblJlc3VsdDtcbiJdLCJuYW1lcyI6WyJPUklFTlRBVElPTiIsIkNTUyIsInV0aWxpdGllcyIsImJyZWFrcG9pbnQiLCJ1dGlsaXR5IiwiUkVBTE0iLCJTSVpFIiwiU0laRV9CVVRUT04iLCJmb3JtYXROdW1iZXIiLCJpbnB1dCIsIm91dHB1dCIsImRpZ2l0cyIsImZvcm1hdFBhc2NhbENhc2UiLCJ3b3JkIiwiZm9ybWF0UGhvbmUiLCJmb3JtYXRQcmljZSIsImlubmVyU1ZHIiwicmVmIiwid2F0Y2giLCJwcm9wcyIsImlkIiwibmFtZSIsInByZWZpeCIsInJlYWxtRm9sZGVyIiwiY29tcG9uZW50IiwiZGVmaW5lQXN5bmNDb21wb25lbnQiLCJfX3ZhcmlhYmxlRHluYW1pY0ltcG9ydFJ1bnRpbWVIZWxwZXIiLCJtYXJrUmF3IiwiSUNPTiIsIklDT05fUkVBTE0iLCJoYW5kbGVUb2dnbGVDbGljayIsImVtaXQiLCJFTEVNRU5UIiwiRUxFTUVOVF9URVhUX0FTX0lDT04iLCJQUklPUklUWSIsIlRBUkdFVCIsIkFMRVJUIiwiQkFER0VfQ09MT1IiLCJCQURHRV9DT0xPUl9ERVRBSUxTIiwiQkFER0VfVFJVU1RFRCIsImhhbmRsZUNsaWNrIiwiaW5kZXgiLCJUWVBFX0NBUkQiLCJjb250YWluZXJSZWYiLCJzbGlkZU9ic2VydmVyIiwic2xvdE9ic2VydmVyIiwiY29udGVudFJpZ2h0RWRnZSIsImNvbnRlbnRXaWR0aCIsImN1cnJlbnRTbGlkZSIsImZyYW1lV2lkdGgiLCJoYXNPdmVyZmxvdyIsImlzRmlyc3RTbGlkZSIsImlzTGFzdFNsaWRlIiwibGFzdFBvc2l0aW9uIiwic2hvd0J1dHRvbnMiLCJ1cGRhdGVDb250YWluZXJCbGVlZCIsIm1lYXN1cmVDdXJyZW50U2xpZGUiLCJjb250YWluZXIiLCJzbGlkZU9mZnNldHMiLCJzbGlkZSIsInNjcm9sbExlZnQiLCJjbG9zZXN0U2xpZGVPZmZzZXQiLCJwcmV2IiwiY3VyciIsIm1lYXN1cmVEb20iLCJoYW5kbGVTY3JvbGwiLCJzY3JvbGxUb1NsaWRlIiwic2xpZGVJbmRleCIsInNob3dOZXh0U2xpZGUiLCJzaG93UHJldmlvdXNTbGlkZSIsIm9ic2VydmVTbGlkZXMiLCJvcHRpb25zIiwiZW50cmllcyIsInNsaWRlcyIsImVudHJ5IiwiX2EiLCJjaGlsZCIsIm9ic2VydmVTbG90Iiwib2JzZXJ2ZXJDYWxsYmFjayIsIm9uTW91bnRlZCIsIm9uVW5tb3VudGVkIiwiX2IiLCJvblVwZGF0ZWQiLCJPQkpFQ1RfRklUIiwiaW1hZ2VEZWZhdWx0IiwicGljdHVyZSIsImltZyIsIm9iamVjdEZpdENsYXNzTmFtZSIsImNvbXB1dGVkIiwic2V0SW1hZ2VGcm9tRGVmYXVsdCIsImN1cnJlbnRTcmMiLCJwaWN0dXJlU291cmNlIiwiaXNDaGVja2VkIiwiY2hlY2tlZCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJlcnJvck1lc3NhZ2VEZWZhdWx0Iiwibm9FcnJvciIsImNoZWNrRm9ybWF0IiwiZm9ybWF0IiwidmFsdWUiLCJyZXN1bHQiLCJnZXRFcnJvck1lc3NhZ2UiLCJlcnJvckZyb21Qcm9wcyIsImVycm9yRnJvbVJlZiIsImdldEZpZWxkSGFzRXJyb3IiLCJnZXRGaWVsZExlbmd0aElzVmFsaWQiLCJtYXhsZW5ndGgiLCJtaW5sZW5ndGgiLCJyZXF1aXJlZCIsImlzRW1wdHlBbmRVbnJlcXVpcmVkIiwiaXNUb29Mb25nIiwiaGFuZGxlRmllbGRWYWxpZGF0aW9uIiwiZXJyb3IiLCJ2YWxpZGF0b3JzIiwidmFsaWRhdGlvbiIsInZhbGlkYXRlUHJvcGVydHkiLCJsZW5ndGhWYWxpZGF0aW9uIiwidmFsaWRhdGVMZW5ndGgiLCJyZXNwb25zZSIsInZhbGlkYXRvciIsImhhc0ZvY3VzIiwiZXJyb3JNZXNzYWdlIiwiZm9ybWF0dGVkTGFiZWwiLCJoYXNFcnJvciIsImhhc01pbmlsYWJlbCIsImlzRW1wdHkiLCJleHBhbmRPcHRpb25zIiwiZXZlbnQiLCJoYW5kbGVGb2N1cyIsImhhbmRsZUZvY3VzT3V0IiwiX19leHBvc2UiLCJURVhUX0lOUFVUX1RZUEUiLCJzaG93UGFzc3dvcmQiLCJoYXNDbGVhciIsInR5cGUiLCJoYW5kbGVDbGVhciIsImhhbmRsZVZhbGlkYXRpb24iLCJoYW5kbGVJbnB1dCIsInVwZGF0ZVZhbHVlIiwiQlJFQUtQT0lOVCIsIk1FRElBIiwic2V0U2Nyb2xsTG9jayIsImlzTG9ja2VkIiwiYm9keSIsInNjcm9sbFkiLCJuZXh0VGljayIsInNhdmVkU2Nyb2xsWSIsIlRPUF9MQVlFUl9JRCIsImluaXRGYXV4VG9wTGF5ZXIiLCJ0b3BMYXllciIsIm1vZGFsQ29udGVudCIsIm1vZGFsRGlhbG9nIiwidHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4iLCJ0cmlnZ2VyTmF0aXZlRGlhbG9nQ2xvc2UiLCJzY3JvbGxDb250ZW50VG9Ub3AiLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiaGFuZGxlRXNjYXBlS2V5ZG93biIsImUiLCJwYWdlQ3VycmVudCIsInBhZ2luYXRpb25CdXR0b25zIiwiZW1wdHkiLCJzaWRlcyIsImFsaWdubWVudHMiLCJwbGFjZW1lbnRzIiwiYWNjIiwic2lkZSIsIm1pbiIsIm1heCIsInJvdW5kIiwiZmxvb3IiLCJjcmVhdGVDb29yZHMiLCJ2Iiwib3Bwb3NpdGVTaWRlTWFwIiwib3Bwb3NpdGVBbGlnbm1lbnRNYXAiLCJjbGFtcCIsInN0YXJ0IiwiZW5kIiwiZXZhbHVhdGUiLCJwYXJhbSIsImdldFNpZGUiLCJwbGFjZW1lbnQiLCJnZXRBbGlnbm1lbnQiLCJnZXRPcHBvc2l0ZUF4aXMiLCJheGlzIiwiZ2V0QXhpc0xlbmd0aCIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50IiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwiY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQiLCJfcmVmIiwicmVmZXJlbmNlIiwiZmxvYXRpbmciLCJzaWRlQXhpcyIsImFsaWduTGVuZ3RoIiwiaXNWZXJ0aWNhbCIsImNvbW1vblgiLCJjb21tb25ZIiwiY29tbW9uQWxpZ24iLCJjb29yZHMiLCJjb21wdXRlUG9zaXRpb24iLCJjb25maWciLCJzdHJhdGVneSIsIm1pZGRsZXdhcmUiLCJwbGF0Zm9ybSIsInZhbGlkTWlkZGxld2FyZSIsInN0YXRlZnVsUGxhY2VtZW50IiwibWlkZGxld2FyZURhdGEiLCJyZXNldENvdW50IiwiaSIsImZuIiwibmV4dFgiLCJuZXh0WSIsImRhdGEiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJlbGVtZW50IiwiY2xpcHBpbmdDbGllbnRSZWN0Iiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0U2NhbGUiLCJlbGVtZW50Q2xpZW50UmVjdCIsImdldFBsYWNlbWVudExpc3QiLCJhdXRvQWxpZ25tZW50IiwiYWxsb3dlZFBsYWNlbWVudHMiLCJhdXRvUGxhY2VtZW50IiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QIiwiX21pZGRsZXdhcmVEYXRhJGF1dG9QMiIsIl9wbGFjZW1lbnRzVGhhdEZpdE9uRSIsImNyb3NzQXhpcyIsImRldGVjdE92ZXJmbG93T3B0aW9ucyIsInBsYWNlbWVudHMkMSIsIm92ZXJmbG93IiwiY3VycmVudEluZGV4IiwiY3VycmVudFBsYWNlbWVudCIsImFsaWdubWVudFNpZGVzIiwiY3VycmVudE92ZXJmbG93cyIsImFsbE92ZXJmbG93cyIsIm5leHRQbGFjZW1lbnQiLCJwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UiLCJkIiwiYSIsImIiLCJyZXNldFBsYWNlbWVudCIsImNvbnZlcnRWYWx1ZVRvQ29vcmRzIiwibWFpbkF4aXNNdWx0aSIsImNyb3NzQXhpc011bHRpIiwicmF3VmFsdWUiLCJtYWluQXhpcyIsIm9mZnNldCIsIl9taWRkbGV3YXJlRGF0YSRvZmZzZSIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsImRpZmZDb29yZHMiLCJzaGlmdCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsImxpbWl0ZXIiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJoYXNXaW5kb3ciLCJnZXROb2RlTmFtZSIsIm5vZGUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImlzT3ZlcmZsb3dFbGVtZW50Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZGlzcGxheSIsImdldENvbXB1dGVkU3R5bGUiLCJpc1RhYmxlRWxlbWVudCIsImlzVG9wTGF5ZXIiLCJzZWxlY3RvciIsImlzQ29udGFpbmluZ0Jsb2NrIiwiZWxlbWVudE9yQ3NzIiwid2Via2l0IiwiaXNXZWJLaXQiLCJjc3MiLCJnZXRDb250YWluaW5nQmxvY2siLCJjdXJyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJpc0xhc3RUcmF2ZXJzYWJsZU5vZGUiLCJnZXROb2RlU2Nyb2xsIiwiZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IiLCJwYXJlbnROb2RlIiwiZ2V0T3ZlcmZsb3dBbmNlc3RvcnMiLCJsaXN0IiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJsZWZ0IiwidG9wIiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaWdub3JlU2Nyb2xsYmFyWCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJlbCIsImN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIiwiZWxlbWVudElzRml4ZWQiLCJjb21wdXRlZFN0eWxlIiwiY3VycmVudE5vZGVJc0NvbnRhaW5pbmciLCJhbmNlc3RvciIsImdldENsaXBwaW5nUmVjdCIsImNsaXBwaW5nQW5jZXN0b3JzIiwiZmlyc3RDbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldERpbWVuc2lvbnMiLCJnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsInJvb3QiLCJjbGVhbnVwIiwiX2lvIiwicmVmcmVzaCIsInNraXAiLCJ0aHJlc2hvbGQiLCJlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4iLCJpbnNldFRvcCIsImluc2V0UmlnaHQiLCJpbnNldEJvdHRvbSIsImluc2V0TGVmdCIsImlzRmlyc3RVcGRhdGUiLCJoYW5kbGVPYnNlcnZlIiwicmF0aW8iLCJhdXRvVXBkYXRlIiwidXBkYXRlIiwiYW5jZXN0b3JTY3JvbGwiLCJhbmNlc3RvclJlc2l6ZSIsImVsZW1lbnRSZXNpemUiLCJsYXlvdXRTaGlmdCIsImFuaW1hdGlvbkZyYW1lIiwicmVmZXJlbmNlRWwiLCJhbmNlc3RvcnMiLCJjbGVhbnVwSW8iLCJyZW9ic2VydmVGcmFtZSIsInJlc2l6ZU9ic2VydmVyIiwiZmlyc3RFbnRyeSIsIl9yZXNpemVPYnNlcnZlciIsImZyYW1lSWQiLCJwcmV2UmVmUmVjdCIsImZyYW1lTG9vcCIsIm5leHRSZWZSZWN0IiwiX3Jlc2l6ZU9ic2VydmVyMiIsIm9mZnNldCQxIiwiYXV0b1BsYWNlbWVudCQxIiwic2hpZnQkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiaXNDb21wb25lbnRQdWJsaWNJbnN0YW5jZSIsInRhcmdldCIsInRvVmFsdWUiLCJzb3VyY2UiLCJ1bnJlZiIsImdldERQUiIsInJvdW5kQnlEUFIiLCJkcHIiLCJ1c2VGbG9hdGluZyIsIndoaWxlRWxlbWVudHNNb3VudGVkT3B0aW9uIiwib3Blbk9wdGlvbiIsIl90b1ZhbHVlIiwibWlkZGxld2FyZU9wdGlvbiIsInBsYWNlbWVudE9wdGlvbiIsIl90b1ZhbHVlMiIsInN0cmF0ZWd5T3B0aW9uIiwiX3RvVmFsdWUzIiwidHJhbnNmb3JtT3B0aW9uIiwiX3RvVmFsdWU0IiwicmVmZXJlbmNlRWxlbWVudCIsImZsb2F0aW5nRWxlbWVudCIsInNoYWxsb3dSZWYiLCJpc1Bvc2l0aW9uZWQiLCJmbG9hdGluZ1N0eWxlcyIsImluaXRpYWxTdHlsZXMiLCJ4VmFsIiwieVZhbCIsIndoaWxlRWxlbWVudHNNb3VudGVkQ2xlYW51cCIsIm9wZW4iLCJwb3NpdGlvbiIsImF0dGFjaCIsImdldEN1cnJlbnRTY29wZSIsIm9uU2NvcGVEaXNwb3NlIiwic2hhbGxvd1JlYWRvbmx5IiwiaXNDbGlja091dHNpZGUiLCJhbmNob3IiLCJpc0hvdmVyZWQiLCJpc1RvZ2dsZWRPcGVuIiwib2Zmc2V0TWlkZGxld2FyZSIsImlzU2hvd1BvcG92ZXIiLCJoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUNsaWNrIiwiaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3ZlciIsImhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZUxlYXZlIiwiaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrIiwiYWRkTGlzdGVuZXJzVG9BbmNob3JFbGVtZW50IiwicmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQiLCJoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24iLCJhZGRPcGVuTGlzdGVuZXJzVG9Sb290IiwicmVtb3ZlT3Blbkxpc3RlbmVyc0Zyb21Sb290IiwidXBkYXRlQW5jaG9yRWxlbWVudCIsIndhdGNoRWZmZWN0Iiwib25CZWZvcmVNb3VudCIsImRpYWxvZ0VsZW1lbnQiLCJGT1JNQVQiLCJGT1JNQVRfUkVHRVgiLCJNRURJQV9TTElERV9UWVBFUyIsIlZBTElEQVRPUiJdLCJtYXBwaW5ncyI6IjtBQUFPLE1BQU1BLEtBQWM7QUFBQSxFQUN6QixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQ1osR0NDYUMsSUFBTTtBQUFBLEVBQ2pCLGdCQUFnQixDQUFDQyxHQUFxQkMsTUFDN0JELEVBQVUsSUFBSSxDQUFDRSxNQUFZLEdBQUdELENBQVUsSUFBSUMsQ0FBTyxFQUFFO0FBQUEsRUFFOUQsT0FBTztBQUFBLElBQ0wsR0FBRztBQUFBLE1BQ0QsUUFBUTtBQUFBLE1BQ1IsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEdBQUc7QUFBQSxNQUNELFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxJQUNWO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxJQUFJO0FBQUEsSUFDRixRQUFRO0FBQUEsTUFDTixTQUFTO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsTUFDWDtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBRVQsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLE1BQ1Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUEsTUFDVCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsSUFDWDtBQUFBLElBQ0EsYUFBYTtBQUFBLE1BQ1gsYUFBYTtBQUFBLE1BQ2IsYUFBYTtBQUFBLE1BQ2IsZUFBZTtBQUFBLE1BQ2YsY0FBYztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sT0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBRVQsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLFNBQVM7QUFBQSxNQUNULFNBQVM7QUFBQSxNQUNULFVBQVU7QUFBQSxNQUNWLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxN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QUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsRUFDZDtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsSUFBSTtBQUFBLEVBQ047QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNSLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxJQUNWO0FBQUEsSUFDQSxJQUFJO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVjtBQUFBLElBQ0EsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFTO0FB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OENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsbUNBQUEsTUFBQSxPQUFBLHVCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsa0RBQUEsTUFBQSxPQUFBLHNDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsOENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsOENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsa0RBQUEsTUFBQSxPQUFBLHNDQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsbUNBQUEsTUFBQSxPQUFBLHVCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsZ0RBQUEsTUFBQSxPQUFBLG9DQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsNkNBQUEsTUFBQSxPQUFBLGlDQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsMkNBQUEsTUFBQSxPQUFBLCtCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsbUNBQUEsTUFBQSxPQUFBLHVCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsOENBQUEsTUFBQSxPQUFBLGtDQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsNENBQUEsTUFBQSxPQUFBLGdDQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsb0NBQUEsTUFBQSxPQUFBLHdCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEsMENBQUEsTUFBQSxPQUFBLDhCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsd0NBQUEsTUFBQSxPQUFBLDRCQUFBLEdBQUEseUNBQUEsTUFBQSxPQUFBLDZCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEscUNBQUEsTUFBQSxPQUFBLHlCQUFBLEdBQUEsZ0RBQUEsTUFBQSxPQUFBLG9DQUFBLEdBQUEsc0NBQUEsTUFBQSxPQUFBLDBCQUFBLEdBQUEsdUNBQUEsTUFBQSxPQUFBLDJCQUFBLEVBQUEsQ0FBQSxHQUFBLDJCQUFBTCxDQUFBLE1BQUEsQ0FDUjtBQUVRLFFBQUFMLEVBQUEsUUFBUVcsR0FBUUgsQ0FBUztBQUFBLE1BQ3BDO0FBQUEsTUFDQSxFQUFFLFdBQVcsR0FBSztBQUFBLElBQUE7Ozs7Ozs7Ozs7OztBQ3RDZixNQUFNSSxJQUFPO0FBQUEsRUFDbEIsaUJBQWlCO0FBQUEsRUFDakIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsZ0JBQWdCO0FBQUEsRUFDaEIsa0JBQWtCO0FBQUEsRUFDbEIsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2YsYUFBYTtBQUFBLEVBQ2IsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osWUFBWTtBQUFBLEVBQ1osS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUFBLEVBQ2YsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AscUJBQXFCO0FBQUEsRUFDckIsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsaUJBQWlCO0FBQUEsRUFDakIsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsaUJBQWlCO0FBQUEsRUFDakIsTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2Ysc0JBQXNCO0FBQUEsRUFDdEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1Asb0JBQW9CO0FBQUEsRUFDcEIsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsZ0JBQWdCO0FBQUEsRUFDaEIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osZUFBZTtBQUFBLEVBQ2YsVUFBVTtBQUFBLEVBQ1YsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsY0FBYztBQUFBLEVBQ2QsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsZUFBZTtBQUFBLEVBQ2YsUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsY0FBYztBQUFBLEVBQ2QsTUFBTTtBQUFBLEVBQ04sZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUFBLEVBQ2YsUUFBUTtBQUFBLEVBQ1IsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVB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
|
|
3905
|
+
//# 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+ID0gcmVmKG51bGwpO1xuICBjb25zdCBpc0hvdmVyZWQgPSByZWYoZmFsc2UpO1xuICBjb25zdCBpc1RvZ2dsZWRPcGVuID0gcmVmKGZhbHNlKTtcbiAgY29uc3QgbWlkZGxld2FyZSA9IHJlZihbYXV0b1BsYWNlbWVudCgpLCBvZmZzZXRNaWRkbGV3YXJlKHsgbWFpbkF4aXM6IHByb3BzLm9mZnNldCB9KSwgc2hpZnQoeyBwYWRkaW5nOiAxNiB9KV0pO1xuXG4gIGNvbnN0IGlzU2hvd1BvcG92ZXIgPSBjb21wdXRlZCgoKSA9PiBpc0hvdmVyZWQudmFsdWUgfHwgaXNUb2dnbGVkT3Blbi52YWx1ZSk7XG5cbiAgY29uc3QgeyBmbG9hdGluZ1N0eWxlcyB9ID0gdXNlRmxvYXRpbmcoYW5jaG9yLCBmbG9hdGluZywge1xuICAgIG1pZGRsZXdhcmUsXG4gICAgc3RyYXRlZ3k6ICdmaXhlZCcsXG4gICAgd2hpbGVFbGVtZW50c01vdW50ZWQ6IGF1dG9VcGRhdGUsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghYW5jaG9yLnZhbHVlIHx8ICFmbG9hdGluZy52YWx1ZSkgcmV0dXJuO1xuICAgIGlmIChpc0NsaWNrT3V0c2lkZShlLCBbYW5jaG9yLnZhbHVlLCBmbG9hdGluZy52YWx1ZV0pKSB7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgaXNUb2dnbGVkT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyID0gKCkgPT4ge1xuICAgIGlzSG92ZXJlZC52YWx1ZSA9IHRydWU7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgaXNIb3ZlcmVkLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpc1RvZ2dsZWRPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICBjb25zdCBhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFhbmNob3IudmFsdWUpIHJldHVybiBudWxsO1xuICAgIGFuY2hvci52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyKTtcbiAgICBhbmNob3IudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGhhbmRsZUFuY2hvckVsZW1lbnRNb3VzZUxlYXZlKTtcbiAgICBhbmNob3IudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2spO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZUxpc3RlbmVyc0Zyb21BbmNob3JFbGVtZW50ID0gKCkgPT4ge1xuICAgIGlmICghYW5jaG9yLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBhbmNob3IudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlT3Zlcik7XG4gICAgYW5jaG9yLnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVBbmNob3JFbGVtZW50TW91c2VMZWF2ZSk7XG4gICAgYW5jaG9yLnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQW5jaG9yRWxlbWVudENsaWNrKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVQZXJtYW5lbnRPcGVuQm9keUtleWRvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGlzVG9nZ2xlZE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWRkT3Blbkxpc3RlbmVyc1RvUm9vdCA9ICgpID0+IHtcbiAgICBpZiAoIXJvb3QudmFsdWUpIHJldHVybjtcbiAgICByb290LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlDbGljaywgdHJ1ZSk7XG4gICAgcm9vdC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlUGVybWFuZW50T3BlbkJvZHlLZXlkb3duKTtcbiAgfTtcblxuICBjb25zdCByZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QgPSAoKSA9PiB7XG4gICAgaWYgKCFyb290LnZhbHVlKSByZXR1cm47XG4gICAgcm9vdC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2ssIHRydWUpO1xuICAgIHJvb3QudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93bik7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlQW5jaG9yRWxlbWVudCA9ICgpID0+IHtcbiAgICBhbmNob3IudmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5hbmNob3JJZCk7XG4gIH07XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gaXNUb2dnbGVkT3Blbi52YWx1ZSxcbiAgICAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBhZGRPcGVuTGlzdGVuZXJzVG9Sb290KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QoKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gcHJvcHMuYW5jaG9ySWQsXG4gICAgKCkgPT4ge1xuICAgICAgcmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQoKTtcbiAgICAgIHVwZGF0ZUFuY2hvckVsZW1lbnQoKTtcbiAgICAgIGFkZExpc3RlbmVyc1RvQW5jaG9yRWxlbWVudCgpO1xuICAgIH1cbiAgKTtcblxuICB3YXRjaEVmZmVjdCgoKSA9PiB7XG4gICAgbWlkZGxld2FyZS52YWx1ZSA9IFthdXRvUGxhY2VtZW50KCksIG9mZnNldE1pZGRsZXdhcmUoeyBtYWluQXhpczogcHJvcHMub2Zmc2V0IH0pLCBzaGlmdCh7IHBhZGRpbmc6IDE2IH0pXTtcbiAgfSk7XG5cbiAgb25CZWZvcmVNb3VudCgoKSA9PiB7XG4gICAgaW5pdEZhdXhUb3BMYXllcigpO1xuICB9KTtcblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIHVwZGF0ZUFuY2hvckVsZW1lbnQoKTtcbiAgICByb290LnZhbHVlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGFkZExpc3RlbmVyc1RvQW5jaG9yRWxlbWVudCgpO1xuICB9KTtcblxuICBvblVubW91bnRlZCgoKSA9PiB7XG4gICAgcmVtb3ZlTGlzdGVuZXJzRnJvbUFuY2hvckVsZW1lbnQoKTtcbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8VGVsZXBvcnQgOnRvPVwiYCMke1RPUF9MQVlFUl9JRH1gXCI+XG4gICAgPFRyYW5zaXRpb24+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAndGlkZS1wb3BvdmVyJyxcbiAgICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICAgIENTUy5CT1JERVIuQ09MT1IuTE9XLFxuICAgICAgICAgIENTUy5CT1JERVIuRlVMTC5PTkUsXG4gICAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuSEFMRixcbiAgICAgICAgICBDU1MuRk9OVC5ST0xFLkJPRFlfMixcbiAgICAgICAgICBDU1MuUEFERElORy5GVUxMLk9ORSxcbiAgICAgICAgICBDU1MuU0hBRE9XLkJPVFRPTSxcbiAgICAgICAgXVwiXG4gICAgICAgIHJlZj1cImZsb2F0aW5nXCJcbiAgICAgICAgOnN0eWxlPVwieyAuLi5mbG9hdGluZ1N0eWxlcyB9XCJcbiAgICAgICAgdi1zaG93PVwiaXNTaG93UG9wb3ZlclwiXG4gICAgICA+XG4gICAgICAgIDxzbG90IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RyYW5zaXRpb24+XG4gIDwvVGVsZXBvcnQ+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1wb3BvdmVyIHtcbiAgICBtYXgtd2lkdGg6IDI1NnB4O1xuICB9XG4gIC52LWVudGVyLWZyb20sXG4gIC52LWxlYXZlLXRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIC52LWVudGVyLWFjdGl2ZSxcbiAgLnYtbGVhdmUtYWN0aXZlIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLXRpZGUtYW5pbWF0ZSk7XG4gIH1cbiAgLnYtZW50ZXItdG8sXG4gIC52LWxlYXZlLWZyb20ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgeyBvbkJlZm9yZU1vdW50LCBvbk1vdW50ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG4gIGltcG9ydCBUaWRlQnV0dG9uSWNvbiBmcm9tICdAL2NvbXBvbmVudHMvVGlkZUJ1dHRvbkljb24udnVlJztcbiAgaW1wb3J0IHsgSUNPTiB9IGZyb20gJ0AvdHlwZXMvSWNvbic7XG4gIGltcG9ydCB7IFBSSU9SSVRZIH0gZnJvbSAnQC90eXBlcy9Qcmlvcml0eSc7XG4gIGltcG9ydCB7IENTUyB9IGZyb20gJ0AvdHlwZXMvU3R5bGVzJztcbiAgaW1wb3J0IHsgVE9QX0xBWUVSX0lELCBpbml0RmF1eFRvcExheWVyLCBzZXRTY3JvbGxMb2NrIH0gZnJvbSAnQC91dGlsaXRpZXMvdmlld3BvcnQnO1xuXG4gIGltcG9ydCBUaWRlRGl2aWRlciBmcm9tICcuL1RpZGVEaXZpZGVyLnZ1ZSc7XG5cbiAgaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgaXNPcGVuOiBib29sZWFuO1xuICAgIGlzQmFja0J1dHRvbj86IGJvb2xlYW47XG4gIH07XG4gIGNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8UHJvcHM+KCk7XG5cbiAgdHlwZSBFbWl0cyA9IHtcbiAgICAoZTogJ2JhY2snKTogdm9pZDtcbiAgICAoZTogJ2Nsb3NlJyk6IHZvaWQ7XG4gIH07XG5cbiAgY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPEVtaXRzPigpO1xuXG4gIGNvbnN0IGRpYWxvZ0VsZW1lbnQ6IFJlZjxIVE1MRGlhbG9nRWxlbWVudCB8IG51bGw+ID0gcmVmKG51bGwpO1xuXG4gIGNvbnN0IHRyaWdnZXJOYXRpdmVEaWFsb2dPcGVuID0gKCkgPT4ge1xuICAgIGRpYWxvZ0VsZW1lbnQudmFsdWU/LnNob3dNb2RhbCgpO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSA9ICgpID0+IHtcbiAgICBkaWFsb2dFbGVtZW50LnZhbHVlPy5jbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSAoKSA9PiB7XG4gICAgZW1pdCgnY2xvc2UnKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFc2NhcGVLZXlkb3duID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGVtaXQoJ2Nsb3NlJyk7XG4gIH07XG5cbiAgd2F0Y2goXG4gICAgKCkgPT4gcHJvcHMuaXNPcGVuLFxuICAgIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCFkaWFsb2dFbGVtZW50LnZhbHVlKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgdHJpZ2dlck5hdGl2ZURpYWxvZ09wZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSgpO1xuICAgICAgfVxuICAgICAgc2V0U2Nyb2xsTG9jayhuZXdWYWx1ZSk7XG4gICAgfVxuICApO1xuXG4gIG9uQmVmb3JlTW91bnQoKCkgPT4ge1xuICAgIGluaXRGYXV4VG9wTGF5ZXIoKTtcbiAgfSk7XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICBpZiAocHJvcHMuaXNPcGVuKSB7XG4gICAgICB0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbigpO1xuICAgIH1cbiAgfSk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8VGVsZXBvcnQgOnRvPVwiYCMke1RPUF9MQVlFUl9JRH1gXCI+XG4gICAgPGRpYWxvZ1xuICAgICAgOmNsYXNzPVwiWyd0aWRlLXNoZWV0JywgQ1NTLkJHLklOSVRJQUwsIENTUy5IRUlHSFQuRlVMTCwgQ1NTLldJRFRILkZVTEwsIENTUy5PVkVSRkxPVy5YWS5ISURERU5dXCJcbiAgICAgIHJlZj1cImRpYWxvZ0VsZW1lbnRcIlxuICAgICAgQGNsaWNrLnNlbGY9XCJoYW5kbGVCYWNrZHJvcENsaWNrXCJcbiAgICAgIEBjbG9zZS5wcmV2ZW50XG4gICAgICBAa2V5ZG93bi5lc2NhcGU9XCJoYW5kbGVFc2NhcGVLZXlkb3duXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAndGlkZS1zaGVldC1ib2R5JyxcbiAgICAgICAgICBDU1MuQkcuU1VSRkFDRS5ERUZBVUxULFxuICAgICAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICAgICAgQ1NTLkZMRVguRElSRUNUSU9OLkNPTFVNTixcbiAgICAgICAgICBDU1MuSEVJR0hULkZVTEwsXG4gICAgICAgICAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgICAgICAgICBDU1MuV0lEVEguRlVMTCxcbiAgICAgICAgXVwiXG4gICAgICA+XG4gICAgICAgIDxoZWFkZXIgOmNsYXNzPVwiW0NTUy5ESVNQTEFZLkZMRVgsIENTUy5QQURESU5HLlguT05FLCBDU1MuUEFERElORy5UT1AuT05FXVwiPlxuICAgICAgICAgIDxUaWRlQnV0dG9uSWNvblxuICAgICAgICAgICAgOmNsYXNzPVwiW0NTUy5GTEVYLkdST1cuT0ZGLCBDU1MuRkxFWC5TSFJJTksuT0ZGXVwiXG4gICAgICAgICAgICA6aWNvbj1cIklDT04uQ0hFVlJPTl9MRUZUXCJcbiAgICAgICAgICAgIDpwcmlvcml0eT1cIlBSSU9SSVRZLlFVQVRFUk5BUllcIlxuICAgICAgICAgICAgQGNsaWNrPVwiZW1pdCgnYmFjaycpXCJcbiAgICAgICAgICAgIHYtaWY9XCJpc0JhY2tCdXR0b25cIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8VGlkZUJ1dHRvbkljb25cbiAgICAgICAgICAgIDpjbGFzcz1cIltDU1MuRkxFWC5HUk9XLk9GRiwgQ1NTLkZMRVguU0hSSU5LLk9GRiwgQ1NTLk1BUkdJTi5MRUZULkFVVE9dXCJcbiAgICAgICAgICAgIDppY29uPVwiSUNPTi5DTE9TRVwiXG4gICAgICAgICAgICA6cHJpb3JpdHk9XCJQUklPUklUWS5RVUFURVJOQVJZXCJcbiAgICAgICAgICAgIEBjbGljaz1cImVtaXQoJ2Nsb3NlJylcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIDxUaWRlRGl2aWRlciAvPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICA6Y2xhc3M9XCJbXG4gICAgICAgICAgICAndGlkZS1zaGVldC1jb250ZW50JyxcbiAgICAgICAgICAgIENTUy5ESVNQTEFZLkdSSUQsXG4gICAgICAgICAgICBDU1MuT1ZFUkZMT1cuWS5BVVRPLFxuICAgICAgICAgICAgQ1NTLk9WRVJGTE9XLlguSElEREVOLFxuICAgICAgICAgICAgQ1NTLldJRFRILkZVTEwsXG4gICAgICAgICAgICBDU1MuUEFERElORy5CT1RUT00uT05FLFxuICAgICAgICAgIF1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNsb3QgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RpYWxvZz5cbiAgPC9UZWxlcG9ydD5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC50aWRlLXNoZWV0IHtcbiAgICAtLXNoZWV0LXBhZGRpbmcteDogdmFyKC0tdGlkZS1zcGFjaW5nLTEpO1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gICAgbWF4LWhlaWdodDogdW5zZXQ7XG4gICAganVzdGlmeS1pdGVtczogcmlnaHQ7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdGlkZS1hbmltYXRlKSBhbGxvdy1kaXNjcmV0ZTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIH1cblxuICAudGlkZS1zaGVldFtvcGVuXSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCUpO1xuICB9XG5cbiAgLnRpZGUtc2hlZXQ6OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdGlkZS1hbmltYXRlKSBhbGxvdy1kaXNjcmV0ZTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMHB4KTtcbiAgfVxuXG4gIC50aWRlLXNoZWV0W29wZW5dOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlkZS10cmFuc3BhcmVudC00MDApO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogdmFyKC0tdGlkZS1iZy1ibHVyKTtcbiAgfVxuXG4gIC50aWRlLXNoZWV0LWJvZHkge1xuICAgIG1heC13aWR0aDogbWluKGNhbGMoMTAwdncgLSB2YXIoLS10aWRlLXNwYWNpbmctMikpLCAzMTFweCk7XG4gIH1cblxuICAudGlkZS1zaGVldC1jb250ZW50IHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLXNoZWV0LXBhZGRpbmcteCkgMWZyIHZhcigtLXNoZWV0LXBhZGRpbmcteCk7XG4gIH1cblxuICA6d2hlcmUoLnRpZGUtc2hlZXQtY29udGVudCk6ZGVlcCg+IDp3aGVyZSgqKSkge1xuICAgIGdyaWQtY29sdW1uOiAyO1xuICB9XG5cbiAgQHN0YXJ0aW5nLXN0eWxlIHtcbiAgICAudGlkZS1zaGVldFtvcGVuXSB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgIH1cblxuICAgIC50aWRlLXNoZWV0W29wZW5dOjpiYWNrZHJvcCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJhY2tkcm9wLWZpbHRlcjogdmFyKC0tdGlkZS1iZy1ibHVyKTtcbiAgICB9XG4gIH1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IGxhbmc9XCJ0c1wiIHNldHVwPlxuICBpbXBvcnQgVGlkZUljb24gZnJvbSAnQC9jb21wb25lbnRzL1RpZGVJY29uLnZ1ZSc7XG4gIGltcG9ydCB7IElDT04gfSBmcm9tICdAL3R5cGVzL0ljb24nO1xuICBpbXBvcnQgeyBTSVpFIH0gZnJvbSAnQC90eXBlcy9TaXplJztcbiAgaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQC90eXBlcy9TdHlsZXMnO1xuXG4gIHR5cGUgUHJvcHMgPSB7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczxQcm9wcz4oKSwge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBpc0FjdGl2ZTogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NoYW5nZSddKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9ICgpID0+IHtcbiAgICBpZiAoIXByb3BzLmRpc2FibGVkKSB7XG4gICAgICBlbWl0KCdjaGFuZ2UnKTtcbiAgICB9XG4gIH07XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8YnV0dG9uXG4gICAgOmNsYXNzPVwiW1xuICAgICAgJ3RpZGUtc3dpdGNoJyxcbiAgICAgIHByb3BzLmlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnJyxcbiAgICAgIENTUy5ESVNQTEFZLkZMRVgsXG4gICAgICBDU1MuQVhJUzIuQ0VOVEVSLFxuICAgICAgQ1NTLkJPUkRFUi5GVUxMLk9ORSxcbiAgICAgIENTUy5CT1JERVIuUkFESVVTLkZVTEwsXG4gICAgICBwcm9wcy5pc0FjdGl2ZSA/ICcnIDogQ1NTLkJPUkRFUi5DT0xPUi5ERUZBVUxULFxuICAgICAgQ1NTLk9WRVJGTE9XLlhZLkhJRERFTixcbiAgICAgIHByb3BzLmlzQWN0aXZlID8gQ1NTLkJHLlNFQ09OREFSWSA6IENTUy5CRy5TVVJGQUNFLkRFRkFVTFQsXG4gICAgXVwiXG4gICAgOmRpc2FibGVkPVwicHJvcHMuZGlzYWJsZWRcIlxuICAgIEBjbGljaz1cImhhbmRsZUNsaWNrXCJcbiAgICBhcmlhLWxhYmVsPVwiU3dpdGNoXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgJ3RpZGUtc3dpdGNoLWluZGljYXRvcicsXG4gICAgICAgIENTUy5QT1NJVElPTi5SRUxBVElWRSxcbiAgICAgICAgQ1NTLkRJU1BMQVkuRkxFWCxcbiAgICAgICAgQ1NTLkFYSVMxLkNFTlRFUixcbiAgICAgICAgQ1NTLkFYSVMyLkNFTlRFUixcbiAgICAgICAgQ1NTLkJPUkRFUi5SQURJVVMuRlVMTCxcbiAgICAgICAgcHJvcHMuaXNBY3RpdmUgPyBDU1MuQkcuU1VSRkFDRS5ERUZBVUxUIDogQ1NTLkJHLlNFQ09OREFSWSxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIDxUaWRlSWNvblxuICAgICAgICA6aWNvbj1cIklDT04uQ0hFQ0tcIlxuICAgICAgICA6c2l6ZT1cIlNJWkUuTEFSR0VcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9idXR0b24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAudGlkZS1zd2l0Y2gge1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogMzJweDtcbiAgICB0cmFuc2l0aW9uOiB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3I7XG4gIH1cblxuICAudGlkZS1zd2l0Y2g6ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuMzI7XG4gIH1cblxuICAudGlkZS1zd2l0Y2guYWN0aXZlIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLXRpZGUtc2Vjb25kYXJ5KTtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaC5hY3RpdmUgLnRpZGUtc3dpdGNoLWluZGljYXRvciB7XG4gICAgbGVmdDogMzZweDtcbiAgfVxuXG4gIC50aWRlLXN3aXRjaC1pbmRpY2F0b3Ige1xuICAgIGxlZnQ6IDRweDtcbiAgICB0cmFuc2l0aW9uOiB2YXIoLS10aWRlLWFuaW1hdGUpO1xuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQsIGJvcmRlci1jb2xvciwgYmFja2dyb3VuZC1jb2xvcjtcbiAgfVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0UGhvbmUsIGZvcm1hdFByaWNlIH0gZnJvbSAnQC91dGlsaXRpZXMvZm9ybWF0JztcblxuZXhwb3J0IHR5cGUgRm9ybWF0dGVkID0ge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBGT1JNQVQgPSB7XG4gIE5VTUJFUjogZm9ybWF0TnVtYmVyLFxuICBQSE9ORTogZm9ybWF0UGhvbmUsXG4gIFBSSUNFOiBmb3JtYXRQcmljZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBGT1JNQVRfUkVHRVggPSB7XG4gIGFscGhhOiAvXlthLXpBLVpdKyQvZyxcbiAgYWxwaGFOdW1iZXJPckVtcHR5OiAvXiR8XlthLXowLTldKyQvaSxcbiAgYWxwaGFTcGFjZTogL15bYS16QS1aIF0rJC9nLFxuICBlbWFpbDpcbiAgICAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC8sXG4gIG51bWJlckZvcm1hdHRlZDogL14kfCg/PS4pXlxcJD8oKFsxLTldWzAtOV17MCwyfSgsWzAtOV17M30pKil8MCk/KFxcLlswLTldezEsMn0pPyQvLFxuICBwaG9uZTogL14oPzpcXGR7M30tXFxkezN9LVxcZHs0fXxcXGR7MX0tXFxkezN9LVxcZHszfS1cXGR7NH0pPyQvLFxuICBwcmljZTogLyg/PS4pXlxcJD8oKFsxLTldWzAtOV17MCwyfSgsWzAtOV17M30pKil8MCk/KFxcLlswLTldezEsMn0pPyQvLFxufTtcbiIsIi8qKlxuICogVGhlc2Ugc2xpZGVzIGFyZSB1c2VkIGluIGJvdGggdGhlIGlubGluZSBkZXRhaWwgcGFnZSBwaG90byBzbGlkZXJcbiAqIGFuZCB0aGUgZnVsbHNjcmVlbiBtZWRpYSBnYWxsZXJ5LlxuICovXG5cbmV4cG9ydCBjb25zdCBNRURJQV9TTElERV9UWVBFUyA9IHtcbiAgSU1BR0U6IHtcbiAgICBGTE9PUlBMQU46ICdmbG9vcnBsYW4nLFxuICAgIElNQUdFOiAnaW1hZ2UnLFxuICB9LFxuICBWSURFTzogJ3ZpZGVvJyxcbiAgVlI6ICd2cicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBNZWRpYVNsaWRlVHlwZSA9XG4gIHwgKHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5JTUFHRSlba2V5b2YgdHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFXVxuICB8IHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5WSURFT1xuICB8IHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5WUjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VTbGlkZVR5cGUgPSAodHlwZW9mIE1FRElBX1NMSURFX1RZUEVTLklNQUdFKVtrZXlvZiB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuSU1BR0VdO1xuXG50eXBlIEltYWdlU2xpZGUgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHR5cGU6IEltYWdlU2xpZGVUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgVmlkZW9TbGlkZVR5cGUgPSB0eXBlb2YgTUVESUFfU0xJREVfVFlQRVMuVklERU87XG5cbnR5cGUgVmlkZW9TbGlkZSA9IHtcbiAgaW1hZ2VVcmw6IHN0cmluZztcbiAgdHlwZTogVmlkZW9TbGlkZVR5cGU7XG4gIHZpZGVvVXJsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBWclNsaWRlVHlwZSA9IHR5cGVvZiBNRURJQV9TTElERV9UWVBFUy5WUjtcblxudHlwZSBWclNsaWRlID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICB0eXBlOiBWclNsaWRlVHlwZTtcbiAgdnJVcmw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RpbmdNZWRpYSA9IEltYWdlU2xpZGUgfCBWaWRlb1NsaWRlIHwgVnJTbGlkZTtcbiIsImltcG9ydCB7IEZPUk1BVF9SRUdFWCB9IGZyb20gJ0AvdHlwZXMvRm9ybWF0dGVkJztcbmltcG9ydCB7IGNoZWNrRm9ybWF0IH0gZnJvbSAnQC91dGlsaXRpZXMvdmFsaWRhdGlvbic7XG5cbmV4cG9ydCBjb25zdCBWQUxJREFUT1IgPSB7XG4gIEFMUEhBX05VTUJFUl9FTVBUWTogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLmFscGhhTnVtYmVyT3JFbXB0eSksXG4gIEFMUEhBX1NQQUNFOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVguYWxwaGFTcGFjZSksXG4gIEVNQUlMOiBjaGVja0Zvcm1hdChGT1JNQVRfUkVHRVguZW1haWwpLFxuICBOVU1CRVI6IGNoZWNrRm9ybWF0KEZPUk1BVF9SRUdFWC5udW1iZXJGb3JtYXR0ZWQpLFxuICBQSE9ORTogY2hlY2tGb3JtYXQoRk9STUFUX1JFR0VYLnBob25lKSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25FcnJvciA9IHN0cmluZyB8IGJvb2xlYW47XG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uUmVzdWx0ID0ge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHZhbGlkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkxlbmd0aCA9IHtcbiAgbWF4bGVuZ3RoPzogbnVtYmVyO1xuICBtaW5sZW5ndGg/OiBudW1iZXI7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRvciA9ICh2YWx1ZTogc3RyaW5nKSA9PiBWYWxpZGF0aW9uUmVzdWx0O1xuIl0sIm5hbWVzIjpbIk9SSUVOVEFUSU9OIiwiQ1NTIiwidXRpbGl0aWVzIiwiYnJlYWtwb2ludCIsInV0aWxpdHkiLCJSRUFMTSIsIlNJWkUiLCJTSVpFX0JVVFRPTiIsImZvcm1hdE51bWJlciIsImlucHV0Iiwib3V0cHV0IiwiZGlnaXRzIiwiZm9ybWF0UGFzY2FsQ2FzZSIsIndvcmQiLCJmb3JtYXRQaG9uZSIsImZvcm1hdFByaWNlIiwiaW5uZXJTVkciLCJyZWYiLCJ3YXRjaCIsInByb3BzIiwiaWQiLCJuYW1lIiwicHJlZml4IiwicmVhbG1Gb2xkZXIiLCJjb21wb25lbnQiLCJkZWZpbmVBc3luY0NvbXBvbmVudCIsIl9fdmFyaWFibGVEeW5hbWljSW1wb3J0UnVudGltZUhlbHBlciIsIm1hcmtSYXciLCJJQ09OIiwiSUNPTl9SRUFMTSIsImhhbmRsZVRvZ2dsZUNsaWNrIiwiZW1pdCIsIkVMRU1FTlQiLCJFTEVNRU5UX1RFWFRfQVNfSUNPTiIsIlBSSU9SSVRZIiwiVEFSR0VUIiwiQUxFUlQiLCJCQURHRV9DT0xPUiIsIkJBREdFX0NPTE9SX0RFVEFJTFMiLCJCQURHRV9UUlVTVEVEIiwiaGFuZGxlQ2xpY2siLCJpbmRleCIsIlRZUEVfQ0FSRCIsImNvbnRhaW5lclJlZiIsInNsaWRlT2JzZXJ2ZXIiLCJzbG90T2JzZXJ2ZXIiLCJjb250ZW50UmlnaHRFZGdlIiwiY29udGVudFdpZHRoIiwiY3VycmVudFNsaWRlIiwiZnJhbWVXaWR0aCIsImhhc092ZXJmbG93IiwiaXNGaXJzdFNsaWRlIiwiaXNMYXN0U2xpZGUiLCJsYXN0UG9zaXRpb24iLCJzaG93QnV0dG9ucyIsInVwZGF0ZUNvbnRhaW5lckJsZWVkIiwibWVhc3VyZUN1cnJlbnRTbGlkZSIsImNvbnRhaW5lciIsInNsaWRlT2Zmc2V0cyIsInNsaWRlIiwic2Nyb2xsTGVmdCIsImNsb3Nlc3RTbGlkZU9mZnNldCIsInByZXYiLCJjdXJyIiwibWVhc3VyZURvbSIsImhhbmRsZVNjcm9sbCIsInNjcm9sbFRvU2xpZGUiLCJzbGlkZUluZGV4Iiwic2hvd05leHRTbGlkZSIsInNob3dQcmV2aW91c1NsaWRlIiwib2JzZXJ2ZVNsaWRlcyIsIm9wdGlvbnMiLCJlbnRyaWVzIiwic2xpZGVzIiwiZW50cnkiLCJfYSIsImNoaWxkIiwib2JzZXJ2ZVNsb3QiLCJvYnNlcnZlckNhbGxiYWNrIiwib25Nb3VudGVkIiwib25Vbm1vdW50ZWQiLCJfYiIsIm9uVXBkYXRlZCIsIk9CSkVDVF9GSVQiLCJpbWFnZURlZmF1bHQiLCJwaWN0dXJlIiwiaW1nIiwib2JqZWN0Rml0Q2xhc3NOYW1lIiwiY29tcHV0ZWQiLCJzZXRJbWFnZUZyb21EZWZhdWx0IiwiY3VycmVudFNyYyIsInBpY3R1cmVTb3VyY2UiLCJpc0NoZWNrZWQiLCJjaGVja2VkIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsImVycm9yTWVzc2FnZURlZmF1bHQiLCJub0Vycm9yIiwiY2hlY2tGb3JtYXQiLCJmb3JtYXQiLCJ2YWx1ZSIsInJlc3VsdCIsImdldEVycm9yTWVzc2FnZSIsImVycm9yRnJvbVByb3BzIiwiZXJyb3JGcm9tUmVmIiwiZ2V0RmllbGRIYXNFcnJvciIsImdldEZpZWxkTGVuZ3RoSXNWYWxpZCIsIm1heGxlbmd0aCIsIm1pbmxlbmd0aCIsInJlcXVpcmVkIiwiaXNFbXB0eUFuZFVucmVxdWlyZWQiLCJpc1Rvb0xvbmciLCJoYW5kbGVGaWVsZFZhbGlkYXRpb24iLCJlcnJvciIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0aW9uIiwidmFsaWRhdGVQcm9wZXJ0eSIsImxlbmd0aFZhbGlkYXRpb24iLCJ2YWxpZGF0ZUxlbmd0aCIsInJlc3BvbnNlIiwidmFsaWRhdG9yIiwiaGFzRm9jdXMiLCJlcnJvck1lc3NhZ2UiLCJmb3JtYXR0ZWRMYWJlbCIsImhhc0Vycm9yIiwiaGFzTWluaWxhYmVsIiwiaXNFbXB0eSIsImV4cGFuZE9wdGlvbnMiLCJldmVudCIsImhhbmRsZUZvY3VzIiwiaGFuZGxlRm9jdXNPdXQiLCJfX2V4cG9zZSIsIlRFWFRfSU5QVVRfVFlQRSIsInNob3dQYXNzd29yZCIsImhhc0NsZWFyIiwidHlwZSIsImhhbmRsZUNsZWFyIiwiaGFuZGxlVmFsaWRhdGlvbiIsImhhbmRsZUlucHV0IiwidXBkYXRlVmFsdWUiLCJCUkVBS1BPSU5UIiwiTUVESUEiLCJzZXRTY3JvbGxMb2NrIiwiaXNMb2NrZWQiLCJib2R5Iiwic2Nyb2xsWSIsIm5leHRUaWNrIiwic2F2ZWRTY3JvbGxZIiwiVE9QX0xBWUVSX0lEIiwiaW5pdEZhdXhUb3BMYXllciIsInRvcExheWVyIiwibW9kYWxDb250ZW50IiwibW9kYWxEaWFsb2ciLCJ0cmlnZ2VyTmF0aXZlRGlhbG9nT3BlbiIsInRyaWdnZXJOYXRpdmVEaWFsb2dDbG9zZSIsInNjcm9sbENvbnRlbnRUb1RvcCIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJoYW5kbGVFc2NhcGVLZXlkb3duIiwiZSIsInBhZ2VDdXJyZW50IiwicGFnaW5hdGlvbkJ1dHRvbnMiLCJlbXB0eSIsInNpZGVzIiwiYWxpZ25tZW50cyIsInBsYWNlbWVudHMiLCJhY2MiLCJzaWRlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJleHBhbmRQYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsImdldFBhZGRpbmdPYmplY3QiLCJyZWN0VG9DbGllbnRSZWN0IiwicmVjdCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJpIiwiZm4iLCJuZXh0WCIsIm5leHRZIiwiZGF0YSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIl9hd2FpdCRwbGF0Zm9ybSRpc0VsZSIsImVsZW1lbnRzIiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwicGFkZGluZ09iamVjdCIsImVsZW1lbnQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZ2V0UGxhY2VtZW50TGlzdCIsImF1dG9BbGlnbm1lbnQiLCJhbGxvd2VkUGxhY2VtZW50cyIsImF1dG9QbGFjZW1lbnQiLCJfbWlkZGxld2FyZURhdGEkYXV0b1AiLCJfbWlkZGxld2FyZURhdGEkYXV0b1AyIiwiX3BsYWNlbWVudHNUaGF0Rml0T25FIiwiY3Jvc3NBeGlzIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwicGxhY2VtZW50cyQxIiwib3ZlcmZsb3ciLCJjdXJyZW50SW5kZXgiLCJjdXJyZW50UGxhY2VtZW50IiwiYWxpZ25tZW50U2lkZXMiLCJjdXJyZW50T3ZlcmZsb3dzIiwiYWxsT3ZlcmZsb3dzIiwibmV4dFBsYWNlbWVudCIsInBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSIsImQiLCJhIiwiYiIsInJlc2V0UGxhY2VtZW50IiwiY29udmVydFZhbHVlVG9Db29yZHMiLCJtYWluQXhpc011bHRpIiwiY3Jvc3NBeGlzTXVsdGkiLCJyYXdWYWx1ZSIsIm1haW5BeGlzIiwib2Zmc2V0IiwiX21pZGRsZXdhcmVEYXRhJG9mZnNlIiwiX21pZGRsZXdhcmVEYXRhJGFycm93IiwiZGlmZkNvb3JkcyIsInNoaWZ0IiwiY2hlY2tNYWluQXhpcyIsImNoZWNrQ3Jvc3NBeGlzIiwibGltaXRlciIsIm1haW5BeGlzQ29vcmQiLCJjcm9zc0F4aXNDb29yZCIsIm1pblNpZGUiLCJtYXhTaWRlIiwibGltaXRlZENvb3JkcyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwibm9kZSIsImlzTm9kZSIsImdldFdpbmRvdyIsIl9ub2RlJG93bmVyRG9jdW1lbnQiLCJnZXREb2N1bWVudEVsZW1lbnQiLCJpc0VsZW1lbnQiLCJpc0hUTUxFbGVtZW50IiwiaXNTaGFkb3dSb290IiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlzVGFibGVFbGVtZW50IiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImNzcyIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImdldE5vZGVTY3JvbGwiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsImxpc3QiLCJ0cmF2ZXJzZUlmcmFtZXMiLCJfbm9kZSRvd25lckRvY3VtZW50MiIsInNjcm9sbGFibGVBbmNlc3RvciIsImlzQm9keSIsIndpbiIsImZyYW1lRWxlbWVudCIsImdldEZyYW1lRWxlbWVudCIsImdldENzc0RpbWVuc2lvbnMiLCJoYXNPZmZzZXQiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsInNob3VsZEZhbGxiYWNrIiwidW53cmFwRWxlbWVudCIsImdldFNjYWxlIiwiZG9tRWxlbWVudCIsIiQiLCJub09mZnNldHMiLCJnZXRWaXN1YWxPZmZzZXRzIiwic2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyIsImlzRml4ZWQiLCJmbG9hdGluZ09mZnNldFBhcmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImluY2x1ZGVTY2FsZSIsImlzRml4ZWRTdHJhdGVneSIsImNsaWVudFJlY3QiLCJzY2FsZSIsInZpc3VhbE9mZnNldHMiLCJvZmZzZXRXaW4iLCJjdXJyZW50V2luIiwiY3VycmVudElGcmFtZSIsImlmcmFtZVNjYWxlIiwiaWZyYW1lUmVjdCIsImxlZnQiLCJ0b3AiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwibGVmdFNjcm9sbCIsImdldEhUTUxPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGwiLCJpZ25vcmVTY3JvbGxiYXJYIiwiaHRtbFJlY3QiLCJjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCIsIm9mZnNldHMiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFJlY3QiLCJodG1sT2Zmc2V0IiwiZ2V0Q2xpZW50UmVjdHMiLCJnZXREb2N1bWVudFJlY3QiLCJodG1sIiwiZ2V0Vmlld3BvcnRSZWN0IiwidmlzdWFsVmlld3BvcnQiLCJ2aXN1YWxWaWV3cG9ydEJhc2VkIiwiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ0FuY2VzdG9yIiwiaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yIiwic3RvcE5vZGUiLCJnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMiLCJjYWNoZSIsImNhY2hlZFJlc3VsdCIsImVsIiwiY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUiLCJlbGVtZW50SXNGaXhlZCIsImNvbXB1dGVkU3R5bGUiLCJjdXJyZW50Tm9kZUlzQ29udGFpbmluZyIsImFuY2VzdG9yIiwiZ2V0Q2xpcHBpbmdSZWN0IiwiY2xpcHBpbmdBbmNlc3RvcnMiLCJmaXJzdENsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0RGltZW5zaW9ucyIsImdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwicm9vdCIsImNsZWFudXAiLCJfaW8iLCJyZWZyZXNoIiwic2tpcCIsInRocmVzaG9sZCIsImVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiIsImluc2V0VG9wIiwiaW5zZXRSaWdodCIsImluc2V0Qm90dG9tIiwiaW5zZXRMZWZ0IiwiaXNGaXJzdFVwZGF0ZSIsImhhbmRsZU9ic2VydmUiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwib2Zmc2V0JDEiLCJhdXRvUGxhY2VtZW50JDEiLCJzaGlmdCQxIiwibWVyZ2VkT3B0aW9ucyIsInBsYXRmb3JtV2l0aENhY2hlIiwiY29tcHV0ZVBvc2l0aW9uJDEiLCJpc0NvbXBvbmVudFB1YmxpY0luc3RhbmNlIiwidGFyZ2V0IiwidG9WYWx1ZSIsInNvdXJjZSIsInVucmVmIiwiZ2V0RFBSIiwicm91bmRCeURQUiIsImRwciIsInVzZUZsb2F0aW5nIiwid2hpbGVFbGVtZW50c01vdW50ZWRPcHRpb24iLCJvcGVuT3B0aW9uIiwiX3RvVmFsdWUiLCJtaWRkbGV3YXJlT3B0aW9uIiwicGxhY2VtZW50T3B0aW9uIiwiX3RvVmFsdWUyIiwic3RyYXRlZ3lPcHRpb24iLCJfdG9WYWx1ZTMiLCJ0cmFuc2Zvcm1PcHRpb24iLCJfdG9WYWx1ZTQiLCJyZWZlcmVuY2VFbGVtZW50IiwiZmxvYXRpbmdFbGVtZW50Iiwic2hhbGxvd1JlZiIsImlzUG9zaXRpb25lZCIsImZsb2F0aW5nU3R5bGVzIiwiaW5pdGlhbFN0eWxlcyIsInhWYWwiLCJ5VmFsIiwid2hpbGVFbGVtZW50c01vdW50ZWRDbGVhbnVwIiwib3BlbiIsInBvc2l0aW9uIiwiYXR0YWNoIiwiZ2V0Q3VycmVudFNjb3BlIiwib25TY29wZURpc3Bvc2UiLCJzaGFsbG93UmVhZG9ubHkiLCJpc0NsaWNrT3V0c2lkZSIsImFuY2hvciIsImlzSG92ZXJlZCIsImlzVG9nZ2xlZE9wZW4iLCJvZmZzZXRNaWRkbGV3YXJlIiwiaXNTaG93UG9wb3ZlciIsImhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5Q2xpY2siLCJoYW5kbGVBbmNob3JFbGVtZW50TW91c2VPdmVyIiwiaGFuZGxlQW5jaG9yRWxlbWVudE1vdXNlTGVhdmUiLCJoYW5kbGVBbmNob3JFbGVtZW50Q2xpY2siLCJhZGRMaXN0ZW5lcnNUb0FuY2hvckVsZW1lbnQiLCJyZW1vdmVMaXN0ZW5lcnNGcm9tQW5jaG9yRWxlbWVudCIsImhhbmRsZVBlcm1hbmVudE9wZW5Cb2R5S2V5ZG93biIsImFkZE9wZW5MaXN0ZW5lcnNUb1Jvb3QiLCJyZW1vdmVPcGVuTGlzdGVuZXJzRnJvbVJvb3QiLCJ1cGRhdGVBbmNob3JFbGVtZW50Iiwid2F0Y2hFZmZlY3QiLCJvbkJlZm9yZU1vdW50IiwiZGlhbG9nRWxlbWVudCIsIkZPUk1BVCIsIkZPUk1BVF9SRUdFWCIsIk1FRElBX1NMSURFX1RZUEVTIiwiVkFMSURBVE9SIl0sIm1hcHBpbmdzIjoiO0FBQU8sTUFBTUEsS0FBYztBQUFBLEVBQ3pCLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFDWixHQ0NhQyxJQUFNO0FBQUEsRUFDakIsZ0JBQWdCLENBQUNDLEdBQXFCQyxNQUM3QkQsRUFBVSxJQUFJLENBQUNFLE1BQVksR0FBR0QsQ0FBVSxJQUFJQyxDQUFPLEVBQUU7QUFBQSxFQUU5RCxPQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsTUFDRCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsSUFBQTtBQUFBLElBRVQsR0FBRztBQUFBLE1BQ0QsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLElBQUE7QUFBQSxFQUNWO0FBQUEsRUFFRixPQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFBQTtBQUFBLEVBRVQsT0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLEVBQUE7QUFBQSxFQUVYLElBQUk7QUFBQSxJQUNGLFFBQVE7QUFBQSxNQUNOLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxNQUFBO0FBQUEsTUFFWCxTQUFTO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFFVCxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxRQUFRO0FBQUEsUUFDUixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFBQTtBQUFBLElBQ1Y7QUFBQSxJQUVGLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLE9BQU87QUFBQSxNQUNQLFNBQVM7QUFBQSxNQUNULFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUFBO0FBQUEsSUFFWCxhQUFhO0FBQUEsTUFDWCxhQUFhO0FBQUEsTUFDYixhQUFhO0FBQUEsTUFDYixlQUFlO0FBQUEsTUFDZixjQUFjO0FBQUEsSUFBQTtBQUFBLEVBQ2hCO0FBQUEsRUFFRixRQUFRO0FBQUEsSUFDTixPQUFPO0FBQUEsTUFDTCxRQUFRO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFFVCxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxRQUFRO0FBQUEsUUFDUixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFBQTtBQUFBLE1BRVYsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1YsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsU0FBUztBQUFBLElBQUE7QUFBQSxJQUVYLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUFBO0FBQUEsSUFFUixPQUFPO0FBQUEsTUFDTCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsSUFBQTtBQUFBLElBRVQsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLElBQUE7QUFBQSxJQUVQLE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUFBO0FBQUEsSUFFUCxNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFBQTtBQUFBLElBRVAsT0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLElBQUE7QUFBQSxJQUVQLEtBQUs7QUFBQSxNQUNILE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUFBO0FBQUEsRUFDUDtBQUFBLEVBRUYsWUFBWTtBQUFBLElBQ1YsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLEVBQUE7QUFBQSxFQUVmLGNBQWM7QUFBQSxJQUNaLGNBQWM7QUFBQSxFQUFBO0FBQUEsRUFFaEIsWUFBWTtBQUFBLElBQ1YsS0FBSztBQUFBLElBQ0wsSUFBSTtBQUFBLEVBQUE7QUFBQSxFQUVOLFNBQVM7QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULEtBQUs7QUFBQSxJQUNMLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxFQUFBO0FBQUEsRUFFUixRQUFRO0FBQUEsSUFDTixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFBQTtBQUFBLEVBRVIsU0FBUztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2QsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLEVBQUE7QUFBQSxFQUVSLFVBQVU7QUFBQSxFQUNWLE1BQU07QUFBQSxJQUNKLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxJQUFBO0FBQUEsSUFFUixXQUFXO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixnQkFBZ0I7QUFBQSxNQUNoQixLQUFLO0FBQUEsTUFDTCxhQUFhO0FBQUEsSUFBQTtBQUFBLElBRWYsTUFBTTtBQUFBLE1BQ0osS0FBSztBQUFBLE1BQ0wsSUFBSTtBQUFBLElBQUE7QUFBQSxJQUVOLFFBQVE7QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLElBQUk7QUFBQSxJQUFBO0FBQUEsSUFFTixNQUFNO0FBQUEsRUFBQTtBQUFBLEVBRVIsTUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLE1BQ0wsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLFFBRVQsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsS0FBSztBQUFBLFFBQ0wsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBRVIsU0FBUztBQUFBLFVBQ1AsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFVBQ1AsTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFVBQ1IsS0FBSztBQUFBLFVBQ0wsUUFBUTtBQUFBLFVBQ1IsTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFFBQUE7QUFBQSxNQUNWO0FBQUEsTUFFRixTQUFTO0FBQUEsTUFDVCxXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFDVCxpQkFBaUI7QUFBQSxNQUFBO0FBQUEsSUFDbkI7QUFBQSxJQUVGLE1BQU07QUFBQSxNQUNKLFdBQVc7QUFBQSxNQUNYLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLFNBQVM7QUFBQSxNQUNULFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULGtCQUFrQjtBQUFBLE1BQ2xCLFNBQVM7QUFBQSxNQUNULGtCQUFrQjtBQUFBLE1BQ2xCLFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxJQUFBO0FBQUEsSUFFWixNQUFNO0FBQUEsTUFDSixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixhQUFhO0FBQUEsTUFDYixZQUFZO0FBQUEsSUFBQTtBQUFBLElBRWQsUUFBUTtBQUFBLE1BQ04sY0FBYztBQUFBLE1BQ2QsY0FBYztBQUFBLE1BQ2QsYUFBYTtBQUFBLE1BQ2IsZUFBZTtBQUFBLElBQUE7QUFBQSxFQUNqQjtBQUFBLEVBRUYsS0FBSztBQUFBLElBQ0gsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsTUFBTTtBQUFBLEVBQUE7QUFBQSxFQUVSLE1BQU07QUFBQSxJQUNKLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLElBQUk7QUFBQSxFQUFBO0FBQUEsRUFFTixRQUFRO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFBQTtBQUFBLEVBRVosV0FBVztBQUFBLElBQ1QsU0FBUztBQUFBLEVBQUE7QUFBQSxFQUVYLGNBQWM7QUFBQSxJQUNaLEtBQUs7QUFBQSxFQUFBO0FBQUEsRUFFUCxRQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFBQTtBQUFBLElBRVIsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQUE7QUFBQSxJQUVSLE1BQU07QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUFBO0FBQUEsSUFFUixPQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFBQTtBQUFBLElBRVIsS0FBSztBQUFBLE1BQ0gsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQUE7QUFBQSxJQUVSLEdBQUc7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUFBO0FBQUEsSUFFUixHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFBQTtBQUFBLEVBQ1I7QUFBQSxFQUVGLFFBQVE7QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLFlBQVk7QUFBQSxFQUFBO0FBQUEsRUFFZCxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxJQUFJO0FBQUEsRUFBQTtBQUFBLEVBRU4sVUFBVTtBQUFBLElBQ1IsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQUE7QUFBQSxJQUVWLElBQUk7QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxJQUFBO0FBQUEsSUFFVixHQUFHO0FBQUEsTUFDRCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFBQTtBQUFBLEVBQ1Y7QUFBQSxFQUVGLFNBQVM7QUFBQSxJQUNQLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUFBO0FBQUEsSUFFUixNQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFBQTtBQUFBLElBRVIsTUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQUE7QUFBQSxJQUVSLE9BQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxJQUFBO0FBQUEsSUFFUixLQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFBQTtBQUFBLElBRVIsR0FBRztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFB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QUFBQSxFQUNoQixhQUFhO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixpQkFBaUI7QUFBQSxFQUNqQixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixzQkFBc0I7QUFBQSxFQUN0QixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxvQkFBb0I7QUFBQSxFQUNwQixRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixnQkFBZ0I7QUFBQSxFQUNoQixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixlQUFlO0FBQUEsRUFDZixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxlQUFlO0FBQUEsRUFDZixRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixjQUFjO0FBQUEsRUFDZCxNQUFNO0FBQUEsRUFDTixnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixT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QU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLEtBQUssR0FBRztBQUFBLElBQ25CLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLElBQUksR0FBRztBQUFBLElBQ2xCLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLE1BQU0sR0FBRztBQUFBLElBQ3BCLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLE1BQU0sR0FBRztBQUFBLElBQ3BCLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLEdBQUcsR0FBRztBQUFBLElBQ2pCLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLE1BQU0sR0FBRztBQUFBLElBQ3BCLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNvQyxFQUFZLElBQUksR0FBRztBQUFBLElBQ2xCLGFBQWFwQyxFQUFJLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsV0FBV0EsRUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRO0FBQUEsRUFBQTtBQUFBLEVBRTNDLENBQUNv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
|