@envive-ai/react-hooks 0.2.6 → 0.2.7-arthur-2
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/{NewOrgConfig-BfrGpiGk.js → NewOrgConfig-BVByiYPp.js} +2 -2
- package/dist/{NewOrgConfig-BxSuoP9C.cjs → NewOrgConfig-CInGtTV6.cjs} +2 -2
- package/dist/{SystemSettingsContext-Bkoiobdv.cjs → SystemSettingsContext-150LTxIk.cjs} +2 -2
- package/dist/{SystemSettingsContext-B8X_Dvw2.js → SystemSettingsContext-ei5B0dxO.js} +2 -2
- package/dist/{TrackComponentVisibleEvent-DMuX-byo.cjs → TrackComponentVisibleEvent-C7-nnBks.cjs} +2 -2
- package/dist/{TrackComponentVisibleEvent-DwfGqNTx.js → TrackComponentVisibleEvent-CuwSLbug.js} +2 -2
- package/dist/amplitudeContext-BBQ1ATA3.js +265 -0
- package/dist/amplitudeContext-BItT9HmT.js +1 -0
- package/dist/amplitudeContext-C-0-DDk3.cjs +287 -0
- package/dist/{amplitudeContext-B73xamNe.d.cts → amplitudeContext-CCVyp5RU.d.cts} +1 -1
- package/dist/amplitudeContext-DPtyVv3Q.cjs +0 -0
- package/dist/{amplitudeContext-CiO9T9c-.d.ts → amplitudeContext-DcRur97Z.d.ts} +1 -1
- package/dist/{api-bHEYmSiT.js → api-BWSsazAG.js} +3 -3
- package/dist/{api-BvygKEiX.cjs → api-DeW6rHj3.cjs} +3 -3
- package/dist/{app-Aqkm_SlS.js → app-C_Y-57U5.js} +3 -4
- package/dist/{app-BQw_-JGl.cjs → app-XEFPotoH.cjs} +3 -4
- package/dist/application/models/graphql/index.cjs +4 -3
- package/dist/application/models/graphql/index.d.cts +2 -2
- package/dist/application/models/graphql/index.d.ts +2 -2
- package/dist/application/models/graphql/index.js +3 -3
- package/dist/application/models/guards/api/index.cjs +3 -3
- package/dist/application/models/guards/api/index.d.cts +2 -1
- package/dist/application/models/guards/api/index.d.ts +2 -1
- package/dist/application/models/guards/api/index.js +3 -3
- package/dist/application/models/guards/utils.cjs +1 -1
- package/dist/application/models/guards/utils.d.cts +1 -1
- package/dist/application/models/guards/utils.d.ts +1 -1
- package/dist/application/models/guards/utils.js +1 -1
- package/dist/application/models/index.cjs +9 -9
- package/dist/application/models/index.d.cts +11 -10
- package/dist/application/models/index.d.ts +11 -10
- package/dist/application/models/index.js +8 -8
- package/dist/application/models/variantInfo/index.d.cts +1 -1
- package/dist/application/models/variantInfo/index.d.ts +1 -1
- package/dist/application/utils/index.cjs +17 -17
- package/dist/application/utils/index.d.cts +16 -15
- package/dist/application/utils/index.d.ts +16 -15
- package/dist/application/utils/index.js +17 -17
- package/dist/{atomStore-CmZbgQHc.cjs → atomStore-8ppNkJ_n.cjs} +1 -1
- package/dist/{atomStore-DEcDhiLp.js → atomStore-BLYJ2ZoQ.js} +1 -1
- package/dist/atoms/app/index.cjs +12 -12
- package/dist/atoms/app/index.d.cts +19 -18
- package/dist/atoms/app/index.d.ts +14 -13
- package/dist/atoms/app/index.js +12 -12
- package/dist/atoms/atomStore/index.cjs +1 -1
- package/dist/atoms/atomStore/index.js +1 -1
- package/dist/atoms/chat/index.cjs +18 -18
- package/dist/atoms/chat/index.d.cts +39 -38
- package/dist/atoms/chat/index.d.ts +13 -12
- package/dist/atoms/chat/index.js +18 -18
- package/dist/atoms/globalSearch/index.d.cts +5 -5
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.d.cts +30 -29
- package/dist/atoms/org/index.d.ts +30 -29
- package/dist/atoms/org/index.js +1 -1
- package/dist/atoms/search/index.cjs +20 -20
- package/dist/atoms/search/index.d.cts +13 -12
- package/dist/atoms/search/index.d.ts +13 -12
- package/dist/atoms/search/index.js +20 -20
- package/dist/atoms/search/types.d.cts +4 -2
- package/dist/atoms/search/types.d.ts +4 -2
- package/dist/{cdnContext-Cd0Kvt6g.cjs → cdnContext-Bzqk0s2M.cjs} +2 -2
- package/dist/{cdnContext-D8pHA9gh.js → cdnContext-CTC-zBtx.js} +2 -2
- package/dist/{chat-U1IgKNij.js → chat-Bzay7QnI.js} +9 -9
- package/dist/{chat-DwNALtox.cjs → chat-Ckd1b_z_.cjs} +14 -8
- package/dist/{chat-EJbfGWRr.js → chat-ClvJ9xEj.js} +1 -1
- package/dist/{chat-CJ9D8n7g.cjs → chat-DCGriB7h.cjs} +1 -1
- package/dist/{chatElementDisplayLocation-DWmfNX_u.d.cts → chatElementDisplayLocation-B7vr33eG.d.cts} +1 -1
- package/dist/{chatElementDisplayLocation-DbmdwAff.d.ts → chatElementDisplayLocation-D4XF0UfI.d.ts} +1 -1
- package/dist/{chatSearch-DtE2cUQw.cjs → chatSearch-Bev4ZI8Z.cjs} +4 -4
- package/dist/{chatSearch-Bb2SMr9X.js → chatSearch-DNaGtQyx.js} +4 -4
- package/dist/{chatState-BXBN-12W.js → chatState-CcCvgmSM.js} +3 -3
- package/dist/{chatState-B3Dyrd9M.cjs → chatState-OkYPVghN.cjs} +3 -3
- package/dist/{commerce-api-DXbnMNT8.js → commerce-api-ml5fkEuk.js} +9 -8
- package/dist/{commerce-api-Dx02FCQ7.cjs → commerce-api-sQtLuwTh.cjs} +9 -8
- package/dist/{common-CuwWqIJ1.cjs → common-DQPvV_S_.cjs} +1 -1
- package/dist/{common-Df2bwzd2.js → common-c_4eX0qn.js} +1 -1
- package/dist/{components-QGCWJ26c.js → components-CDpaMUjK.js} +1 -1
- package/dist/{components-BCfFLf9X.cjs → components-DKwVHIjq.cjs} +1 -1
- package/dist/config/index.cjs +4 -4
- package/dist/config/index.d.cts +4 -4
- package/dist/config/index.d.ts +4 -4
- package/dist/config/index.js +4 -4
- package/dist/config/locators/components/chat/index.cjs +1 -1
- package/dist/config/locators/components/chat/index.d.cts +1 -1
- package/dist/config/locators/components/chat/index.d.ts +1 -1
- package/dist/config/locators/components/chat/index.js +1 -1
- package/dist/config/locators/components/common/index.cjs +1 -1
- package/dist/config/locators/components/common/index.d.cts +1 -1
- package/dist/config/locators/components/common/index.d.ts +1 -1
- package/dist/config/locators/components/common/index.js +1 -1
- package/dist/config/locators/components/index.cjs +1 -1
- package/dist/config/locators/components/index.d.cts +1 -1
- package/dist/config/locators/components/index.d.ts +1 -1
- package/dist/config/locators/components/index.js +1 -1
- package/dist/config/locators/index.cjs +4 -4
- package/dist/config/locators/index.d.cts +4 -4
- package/dist/config/locators/index.d.ts +4 -4
- package/dist/config/locators/index.js +4 -4
- package/dist/contexts/amplitudeContext/index.cjs +17 -16
- package/dist/contexts/amplitudeContext/index.d.cts +1 -1
- package/dist/contexts/amplitudeContext/index.d.ts +1 -1
- package/dist/contexts/amplitudeContext/index.js +17 -16
- package/dist/contexts/cdnContext/index.cjs +4 -4
- package/dist/contexts/cdnContext/index.js +4 -4
- package/dist/contexts/chatContext/index.cjs +25 -25
- package/dist/contexts/chatContext/index.d.cts +2 -2
- package/dist/contexts/chatContext/index.d.ts +2 -2
- package/dist/contexts/chatContext/index.js +25 -25
- package/dist/contexts/enviveConfigContext/index.cjs +4 -4
- package/dist/contexts/enviveConfigContext/index.d.cts +3 -3
- package/dist/contexts/enviveConfigContext/index.d.ts +3 -3
- package/dist/contexts/enviveConfigContext/index.js +4 -4
- package/dist/contexts/enviveCssContext/index.cjs +15 -15
- package/dist/contexts/enviveCssContext/index.js +15 -15
- package/dist/contexts/featureFlagContext/index.cjs +6 -6
- package/dist/contexts/featureFlagContext/index.d.cts +3 -3
- package/dist/contexts/featureFlagContext/index.d.ts +3 -3
- package/dist/contexts/featureFlagContext/index.js +6 -6
- package/dist/contexts/featureFlagServiceContext/index.cjs +3 -3
- package/dist/contexts/featureFlagServiceContext/index.d.cts +4 -4
- package/dist/contexts/featureFlagServiceContext/index.d.ts +4 -4
- package/dist/contexts/featureFlagServiceContext/index.js +3 -3
- package/dist/contexts/graphqlContext/index.cjs +11 -11
- package/dist/contexts/graphqlContext/index.d.cts +13 -12
- package/dist/contexts/graphqlContext/index.d.ts +13 -12
- package/dist/contexts/graphqlContext/index.js +11 -11
- package/dist/contexts/localStorageContext/index.cjs +2 -2
- package/dist/contexts/localStorageContext/index.js +2 -2
- package/dist/contexts/newOrgConfigContext/index.cjs +14 -14
- package/dist/contexts/newOrgConfigContext/index.d.cts +14 -13
- package/dist/contexts/newOrgConfigContext/index.d.ts +14 -13
- package/dist/contexts/newOrgConfigContext/index.js +14 -14
- package/dist/contexts/searchContext/index.cjs +18 -18
- package/dist/contexts/searchContext/index.d.cts +1 -1
- package/dist/contexts/searchContext/index.d.ts +1 -1
- package/dist/contexts/searchContext/index.js +18 -18
- package/dist/contexts/sessionStorageContext/index.cjs +2 -2
- package/dist/contexts/sessionStorageContext/index.js +2 -2
- package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
- package/dist/contexts/shopifyUrlContext/index.d.cts +3 -3
- package/dist/contexts/shopifyUrlContext/index.d.ts +3 -3
- package/dist/contexts/shopifyUrlContext/index.js +2 -2
- package/dist/contexts/systemSettingsContext/index.cjs +4 -4
- package/dist/contexts/systemSettingsContext/index.d.cts +16 -15
- package/dist/contexts/systemSettingsContext/index.d.ts +16 -15
- package/dist/contexts/systemSettingsContext/index.js +4 -4
- package/dist/contexts/types.cjs +1 -1
- package/dist/contexts/types.d.cts +3 -3
- package/dist/contexts/types.d.ts +3 -3
- package/dist/contexts/types.js +1 -1
- package/dist/contexts/userIdentityContext/index.cjs +20 -20
- package/dist/contexts/userIdentityContext/index.d.cts +1 -1
- package/dist/contexts/userIdentityContext/index.d.ts +1 -1
- package/dist/contexts/userIdentityContext/index.js +20 -20
- package/dist/{enviveConfig-BlIkxiAF.js → enviveConfig-DV8F12B9.js} +3 -3
- package/dist/{enviveConfig-B42OJ8bK.cjs → enviveConfig-DZHdtLsQ.cjs} +3 -3
- package/dist/{enviveConfigContext-1_EivtCa.js → enviveConfigContext-BS7aNop5.js} +3 -3
- package/dist/{enviveConfigContext-Y1ahEAMe.cjs → enviveConfigContext-CTcHUIFP.cjs} +3 -3
- package/dist/{featureFlagServiceContext-D3Ge8GH5.cjs → featureFlagServiceContext-CJyYItqu.cjs} +3 -3
- package/dist/{featureFlagServiceContext-C5U0bshi.d.ts → featureFlagServiceContext-CpxlOkI9.d.ts} +2 -2
- package/dist/{featureFlagServiceContext-CAPrb4e_.js → featureFlagServiceContext-FBM6DdMJ.js} +3 -3
- package/dist/{featureFlagServiceContext-CiKWV306.d.cts → featureFlagServiceContext-p5UBwPM3.d.cts} +2 -2
- package/dist/{featureGates-D4Me_IZH.js → featureGates-KEwAL8p_.js} +1 -1
- package/dist/{featureGates-Bt_Y3kZ7.cjs → featureGates-qU_ulhpC.cjs} +1 -1
- package/dist/{frontendConfig-BiD1-j48.d.ts → frontendConfig-Cawh5iqv.d.ts} +6 -3
- package/dist/{frontendConfig-tVg0hsWZ.d.cts → frontendConfig-iZipB5FG.d.cts} +6 -3
- package/dist/graphql-CkxgqsXP.js +48 -0
- package/dist/graphql-i3dtpVTl.cjs +71 -0
- package/dist/{graphqlContext-Bf3E-V2T.d.cts → graphqlContext-BeyKU1Dr.d.cts} +2 -2
- package/dist/{graphqlContext-CpwAvnro.cjs → graphqlContext-CVbYIftg.cjs} +6 -6
- package/dist/{graphqlContext-CDeKzb46.d.ts → graphqlContext-DgkS-UX1.d.ts} +4 -4
- package/dist/{graphqlContext-dyWNSWNv.js → graphqlContext-DouNZbYo.js} +5 -5
- package/dist/hooks/AmplitudeOperations/index.cjs +18 -18
- package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
- package/dist/hooks/AmplitudeOperations/index.d.ts +1 -1
- package/dist/hooks/AmplitudeOperations/index.js +18 -18
- package/dist/hooks/AppDetails/index.cjs +15 -15
- package/dist/hooks/AppDetails/index.d.cts +12 -11
- package/dist/hooks/AppDetails/index.d.ts +12 -11
- package/dist/hooks/AppDetails/index.js +15 -15
- package/dist/hooks/CdnOperations/index.cjs +4 -4
- package/dist/hooks/CdnOperations/index.js +4 -4
- package/dist/hooks/ChatToggle/index.cjs +18 -18
- package/dist/hooks/ChatToggle/index.d.cts +1 -1
- package/dist/hooks/ChatToggle/index.d.ts +1 -1
- package/dist/hooks/ChatToggle/index.js +18 -18
- package/dist/hooks/ChatToggleAnalytics/index.cjs +19 -19
- package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
- package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
- package/dist/hooks/ChatToggleAnalytics/index.js +19 -19
- package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
- package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
- package/dist/hooks/Debounce/index.cjs +20 -2
- package/dist/hooks/Debounce/index.js +18 -2
- package/dist/hooks/ElementObserver/index.d.cts +1 -1
- package/dist/hooks/ElementObserver/index.d.ts +1 -1
- package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
- package/dist/hooks/GraphQLConfig/index.cjs +12 -12
- package/dist/hooks/GraphQLConfig/index.d.cts +13 -12
- package/dist/hooks/GraphQLConfig/index.d.ts +13 -12
- package/dist/hooks/GraphQLConfig/index.js +12 -12
- package/dist/hooks/IdentifyUser/index.cjs +20 -20
- package/dist/hooks/IdentifyUser/index.js +20 -20
- package/dist/hooks/ImageResolver/index.cjs +10 -10
- package/dist/hooks/ImageResolver/index.js +10 -10
- package/dist/hooks/LocalStorageOperations/index.cjs +2 -2
- package/dist/hooks/LocalStorageOperations/index.js +2 -2
- package/dist/hooks/MessageFilter/index.cjs +8 -8
- package/dist/hooks/MessageFilter/index.d.cts +12 -11
- package/dist/hooks/MessageFilter/index.d.ts +12 -11
- package/dist/hooks/MessageFilter/index.js +8 -8
- package/dist/hooks/NewOrgConfig/index.cjs +15 -15
- package/dist/hooks/NewOrgConfig/index.d.cts +14 -13
- package/dist/hooks/NewOrgConfig/index.d.ts +14 -13
- package/dist/hooks/NewOrgConfig/index.js +15 -15
- package/dist/hooks/Search/index.cjs +323 -152
- package/dist/hooks/Search/index.d.cts +21 -17
- package/dist/hooks/Search/index.d.ts +21 -17
- package/dist/hooks/Search/index.js +323 -153
- package/dist/hooks/SearchOperations/index.cjs +18 -18
- package/dist/hooks/SearchOperations/index.d.cts +1 -1
- package/dist/hooks/SearchOperations/index.d.ts +1 -1
- package/dist/hooks/SearchOperations/index.js +18 -18
- package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
- package/dist/hooks/SessionStorageOperations/index.js +2 -2
- package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
- package/dist/hooks/ShopifyUrlOperations/index.d.cts +5 -5
- package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -5
- package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
- package/dist/hooks/SystemSettingsContext/index.cjs +5 -5
- package/dist/hooks/SystemSettingsContext/index.d.cts +12 -11
- package/dist/hooks/SystemSettingsContext/index.d.ts +14 -13
- package/dist/hooks/SystemSettingsContext/index.js +5 -5
- package/dist/hooks/TrackComponentVisibleEvent/index.cjs +17 -17
- package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/index.js +17 -17
- package/dist/hooks/UpdateAnalyticsProps/index.cjs +16 -16
- package/dist/hooks/UpdateAnalyticsProps/index.js +16 -16
- package/dist/hooks/utils.d.cts +12 -11
- package/dist/hooks/utils.d.ts +12 -11
- package/dist/{index-B6xpW8RG.d.ts → index--9_c4tze.d.ts} +1 -1
- package/dist/index-BEpDGqnz.d.cts +41 -0
- package/dist/{index-D31m6bPU.d.ts → index-BKvFVPUX.d.ts} +1 -1
- package/dist/{index-VwfWqyR_.d.ts → index-BNHIIgYk.d.ts} +1 -1
- package/dist/index-BUDrAxnl.d.ts +673 -0
- package/dist/{index-DzbkQtaK.d.cts → index-CCboEuTO.d.cts} +1 -1
- package/dist/{index-wFHfdr6p.d.ts → index-CMJM-3zV.d.ts} +5 -5
- package/dist/{index-FQjyuD3D.d.cts → index-COXkY78t.d.cts} +1 -1
- package/dist/{index--uHjE7L8.d.ts → index-D7htGSQC.d.ts} +1 -1
- package/dist/index-DM_5fh8c.d.ts +101 -0
- package/dist/index-DU7uw0ba.d.cts +101 -0
- package/dist/{index-Da1s8h5C.d.cts → index-DZtnHhlr.d.cts} +1 -1
- package/dist/{index-Bq39XSmY.d.cts → index-DpJzjjpi.d.cts} +34 -34
- package/dist/{index-DSRs6N6J.d.ts → index-Dtw-hJdt.d.ts} +1 -1
- package/dist/index-Dy3TTIOm.d.cts +673 -0
- package/dist/index-ErVcwUnR.d.ts +41 -0
- package/dist/{index-Cyq5HiC0.d.cts → index-OkKEOL6H.d.cts} +1 -1
- package/dist/{index-9NE86em3.d.cts → index-hAqp0oYb.d.cts} +1 -1
- package/dist/interceptors/index.d.cts +13 -12
- package/dist/interceptors/index.d.ts +13 -12
- package/dist/interceptors/types.d.cts +12 -11
- package/dist/interceptors/types.d.ts +12 -11
- package/dist/{localStorageContext-DAOJ4be4.js → localStorageContext-CqcSvg2H.js} +2 -2
- package/dist/{localStorageContext-C5giszHn.cjs → localStorageContext-DiLfSsqL.cjs} +2 -2
- package/dist/{locators-C2fWd-74.js → locators-BMQGmGLq.js} +1 -1
- package/dist/{locators-Cx3q6Z_h.cjs → locators-DxYdak1F.cjs} +1 -1
- package/dist/{logger-0D_8Ip2L.cjs → logger-TBIl4uIH.cjs} +1 -1
- package/dist/{logger-Co0IA3k5.js → logger-W3lqg-4b.js} +1 -1
- package/dist/models-CWOgrLCm.js +1284 -0
- package/dist/models-DqdLOi2I.cjs +1519 -0
- package/dist/{newOrgConfigContext-BMvcqPzD.cjs → newOrgConfigContext-BIDz4ZuO.cjs} +4 -4
- package/dist/{newOrgConfigContext-DOdUxlOE.d.cts → newOrgConfigContext-CJI3tsVV.d.cts} +2 -2
- package/dist/{newOrgConfigContext-BVyJExeW.d.ts → newOrgConfigContext-CKn7B2rj.d.ts} +2 -2
- package/dist/{newOrgConfigContext-6mlrvr1w.js → newOrgConfigContext-u_9UPNcX.js} +4 -4
- package/dist/{nodeSelector-DYhDUi7v.d.ts → nodeSelector-B5NfnUHv.d.ts} +1 -1
- package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-vKB44CDB.d.cts} +1 -1
- package/dist/{orgAnalyticsConfig-Bm23fw4s.cjs → orgAnalyticsConfig-CGEQtAFs.cjs} +1 -1
- package/dist/{orgAnalyticsConfig-CpBmga08.js → orgAnalyticsConfig-i4jozLBB.js} +1 -1
- package/dist/responseGenerics-D9bS-Dd6.d.ts +148 -0
- package/dist/{index-Cx9e-fRi.d.ts → responseGenerics-DWLV09cQ.d.cts} +4 -40
- package/dist/{search-y-ioX5Mz.d.cts → search-6RrxBXD6.d.cts} +1 -1
- package/dist/{search-D-UfTjB7.cjs → search-CTVX9gC6.cjs} +2 -2
- package/dist/{search-B1OtJe8Z.d.ts → search-DrJiCT7d.d.ts} +1 -1
- package/dist/{search-yawhMv22.js → search-NgNrXNS9.js} +2 -2
- package/dist/{search-filter-types-BxaNSLs_.d.cts → search-filter-types-BItKtezf.d.cts} +1 -1
- package/dist/{search-filter-types-OI9zH3E_.d.ts → search-filter-types-CGFhksO3.d.ts} +1 -1
- package/dist/{searchContext-CFuwIIW-.cjs → searchContext-CnDXkawZ.cjs} +6 -6
- package/dist/{searchContext-CiqOqTJL.js → searchContext-DtRmshTA.js} +6 -6
- package/dist/{sessionStorageContext-BmCW091C.cjs → sessionStorageContext-1Ks_d4Z0.cjs} +2 -2
- package/dist/{sessionStorageContext-CNxkqJi1.js → sessionStorageContext-CDcl7NVl.js} +2 -2
- package/dist/{shopifyUrlContext-aZMwCfbJ.cjs → shopifyUrlContext-CxjV3qvH.cjs} +2 -2
- package/dist/{shopifyUrlContext-BXbI0PIG.js → shopifyUrlContext-D2btP_lY.js} +2 -2
- package/dist/{spiffyWidgets-CvEJIuJx.d.ts → spiffyWidgets-CR6F7FRE.d.ts} +1 -1
- package/dist/{spiffyWidgets-BuS00VaQ.d.cts → spiffyWidgets-eNbU1gMc.d.cts} +1 -1
- package/dist/{systemSettingsContext-SozpUezn.cjs → systemSettingsContext-BejoGzzB.cjs} +2 -2
- package/dist/{systemSettingsContext-kz6yyiFF.js → systemSettingsContext-C4dtZ0uZ.js} +2 -2
- package/dist/{test-types-DRhqHXw-.d.ts → test-types-BEml_bm3.d.ts} +1 -1
- package/dist/{test-types-ThQiO_cc.d.cts → test-types-Dsu8RJZu.d.cts} +1 -1
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/{types-r0Z6CwyF.d.ts → types-4LQ7LUCk.d.ts} +2 -2
- package/dist/types-BegmH0S1.d.ts +60 -0
- package/dist/types-BuvXXGxE.cjs +1 -1
- package/dist/types-CtUb63bt.js +76 -0
- package/dist/{types-zQGBI-Yo.d.cts → types-DFsSqmWx.d.cts} +2 -2
- package/dist/types-DWorwfS-.d.cts +60 -0
- package/dist/types-DXnG1tV0.js +1 -1
- package/dist/types-UUvB6h05.cjs +106 -0
- package/dist/types.d.cts +3 -3
- package/dist/types.d.ts +3 -3
- package/dist/{unsupportedProductExceptions-B4f9aLjr.cjs → unsupportedProductExceptions-B0yx2bHK.cjs} +1 -1
- package/dist/{unsupportedProductExceptions-DlmraJm8.js → unsupportedProductExceptions-Cs66ngs3.js} +1 -1
- package/dist/{urlsParser-DhcEZLc_.cjs → urlsParser-COzMdJaX.cjs} +1 -1
- package/dist/{urlsParser-DLCzibqU.js → urlsParser-DxjoLj98.js} +1 -1
- package/dist/{useAmplitudeOperations-D0nvIYlt.cjs → useAmplitudeOperations-BJXD9v2u.cjs} +2 -2
- package/dist/{useAmplitudeOperations-Dhks3PgF.js → useAmplitudeOperations-Dym0Ker8.js} +2 -2
- package/dist/{useAppDetails-qyaQIbWE.js → useAppDetails-Dmh16bWE.js} +4 -4
- package/dist/{useAppDetails-B9sGmpJ3.cjs → useAppDetails-DsAZ1xQn.cjs} +4 -4
- package/dist/{useGraphQLConfig-CgKEfVYc.cjs → useGraphQLConfig-B3DlwmGg.cjs} +2 -2
- package/dist/{useGraphQLConfig-BccQUaeW.js → useGraphQLConfig-DSRaDTdT.js} +2 -2
- package/dist/{userIdentityContext-BKLedN4R.d.ts → userIdentityContext-C6kApbuk.d.ts} +1 -1
- package/dist/userIdentityContext-DF3atBFE.js +119 -0
- package/dist/userIdentityContext-DpQTduhF.cjs +136 -0
- package/dist/{userIdentityContext-D2oFVFzo.d.cts → userIdentityContext-kU1PIo8K.d.cts} +1 -1
- package/dist/{utils-DFPt3FSw.js → utils-B7KTAEmV.js} +4 -4
- package/dist/{utils-BhyZiDrE.d.ts → utils-BRkGP1eb.d.ts} +1 -1
- package/dist/{utils-B7PAzB_M.d.cts → utils-CBD4g2Nc.d.cts} +4 -4
- package/dist/{utils-C6imnLBo.cjs → utils-CDw74BCO.cjs} +1 -1
- package/dist/{utils-Cazq8Q3q.cjs → utils-CcC2jZRi.cjs} +4 -4
- package/dist/{utils-B3x_9JTY.d.cts → utils-DCrwX6FT.d.cts} +1 -1
- package/dist/{utils-C4ci_t0-.js → utils-DIvMgPe8.js} +1 -1
- package/dist/{utils-B1v0iXs3.d.ts → utils-QKFAbPT6.d.ts} +4 -4
- package/package.json +7 -2
- package/src/application/commerce-api.ts +2 -0
- package/src/application/models/graphql/index.ts +1 -0
- package/src/atoms/app/index.ts +1 -1
- package/src/atoms/search/productRetrievalAPI.ts +70 -0
- package/src/atoms/search/productRetrievalAdapter.ts +25 -0
- package/src/atoms/search/types.ts +13 -0
- package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +525 -0
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +5 -2
- package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +790 -0
- package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +775 -0
- package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +495 -0
- package/src/contexts/searchContext/__tests__/searchContext.test.tsx +806 -0
- package/src/contexts/systemSettingsContext/__tests__/systemSettingsContext.test.tsx +506 -0
- package/src/contexts/types.ts +3 -0
- package/src/contexts/userIdentityContext/userIdentityContext.tsx +7 -5
- package/src/hooks/Search/useRecommendedProducts.ts +48 -0
- package/src/hooks/Search/useSearch.tsx +89 -182
- package/src/hooks/Search/useSearchInput.ts +263 -0
- package/src/types/FilterAttribute.ts +35 -0
- package/dist/amplitudeContext-DOqL2Vn8.js +0 -264
- package/dist/amplitudeContext-ZTQMvVTV.cjs +0 -286
- package/dist/graphql-OkhsP4ir.js +0 -36
- package/dist/graphql-l4dQrsA6.cjs +0 -53
- package/dist/index-Bmub8e38.d.cts +0 -98
- package/dist/index-CG3P8xE1.d.cts +0 -676
- package/dist/index-CiWEYzXl.d.cts +0 -184
- package/dist/index-D2VaMPA3.d.ts +0 -98
- package/dist/index-fUsw_Mea.d.ts +0 -676
- package/dist/models-CkJ-wg9Q.cjs +0 -1537
- package/dist/models-UHOY0ak5.js +0 -1296
- package/dist/types-BwNrLPSZ.cjs +0 -106
- package/dist/types-CKMMb_gX.d.cts +0 -51
- package/dist/types-D3uOF0Oy.js +0 -76
- package/dist/types-DZPuBnHe.d.ts +0 -51
- package/dist/useDebounce-BZDtUAQ8.cjs +0 -26
- package/dist/useDebounce-ueblXZI-.js +0 -19
- package/dist/userIdentityContext-Cb6lLv6t.cjs +0 -132
- package/dist/userIdentityContext-O_DHHPTN.js +0 -115
- /package/dist/{AmplitudeOperations-ChZWcSsc.js → AmplitudeOperations-C-ieCm9m.js} +0 -0
- /package/dist/{AmplitudeOperations-JggIc1zD.cjs → AmplitudeOperations-p7APchq9.cjs} +0 -0
- /package/dist/{index-RcVcRKH7.d.cts → index-A0HvA68Y.d.cts} +0 -0
- /package/dist/{index-mHc9_XC3.d.ts → index-DNVvRcKu.d.ts} +0 -0
|
@@ -1,47 +1,293 @@
|
|
|
1
1
|
const require_chunk = require('../../chunk-CUT6urMc.cjs');
|
|
2
|
-
require('../../types-
|
|
2
|
+
require('../../types-UUvB6h05.cjs');
|
|
3
3
|
require('../../events-DYY4l817.cjs');
|
|
4
4
|
const require_utils = require('../../utils-hYTjy7hJ.cjs');
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
require('../../
|
|
8
|
-
require('../../
|
|
9
|
-
require('../../
|
|
10
|
-
require('../../
|
|
11
|
-
require('../../
|
|
5
|
+
const require_models = require('../../models-DqdLOi2I.cjs');
|
|
6
|
+
const require_featureGates = require('../../featureGates-qU_ulhpC.cjs');
|
|
7
|
+
require('../../urlsParser-COzMdJaX.cjs');
|
|
8
|
+
require('../../graphql-i3dtpVTl.cjs');
|
|
9
|
+
require('../../utils-CDw74BCO.cjs');
|
|
10
|
+
require('../../api-DeW6rHj3.cjs');
|
|
11
|
+
require('../../logger-TBIl4uIH.cjs');
|
|
12
12
|
require('../../utilityTypes-BGbL2WTP.cjs');
|
|
13
13
|
require('../../variantInfo-DpLn4nHz.cjs');
|
|
14
|
-
require('../../
|
|
15
|
-
|
|
16
|
-
require('../../
|
|
17
|
-
require('../../
|
|
18
|
-
require('../../app-
|
|
19
|
-
require('../../enviveConfigContext-
|
|
20
|
-
require('../../featureFlagServiceContext-
|
|
21
|
-
const require_amplitudeContext = require('../../amplitudeContext-
|
|
22
|
-
require('../../chatState-
|
|
14
|
+
require('../../atomStore-8ppNkJ_n.cjs');
|
|
15
|
+
require('../../localStorageContext-DiLfSsqL.cjs');
|
|
16
|
+
const require_enviveConfig = require('../../enviveConfig-DZHdtLsQ.cjs');
|
|
17
|
+
require('../../orgAnalyticsConfig-CGEQtAFs.cjs');
|
|
18
|
+
require('../../app-XEFPotoH.cjs');
|
|
19
|
+
require('../../enviveConfigContext-CTcHUIFP.cjs');
|
|
20
|
+
const require_featureFlagServiceContext = require('../../featureFlagServiceContext-CJyYItqu.cjs');
|
|
21
|
+
const require_amplitudeContext = require('../../amplitudeContext-C-0-DDk3.cjs');
|
|
22
|
+
require('../../chatState-OkYPVghN.cjs');
|
|
23
23
|
require('../../graphqlConfig-BnfE0ql5.cjs');
|
|
24
|
-
require('../../chat-
|
|
24
|
+
const require_chat = require('../../chat-Ckd1b_z_.cjs');
|
|
25
25
|
const require_globalSearch = require('../../globalSearch-BOG3wmck.cjs');
|
|
26
26
|
require('../../org-B_cWn2bt.cjs');
|
|
27
27
|
require('../../newOrgConfigAtom-CPA6Gp6n.cjs');
|
|
28
28
|
const require_utils$2 = require('../../utils-CvLmSsUj.cjs');
|
|
29
|
-
require('../../chatSearch-
|
|
29
|
+
require('../../chatSearch-Bev4ZI8Z.cjs');
|
|
30
30
|
const require_types$1 = require('../../types-BuvXXGxE.cjs');
|
|
31
31
|
require('../../searchServiceAdapter-BGlvoZFE.cjs');
|
|
32
|
-
const require_search = require('../../search-
|
|
33
|
-
require('../../
|
|
34
|
-
require('../../
|
|
35
|
-
require('../../
|
|
36
|
-
|
|
37
|
-
const
|
|
32
|
+
const require_search = require('../../search-CTVX9gC6.cjs');
|
|
33
|
+
require('../../amplitudeContext-DPtyVv3Q.cjs');
|
|
34
|
+
require('../../graphqlContext-CVbYIftg.cjs');
|
|
35
|
+
require('../../useGraphQLConfig-B3DlwmGg.cjs');
|
|
36
|
+
require('../../newOrgConfigContext-BIDz4ZuO.cjs');
|
|
37
|
+
const require_NewOrgConfig = require('../../NewOrgConfig-CInGtTV6.cjs');
|
|
38
38
|
require('../../useIntersection-DSDREfj6.cjs');
|
|
39
|
-
const require_TrackComponentVisibleEvent = require('../../TrackComponentVisibleEvent-
|
|
39
|
+
const require_TrackComponentVisibleEvent = require('../../TrackComponentVisibleEvent-C7-nnBks.cjs');
|
|
40
40
|
let react = require("react");
|
|
41
41
|
react = require_chunk.__toESM(react);
|
|
42
42
|
let jotai = require("jotai");
|
|
43
43
|
jotai = require_chunk.__toESM(jotai);
|
|
44
|
+
let fuse_js = require("fuse.js");
|
|
45
|
+
fuse_js = require_chunk.__toESM(fuse_js);
|
|
44
46
|
|
|
47
|
+
//#region src/hooks/Search/useSearchInput.ts
|
|
48
|
+
const useSearchInput = ({ initialSearchText = "", searchOrigin, onSearchSubmit }) => {
|
|
49
|
+
const track = (0, jotai.useAtomValue)(require_chat.amplitudeTrackEventAtom);
|
|
50
|
+
const [searchText, setSearchText] = (0, react.useState)(initialSearchText);
|
|
51
|
+
const [hasText, setHasText] = (0, react.useState)(initialSearchText.trim().length > 0);
|
|
52
|
+
const [isFocused, setIsFocused] = (0, react.useState)(false);
|
|
53
|
+
const [focusedIndex, setFocusedIndex] = (0, react.useState)(-1);
|
|
54
|
+
const [focusedOptionId, setFocusedOptionId] = (0, react.useState)(void 0);
|
|
55
|
+
const globalAutocompleteResults = (0, jotai.useAtomValue)(require_globalSearch.autocompleteStateAtom).results;
|
|
56
|
+
const isAutocompleteEnabled = globalAutocompleteResults.length > 0;
|
|
57
|
+
const isSelectingAutocomplete = (0, react.useRef)(false);
|
|
58
|
+
const shouldShowAutocomplete = hasText && isFocused && isAutocompleteEnabled;
|
|
59
|
+
const autocompleteResultsLimit = 5;
|
|
60
|
+
const fuseOptions = (0, react.useMemo)(() => ({
|
|
61
|
+
includeScore: true,
|
|
62
|
+
includeMatches: true,
|
|
63
|
+
threshold: .3,
|
|
64
|
+
location: 0,
|
|
65
|
+
distance: 4,
|
|
66
|
+
minMatchCharLength: 1,
|
|
67
|
+
keys: [],
|
|
68
|
+
useExtendedSearch: false,
|
|
69
|
+
ignoreLocation: false
|
|
70
|
+
}), []);
|
|
71
|
+
const fuse = (0, react.useMemo)(() => {
|
|
72
|
+
if (!globalAutocompleteResults.length) return null;
|
|
73
|
+
return new fuse_js.default(globalAutocompleteResults, fuseOptions);
|
|
74
|
+
}, [globalAutocompleteResults, fuseOptions]);
|
|
75
|
+
const autocompleteResults = (0, react.useMemo)(() => {
|
|
76
|
+
if (!isAutocompleteEnabled || !fuse) return [];
|
|
77
|
+
if (!searchText.trim()) return [];
|
|
78
|
+
return fuse.search(searchText).slice(0, autocompleteResultsLimit).map((result) => result.item);
|
|
79
|
+
}, [
|
|
80
|
+
isAutocompleteEnabled,
|
|
81
|
+
fuse,
|
|
82
|
+
searchText,
|
|
83
|
+
autocompleteResultsLimit
|
|
84
|
+
]);
|
|
85
|
+
const handleSearchInputChange = (0, react.useCallback)((newValue) => {
|
|
86
|
+
if (newValue !== searchText) setIsFocused(true);
|
|
87
|
+
if (newValue.length === 1) track?.({
|
|
88
|
+
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchInputStarted,
|
|
89
|
+
eventProps: { searchOrigin }
|
|
90
|
+
});
|
|
91
|
+
setSearchText(newValue);
|
|
92
|
+
setHasText(newValue.trim().length > 0);
|
|
93
|
+
setFocusedIndex(-1);
|
|
94
|
+
setFocusedOptionId(void 0);
|
|
95
|
+
}, [
|
|
96
|
+
searchOrigin,
|
|
97
|
+
searchText,
|
|
98
|
+
track
|
|
99
|
+
]);
|
|
100
|
+
const handleSearchInputFocus = (0, react.useCallback)(() => {
|
|
101
|
+
setIsFocused(true);
|
|
102
|
+
}, []);
|
|
103
|
+
const handleSearchInputBlur = (0, react.useCallback)(() => {
|
|
104
|
+
setTimeout(() => {
|
|
105
|
+
if (!isSelectingAutocomplete.current) {
|
|
106
|
+
setIsFocused(false);
|
|
107
|
+
setFocusedIndex(-1);
|
|
108
|
+
setFocusedOptionId(void 0);
|
|
109
|
+
}
|
|
110
|
+
}, 150);
|
|
111
|
+
}, []);
|
|
112
|
+
const handleSubmitSearch = (0, react.useCallback)(() => {
|
|
113
|
+
setIsFocused(false);
|
|
114
|
+
if (searchText.trim() && onSearchSubmit) {
|
|
115
|
+
track?.({
|
|
116
|
+
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchQuerySubmitted,
|
|
117
|
+
eventProps: {
|
|
118
|
+
searchOrigin,
|
|
119
|
+
queryText: searchText.trim()
|
|
120
|
+
},
|
|
121
|
+
alsoSendToGoogleAnalytics: true
|
|
122
|
+
});
|
|
123
|
+
onSearchSubmit(searchText.trim());
|
|
124
|
+
}
|
|
125
|
+
}, [
|
|
126
|
+
searchText,
|
|
127
|
+
onSearchSubmit,
|
|
128
|
+
searchOrigin,
|
|
129
|
+
track
|
|
130
|
+
]);
|
|
131
|
+
const handleAutocompleteSelect = (0, react.useCallback)((suggestion, rankPosition) => {
|
|
132
|
+
isSelectingAutocomplete.current = true;
|
|
133
|
+
setSearchText(suggestion);
|
|
134
|
+
setHasText(suggestion.trim().length > 0);
|
|
135
|
+
setIsFocused(false);
|
|
136
|
+
track?.({
|
|
137
|
+
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchInputStarted,
|
|
138
|
+
eventProps: { searchOrigin }
|
|
139
|
+
});
|
|
140
|
+
if (onSearchSubmit) onSearchSubmit(suggestion.trim());
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
isSelectingAutocomplete.current = false;
|
|
143
|
+
}, 100);
|
|
144
|
+
}, [
|
|
145
|
+
onSearchSubmit,
|
|
146
|
+
searchOrigin,
|
|
147
|
+
track
|
|
148
|
+
]);
|
|
149
|
+
const handleKeyDown = (0, react.useCallback)((event) => {
|
|
150
|
+
if (event.key === "ArrowDown") {
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
const newIndex = (focusedIndex + 1) % autocompleteResults.length;
|
|
153
|
+
setFocusedIndex(newIndex);
|
|
154
|
+
setFocusedOptionId(`option-${newIndex}`);
|
|
155
|
+
} else if (event.key === "ArrowUp") {
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
const newIndex = (focusedIndex - 1 + autocompleteResults.length) % autocompleteResults.length;
|
|
158
|
+
setFocusedIndex(newIndex);
|
|
159
|
+
setFocusedOptionId(`option-${newIndex}`);
|
|
160
|
+
} else if (event.key === "Enter") if (focusedIndex === -1) {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
handleSubmitSearch();
|
|
163
|
+
} else {
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
const suggestionText = autocompleteResults[focusedIndex];
|
|
166
|
+
handleAutocompleteSelect(suggestionText, focusedIndex);
|
|
167
|
+
}
|
|
168
|
+
else if (event.key === "Escape") {
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
setFocusedIndex(-1);
|
|
171
|
+
setFocusedOptionId(void 0);
|
|
172
|
+
}
|
|
173
|
+
}, [
|
|
174
|
+
autocompleteResults,
|
|
175
|
+
focusedIndex,
|
|
176
|
+
handleAutocompleteSelect,
|
|
177
|
+
handleSubmitSearch
|
|
178
|
+
]);
|
|
179
|
+
const setSearchTextUtility = (0, react.useCallback)((text) => {
|
|
180
|
+
setSearchText(text);
|
|
181
|
+
setHasText(text.trim().length > 0);
|
|
182
|
+
}, []);
|
|
183
|
+
const resetSearch = (0, react.useCallback)(() => {
|
|
184
|
+
setSearchText("");
|
|
185
|
+
setHasText(false);
|
|
186
|
+
setIsFocused(false);
|
|
187
|
+
setFocusedIndex(-1);
|
|
188
|
+
setFocusedOptionId(void 0);
|
|
189
|
+
}, []);
|
|
190
|
+
return {
|
|
191
|
+
searchText,
|
|
192
|
+
hasText,
|
|
193
|
+
isFocused,
|
|
194
|
+
focusedIndex,
|
|
195
|
+
focusedOptionId,
|
|
196
|
+
autocompleteResults,
|
|
197
|
+
shouldShowAutocomplete,
|
|
198
|
+
handleSearchInputChange,
|
|
199
|
+
handleSearchInputFocus,
|
|
200
|
+
handleSearchInputBlur,
|
|
201
|
+
handleKeyDown,
|
|
202
|
+
handleAutocompleteSelect,
|
|
203
|
+
handleSubmitSearch,
|
|
204
|
+
setSearchText: setSearchTextUtility,
|
|
205
|
+
resetSearch
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/atoms/search/productRetrievalAdapter.ts
|
|
211
|
+
let productRetrievalFunction = null;
|
|
212
|
+
const getProductRetrievalFunction = () => {
|
|
213
|
+
if (!productRetrievalFunction) throw new Error("Product retrieval function not initialized. Make sure ProductRetrievalProvider is mounted.");
|
|
214
|
+
return productRetrievalFunction;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
//#endregion
|
|
218
|
+
//#region src/atoms/search/productRetrievalAPI.ts
|
|
219
|
+
const productRetrievalAtom = (0, jotai.atom)({
|
|
220
|
+
data: null,
|
|
221
|
+
loading: false,
|
|
222
|
+
error: null,
|
|
223
|
+
lastProductIds: null
|
|
224
|
+
});
|
|
225
|
+
const performProductRetrievalAtom = (0, jotai.atom)(null, async (get, set, params) => {
|
|
226
|
+
if (get(productRetrievalAtom).loading) return;
|
|
227
|
+
set(productRetrievalAtom, {
|
|
228
|
+
data: null,
|
|
229
|
+
loading: true,
|
|
230
|
+
error: null,
|
|
231
|
+
lastProductIds: params.productIds
|
|
232
|
+
});
|
|
233
|
+
try {
|
|
234
|
+
const result = await getProductRetrievalFunction()(params);
|
|
235
|
+
set(productRetrievalAtom, {
|
|
236
|
+
data: result,
|
|
237
|
+
loading: false,
|
|
238
|
+
error: null,
|
|
239
|
+
lastProductIds: params.productIds
|
|
240
|
+
});
|
|
241
|
+
} catch (error) {
|
|
242
|
+
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
|
|
243
|
+
set(productRetrievalAtom, {
|
|
244
|
+
data: null,
|
|
245
|
+
loading: false,
|
|
246
|
+
error: errorMessage,
|
|
247
|
+
lastProductIds: params.productIds
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
const retrievedProductsAtom = (0, jotai.atom)((get) => {
|
|
252
|
+
return get(productRetrievalAtom).data?.products || [];
|
|
253
|
+
});
|
|
254
|
+
const productRetrievalLoadingAtom = (0, jotai.atom)((get) => {
|
|
255
|
+
return get(productRetrievalAtom).loading;
|
|
256
|
+
});
|
|
257
|
+
const productRetrievalErrorAtom = (0, jotai.atom)((get) => {
|
|
258
|
+
return get(productRetrievalAtom).error;
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
//#endregion
|
|
262
|
+
//#region src/hooks/Search/useRecommendedProducts.ts
|
|
263
|
+
/**
|
|
264
|
+
* A hook to get recommended products.
|
|
265
|
+
* It checks the `IsRecommendedProductsEnabled` feature gate and triggers fetching if needed.
|
|
266
|
+
* If the gate is enabled, it returns the list of recommended products.
|
|
267
|
+
* If the gate is disabled, it returns an empty array.
|
|
268
|
+
*
|
|
269
|
+
* @returns The list of recommended products or an empty array.
|
|
270
|
+
*/
|
|
271
|
+
const useRecommendedProducts = () => {
|
|
272
|
+
const { featureFlagService } = require_featureFlagServiceContext.useFeatureFlagService();
|
|
273
|
+
const isEnabled = featureFlagService?.isFeatureGateEnabled(require_featureGates.FeatureGates.IsRecommendedProductsEnabled);
|
|
274
|
+
const recommendedProducts = (0, jotai.useAtomValue)(retrievedProductsAtom);
|
|
275
|
+
const performProductRetrieval = (0, jotai.useSetAtom)(performProductRetrievalAtom);
|
|
276
|
+
const { lastProductIds } = (0, jotai.useAtomValue)(productRetrievalAtom);
|
|
277
|
+
const orgUIConfig = require_NewOrgConfig.useNewOrgConfig();
|
|
278
|
+
(0, react.useEffect)(() => {
|
|
279
|
+
const recommendedProductIds = orgUIConfig.frontendConfig?.uiConfigs?.searchConfig ? orgUIConfig.frontendConfig?.uiConfigs?.searchConfig.recommendedProducts : [];
|
|
280
|
+
if (isEnabled && recommendedProductIds && recommendedProductIds.length > 0 && !lastProductIds) performProductRetrieval({ productIds: recommendedProductIds });
|
|
281
|
+
}, [
|
|
282
|
+
isEnabled,
|
|
283
|
+
performProductRetrieval,
|
|
284
|
+
lastProductIds,
|
|
285
|
+
orgUIConfig
|
|
286
|
+
]);
|
|
287
|
+
return isEnabled ? recommendedProducts : [];
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
//#endregion
|
|
45
291
|
//#region src/hooks/Search/useSearch.tsx
|
|
46
292
|
const useSearch = () => {
|
|
47
293
|
const config = require_NewOrgConfig.useNewOrgConfig();
|
|
@@ -49,7 +295,6 @@ const useSearch = () => {
|
|
|
49
295
|
const { data: searchData, loading: isLoadingSearch } = (0, jotai.useAtomValue)(require_search.searchAtom);
|
|
50
296
|
const productList = (0, jotai.useAtomValue)(require_search.filteredSearchProductsAtom);
|
|
51
297
|
const performSearch = (0, jotai.useSetAtom)(require_search.performSearchAtom);
|
|
52
|
-
const [{ results: autocompleteResults, isLoading: isLoadingAutocomplete }, setAutocompleteState] = (0, jotai.useAtom)(require_globalSearch.autocompleteStateAtom);
|
|
53
298
|
const [{ query }] = (0, jotai.useAtom)(require_search.searchParamsAtom);
|
|
54
299
|
const [isFilterOpen, setIsFilterOpen] = (0, jotai.useAtom)(require_globalSearch.isFilterOpenAtom);
|
|
55
300
|
const [selectedFilterOptions] = (0, jotai.useAtom)(require_search.searchSelectedFiltersAtom);
|
|
@@ -58,12 +303,26 @@ const useSearch = () => {
|
|
|
58
303
|
const [productSorting, setProductSorting] = (0, jotai.useAtom)(require_search.searchProductSortingAtom);
|
|
59
304
|
const clearFilters = (0, jotai.useSetAtom)(require_search.clearSearchFiltersAtom);
|
|
60
305
|
const searchFilters = (0, jotai.useAtomValue)(require_search.searchFiltersAtom);
|
|
61
|
-
const
|
|
62
|
-
const [focusedIndex, setFocusedIndex] = (0, react.useState)(-1);
|
|
63
|
-
const [focusedOptionId, setFocusedOptionId] = (0, react.useState)(void 0);
|
|
64
|
-
const [searchText, setSearchText] = (0, react.useState)(query || "");
|
|
306
|
+
const recommendedProducts = useRecommendedProducts();
|
|
65
307
|
const searchResultsRef = (0, react.useRef)(null);
|
|
66
|
-
const
|
|
308
|
+
const scrollToTop = (0, react.useCallback)(() => {
|
|
309
|
+
const container = searchResultsRef.current;
|
|
310
|
+
if (container) container.scrollTo({
|
|
311
|
+
top: 0,
|
|
312
|
+
behavior: "smooth"
|
|
313
|
+
});
|
|
314
|
+
else window.scrollTo({
|
|
315
|
+
top: 0,
|
|
316
|
+
behavior: "smooth"
|
|
317
|
+
});
|
|
318
|
+
}, []);
|
|
319
|
+
const { searchText, focusedIndex, focusedOptionId, autocompleteResults, shouldShowAutocomplete, handleSearchInputChange, handleSearchInputFocus, handleSearchInputBlur, handleKeyDown, handleAutocompleteSelect, handleSubmitSearch, setSearchText } = useSearchInput({
|
|
320
|
+
initialSearchText: query || "",
|
|
321
|
+
searchOrigin: require_models.SpiffyWidgets.SearchResults,
|
|
322
|
+
onSearchSubmit: (searchQuery) => {
|
|
323
|
+
performSearch({ query: searchQuery });
|
|
324
|
+
}
|
|
325
|
+
});
|
|
67
326
|
const searchResultsState = require_utils.getSearchResultsState(isLoadingSearch, searchData);
|
|
68
327
|
const dynamicFilters = searchData?.filters || [];
|
|
69
328
|
const safeProductCardConfig = config?.frontendConfig?.uiConfigs?.productCardConfig || {
|
|
@@ -123,76 +382,16 @@ const useSearch = () => {
|
|
|
123
382
|
}
|
|
124
383
|
});
|
|
125
384
|
addFilter(require_search.createFilterOption("dynamic", filter, dynamicFilterDisplayName));
|
|
385
|
+
scrollToTop();
|
|
126
386
|
}, [
|
|
127
387
|
addFilter,
|
|
128
388
|
searchText,
|
|
129
|
-
|
|
389
|
+
scrollToTop
|
|
130
390
|
]);
|
|
131
391
|
const handleRemoveFilter = (0, react.useCallback)((filter) => {
|
|
132
392
|
removeFilter(filter.id);
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (searchText.trim()) {
|
|
136
|
-
trackEvent({
|
|
137
|
-
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchQuerySubmitted,
|
|
138
|
-
eventProps: {
|
|
139
|
-
searchOrigin: require_models.SpiffyWidgets.SearchResults,
|
|
140
|
-
queryText: searchText.trim()
|
|
141
|
-
},
|
|
142
|
-
alsoSendToGoogleAnalytics: true
|
|
143
|
-
});
|
|
144
|
-
const url = new URL(window.location.href);
|
|
145
|
-
url.searchParams.set("esq", searchText.trim());
|
|
146
|
-
window.history.pushState({}, "", url);
|
|
147
|
-
performSearch({ query: searchText.trim() });
|
|
148
|
-
}
|
|
149
|
-
}, [
|
|
150
|
-
performSearch,
|
|
151
|
-
searchText,
|
|
152
|
-
trackEvent
|
|
153
|
-
]);
|
|
154
|
-
const handleAutocompleteSelect = (0, react.useCallback)((suggestion) => {
|
|
155
|
-
setSearchText(suggestion);
|
|
156
|
-
handleSubmitSearch();
|
|
157
|
-
}, [handleSubmitSearch, setSearchText]);
|
|
158
|
-
const handleKeyDown = (0, react.useCallback)((event) => {
|
|
159
|
-
if (event.key === "ArrowDown") {
|
|
160
|
-
event.preventDefault();
|
|
161
|
-
const newIndex = (focusedIndex + 1) % autocompleteResults.length;
|
|
162
|
-
setFocusedIndex(newIndex);
|
|
163
|
-
setFocusedOptionId(`option-${newIndex}`);
|
|
164
|
-
} else if (event.key === "ArrowUp") {
|
|
165
|
-
event.preventDefault();
|
|
166
|
-
const newIndex = (focusedIndex - 1 + autocompleteResults.length) % autocompleteResults.length;
|
|
167
|
-
setFocusedIndex(newIndex);
|
|
168
|
-
setFocusedOptionId(`option-${newIndex}`);
|
|
169
|
-
} else if (event.key === "Enter") if (focusedIndex === -1) {
|
|
170
|
-
event.preventDefault();
|
|
171
|
-
handleSubmitSearch();
|
|
172
|
-
} else {
|
|
173
|
-
event.preventDefault();
|
|
174
|
-
const suggestionText = autocompleteResults[focusedIndex];
|
|
175
|
-
handleAutocompleteSelect(suggestionText);
|
|
176
|
-
}
|
|
177
|
-
else if (event.key === "Escape") {
|
|
178
|
-
event.preventDefault();
|
|
179
|
-
setFocusedIndex(-1);
|
|
180
|
-
setFocusedOptionId(void 0);
|
|
181
|
-
}
|
|
182
|
-
}, [
|
|
183
|
-
autocompleteResults,
|
|
184
|
-
focusedIndex,
|
|
185
|
-
handleAutocompleteSelect,
|
|
186
|
-
handleSubmitSearch
|
|
187
|
-
]);
|
|
188
|
-
const handleSearchInputChange = (newValue) => {
|
|
189
|
-
if (newValue.length === 1) trackEvent({
|
|
190
|
-
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchInputStarted,
|
|
191
|
-
eventProps: { searchOrigin: require_models.SpiffyWidgets.SearchResults }
|
|
192
|
-
});
|
|
193
|
-
setSearchText(newValue);
|
|
194
|
-
setIsDirty(true);
|
|
195
|
-
};
|
|
393
|
+
scrollToTop();
|
|
394
|
+
}, [removeFilter, scrollToTop]);
|
|
196
395
|
const handleSelectFilterItem = (0, react.useCallback)(({ filterId, filterItemId, isSelected, displayName }) => {
|
|
197
396
|
if (filterId === "sort") {
|
|
198
397
|
const newSort = filterItemId;
|
|
@@ -204,8 +403,11 @@ const useSearch = () => {
|
|
|
204
403
|
}
|
|
205
404
|
});
|
|
206
405
|
setProductSorting(newSort);
|
|
207
|
-
|
|
208
|
-
else {
|
|
406
|
+
scrollToTop();
|
|
407
|
+
} else if (!isSelected) {
|
|
408
|
+
removeFilter(`${filterId}:${filterItemId}`);
|
|
409
|
+
scrollToTop();
|
|
410
|
+
} else {
|
|
209
411
|
trackEvent({
|
|
210
412
|
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchFilterClicked,
|
|
211
413
|
eventProps: {
|
|
@@ -216,78 +418,44 @@ const useSearch = () => {
|
|
|
216
418
|
}
|
|
217
419
|
});
|
|
218
420
|
addFilter(require_search.createFilterOption(filterId, filterItemId, displayName));
|
|
421
|
+
scrollToTop();
|
|
219
422
|
}
|
|
220
423
|
}, [
|
|
221
424
|
addFilter,
|
|
222
425
|
removeFilter,
|
|
223
426
|
setProductSorting,
|
|
224
427
|
searchText,
|
|
225
|
-
|
|
428
|
+
scrollToTop
|
|
226
429
|
]);
|
|
227
430
|
const handleClearAllFilters = (0, react.useCallback)(() => {
|
|
228
431
|
setProductSorting(require_types$1.ProductSorting.FEATURED);
|
|
229
432
|
clearFilters();
|
|
230
|
-
|
|
433
|
+
scrollToTop();
|
|
434
|
+
}, [
|
|
435
|
+
setProductSorting,
|
|
436
|
+
clearFilters,
|
|
437
|
+
scrollToTop
|
|
438
|
+
]);
|
|
231
439
|
require_TrackComponentVisibleEvent.useTrackComponentVisibleEvent(require_models.SpiffyWidgets.SearchResults, searchResultsRef, {}, require_amplitudeContext.SpiffyMetricsEventName.SearchComponentVisible);
|
|
232
440
|
(0, react.useEffect)(() => {
|
|
233
|
-
if (searchResultsState === require_utils.SearchResultsState.
|
|
441
|
+
if (searchResultsState === require_utils.SearchResultsState.Results || searchResultsState === require_utils.SearchResultsState.NoResults) trackEvent({
|
|
234
442
|
eventName: require_amplitudeContext.SpiffyMetricsEventName.SearchResultsViewed,
|
|
235
443
|
eventProps: {
|
|
236
444
|
queryText: searchText,
|
|
237
445
|
resultsCount: productList.length
|
|
238
446
|
}
|
|
239
447
|
});
|
|
240
|
-
}, [
|
|
241
|
-
productList.length,
|
|
242
|
-
searchResultsState,
|
|
243
|
-
trackEvent
|
|
244
|
-
]);
|
|
245
|
-
(0, react.useEffect)(() => {
|
|
246
|
-
if (query && query !== searchText) setSearchText(query);
|
|
247
|
-
}, [query]);
|
|
448
|
+
}, [productList.length, searchResultsState]);
|
|
248
449
|
(0, react.useEffect)(() => {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
setSearchText(
|
|
252
|
-
performSearch({ query: esq });
|
|
450
|
+
if (query && query !== searchText) {
|
|
451
|
+
const esq = new URLSearchParams(window.location.search).get("esq");
|
|
452
|
+
setSearchText(query);
|
|
453
|
+
performSearch({ query: esq ?? query });
|
|
253
454
|
}
|
|
254
|
-
}, [performSearch]);
|
|
255
|
-
const fetchAutocompleteSuggestions = (_query) => {
|
|
256
|
-
return Promise.resolve([]);
|
|
257
|
-
};
|
|
258
|
-
(0, react.useEffect)(() => {
|
|
259
|
-
if (fetchAutocompleteSuggestions === void 0) return;
|
|
260
|
-
if (!isDirty || debouncedSearchText.length <= 2) {
|
|
261
|
-
setAutocompleteState({
|
|
262
|
-
results: [],
|
|
263
|
-
isLoading: false
|
|
264
|
-
});
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
setAutocompleteState((prev) => ({
|
|
268
|
-
...prev,
|
|
269
|
-
isLoading: true
|
|
270
|
-
}));
|
|
271
|
-
const fetchData = async () => {
|
|
272
|
-
try {
|
|
273
|
-
const results = await fetchAutocompleteSuggestions?.(debouncedSearchText);
|
|
274
|
-
setAutocompleteState({
|
|
275
|
-
results: results ?? [],
|
|
276
|
-
isLoading: false
|
|
277
|
-
});
|
|
278
|
-
} catch (error) {
|
|
279
|
-
require_logger.logger_default.logError("Failed to fetch autocomplete suggestions:", error);
|
|
280
|
-
setAutocompleteState({
|
|
281
|
-
results: [],
|
|
282
|
-
isLoading: false
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
fetchData();
|
|
287
455
|
}, [
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
456
|
+
performSearch,
|
|
457
|
+
query,
|
|
458
|
+
setSearchText
|
|
291
459
|
]);
|
|
292
460
|
return {
|
|
293
461
|
searchData,
|
|
@@ -295,16 +463,17 @@ const useSearch = () => {
|
|
|
295
463
|
merchantShortName: safeMerchantShortName,
|
|
296
464
|
productCardConfig: safeProductCardConfig,
|
|
297
465
|
productList,
|
|
466
|
+
recommendedProducts,
|
|
298
467
|
autocompleteResults,
|
|
299
468
|
searchFilters: filters,
|
|
300
469
|
availableDynamicFilters,
|
|
301
470
|
selectedFilterOptions,
|
|
302
471
|
searchText,
|
|
472
|
+
query: query || "",
|
|
303
473
|
searchResultsState,
|
|
304
|
-
isLoadingAutocomplete,
|
|
305
474
|
isLoadingSearch,
|
|
306
475
|
isFilterOpen,
|
|
307
|
-
|
|
476
|
+
shouldShowAutocomplete,
|
|
308
477
|
focusedIndex,
|
|
309
478
|
focusedOptionId,
|
|
310
479
|
filterButtonText,
|
|
@@ -312,6 +481,8 @@ const useSearch = () => {
|
|
|
312
481
|
onSubmitSearch: handleSubmitSearch,
|
|
313
482
|
onAutocompleteSelect: handleAutocompleteSelect,
|
|
314
483
|
onKeyDown: handleKeyDown,
|
|
484
|
+
onSearchInputFocus: handleSearchInputFocus,
|
|
485
|
+
onSearchInputBlur: handleSearchInputBlur,
|
|
315
486
|
onToggleDynamicFilter: handleToggleDynamicFilter,
|
|
316
487
|
onSelectFilterItem: handleSelectFilterItem,
|
|
317
488
|
onRemoveFilter: handleRemoveFilter,
|
|
@@ -323,4 +494,4 @@ const useSearch = () => {
|
|
|
323
494
|
|
|
324
495
|
//#endregion
|
|
325
496
|
exports.useSearch = useSearch;
|
|
326
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsidXNlTmV3T3JnQ29uZmlnIiwib3JnU2hvcnROYW1lQXRvbSIsInNlYXJjaEF0b20iLCJmaWx0ZXJlZFNlYXJjaFByb2R1Y3RzQXRvbSIsInBlcmZvcm1TZWFyY2hBdG9tIiwiYXV0b2NvbXBsZXRlU3RhdGVBdG9tIiwic2VhcmNoUGFyYW1zQXRvbSIsImlzRmlsdGVyT3BlbkF0b20iLCJzZWFyY2hTZWxlY3RlZEZpbHRlcnNBdG9tIiwiYWRkU2VhcmNoRmlsdGVyQXRvbSIsInJlbW92ZVNlYXJjaEZpbHRlckF0b20iLCJzZWFyY2hQcm9kdWN0U29ydGluZ0F0b20iLCJjbGVhclNlYXJjaEZpbHRlcnNBdG9tIiwic2VhcmNoRmlsdGVyc0F0b20iLCJ1c2VEZWJvdW5jZSIsImdldFNlYXJjaFJlc3VsdHNTdGF0ZSIsImZvcm1hdEZpbHRlckRpc3BsYXlOYW1lIiwiUHJvZHVjdFNvcnRpbmciLCJ1c2VBbXBsaXR1ZGUiLCJTcGlmZnlNZXRyaWNzRXZlbnROYW1lIiwiY3JlYXRlRmlsdGVyT3B0aW9uIiwiU3BpZmZ5V2lkZ2V0cyIsImhhbmRsZVNlbGVjdEZpbHRlckl0ZW06IFNlbGVjdEZpbHRlckl0ZW0iLCJTZWFyY2hSZXN1bHRzU3RhdGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvU2VhcmNoL3VzZVNlYXJjaC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQXRvbSwgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gXCJzcmMvaG9va3MvRGVib3VuY2UvdXNlRGVib3VuY2VcIjtcbmltcG9ydCB7XG4gIGFkZFNlYXJjaEZpbHRlckF0b20sXG4gIGNsZWFyU2VhcmNoRmlsdGVyc0F0b20sXG4gIGNyZWF0ZUZpbHRlck9wdGlvbixcbiAgZmlsdGVyZWRTZWFyY2hQcm9kdWN0c0F0b20sXG4gIHBlcmZvcm1TZWFyY2hBdG9tLFxuICByZW1vdmVTZWFyY2hGaWx0ZXJBdG9tLFxuICBzZWFyY2hBdG9tLFxuICBzZWFyY2hGaWx0ZXJzQXRvbSxcbiAgc2VhcmNoUGFyYW1zQXRvbSxcbiAgc2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tLFxuICBzZWFyY2hTZWxlY3RlZEZpbHRlcnNBdG9tLFxuICBTZWxlY3RlZEZpbHRlck9wdGlvbixcbn0gZnJvbSBcInNyYy9hdG9tcy9zZWFyY2hcIjtcbmltcG9ydCB7XG4gIGF1dG9jb21wbGV0ZVN0YXRlQXRvbSxcbiAgaXNGaWx0ZXJPcGVuQXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9nbG9iYWxTZWFyY2gvZ2xvYmFsU2VhcmNoXCI7XG5pbXBvcnQgeyBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3V0aWxzXCI7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGluZyB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3R5cGVzXCI7XG5pbXBvcnQge1xuICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICB1c2VBbXBsaXR1ZGUsXG59IGZyb20gXCJzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBTcGlmZnlXaWRnZXRzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3BpZmZ5V2lkZ2V0c1wiO1xuaW1wb3J0IHsgUHJvZHVjdENhcmRDb25maWcgfSBmcm9tIFwic3JjL2NvbnRleHRzL3R5cGVzXCI7XG5pbXBvcnQgTG9nZ2VyIGZyb20gXCJzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXJcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9zZWFyY2hcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3BvbnNlUHJvZHVjdCB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7XG4gIFNlYXJjaEZpbHRlckRhdHVtLFxuICBTZWxlY3RGaWx0ZXJJdGVtLFxufSBmcm9tIFwic3JjL3R5cGVzL3NlYXJjaC1maWx0ZXItdHlwZXNcIjtcbmltcG9ydCB7IGdldFNlYXJjaFJlc3VsdHNTdGF0ZSwgU2VhcmNoUmVzdWx0c1N0YXRlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBvcmdTaG9ydE5hbWVBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnXCI7XG5pbXBvcnQgeyB1c2VOZXdPcmdDb25maWcgfSBmcm9tIFwiLi4vTmV3T3JnQ29uZmlnXCI7XG5pbXBvcnQgeyB1c2VUcmFja0NvbXBvbmVudFZpc2libGVFdmVudCB9IGZyb20gXCIuLi9UcmFja0NvbXBvbmVudFZpc2libGVFdmVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdHNIb2NQcm9wcyB7XG4gIC8vIERhdGFcbiAgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbDtcbiAgc2VhcmNoUmVzcG9uc2VJZDogc3RyaW5nO1xuICBtZXJjaGFudFNob3J0TmFtZTogc3RyaW5nO1xuICBwcm9kdWN0Q2FyZENvbmZpZzogUHJvZHVjdENhcmRDb25maWc7XG4gIHByb2R1Y3RMaXN0OiBTZWFyY2hSZXNwb25zZVByb2R1Y3RbXTtcbiAgYXV0b2NvbXBsZXRlUmVzdWx0czogc3RyaW5nW107XG4gIHNlYXJjaEZpbHRlcnM6IFNlYXJjaEZpbHRlckRhdHVtW107XG4gIGF2YWlsYWJsZUR5bmFtaWNGaWx0ZXJzOiB7IG5hbWU6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9W107XG4gIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXTtcblxuICAvLyBTdGF0ZVxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHNlYXJjaFJlc3VsdHNTdGF0ZTogU2VhcmNoUmVzdWx0c1N0YXRlO1xuICBpc0xvYWRpbmdBdXRvY29tcGxldGU6IGJvb2xlYW47XG4gIGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbjtcbiAgaXNGaWx0ZXJPcGVuOiBib29sZWFuO1xuICBpc0RpcnR5OiBib29sZWFuO1xuICBmb2N1c2VkSW5kZXg6IG51bWJlcjtcbiAgZm9jdXNlZE9wdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gVUlcbiAgZmlsdGVyQnV0dG9uVGV4dDogc3RyaW5nO1xuXG4gIC8vIEV2ZW50IEhhbmRsZXJzXG4gIG9uU2VhcmNoSW5wdXRDaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvblN1Ym1pdFNlYXJjaDogKCkgPT4gdm9pZDtcbiAgb25BdXRvY29tcGxldGVTZWxlY3Q6IChzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBvblRvZ2dsZUR5bmFtaWNGaWx0ZXI6ICh7XG4gICAgZmlsdGVyLFxuICAgIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZSxcbiAgfToge1xuICAgIGZpbHRlcjogc3RyaW5nO1xuICAgIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZTogc3RyaW5nO1xuICB9KSA9PiB2b2lkO1xuICBvblNlbGVjdEZpbHRlckl0ZW06IFNlbGVjdEZpbHRlckl0ZW07XG4gIG9uUmVtb3ZlRmlsdGVyOiAoZmlsdGVyOiBTZWxlY3RlZEZpbHRlck9wdGlvbikgPT4gdm9pZDtcbiAgb25DbGVhckFsbEZpbHRlcnM6ICgpID0+IHZvaWQ7XG4gIHNldElzRmlsdGVyT3BlbjogKGlzRmlsdGVyT3BlbjogYm9vbGVhbikgPT4gdm9pZDtcblxuICAvLyBSZWZzXG4gIHNlYXJjaFJlc3VsdHNSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG59XG5cbmV4cG9ydCBjb25zdCB1c2VTZWFyY2ggPSAoKTogU2VhcmNoUmVzdWx0c0hvY1Byb3BzID0+IHtcbiAgLy8gQXRvbXNcbiAgY29uc3QgY29uZmlnID0gdXNlTmV3T3JnQ29uZmlnKCk7XG4gIGNvbnN0IG9yZ1Nob3J0TmFtZSA9IHVzZUF0b21WYWx1ZShvcmdTaG9ydE5hbWVBdG9tKTtcbiAgY29uc3QgeyBkYXRhOiBzZWFyY2hEYXRhLCBsb2FkaW5nOiBpc0xvYWRpbmdTZWFyY2ggfSA9XG4gICAgdXNlQXRvbVZhbHVlKHNlYXJjaEF0b20pO1xuICBjb25zdCBwcm9kdWN0TGlzdCA9IHVzZUF0b21WYWx1ZShmaWx0ZXJlZFNlYXJjaFByb2R1Y3RzQXRvbSk7XG4gIGNvbnN0IHBlcmZvcm1TZWFyY2ggPSB1c2VTZXRBdG9tKHBlcmZvcm1TZWFyY2hBdG9tKTtcbiAgY29uc3QgW1xuICAgIHsgcmVzdWx0czogYXV0b2NvbXBsZXRlUmVzdWx0cywgaXNMb2FkaW5nOiBpc0xvYWRpbmdBdXRvY29tcGxldGUgfSxcbiAgICBzZXRBdXRvY29tcGxldGVTdGF0ZSxcbiAgXSA9IHVzZUF0b20oYXV0b2NvbXBsZXRlU3RhdGVBdG9tKTtcbiAgY29uc3QgW3sgcXVlcnkgfV0gPSB1c2VBdG9tKHNlYXJjaFBhcmFtc0F0b20pO1xuICBjb25zdCBbaXNGaWx0ZXJPcGVuLCBzZXRJc0ZpbHRlck9wZW5dID0gdXNlQXRvbShpc0ZpbHRlck9wZW5BdG9tKTtcbiAgY29uc3QgW3NlbGVjdGVkRmlsdGVyT3B0aW9uc10gPSB1c2VBdG9tKHNlYXJjaFNlbGVjdGVkRmlsdGVyc0F0b20pO1xuICBjb25zdCBhZGRGaWx0ZXIgPSB1c2VTZXRBdG9tKGFkZFNlYXJjaEZpbHRlckF0b20pO1xuICBjb25zdCByZW1vdmVGaWx0ZXIgPSB1c2VTZXRBdG9tKHJlbW92ZVNlYXJjaEZpbHRlckF0b20pO1xuICBjb25zdCBbcHJvZHVjdFNvcnRpbmcsIHNldFByb2R1Y3RTb3J0aW5nXSA9IHVzZUF0b20oc2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tKTtcbiAgY29uc3QgY2xlYXJGaWx0ZXJzID0gdXNlU2V0QXRvbShjbGVhclNlYXJjaEZpbHRlcnNBdG9tKTtcbiAgY29uc3Qgc2VhcmNoRmlsdGVycyA9IHVzZUF0b21WYWx1ZShzZWFyY2hGaWx0ZXJzQXRvbSk7XG5cbiAgLy8gU3RhdGVcbiAgY29uc3QgW2lzRGlydHksIHNldElzRGlydHldID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtmb2N1c2VkSW5kZXgsIHNldEZvY3VzZWRJbmRleF0gPSB1c2VTdGF0ZSgtMSk7XG4gIGNvbnN0IFtmb2N1c2VkT3B0aW9uSWQsIHNldEZvY3VzZWRPcHRpb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbc2VhcmNoVGV4dCwgc2V0U2VhcmNoVGV4dF0gPSB1c2VTdGF0ZShxdWVyeSB8fCBcIlwiKTtcblxuICAvLyBSZWZzXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIC8vIERlcml2ZWQgU3RhdGVcbiAgY29uc3QgZGVib3VuY2VkU2VhcmNoVGV4dCA9IHVzZURlYm91bmNlKHNlYXJjaFRleHQsIDIwMCk7XG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNTdGF0ZSA9IGdldFNlYXJjaFJlc3VsdHNTdGF0ZShpc0xvYWRpbmdTZWFyY2gsIHNlYXJjaERhdGEpO1xuXG4gIGNvbnN0IGR5bmFtaWNGaWx0ZXJzID0gc2VhcmNoRGF0YT8uZmlsdGVycyB8fCBbXTtcblxuICAvLyBQcm92aWRlIGZhbGxiYWNrIHZhbHVlcyB3aGVuIG9yZ1VJQ29uZmlnIGlzIG5vdCB5ZXQgYXZhaWxhYmxlXG4gIGNvbnN0IHNhZmVQcm9kdWN0Q2FyZENvbmZpZyA9IGNvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlnc1xuICAgID8ucHJvZHVjdENhcmRDb25maWcgfHwge1xuICAgIHZhcmlhbnQ6IFwibWluaW1hbFwiLFxuICAgIGhvdmVyVmFyaWFudDogXCJub25lXCIsXG4gICAgbGF5b3V0VmFyaWFudDogXCJzcXVhcmVcIixcbiAgfTtcbiAgY29uc3Qgc2FmZU1lcmNoYW50U2hvcnROYW1lID0gb3JnU2hvcnROYW1lIHx8IFwiXCI7XG5cbiAgY29uc3QgYXZhaWxhYmxlRHluYW1pY0ZpbHRlcnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZHluYW1pY0ZpbHRlcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChkeW5hbWljRmlsdGVyTmFtZSkgPT5cbiAgICAgICAgICAhc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGBkeW5hbWljOiR7ZHluYW1pY0ZpbHRlck5hbWV9YFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICAgIC5tYXAoKGR5bmFtaWNGaWx0ZXJOYW1lKSA9PiAoe1xuICAgICAgICBuYW1lOiBkeW5hbWljRmlsdGVyTmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWU6IGZvcm1hdEZpbHRlckRpc3BsYXlOYW1lKGR5bmFtaWNGaWx0ZXJOYW1lKSxcbiAgICAgIH0pKTtcbiAgfSwgW2R5bmFtaWNGaWx0ZXJzLCBzZWxlY3RlZEZpbHRlck9wdGlvbnNdKTtcblxuICBjb25zdCBmaWx0ZXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc29ydE9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGZpbHRlckl0ZW1JZDogU3RyaW5nKFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVEKSxcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiUmVsZXZhbmNlXCIsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVELFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsdGVySXRlbUlkOiBTdHJpbmcoUHJvZHVjdFNvcnRpbmcuUFJJQ0VfQVNDKSxcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiUHJpY2U6IExvdyB0byBIaWdoXCIsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLlBSSUNFX0FTQyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpbHRlckl0ZW1JZDogU3RyaW5nKFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0MpLFxuICAgICAgICBkaXNwbGF5TmFtZTogXCJQcmljZTogSGlnaCB0byBMb3dcIixcbiAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICBpc1NlbGVjdGVkOiBwcm9kdWN0U29ydGluZyA9PT0gUHJvZHVjdFNvcnRpbmcuUFJJQ0VfREVTQyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHJldHVybiBbXG4gICAgICB7IGZpbHRlcklkOiBcInNvcnRcIiwgZGlzcGxheU5hbWU6IFwiU09SVFwiLCBpdGVtczogc29ydE9wdGlvbnMgfSxcbiAgICAgIC4uLnNlYXJjaEZpbHRlcnMsXG4gICAgXSBhcyBTZWFyY2hGaWx0ZXJEYXR1bVtdO1xuICB9LCBbcHJvZHVjdFNvcnRpbmcsIHNlYXJjaEZpbHRlcnNdKTtcblxuICBjb25zdCBmaWx0ZXJCdXR0b25UZXh0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IGZpbHRlcnMucmVkdWNlKChhY2M6IG51bWJlciwgZmlsdGVyKSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmZpbHRlcklkID09PSBcInNvcnRcIikge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYyArIGZpbHRlci5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubGVuZ3RoO1xuICAgIH0sIDApO1xuICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJGaWx0ZXIgJiBTb3J0XCI7XG4gICAgfVxuICAgIHJldHVybiBgRmlsdGVyICYgU29ydCAoJHtzZWxlY3RlZENvdW50fSlgO1xuICB9LCBbZmlsdGVyc10pO1xuXG4gIC8vIENhbGxiYWNrc1xuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUR5bmFtaWNGaWx0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgZmlsdGVyLFxuICAgICAgZHluYW1pY0ZpbHRlckRpc3BsYXlOYW1lLFxuICAgIH06IHtcbiAgICAgIGZpbHRlcjogc3RyaW5nO1xuICAgICAgZHluYW1pY0ZpbHRlckRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hGaWx0ZXJDbGlja2VkLFxuICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgZmlsdGVyVHlwZTogXCJEeW5hbWljXCIsXG4gICAgICAgICAgZmlsdGVyVmFsdWU6IGZpbHRlcixcbiAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFkZEZpbHRlcihcbiAgICAgICAgY3JlYXRlRmlsdGVyT3B0aW9uKFwiZHluYW1pY1wiLCBmaWx0ZXIsIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkRmlsdGVyLCBzZWFyY2hUZXh0LCB0cmFja0V2ZW50XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVJlbW92ZUZpbHRlciA9IHVzZUNhbGxiYWNrKFxuICAgIChmaWx0ZXI6IFNlbGVjdGVkRmlsdGVyT3B0aW9uKSA9PiB7XG4gICAgICByZW1vdmVGaWx0ZXIoZmlsdGVyLmlkKTtcbiAgICB9LFxuICAgIFtyZW1vdmVGaWx0ZXJdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0U2VhcmNoID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSkge1xuICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hRdWVyeVN1Ym1pdHRlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHNlYXJjaE9yaWdpbjogU3BpZmZ5V2lkZ2V0cy5TZWFyY2hSZXN1bHRzLFxuICAgICAgICAgIHF1ZXJ5VGV4dDogc2VhcmNoVGV4dC50cmltKCksXG4gICAgICAgIH0sXG4gICAgICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgc2VhcmNoVGV4dC50cmltKCkpO1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuICAgICAgcGVyZm9ybVNlYXJjaCh7IHF1ZXJ5OiBzZWFyY2hUZXh0LnRyaW0oKSB9KTtcbiAgICB9XG4gIH0sIFtwZXJmb3JtU2VhcmNoLCBzZWFyY2hUZXh0LCB0cmFja0V2ZW50XSk7XG5cbiAgY29uc3QgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoVGV4dChzdWdnZXN0aW9uKTtcbiAgICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCgpO1xuICAgIH0sXG4gICAgW2hhbmRsZVN1Ym1pdFNlYXJjaCwgc2V0U2VhcmNoVGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gKGZvY3VzZWRJbmRleCArIDEpICUgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGg7XG4gICAgICAgIHNldEZvY3VzZWRJbmRleChuZXdJbmRleCk7XG4gICAgICAgIHNldEZvY3VzZWRPcHRpb25JZChgb3B0aW9uLSR7bmV3SW5kZXh9YCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPVxuICAgICAgICAgIChmb2N1c2VkSW5kZXggLSAxICsgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGgpICVcbiAgICAgICAgICBhdXRvY29tcGxldGVSZXN1bHRzLmxlbmd0aDtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KG5ld0luZGV4KTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKGBvcHRpb24tJHtuZXdJbmRleH1gKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvblRleHQgPSBhdXRvY29tcGxldGVSZXN1bHRzW2ZvY3VzZWRJbmRleF07XG4gICAgICAgICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0KHN1Z2dlc3Rpb25UZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgICAgZm9jdXNlZEluZGV4LFxuICAgICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgICAgaGFuZGxlU3VibWl0U2VhcmNoLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dENoYW5nZSA9IChuZXdWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hJbnB1dFN0YXJ0ZWQsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICBzZWFyY2hPcmlnaW46IFNwaWZmeVdpZGdldHMuU2VhcmNoUmVzdWx0cyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRTZWFyY2hUZXh0KG5ld1ZhbHVlKTtcbiAgICBzZXRJc0RpcnR5KHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEZpbHRlckl0ZW06IFNlbGVjdEZpbHRlckl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgZmlsdGVySWQsXG4gICAgICBmaWx0ZXJJdGVtSWQsXG4gICAgICBpc1NlbGVjdGVkLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgfToge1xuICAgICAgZmlsdGVySWQ6IHN0cmluZztcbiAgICAgIGZpbHRlckl0ZW1JZDogc3RyaW5nO1xuICAgICAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKGZpbHRlcklkID09PSBcInNvcnRcIikge1xuICAgICAgICBjb25zdCBuZXdTb3J0ID0gZmlsdGVySXRlbUlkIGFzIFByb2R1Y3RTb3J0aW5nO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoU29ydENsaWNrZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgc29ydFR5cGU6IG5ld1NvcnQsXG4gICAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFByb2R1Y3RTb3J0aW5nKG5ld1NvcnQpO1xuICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgICByZW1vdmVGaWx0ZXIoYCR7ZmlsdGVySWR9OiR7ZmlsdGVySXRlbUlkfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaEZpbHRlckNsaWNrZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgZmlsdGVyVHlwZTogXCJTdGF0aWNcIixcbiAgICAgICAgICAgIGZpbHRlckNhdGVnb3J5OiBmaWx0ZXJJZCxcbiAgICAgICAgICAgIGZpbHRlclZhbHVlOiBmaWx0ZXJJdGVtSWQsXG4gICAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGFkZEZpbHRlcihjcmVhdGVGaWx0ZXJPcHRpb24oZmlsdGVySWQsIGZpbHRlckl0ZW1JZCwgZGlzcGxheU5hbWUpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRGaWx0ZXIsIHJlbW92ZUZpbHRlciwgc2V0UHJvZHVjdFNvcnRpbmcsIHNlYXJjaFRleHQsIHRyYWNrRXZlbnRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXJBbGxGaWx0ZXJzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFByb2R1Y3RTb3J0aW5nKFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVEKTtcbiAgICBjbGVhckZpbHRlcnMoKTtcbiAgfSwgW3NldFByb2R1Y3RTb3J0aW5nLCBjbGVhckZpbHRlcnNdKTtcblxuICAvLyBTaWRlIEVmZmVjdHNcbiAgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQoXG4gICAgU3BpZmZ5V2lkZ2V0cy5TZWFyY2hSZXN1bHRzLFxuICAgIHNlYXJjaFJlc3VsdHNSZWYsXG4gICAge30sXG4gICAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hDb21wb25lbnRWaXNpYmxlXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VhcmNoUmVzdWx0c1N0YXRlID09PSBTZWFyY2hSZXN1bHRzU3RhdGUuTm9SZXN1bHRzIHx8IHNlYXJjaFJlc3VsdHNTdGF0ZSA9PT0gU2VhcmNoUmVzdWx0c1N0YXRlLlJlc3VsdHMpIHtcbiAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoUmVzdWx0c1ZpZXdlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHF1ZXJ5VGV4dDogc2VhcmNoVGV4dCxcbiAgICAgICAgICByZXN1bHRzQ291bnQ6IHByb2R1Y3RMaXN0Lmxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3Byb2R1Y3RMaXN0Lmxlbmd0aCwgc2VhcmNoUmVzdWx0c1N0YXRlLCB0cmFja0V2ZW50XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocXVlcnkgJiYgcXVlcnkgIT09IHNlYXJjaFRleHQpIHtcbiAgICAgIHNldFNlYXJjaFRleHQocXVlcnkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtxdWVyeV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZXNxID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoXCJlc3FcIik7XG4gICAgaWYgKGVzcSkge1xuICAgICAgc2V0U2VhcmNoVGV4dChlc3EpO1xuICAgICAgcGVyZm9ybVNlYXJjaCh7IHF1ZXJ5OiBlc3EgfSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3BlcmZvcm1TZWFyY2hdKTtcblxuICBjb25zdCBmZXRjaEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zID0gKF9xdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZldGNoQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaXNEaXJ0eSB8fCBkZWJvdW5jZWRTZWFyY2hUZXh0Lmxlbmd0aCA8PSAyKSB7XG4gICAgICBzZXRBdXRvY29tcGxldGVTdGF0ZSh7IHJlc3VsdHM6IFtdLCBpc0xvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldEF1dG9jb21wbGV0ZVN0YXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBpc0xvYWRpbmc6IHRydWUgfSkpO1xuXG4gICAgY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGZldGNoQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnM/LihcbiAgICAgICAgICBkZWJvdW5jZWRTZWFyY2hUZXh0XG4gICAgICAgICk7XG4gICAgICAgIHNldEF1dG9jb21wbGV0ZVN0YXRlKHsgcmVzdWx0czogcmVzdWx0cyA/PyBbXSwgaXNMb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnM6XCIsIGVycm9yKTtcbiAgICAgICAgc2V0QXV0b2NvbXBsZXRlU3RhdGUoeyByZXN1bHRzOiBbXSwgaXNMb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZmV0Y2hEYXRhKCk7XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hUZXh0LCBpc0RpcnR5LCBzZXRBdXRvY29tcGxldGVTdGF0ZV0pO1xuXG4gIHJldHVybiB7XG4gICAgc2VhcmNoRGF0YSxcbiAgICBzZWFyY2hSZXNwb25zZUlkOiBzZWFyY2hEYXRhPy5zZWFyY2hSZXNwb25zZUlkID8/IFwiXCIsXG4gICAgbWVyY2hhbnRTaG9ydE5hbWU6IHNhZmVNZXJjaGFudFNob3J0TmFtZSxcbiAgICBwcm9kdWN0Q2FyZENvbmZpZzogc2FmZVByb2R1Y3RDYXJkQ29uZmlnLFxuICAgIHByb2R1Y3RMaXN0LFxuICAgIGF1dG9jb21wbGV0ZVJlc3VsdHMsXG4gICAgc2VhcmNoRmlsdGVyczogZmlsdGVycyxcbiAgICBhdmFpbGFibGVEeW5hbWljRmlsdGVycyxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMsXG4gICAgc2VhcmNoVGV4dCxcbiAgICBzZWFyY2hSZXN1bHRzU3RhdGUsXG4gICAgaXNMb2FkaW5nQXV0b2NvbXBsZXRlLFxuICAgIGlzTG9hZGluZ1NlYXJjaCxcbiAgICBpc0ZpbHRlck9wZW4sXG4gICAgaXNEaXJ0eSxcbiAgICBmb2N1c2VkSW5kZXgsXG4gICAgZm9jdXNlZE9wdGlvbklkLFxuICAgIGZpbHRlckJ1dHRvblRleHQsXG4gICAgb25TZWFyY2hJbnB1dENoYW5nZTogaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UsXG4gICAgb25TdWJtaXRTZWFyY2g6IGhhbmRsZVN1Ym1pdFNlYXJjaCxcbiAgICBvbkF1dG9jb21wbGV0ZVNlbGVjdDogaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvblRvZ2dsZUR5bmFtaWNGaWx0ZXI6IGhhbmRsZVRvZ2dsZUR5bmFtaWNGaWx0ZXIsXG4gICAgb25TZWxlY3RGaWx0ZXJJdGVtOiBoYW5kbGVTZWxlY3RGaWx0ZXJJdGVtLFxuICAgIG9uUmVtb3ZlRmlsdGVyOiBoYW5kbGVSZW1vdmVGaWx0ZXIsXG4gICAgb25DbGVhckFsbEZpbHRlcnM6IGhhbmRsZUNsZWFyQWxsRmlsdGVycyxcbiAgICBzZXRJc0ZpbHRlck9wZW4sXG4gICAgc2VhcmNoUmVzdWx0c1JlZixcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVGQSxNQUFhLGtCQUF5QztDQUVwRCxNQUFNLFNBQVNBLHNDQUFpQjtDQUNoQyxNQUFNLHVDQUE0QkMsc0NBQWlCO0NBQ25ELE1BQU0sRUFBRSxNQUFNLFlBQVksU0FBUyw0Q0FDcEJDLDBCQUFXO0NBQzFCLE1BQU0sc0NBQTJCQywwQ0FBMkI7Q0FDNUQsTUFBTSxzQ0FBMkJDLGlDQUFrQjtDQUNuRCxNQUFNLENBQ0osRUFBRSxTQUFTLHFCQUFxQixXQUFXLHlCQUMzQywyQ0FDVUMsMkNBQXNCO0NBQ2xDLE1BQU0sQ0FBQyxFQUFFLDhCQUFtQkMsZ0NBQWlCO0NBQzdDLE1BQU0sQ0FBQyxjQUFjLHNDQUEyQkMsc0NBQWlCO0NBQ2pFLE1BQU0sQ0FBQyw0Q0FBaUNDLHlDQUEwQjtDQUNsRSxNQUFNLGtDQUF1QkMsbUNBQW9CO0NBQ2pELE1BQU0scUNBQTBCQyxzQ0FBdUI7Q0FDdkQsTUFBTSxDQUFDLGdCQUFnQix3Q0FBNkJDLHdDQUF5QjtDQUM3RSxNQUFNLHFDQUEwQkMsc0NB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
|
|
497
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiYW1wbGl0dWRlVHJhY2tFdmVudEF0b20iLCJhdXRvY29tcGxldGVTdGF0ZUF0b20iLCJGdXNlIiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSIsInByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbjpcbiAgfCAoKHBhcmFtczogUHJvZHVjdFJldHJpZXZhbFBhcmFtcykgPT4gUHJvbWlzZTxQcm9kdWN0UmV0cmlldmFsUmVzdWx0PilcbiAgfCBudWxsIiwiZXJyb3I6IHVua25vd24iLCJ1c2VGZWF0dXJlRmxhZ1NlcnZpY2UiLCJGZWF0dXJlR2F0ZXMiLCJ1c2VOZXdPcmdDb25maWciLCJ1c2VOZXdPcmdDb25maWciLCJvcmdTaG9ydE5hbWVBdG9tIiwic2VhcmNoQXRvbSIsImZpbHRlcmVkU2VhcmNoUHJvZHVjdHNBdG9tIiwicGVyZm9ybVNlYXJjaEF0b20iLCJzZWFyY2hQYXJhbXNBdG9tIiwiaXNGaWx0ZXJPcGVuQXRvbSIsInNlYXJjaFNlbGVjdGVkRmlsdGVyc0F0b20iLCJhZGRTZWFyY2hGaWx0ZXJBdG9tIiwicmVtb3ZlU2VhcmNoRmlsdGVyQXRvbSIsInNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSIsImNsZWFyU2VhcmNoRmlsdGVyc0F0b20iLCJzZWFyY2hGaWx0ZXJzQXRvbSIsIlNwaWZmeVdpZGdldHMiLCJnZXRTZWFyY2hSZXN1bHRzU3RhdGUiLCJmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSIsIlByb2R1Y3RTb3J0aW5nIiwidXNlQW1wbGl0dWRlIiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSIsImNyZWF0ZUZpbHRlck9wdGlvbiIsImhhbmRsZVNlbGVjdEZpbHRlckl0ZW06IFNlbGVjdEZpbHRlckl0ZW0iLCJTZWFyY2hSZXN1bHRzU3RhdGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvU2VhcmNoL3VzZVNlYXJjaElucHV0LnRzIiwiLi4vLi4vLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0UmV0cmlldmFsQWRhcHRlci50cyIsIi4uLy4uLy4uL3NyYy9hdG9tcy9zZWFyY2gvcHJvZHVjdFJldHJpZXZhbEFQSS50cyIsIi4uLy4uLy4uL3NyYy9ob29rcy9TZWFyY2gvdXNlUmVjb21tZW5kZWRQcm9kdWN0cy50cyIsIi4uLy4uLy4uL3NyYy9ob29rcy9TZWFyY2gvdXNlU2VhcmNoLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQXRvbVZhbHVlIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQgRnVzZSBmcm9tIFwiZnVzZS5qc1wiO1xuXG5pbXBvcnQgeyBhdXRvY29tcGxldGVTdGF0ZUF0b20gfSBmcm9tIFwic3JjL2F0b21zL2dsb2JhbFNlYXJjaFwiO1xuaW1wb3J0IHsgYW1wbGl0dWRlVHJhY2tFdmVudEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FtcGxpdHVkZS9hbXBsaXR1ZGVUcmFja0V2ZW50QXRvbVwiO1xuaW1wb3J0IHsgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gXCJzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dFwiO1xuaW1wb3J0IHsgU3BpZmZ5V2lkZ2V0cyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwaWZmeVdpZGdldHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VTZWFyY2hJbnB1dFByb3BzIHtcbiAgaW5pdGlhbFNlYXJjaFRleHQ/OiBzdHJpbmc7XG4gIHNlYXJjaE9yaWdpbjogU3BpZmZ5V2lkZ2V0cztcbiAgb25TZWFyY2hTdWJtaXQ/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VTZWFyY2hJbnB1dFJldHVybiB7XG4gIC8vIFN0YXRlXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgaGFzVGV4dDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBmb2N1c2VkSW5kZXg6IG51bWJlcjtcbiAgZm9jdXNlZE9wdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGF1dG9jb21wbGV0ZVJlc3VsdHM6IHN0cmluZ1tdO1xuICBzaG91bGRTaG93QXV0b2NvbXBsZXRlOiBib29sZWFuO1xuICBcbiAgLy8gSGFuZGxlcnNcbiAgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBoYW5kbGVTZWFyY2hJbnB1dEZvY3VzOiAoKSA9PiB2b2lkO1xuICBoYW5kbGVTZWFyY2hJbnB1dEJsdXI6ICgpID0+IHZvaWQ7XG4gIGhhbmRsZUtleURvd246IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0OiAoc3VnZ2VzdGlvbjogc3RyaW5nLCByYW5rUG9zaXRpb24/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGhhbmRsZVN1Ym1pdFNlYXJjaDogKCkgPT4gdm9pZDtcbiAgXG4gIC8vIFV0aWxpdGllc1xuICBzZXRTZWFyY2hUZXh0OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICByZXNldFNlYXJjaDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVNlYXJjaElucHV0ID0gKHtcbiAgaW5pdGlhbFNlYXJjaFRleHQgPSBcIlwiLFxuICBzZWFyY2hPcmlnaW4sXG4gIG9uU2VhcmNoU3VibWl0LFxufTogVXNlU2VhcmNoSW5wdXRQcm9wcyk6IFVzZVNlYXJjaElucHV0UmV0dXJuID0+IHtcbiAgY29uc3QgdHJhY2sgPSB1c2VBdG9tVmFsdWUoYW1wbGl0dWRlVHJhY2tFdmVudEF0b20pO1xuXG4gIC8vIFN0YXRlXG4gIGNvbnN0IFtzZWFyY2hUZXh0LCBzZXRTZWFyY2hUZXh0XSA9IHVzZVN0YXRlKGluaXRpYWxTZWFyY2hUZXh0KTtcbiAgY29uc3QgW2hhc1RleHQsIHNldEhhc1RleHRdID0gdXNlU3RhdGUoaW5pdGlhbFNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApO1xuICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZm9jdXNlZEluZGV4LCBzZXRGb2N1c2VkSW5kZXhdID0gdXNlU3RhdGUoLTEpO1xuICBjb25zdCBbZm9jdXNlZE9wdGlvbklkLCBzZXRGb2N1c2VkT3B0aW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3QgYXV0b2NvbXBsZXRlU3RhdGUgPSB1c2VBdG9tVmFsdWUoYXV0b2NvbXBsZXRlU3RhdGVBdG9tKTtcbiAgY29uc3QgZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cyA9IGF1dG9jb21wbGV0ZVN0YXRlLnJlc3VsdHM7XG4gIGNvbnN0IGlzQXV0b2NvbXBsZXRlRW5hYmxlZCA9IGdsb2JhbEF1dG9jb21wbGV0ZVJlc3VsdHMubGVuZ3RoID4gMDtcblxuICAvLyBSZWZzXG4gIGNvbnN0IGlzU2VsZWN0aW5nQXV0b2NvbXBsZXRlID0gdXNlUmVmKGZhbHNlKTtcblxuICAvLyBDb21wdXRlZFxuICBjb25zdCBzaG91bGRTaG93QXV0b2NvbXBsZXRlID0gaGFzVGV4dCAmJiBpc0ZvY3VzZWQgJiYgaXNBdXRvY29tcGxldGVFbmFibGVkO1xuXG4gIGNvbnN0IGF1dG9jb21wbGV0ZVJlc3VsdHNMaW1pdCA9IDU7XG5cbiAgLy8gQ29uZmlndXJlIEZ1c2UuanMgZm9yIGZ1enp5IHNlYXJjaCB3aXRoIGN1c3RvbSBzY29yaW5nXG4gIGNvbnN0IGZ1c2VPcHRpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAvLyBGdXp6eSBtYXRjaGluZyB0aHJlc2hvbGQgKDAuMCA9IHBlcmZlY3QgbWF0Y2gsIDEuMCA9IG1hdGNoIGFueXRoaW5nKVxuICAgICAgdGhyZXNob2xkOiAwLjMsXG4gICAgICAvLyBMb2NhdGlvbiB3aGVyZSBtYXRjaCBpcyBleHBlY3RlZCAoMCA9IGJlZ2lubmluZylcbiAgICAgIGxvY2F0aW9uOiAwLFxuICAgICAgLy8gRGlzdGFuY2UgZnJvbSBsb2NhdGlvbiB3aGVyZSBtYXRjaCBjYW4gYmUgZm91bmQgLSBzbWFsbGVyIGZvciBwcmVmaXggcHJlZmVyZW5jZVxuICAgICAgZGlzdGFuY2U6IDQsXG4gICAgICAvLyBNaW5pbXVtIGNoYXJhY3RlciBsZW5ndGggYmVmb3JlIGZ1enp5IG1hdGNoaW5nIHN0YXJ0c1xuICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAxLFxuICAgICAgLy8gS2V5cyB0byBzZWFyY2ggKHdlJ3JlIHNlYXJjaGluZyBzdHJpbmdzIGRpcmVjdGx5LCBzbyBubyBrZXlzIG5lZWRlZClcbiAgICAgIGtleXM6IFtdLFxuICAgICAgLy8gVXNlIGV4dGVuZGVkIHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcyBhbmQgcHJlZml4IG1hdGNoaW5nXG4gICAgICB1c2VFeHRlbmRlZFNlYXJjaDogZmFsc2UsXG4gICAgICAvLyBEb24ndCBpZ25vcmUgbG9jYXRpb24gLSB0aGlzIGhlbHBzIHByaW9yaXRpemUgbWF0Y2hlcyBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICBpZ25vcmVMb2NhdGlvbjogZmFsc2UsXG4gICAgfSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBmdXNlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFnbG9iYWxBdXRvY29tcGxldGVSZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBGdXNlKGdsb2JhbEF1dG9jb21wbGV0ZVJlc3VsdHMsIGZ1c2VPcHRpb25zKTtcbiAgfSwgW2dsb2JhbEF1dG9jb21wbGV0ZVJlc3VsdHMsIGZ1c2VPcHRpb25zXSk7XG5cbiAgLy8gQXV0b2NvbXBsZXRlIGZ1enp5IHNlYXJjaCB1c2luZyBGdXNlLmpzXG4gIGNvbnN0IGF1dG9jb21wbGV0ZVJlc3VsdHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWlzQXV0b2NvbXBsZXRlRW5hYmxlZCB8fCAhZnVzZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBmdXNlUmVzdWx0cyA9IGZ1c2Uuc2VhcmNoKHNlYXJjaFRleHQpO1xuXG4gICAgLy8gVXNlIG9ubHkgRnVzZS5qcyBzY29yaW5nIChyZXN1bHRzIGFyZSBhbHJlYWR5IHNvcnRlZCBieSByZWxldmFuY2UpXG4gICAgcmV0dXJuIGZ1c2VSZXN1bHRzXG4gICAgICAuc2xpY2UoMCwgYXV0b2NvbXBsZXRlUmVzdWx0c0xpbWl0KVxuICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSk7XG4gIH0sIFtpc0F1dG9jb21wbGV0ZUVuYWJsZWQsIGZ1c2UsIHNlYXJjaFRleHQsIGF1dG9jb21wbGV0ZVJlc3VsdHNMaW1pdF0pO1xuXG4gIC8vIEhhbmRsZXJzXG4gIGNvbnN0IGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIGlzIGNoYW5naW5nIHRleHQsIHRoZXkgbXVzdCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBpbnB1dFxuICAgICAgLy8gU28gd2UgY2FuIHNhZmVseSBhc3N1bWUgdGhleSdyZSBmb2N1c2VkXG4gICAgICBpZiAobmV3VmFsdWUgIT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgc2V0SXNGb2N1c2VkKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRyYWNrPy4oe1xuICAgICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hJbnB1dFN0YXJ0ZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgc2VhcmNoT3JpZ2luLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2V0U2VhcmNoVGV4dChuZXdWYWx1ZSk7XG4gICAgICBzZXRIYXNUZXh0KG5ld1ZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgICAgIHNldEZvY3VzZWRJbmRleCgtMSk7XG4gICAgICBzZXRGb2N1c2VkT3B0aW9uSWQodW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIFtzZWFyY2hPcmlnaW4sIHNlYXJjaFRleHQsIHRyYWNrXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaElucHV0Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNGb2N1c2VkKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFpc1NlbGVjdGluZ0F1dG9jb21wbGV0ZS5jdXJyZW50KSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSk7XG4gICAgICAgIHNldEZvY3VzZWRJbmRleCgtMSk7XG4gICAgICAgIHNldEZvY3VzZWRPcHRpb25JZCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0sIDE1MCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXRTZWFyY2ggPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkgJiYgb25TZWFyY2hTdWJtaXQpIHtcbiAgICAgIHRyYWNrPy4oe1xuICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoUXVlcnlTdWJtaXR0ZWQsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICBzZWFyY2hPcmlnaW4sXG4gICAgICAgICAgcXVlcnlUZXh0OiBzZWFyY2hUZXh0LnRyaW0oKSxcbiAgICAgICAgfSxcbiAgICAgICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljczogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgb25TZWFyY2hTdWJtaXQoc2VhcmNoVGV4dC50cmltKCkpO1xuICAgIH1cbiAgfSwgW3NlYXJjaFRleHQsIG9uU2VhcmNoU3VibWl0LCBzZWFyY2hPcmlnaW4sIHRyYWNrXSk7XG5cbiAgY29uc3QgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHN1Z2dlc3Rpb246IHN0cmluZywgcmFua1Bvc2l0aW9uPzogbnVtYmVyKSA9PiB7XG4gICAgICBpc1NlbGVjdGluZ0F1dG9jb21wbGV0ZS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHNldFNlYXJjaFRleHQoc3VnZ2VzdGlvbik7XG4gICAgICBzZXRIYXNUZXh0KHN1Z2dlc3Rpb24udHJpbSgpLmxlbmd0aCA+IDApO1xuICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcblxuICAgICAgdHJhY2s/Lih7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hJbnB1dFN0YXJ0ZWQsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICBzZWFyY2hPcmlnaW4sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9uU2VhcmNoU3VibWl0KSB7XG4gICAgICAgIG9uU2VhcmNoU3VibWl0KHN1Z2dlc3Rpb24udHJpbSgpKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlzU2VsZWN0aW5nQXV0b2NvbXBsZXRlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSxcbiAgICBbb25TZWFyY2hTdWJtaXQsIHNlYXJjaE9yaWdpbiwgdHJhY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IChmb2N1c2VkSW5kZXggKyAxKSAlIGF1dG9jb21wbGV0ZVJlc3VsdHMubGVuZ3RoO1xuICAgICAgICBzZXRGb2N1c2VkSW5kZXgobmV3SW5kZXgpO1xuICAgICAgICBzZXRGb2N1c2VkT3B0aW9uSWQoYG9wdGlvbi0ke25ld0luZGV4fWApO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID1cbiAgICAgICAgICAoZm9jdXNlZEluZGV4IC0gMSArIGF1dG9jb21wbGV0ZVJlc3VsdHMubGVuZ3RoKSAlXG4gICAgICAgICAgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGg7XG4gICAgICAgIHNldEZvY3VzZWRJbmRleChuZXdJbmRleCk7XG4gICAgICAgIHNldEZvY3VzZWRPcHRpb25JZChgb3B0aW9uLSR7bmV3SW5kZXh9YCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgIGlmIChmb2N1c2VkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBoYW5kbGVTdWJtaXRTZWFyY2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25UZXh0ID0gYXV0b2NvbXBsZXRlUmVzdWx0c1tmb2N1c2VkSW5kZXhdO1xuICAgICAgICAgIGhhbmRsZUF1dG9jb21wbGV0ZVNlbGVjdChzdWdnZXN0aW9uVGV4dCwgZm9jdXNlZEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgICAgZm9jdXNlZEluZGV4LFxuICAgICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgICAgaGFuZGxlU3VibWl0U2VhcmNoLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBzZXRTZWFyY2hUZXh0VXRpbGl0eSA9IHVzZUNhbGxiYWNrKCh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBzZXRTZWFyY2hUZXh0KHRleHQpO1xuICAgIHNldEhhc1RleHQodGV4dC50cmltKCkubGVuZ3RoID4gMCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCByZXNldFNlYXJjaCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWFyY2hUZXh0KFwiXCIpO1xuICAgIHNldEhhc1RleHQoZmFsc2UpO1xuICAgIHNldElzRm9jdXNlZChmYWxzZSk7XG4gICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICBzZXRGb2N1c2VkT3B0aW9uSWQodW5kZWZpbmVkKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7XG4gICAgLy8gU3RhdGVcbiAgICBzZWFyY2hUZXh0LFxuICAgIGhhc1RleHQsXG4gICAgaXNGb2N1c2VkLFxuICAgIGZvY3VzZWRJbmRleCxcbiAgICBmb2N1c2VkT3B0aW9uSWQsXG4gICAgYXV0b2NvbXBsZXRlUmVzdWx0cyxcbiAgICBzaG91bGRTaG93QXV0b2NvbXBsZXRlLFxuXG4gICAgLy8gSGFuZGxlcnNcbiAgICBoYW5kbGVTZWFyY2hJbnB1dENoYW5nZSxcbiAgICBoYW5kbGVTZWFyY2hJbnB1dEZvY3VzLFxuICAgIGhhbmRsZVNlYXJjaElucHV0Qmx1cixcbiAgICBoYW5kbGVLZXlEb3duLFxuICAgIGhhbmRsZUF1dG9jb21wbGV0ZVNlbGVjdCxcbiAgICBoYW5kbGVTdWJtaXRTZWFyY2gsXG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBzZXRTZWFyY2hUZXh0OiBzZXRTZWFyY2hUZXh0VXRpbGl0eSxcbiAgICByZXNldFNlYXJjaCxcbiAgfTtcbn07IiwiaW1wb3J0IHsgUHJvZHVjdFJldHJpZXZhbFBhcmFtcywgUHJvZHVjdFJldHJpZXZhbFJlc3VsdCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFRoaXMgd2lsbCBiZSBzZXQgYnkgdGhlIFByb2R1Y3RSZXRyaWV2YWxQcm92aWRlciB3aGVuIGl0IGluaXRpYWxpemVzXG5sZXQgcHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uOlxuICB8ICgocGFyYW1zOiBQcm9kdWN0UmV0cmlldmFsUGFyYW1zKSA9PiBQcm9taXNlPFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQ+KVxuICB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0UHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uID0gKFxuICBmbjogKHBhcmFtczogUHJvZHVjdFJldHJpZXZhbFBhcmFtcykgPT4gUHJvbWlzZTxQcm9kdWN0UmV0cmlldmFsUmVzdWx0PlxuKSA9PiB7XG4gIHByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbiA9IGZuO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbiA9ICgpID0+IHtcbiAgaWYgKCFwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlByb2R1Y3QgcmV0cmlldmFsIGZ1bmN0aW9uIG5vdCBpbml0aWFsaXplZC4gTWFrZSBzdXJlIFByb2R1Y3RSZXRyaWV2YWxQcm92aWRlciBpcyBtb3VudGVkLlwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uID0gKCkgPT4ge1xuICBwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24gPSBudWxsO1xufTsiLCJcbmltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IGdldFByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbiB9IGZyb20gXCIuL3Byb2R1Y3RSZXRyaWV2YWxBZGFwdGVyXCI7XG5pbXBvcnQgeyBQcm9kdWN0UmV0cmlldmFsUGFyYW1zLCBQcm9kdWN0UmV0cmlldmFsUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW50ZXJmYWNlIFByb2R1Y3RSZXRyaWV2YWxTdGF0ZSB7XG4gIGRhdGE6IFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQgfCBudWxsO1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgbGFzdFByb2R1Y3RJZHM6IHN0cmluZ1tdIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2R1Y3RSZXRyaWV2YWxBdG9tID0gYXRvbTxQcm9kdWN0UmV0cmlldmFsU3RhdGU+KHtcbiAgZGF0YTogbnVsbCxcbiAgbG9hZGluZzogZmFsc2UsXG4gIGVycm9yOiBudWxsLFxuICBsYXN0UHJvZHVjdElkczogbnVsbCxcbn0pO1xuXG5leHBvcnQgY29uc3QgcGVyZm9ybVByb2R1Y3RSZXRyaWV2YWxBdG9tID0gYXRvbShcbiAgbnVsbCxcbiAgYXN5bmMgKGdldCwgc2V0LCBwYXJhbXM6IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBnZXQocHJvZHVjdFJldHJpZXZhbEF0b20pO1xuXG4gICAgaWYgKGN1cnJlbnRTdGF0ZS5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47IC8vIFByZXZlbnQgY29uY3VycmVudCByZXRyaWV2YWxzXG4gICAgfVxuXG4gICAgc2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tLCB7XG4gICAgICBkYXRhOiBudWxsLFxuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgbGFzdFByb2R1Y3RJZHM6IHBhcmFtcy5wcm9kdWN0SWRzLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldHJpZXZlUHJvZHVjdHMgPSBnZXRQcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24oKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJldHJpZXZlUHJvZHVjdHMocGFyYW1zKTtcbiAgICAgIHNldChwcm9kdWN0UmV0cmlldmFsQXRvbSwge1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgbGFzdFByb2R1Y3RJZHM6IHBhcmFtcy5wcm9kdWN0SWRzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkXCI7XG4gICAgICBzZXQocHJvZHVjdFJldHJpZXZhbEF0b20sIHtcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIGxhc3RQcm9kdWN0SWRzOiBwYXJhbXMucHJvZHVjdElkcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuKTtcblxuLy8gR2V0IGp1c3QgdGhlIHByb2R1Y3RzIGFycmF5IChhbHJlYWR5IG5vcm1hbGl6ZWQgYnkgc2VydmljZSlcbmV4cG9ydCBjb25zdCByZXRyaWV2ZWRQcm9kdWN0c0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgcmV0cmlldmFsRGF0YSA9IGdldChwcm9kdWN0UmV0cmlldmFsQXRvbSkuZGF0YTtcbiAgcmV0dXJuIHJldHJpZXZhbERhdGE/LnByb2R1Y3RzIHx8IFtdO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwcm9kdWN0UmV0cmlldmFsTG9hZGluZ0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgcmV0dXJuIGdldChwcm9kdWN0UmV0cmlldmFsQXRvbSkubG9hZGluZztcbn0pO1xuXG5leHBvcnQgY29uc3QgcHJvZHVjdFJldHJpZXZhbEVycm9yQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICByZXR1cm4gZ2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tKS5lcnJvcjtcbn0pOyIsImltcG9ydCB7IHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tIFwic3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dFwiO1xuaW1wb3J0IHtcbiAgcmV0cmlldmVkUHJvZHVjdHNBdG9tLFxuICBwZXJmb3JtUHJvZHVjdFJldHJpZXZhbEF0b20sXG4gIHByb2R1Y3RSZXRyaWV2YWxBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0UmV0cmlldmFsQVBJXCI7XG5pbXBvcnQgeyB1c2VOZXdPcmdDb25maWcgfSBmcm9tIFwiLi4vTmV3T3JnQ29uZmlnXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuXG4vKipcbiAqIEEgaG9vayB0byBnZXQgcmVjb21tZW5kZWQgcHJvZHVjdHMuXG4gKiBJdCBjaGVja3MgdGhlIGBJc1JlY29tbWVuZGVkUHJvZHVjdHNFbmFibGVkYCBmZWF0dXJlIGdhdGUgYW5kIHRyaWdnZXJzIGZldGNoaW5nIGlmIG5lZWRlZC5cbiAqIElmIHRoZSBnYXRlIGlzIGVuYWJsZWQsIGl0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVjb21tZW5kZWQgcHJvZHVjdHMuXG4gKiBJZiB0aGUgZ2F0ZSBpcyBkaXNhYmxlZCwgaXQgcmV0dXJucyBhbiBlbXB0eSBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiByZWNvbW1lbmRlZCBwcm9kdWN0cyBvciBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVJlY29tbWVuZGVkUHJvZHVjdHMgPVxuICAoKTogU2VhcmNoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1tcImF0dHJpYnV0ZXNcIl1bXSA9PiB7XG4gICAgY29uc3QgeyBmZWF0dXJlRmxhZ1NlcnZpY2UgfSA9IHVzZUZlYXR1cmVGbGFnU2VydmljZSgpO1xuICAgIGNvbnN0IGlzRW5hYmxlZCA9IGZlYXR1cmVGbGFnU2VydmljZT8uaXNGZWF0dXJlR2F0ZUVuYWJsZWQoXG4gICAgICBGZWF0dXJlR2F0ZXMuSXNSZWNvbW1lbmRlZFByb2R1Y3RzRW5hYmxlZFxuICAgICk7XG4gICAgY29uc3QgcmVjb21tZW5kZWRQcm9kdWN0cyA9IHVzZUF0b21WYWx1ZShyZXRyaWV2ZWRQcm9kdWN0c0F0b20pO1xuICAgIGNvbnN0IHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsID0gdXNlU2V0QXRvbShwZXJmb3JtUHJvZHVjdFJldHJpZXZhbEF0b20pO1xuICAgIGNvbnN0IHsgbGFzdFByb2R1Y3RJZHMgfSA9IHVzZUF0b21WYWx1ZShwcm9kdWN0UmV0cmlldmFsQXRvbSk7XG4gICAgY29uc3Qgb3JnVUlDb25maWcgPSB1c2VOZXdPcmdDb25maWcoKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCByZWNvbW1lbmRlZFByb2R1Y3RJZHMgPSBvcmdVSUNvbmZpZy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzPy5zZWFyY2hDb25maWdcbiAgICAgICAgPyBvcmdVSUNvbmZpZy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzPy5zZWFyY2hDb25maWcucmVjb21tZW5kZWRQcm9kdWN0c1xuICAgICAgICA6IFtdO1xuICAgICAgLy8gRmV0Y2ggb25seSBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGVyZSBhcmUgSURzIHRvIGZldGNoLCBhbmQgd2UgaGF2ZW4ndCBhbHJlYWR5IGZldGNoZWQgdGhlbS5cbiAgICAgIGlmIChcbiAgICAgICAgaXNFbmFibGVkICYmXG4gICAgICAgIHJlY29tbWVuZGVkUHJvZHVjdElkcyAmJlxuICAgICAgICByZWNvbW1lbmRlZFByb2R1Y3RJZHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAhbGFzdFByb2R1Y3RJZHNcbiAgICAgICkge1xuICAgICAgICBwZXJmb3JtUHJvZHVjdFJldHJpZXZhbCh7IHByb2R1Y3RJZHM6IHJlY29tbWVuZGVkUHJvZHVjdElkcyB9KTtcbiAgICAgIH1cbiAgICB9LCBbaXNFbmFibGVkLCBwZXJmb3JtUHJvZHVjdFJldHJpZXZhbCwgbGFzdFByb2R1Y3RJZHMsIG9yZ1VJQ29uZmlnXSk7XG5cbiAgICByZXR1cm4gaXNFbmFibGVkID8gcmVjb21tZW5kZWRQcm9kdWN0cyA6IFtdO1xuICB9OyIsImltcG9ydCB7IHVzZUF0b20sIHVzZUF0b21WYWx1ZSwgdXNlU2V0QXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7XG4gIGFkZFNlYXJjaEZpbHRlckF0b20sXG4gIGNsZWFyU2VhcmNoRmlsdGVyc0F0b20sXG4gIGNyZWF0ZUZpbHRlck9wdGlvbixcbiAgZmlsdGVyZWRTZWFyY2hQcm9kdWN0c0F0b20sXG4gIHBlcmZvcm1TZWFyY2hBdG9tLFxuICByZW1vdmVTZWFyY2hGaWx0ZXJBdG9tLFxuICBzZWFyY2hBdG9tLFxuICBzZWFyY2hGaWx0ZXJzQXRvbSxcbiAgc2VhcmNoUGFyYW1zQXRvbSxcbiAgc2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tLFxuICBzZWFyY2hTZWxlY3RlZEZpbHRlcnNBdG9tLFxuICBTZWxlY3RlZEZpbHRlck9wdGlvbixcbn0gZnJvbSBcInNyYy9hdG9tcy9zZWFyY2hcIjtcbmltcG9ydCB7XG4gIGlzRmlsdGVyT3BlbkF0b20sXG59IGZyb20gXCJzcmMvYXRvbXMvZ2xvYmFsU2VhcmNoL2dsb2JhbFNlYXJjaFwiO1xuaW1wb3J0IHsgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgfSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaC91dGlsc1wiO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRpbmcgfSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaC90eXBlc1wiO1xuaW1wb3J0IHtcbiAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbiAgdXNlQW1wbGl0dWRlLFxufSBmcm9tIFwic3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dFwiO1xuaW1wb3J0IHsgU3BpZmZ5V2lkZ2V0cyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwaWZmeVdpZGdldHNcIjtcbmltcG9ydCB7IFByb2R1Y3RDYXJkQ29uZmlnIH0gZnJvbSBcInNyYy9jb250ZXh0cy90eXBlc1wiO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaFwiO1xuaW1wb3J0IHsgU2VhcmNoUmVzcG9uc2VQcm9kdWN0IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHtcbiAgU2VhcmNoRmlsdGVyRGF0dW0sXG4gIFNlbGVjdEZpbHRlckl0ZW0sXG59IGZyb20gXCJzcmMvdHlwZXMvc2VhcmNoLWZpbHRlci10eXBlc1wiO1xuaW1wb3J0IHsgZ2V0U2VhcmNoUmVzdWx0c1N0YXRlLCBTZWFyY2hSZXN1bHRzU3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IG9yZ1Nob3J0TmFtZUF0b20gfSBmcm9tIFwic3JjL2F0b21zL2Vudml2ZS9lbnZpdmVDb25maWdcIjtcbmltcG9ydCB7IHVzZVRyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50IH0gZnJvbSBcIi4uL1RyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50XCI7XG5pbXBvcnQgeyBhbXBsaXR1ZGVUcmFja0V2ZW50QXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvYW1wbGl0dWRlL2FtcGxpdHVkZVRyYWNrRXZlbnRBdG9tXCI7XG5pbXBvcnQgeyBuZXdPcmdDb25maWdBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9vcmdcIjtcbmltcG9ydCB7IHJldHJpZXZlZFByb2R1Y3RzQXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RSZXRyaWV2YWxBUElcIjtcbmltcG9ydCB7IHVzZVNlYXJjaElucHV0IH0gZnJvbSBcIi4vdXNlU2VhcmNoSW5wdXRcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgdXNlTmV3T3JnQ29uZmlnIH0gZnJvbSBcIi4uL05ld09yZ0NvbmZpZ1wiO1xuaW1wb3J0IHsgdXNlUmVjb21tZW5kZWRQcm9kdWN0cyB9IGZyb20gXCIuL3VzZVJlY29tbWVuZGVkUHJvZHVjdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHRzSG9jUHJvcHMge1xuICAvLyBEYXRhXG4gIHNlYXJjaERhdGE6IFNlYXJjaFJlc3VsdCB8IG51bGw7XG4gIHNlYXJjaFJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbWVyY2hhbnRTaG9ydE5hbWU6IHN0cmluZztcbiAgcHJvZHVjdENhcmRDb25maWc6IFByb2R1Y3RDYXJkQ29uZmlnO1xuICBwcm9kdWN0TGlzdDogU2VhcmNoUmVzcG9uc2VQcm9kdWN0W107XG4gIGF1dG9jb21wbGV0ZVJlc3VsdHM6IHN0cmluZ1tdO1xuICBzZWFyY2hGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJEYXR1bVtdO1xuICBhdmFpbGFibGVEeW5hbWljRmlsdGVyczogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfVtdO1xuICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IFNlbGVjdGVkRmlsdGVyT3B0aW9uW107XG4gIHJlY29tbWVuZGVkUHJvZHVjdHM6IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdO1xuXG4gIC8vIFN0YXRlXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgcXVlcnk6IHN0cmluZztcbiAgc2VhcmNoUmVzdWx0c1N0YXRlOiBTZWFyY2hSZXN1bHRzU3RhdGU7XG4gIGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbjtcbiAgaXNGaWx0ZXJPcGVuOiBib29sZWFuO1xuICBzaG91bGRTaG93QXV0b2NvbXBsZXRlOiBib29sZWFuO1xuICBmb2N1c2VkSW5kZXg6IG51bWJlcjtcbiAgZm9jdXNlZE9wdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gVUlcbiAgZmlsdGVyQnV0dG9uVGV4dDogc3RyaW5nO1xuXG4gIC8vIEV2ZW50IEhhbmRsZXJzXG4gIG9uU2VhcmNoSW5wdXRDaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvblN1Ym1pdFNlYXJjaDogKCkgPT4gdm9pZDtcbiAgb25BdXRvY29tcGxldGVTZWxlY3Q6IChzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBvblNlYXJjaElucHV0Rm9jdXM6ICgpID0+IHZvaWQ7XG4gIG9uU2VhcmNoSW5wdXRCbHVyOiAoKSA9PiB2b2lkO1xuICBvblRvZ2dsZUR5bmFtaWNGaWx0ZXI6ICh7IGZpbHRlciwgZHluYW1pY0ZpbHRlckRpc3BsYXlOYW1lIH06IHsgZmlsdGVyOiBzdHJpbmc7IGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZTogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIG9uU2VsZWN0RmlsdGVySXRlbTogU2VsZWN0RmlsdGVySXRlbTtcbiAgb25SZW1vdmVGaWx0ZXI6IChmaWx0ZXI6IFNlbGVjdGVkRmlsdGVyT3B0aW9uKSA9PiB2b2lkO1xuICBvbkNsZWFyQWxsRmlsdGVyczogKCkgPT4gdm9pZDtcbiAgc2V0SXNGaWx0ZXJPcGVuOiAoaXNGaWx0ZXJPcGVuOiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIC8vIFJlZnNcbiAgc2VhcmNoUmVzdWx0c1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50Pjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVNlYXJjaCA9ICgpOiBTZWFyY2hSZXN1bHRzSG9jUHJvcHMgPT4ge1xuICAvLyBBdG9tc1xuICBjb25zdCBjb25maWcgPSB1c2VOZXdPcmdDb25maWcoKTtcbiAgY29uc3Qgb3JnU2hvcnROYW1lID0gdXNlQXRvbVZhbHVlKG9yZ1Nob3J0TmFtZUF0b20pO1xuICBjb25zdCB7IGRhdGE6IHNlYXJjaERhdGEsIGxvYWRpbmc6IGlzTG9hZGluZ1NlYXJjaCB9ID1cbiAgICB1c2VBdG9tVmFsdWUoc2VhcmNoQXRvbSk7XG4gIGNvbnN0IHByb2R1Y3RMaXN0ID0gdXNlQXRvbVZhbHVlKGZpbHRlcmVkU2VhcmNoUHJvZHVjdHNBdG9tKTtcbiAgY29uc3QgcGVyZm9ybVNlYXJjaCA9IHVzZVNldEF0b20ocGVyZm9ybVNlYXJjaEF0b20pO1xuICBjb25zdCBbeyBxdWVyeSB9XSA9IHVzZUF0b20oc2VhcmNoUGFyYW1zQXRvbSk7XG4gIGNvbnN0IFtpc0ZpbHRlck9wZW4sIHNldElzRmlsdGVyT3Blbl0gPSB1c2VBdG9tKGlzRmlsdGVyT3BlbkF0b20pO1xuICBjb25zdCBbc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXSA9IHVzZUF0b20oc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IGFkZEZpbHRlciA9IHVzZVNldEF0b20oYWRkU2VhcmNoRmlsdGVyQXRvbSk7XG4gIGNvbnN0IHJlbW92ZUZpbHRlciA9IHVzZVNldEF0b20ocmVtb3ZlU2VhcmNoRmlsdGVyQXRvbSk7XG4gIGNvbnN0IFtwcm9kdWN0U29ydGluZywgc2V0UHJvZHVjdFNvcnRpbmddID0gdXNlQXRvbShzZWFyY2hQcm9kdWN0U29ydGluZ0F0b20pO1xuICBjb25zdCBjbGVhckZpbHRlcnMgPSB1c2VTZXRBdG9tKGNsZWFyU2VhcmNoRmlsdGVyc0F0b20pO1xuICBjb25zdCBzZWFyY2hGaWx0ZXJzID0gdXNlQXRvbVZhbHVlKHNlYXJjaEZpbHRlcnNBdG9tKTtcbiAgY29uc3QgcmVjb21tZW5kZWRQcm9kdWN0cyA9IHVzZVJlY29tbWVuZGVkUHJvZHVjdHMoKTtcblxuICAvLyBSZWZzXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBcbiAgLy8gVXRpbGl0aWVzXG4gIGNvbnN0IHNjcm9sbFRvVG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHNlYXJjaFJlc3VsdHNSZWYuY3VycmVudDtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIFxuICAvLyBTZWFyY2ggSW5wdXQgSG9va1xuICBjb25zdCBzZWFyY2hJbnB1dCA9IHVzZVNlYXJjaElucHV0KHtcbiAgICBpbml0aWFsU2VhcmNoVGV4dDogcXVlcnkgfHwgJycsXG4gICAgc2VhcmNoT3JpZ2luOiBTcGlmZnlXaWRnZXRzLlNlYXJjaFJlc3VsdHMsXG4gICAgb25TZWFyY2hTdWJtaXQ6IChzZWFyY2hRdWVyeSkgPT4ge1xuICAgICAgcGVyZm9ybVNlYXJjaCh7IHF1ZXJ5OiBzZWFyY2hRdWVyeSB9KTtcbiAgICB9LFxuICB9KTtcbiAgXG4gIGNvbnN0IHtcbiAgICBzZWFyY2hUZXh0LFxuICAgIGZvY3VzZWRJbmRleCxcbiAgICBmb2N1c2VkT3B0aW9uSWQsXG4gICAgYXV0b2NvbXBsZXRlUmVzdWx0cyxcbiAgICBzaG91bGRTaG93QXV0b2NvbXBsZXRlLFxuICAgIGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlLFxuICAgIGhhbmRsZVNlYXJjaElucHV0Rm9jdXMsXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRCbHVyLFxuICAgIGhhbmRsZUtleURvd24sXG4gICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCxcbiAgICBzZXRTZWFyY2hUZXh0LFxuICB9ID0gc2VhcmNoSW5wdXQ7XG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNTdGF0ZSA9IGdldFNlYXJjaFJlc3VsdHNTdGF0ZShpc0xvYWRpbmdTZWFyY2gsIHNlYXJjaERhdGEpO1xuXG4gIGNvbnN0IGR5bmFtaWNGaWx0ZXJzID0gc2VhcmNoRGF0YT8uZmlsdGVycyB8fCBbXTtcblxuICAvLyBQcm92aWRlIGZhbGxiYWNrIHZhbHVlcyB3aGVuIG9yZ1VJQ29uZmlnIGlzIG5vdCB5ZXQgYXZhaWxhYmxlXG4gIGNvbnN0IHNhZmVQcm9kdWN0Q2FyZENvbmZpZyA9IGNvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlnc1xuICAgID8ucHJvZHVjdENhcmRDb25maWcgfHwge1xuICAgIHZhcmlhbnQ6IFwibWluaW1hbFwiLFxuICAgIGhvdmVyVmFyaWFudDogXCJub25lXCIsXG4gICAgbGF5b3V0VmFyaWFudDogXCJzcXVhcmVcIixcbiAgfTtcbiAgY29uc3Qgc2FmZU1lcmNoYW50U2hvcnROYW1lID0gb3JnU2hvcnROYW1lIHx8IFwiXCI7XG5cbiAgY29uc3QgYXZhaWxhYmxlRHluYW1pY0ZpbHRlcnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZHluYW1pY0ZpbHRlcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChkeW5hbWljRmlsdGVyTmFtZSkgPT5cbiAgICAgICAgICAhc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgZHluYW1pYzoke2R5bmFtaWNGaWx0ZXJOYW1lfWApLFxuICAgICAgKVxuICAgICAgLm1hcCgoZHluYW1pY0ZpbHRlck5hbWUpID0+ICh7XG4gICAgICAgIG5hbWU6IGR5bmFtaWNGaWx0ZXJOYW1lLFxuICAgICAgICBkaXNwbGF5TmFtZTogZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUoZHluYW1pY0ZpbHRlck5hbWUpLFxuICAgICAgfSkpO1xuICB9LCBbZHluYW1pY0ZpbHRlcnMsIHNlbGVjdGVkRmlsdGVyT3B0aW9uc10pO1xuXG4gIGNvbnN0IGZpbHRlcnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzb3J0T3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsdGVySXRlbUlkOiBTdHJpbmcoUHJvZHVjdFNvcnRpbmcuRkVBVFVSRUQpLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ1JlbGV2YW5jZScsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVELFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsdGVySXRlbUlkOiBTdHJpbmcoUHJvZHVjdFNvcnRpbmcuUFJJQ0VfQVNDKSxcbiAgICAgICAgZGlzcGxheU5hbWU6ICdQcmljZTogTG93IHRvIEhpZ2gnLFxuICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHByb2R1Y3RTb3J0aW5nID09PSBQcm9kdWN0U29ydGluZy5QUklDRV9BU0MsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWx0ZXJJdGVtSWQ6IFN0cmluZyhQcm9kdWN0U29ydGluZy5QUklDRV9ERVNDKSxcbiAgICAgICAgZGlzcGxheU5hbWU6ICdQcmljZTogSGlnaCB0byBMb3cnLFxuICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHByb2R1Y3RTb3J0aW5nID09PSBQcm9kdWN0U29ydGluZy5QUklDRV9ERVNDLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIFt7IGZpbHRlcklkOiAnc29ydCcsIGRpc3BsYXlOYW1lOiAnU09SVCcsIGl0ZW1zOiBzb3J0T3B0aW9ucyB9LCAuLi5zZWFyY2hGaWx0ZXJzXSBhcyBTZWFyY2hGaWx0ZXJEYXR1bVtdO1xuICB9LCBbcHJvZHVjdFNvcnRpbmcsIHNlYXJjaEZpbHRlcnNdKTtcblxuICBjb25zdCBmaWx0ZXJCdXR0b25UZXh0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IGZpbHRlcnMucmVkdWNlKChhY2M6IG51bWJlciwgZmlsdGVyKSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmZpbHRlcklkID09PSAnc29ydCcpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2MgKyBmaWx0ZXIuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLmxlbmd0aDtcbiAgICB9LCAwKTtcbiAgICBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdGaWx0ZXIgJiBTb3J0JztcbiAgICB9XG4gICAgcmV0dXJuIGBGaWx0ZXIgJiBTb3J0ICgke3NlbGVjdGVkQ291bnR9KWA7XG4gIH0sIFtmaWx0ZXJzXSk7XG5cbiAgLy8gQ2FsbGJhY2tzXG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG5cblxuICBjb25zdCBoYW5kbGVUb2dnbGVEeW5hbWljRmlsdGVyID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZmlsdGVyLCBkeW5hbWljRmlsdGVyRGlzcGxheU5hbWUgfTogeyBmaWx0ZXI6IHN0cmluZzsgZHluYW1pY0ZpbHRlckRpc3BsYXlOYW1lOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hGaWx0ZXJDbGlja2VkLFxuICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgZmlsdGVyVHlwZTogJ0R5bmFtaWMnLFxuICAgICAgICAgIGZpbHRlclZhbHVlOiBmaWx0ZXIsXG4gICAgICAgICAgcXVlcnlUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhZGRGaWx0ZXIoY3JlYXRlRmlsdGVyT3B0aW9uKCdkeW5hbWljJywgZmlsdGVyLCBkeW5hbWljRmlsdGVyRGlzcGxheU5hbWUpKTtcbiAgICAgIHNjcm9sbFRvVG9wKCk7XG4gICAgfSxcbiAgICBbYWRkRmlsdGVyLCBzZWFyY2hUZXh0LCBzY3JvbGxUb1RvcF0sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlRmlsdGVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGZpbHRlcjogU2VsZWN0ZWRGaWx0ZXJPcHRpb24pID0+IHtcbiAgICAgIHJlbW92ZUZpbHRlcihmaWx0ZXIuaWQpO1xuICAgICAgc2Nyb2xsVG9Ub3AoKTtcbiAgICB9LFxuICAgIFtyZW1vdmVGaWx0ZXIsIHNjcm9sbFRvVG9wXSxcbiAgKTtcblxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEZpbHRlckl0ZW06IFNlbGVjdEZpbHRlckl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgZmlsdGVySWQsXG4gICAgICBmaWx0ZXJJdGVtSWQsXG4gICAgICBpc1NlbGVjdGVkLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgfToge1xuICAgICAgZmlsdGVySWQ6IHN0cmluZztcbiAgICAgIGZpbHRlckl0ZW1JZDogc3RyaW5nO1xuICAgICAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKGZpbHRlcklkID09PSAnc29ydCcpIHtcbiAgICAgICAgY29uc3QgbmV3U29ydCA9IGZpbHRlckl0ZW1JZCBhcyBQcm9kdWN0U29ydGluZztcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaFNvcnRDbGlja2VkLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIHNvcnRUeXBlOiBuZXdTb3J0LFxuICAgICAgICAgICAgcXVlcnlUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQcm9kdWN0U29ydGluZyhuZXdTb3J0KTtcbiAgICAgICAgc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQpIHtcbiAgICAgICAgcmVtb3ZlRmlsdGVyKGAke2ZpbHRlcklkfToke2ZpbHRlckl0ZW1JZH1gKTtcbiAgICAgICAgc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hGaWx0ZXJDbGlja2VkLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIGZpbHRlclR5cGU6ICdTdGF0aWMnLFxuICAgICAgICAgICAgZmlsdGVyQ2F0ZWdvcnk6IGZpbHRlcklkLFxuICAgICAgICAgICAgZmlsdGVyVmFsdWU6IGZpbHRlckl0ZW1JZCxcbiAgICAgICAgICAgIHF1ZXJ5VGV4dDogc2VhcmNoVGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgYWRkRmlsdGVyKGNyZWF0ZUZpbHRlck9wdGlvbihmaWx0ZXJJZCwgZmlsdGVySXRlbUlkLCBkaXNwbGF5TmFtZSkpO1xuICAgICAgICBzY3JvbGxUb1RvcCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZEZpbHRlciwgcmVtb3ZlRmlsdGVyLCBzZXRQcm9kdWN0U29ydGluZywgc2VhcmNoVGV4dCwgc2Nyb2xsVG9Ub3BdLFxuICApO1xuXG5cbiAgY29uc3QgaGFuZGxlQ2xlYXJBbGxGaWx0ZXJzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFByb2R1Y3RTb3J0aW5nKFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVEKTtcbiAgICBjbGVhckZpbHRlcnMoKTtcbiAgICBzY3JvbGxUb1RvcCgpO1xuICB9LCBbc2V0UHJvZHVjdFNvcnRpbmcsIGNsZWFyRmlsdGVycywgc2Nyb2xsVG9Ub3BdKTtcblxuICAvLyBTaWRlIEVmZmVjdHNcbiAgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQoXG4gICAgU3BpZmZ5V2lkZ2V0cy5TZWFyY2hSZXN1bHRzLFxuICAgIHNlYXJjaFJlc3VsdHNSZWYsXG4gICAge30sXG4gICAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hDb21wb25lbnRWaXNpYmxlLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlYXJjaFJlc3VsdHNTdGF0ZSA9PT0gU2VhcmNoUmVzdWx0c1N0YXRlLlJlc3VsdHMgfHwgc2VhcmNoUmVzdWx0c1N0YXRlID09PSBTZWFyY2hSZXN1bHRzU3RhdGUuTm9SZXN1bHRzKSB7XG4gICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaFJlc3VsdHNWaWV3ZWQsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgICAgcmVzdWx0c0NvdW50OiBwcm9kdWN0TGlzdC5sZW5ndGgsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtwcm9kdWN0TGlzdC5sZW5ndGgsIHNlYXJjaFJlc3VsdHNTdGF0ZV0pO1xuXG4gIC8vIFRoaXMgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzZWFyY2ggdGV4dCB0cmlnZ2VyaW5nIGEgc2VhcmNoXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5ICE9PSBzZWFyY2hUZXh0KSB7XG4gICAgICBjb25zdCBlc3EgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnZXNxJyk7XG4gICAgICBzZXRTZWFyY2hUZXh0KHF1ZXJ5KTtcbiAgICAgIHBlcmZvcm1TZWFyY2goeyBxdWVyeTogZXNxID8/IHF1ZXJ5IH0pO1xuICAgIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbcGVyZm9ybVNlYXJjaCwgcXVlcnksIHNldFNlYXJjaFRleHRdKTtcblxuICByZXR1cm4ge1xuICAgIHNlYXJjaERhdGEsXG4gICAgc2VhcmNoUmVzcG9uc2VJZDogc2VhcmNoRGF0YT8uc2VhcmNoUmVzcG9uc2VJZCA/PyAnJyxcbiAgICBtZXJjaGFudFNob3J0TmFtZTogc2FmZU1lcmNoYW50U2hvcnROYW1lLFxuICAgIHByb2R1Y3RDYXJkQ29uZmlnOiBzYWZlUHJvZHVjdENhcmRDb25maWcsXG4gICAgcHJvZHVjdExpc3QsXG4gICAgcmVjb21tZW5kZWRQcm9kdWN0cyxcbiAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgIHNlYXJjaEZpbHRlcnM6IGZpbHRlcnMsXG4gICAgYXZhaWxhYmxlRHluYW1pY0ZpbHRlcnMsXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLFxuICAgIHNlYXJjaFRleHQsXG4gICAgcXVlcnk6IHF1ZXJ5IHx8ICcnLFxuICAgIHNlYXJjaFJlc3VsdHNTdGF0ZSxcbiAgICBpc0xvYWRpbmdTZWFyY2gsXG4gICAgaXNGaWx0ZXJPcGVuLFxuICAgIHNob3VsZFNob3dBdXRvY29tcGxldGUsXG4gICAgZm9jdXNlZEluZGV4LFxuICAgIGZvY3VzZWRPcHRpb25JZCxcbiAgICBmaWx0ZXJCdXR0b25UZXh0LFxuICAgIG9uU2VhcmNoSW5wdXRDaGFuZ2U6IGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlLFxuICAgIG9uU3VibWl0U2VhcmNoOiBoYW5kbGVTdWJtaXRTZWFyY2gsXG4gICAgb25BdXRvY29tcGxldGVTZWxlY3Q6IGhhbmRsZUF1dG9jb21wbGV0ZVNlbGVjdCxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgb25TZWFyY2hJbnB1dEZvY3VzOiBoYW5kbGVTZWFyY2hJbnB1dEZvY3VzLFxuICAgIG9uU2VhcmNoSW5wdXRCbHVyOiBoYW5kbGVTZWFyY2hJbnB1dEJsdXIsXG4gICAgb25Ub2dnbGVEeW5hbWljRmlsdGVyOiBoYW5kbGVUb2dnbGVEeW5hbWljRmlsdGVyLFxuICAgIG9uU2VsZWN0RmlsdGVySXRlbTogaGFuZGxlU2VsZWN0RmlsdGVySXRlbSxcbiAgICBvblJlbW92ZUZpbHRlcjogaGFuZGxlUmVtb3ZlRmlsdGVyLFxuICAgIG9uQ2xlYXJBbGxGaWx0ZXJzOiBoYW5kbGVDbGVhckFsbEZpbHRlcnMsXG4gICAgc2V0SXNGaWx0ZXJPcGVuLFxuICAgIHNlYXJjaFJlc3VsdHNSZWYsXG4gIH07XG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0EsTUFBYSxrQkFBa0IsRUFDN0Isb0JBQW9CLElBQ3BCLGNBQ0EscUJBQytDO0NBQy9DLE1BQU0sZ0NBQXFCQSxxQ0FBd0I7Q0FHbkQsTUFBTSxDQUFDLFlBQVkscUNBQTBCLGtCQUFrQjtDQUMvRCxNQUFNLENBQUMsU0FBUyxrQ0FBdUIsa0JBQWtCLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Q0FDM0UsTUFBTSxDQUFDLFdBQVcsb0NBQXlCLE1BQU07Q0FDakQsTUFBTSxDQUFDLGNBQWMsdUNBQTRCLEdBQUc7Q0FDcEQsTUFBTSxDQUFDLGlCQUFpQiwwQ0FDdEIs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
|