@monerium/sdk-react-provider 1.3.1 → 1.3.4
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/index.d.ts +57 -5
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
import { ReactNode } from 'react';
|
|
4
4
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
5
|
-
import {
|
|
6
|
-
import MoneriumClient, { AuthFlowOptions, AuthFlowSIWEOptions, Chain, CurrencyCode,
|
|
5
|
+
import { UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
6
|
+
import MoneriumClient, { AuthFlowOptions, AuthFlowSIWEOptions, Chain, CurrencyCode, Address, ChainId, AddressesResponse, AuthContext, Currency, Balances, IBAN, IBANsResponse, LinkedAddress, LinkAddress, ResponseStatus, MoveIbanPayload, Order, OrdersResponse, OrderState, NewOrder, Profile, ProfilesResponse, RequestIbanPayload, SignaturesQueryParams, SignaturesResponse, SubmitProfileDetailsPayload, Token } from '@monerium/sdk';
|
|
7
7
|
export { Address, Balances, IBAN, LinkAddress, MoveIbanPayload, NewOrder, Order, Profile, ResponseStatus, SubmitProfileDetailsPayload, Token } from '@monerium/sdk';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -246,6 +246,7 @@ declare const keys: {
|
|
|
246
246
|
requestIban: string[];
|
|
247
247
|
placeOrder: string[];
|
|
248
248
|
linkAddress: string[];
|
|
249
|
+
getSignatures: (filter?: unknown) => {}[];
|
|
249
250
|
};
|
|
250
251
|
/**
|
|
251
252
|
* # Redirect to the Monerium auth flow.
|
|
@@ -631,6 +632,10 @@ declare function useMoveIban({ mutation, }?: {
|
|
|
631
632
|
* When the order has been placed, the orders query will be invalidated and re-fetched.
|
|
632
633
|
*
|
|
633
634
|
* If the order amount is above 15000, a supporting document is required.
|
|
635
|
+
*
|
|
636
|
+
* **Note:** For multi-signature orders, the API returns a 202 Accepted response
|
|
637
|
+
* with `{status: 202, statusText: "Accepted"}` instead of the full Order object.
|
|
638
|
+
*
|
|
634
639
|
* @group Hooks
|
|
635
640
|
* @category Orders
|
|
636
641
|
* @param param
|
|
@@ -652,8 +657,55 @@ declare function useMoveIban({ mutation, }?: {
|
|
|
652
657
|
declare function usePlaceOrder({ supportingDocument, mutation, }?: {
|
|
653
658
|
supportingDocument?: File;
|
|
654
659
|
/** {@inheritDoc MutationOptions} */
|
|
655
|
-
mutation?: MutationOptions<Order, Error, NewOrder>;
|
|
656
|
-
}): MutationResult<'placeOrder', Order, Error, NewOrder>;
|
|
660
|
+
mutation?: MutationOptions<Order | ResponseStatus, Error, NewOrder>;
|
|
661
|
+
}): MutationResult<'placeOrder', Order | ResponseStatus, Error, NewOrder>;
|
|
662
|
+
/**
|
|
663
|
+
* Get pending signatures for the authenticated user.
|
|
664
|
+
*
|
|
665
|
+
* Returns pending signatures that require user action, such as order signatures
|
|
666
|
+
* or link address signatures. Accepts filtering by address, chain, kind, and profile.
|
|
667
|
+
*
|
|
668
|
+
* @group Hooks
|
|
669
|
+
* @category Signatures
|
|
670
|
+
* @param {Object} params
|
|
671
|
+
* @param {SignaturesQueryParams} params.query - Optional query parameters to filter signatures
|
|
672
|
+
*
|
|
673
|
+
* @example
|
|
674
|
+
* ```ts
|
|
675
|
+
* // Get all pending signatures
|
|
676
|
+
* const {
|
|
677
|
+
* data: signatures,
|
|
678
|
+
* isLoading,
|
|
679
|
+
* isError,
|
|
680
|
+
* error,
|
|
681
|
+
* refetch,
|
|
682
|
+
* ...moreUseQueryResults
|
|
683
|
+
* } = useSignatures();
|
|
684
|
+
*
|
|
685
|
+
* // Get pending order signatures for a specific address
|
|
686
|
+
* const { data: orderSignatures } = useSignatures({
|
|
687
|
+
* query: {
|
|
688
|
+
* address: '0x1234...',
|
|
689
|
+
* kind: 'order'
|
|
690
|
+
* }
|
|
691
|
+
* });
|
|
692
|
+
*
|
|
693
|
+
* // Check the kind of signature
|
|
694
|
+
* signatures?.pending.forEach(sig => {
|
|
695
|
+
* if (sig.kind === 'order') {
|
|
696
|
+
* console.log('Order signature:', sig.id, sig.amount);
|
|
697
|
+
* } else {
|
|
698
|
+
* console.log('Link address signature');
|
|
699
|
+
* }
|
|
700
|
+
* });
|
|
701
|
+
* ```
|
|
702
|
+
* @see {@link https://monerium.dev/api-docs-v2#tag/signatures/operation/get-signatures | API Documentation}
|
|
703
|
+
*/
|
|
704
|
+
declare function useSignatures({ query, options, }?: {
|
|
705
|
+
query?: SignaturesQueryParams;
|
|
706
|
+
/** {@inheritDoc QueryOptions} */
|
|
707
|
+
options?: QueryOptions<SignaturesResponse>;
|
|
708
|
+
}): _tanstack_react_query.UseQueryResult<SignaturesResponse, Error>;
|
|
657
709
|
/**
|
|
658
710
|
* # Add address to profile.
|
|
659
711
|
*
|
|
@@ -717,4 +769,4 @@ declare const useSubscribeOrderNotification: ({ state, profile, onMessage, onErr
|
|
|
717
769
|
onError?: ((err: Event) => void) | undefined;
|
|
718
770
|
}) => () => void | undefined;
|
|
719
771
|
|
|
720
|
-
export { MoneriumContext, MoneriumProvider, type MutationOptions, type MutationResult, type QueryOptions, type QueryResult, type SdkInstance, type UseAuthReturn, keys, useAddress, useAddresses, useAuth, useAuthContext, useBalances, useIBAN, useIBANs, useLinkAddress, useMoveIban, useOrder, useOrders, usePlaceOrder, useProfile, useProfiles, useRequestIban, useSubmitProfileDetails, useSubscribeOrderNotification, useTokens };
|
|
772
|
+
export { MoneriumContext, MoneriumProvider, type MutationOptions, type MutationResult, type QueryOptions, type QueryResult, type SdkInstance, type UseAuthReturn, keys, useAddress, useAddresses, useAuth, useAuthContext, useBalances, useIBAN, useIBANs, useLinkAddress, useMoveIban, useOrder, useOrders, usePlaceOrder, useProfile, useProfiles, useRequestIban, useSignatures, useSubmitProfileDetails, useSubscribeOrderNotification, useTokens };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var react=require('react'),reactQuery=require('@tanstack/react-query'),sdk=require('@monerium/sdk'),jsxRuntime=require('react/jsx-runtime');var w=react.createContext(null);var J=({children:e,clientId:r,redirectUri:n,environment:t="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=false})=>{let s=reactQuery.useQueryClient(),[o]=react.useState(()=>new sdk.MoneriumClient({environment:t,clientId:r,redirectUri:n,debug:u})),[f,p]=react.useState(false),[v,E]=react.useState(null),[k,I]=react.useState(true);react.useEffect(()=>((async()=>{if(o)try{p(await o.getAccess());}catch(h){console.error("Failed to get access:",h);}finally{I(false),o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})(),()=>{o&&o.disconnect();}),[]),react.useEffect(()=>{i&&!f&&!k&&(async()=>{if(o)try{p(await o.getAccess(i));}catch(h){console.error("Failed to get access:",h);}finally{o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})();},[i]);let x=react.useCallback(async m=>{try{o&&await o.authorize(m);}catch(h){console.error("Error during authorization:",h),E(h);}},[o]),C=react.useCallback(async m=>{try{o&&await o.siwe(m);}catch(h){console.error("Error during sign in with ethereum:",h),E(h);}},[o]),z=async()=>{try{o&&await o.revokeAccess();}catch(m){console.error("Error during revoking access:",m),E(m);}finally{s.clear(),p(false);}};return jsxRuntime.jsx(w.Provider,{value:{sdk:o,authorize:x,siwe:C,isAuthorized:f,isLoading:k,error:v,disconnect:async()=>o?.disconnect(),revokeAccess:async()=>z()},children:e})};var d={getAll:["monerium"],getAuthContext:["monerium","auth-context"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",{currencies:n?[...n]:[],chain:r,address:e}],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function c(){let e=react.useContext(w);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function l(){let e=react.useContext(w);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,siwe:e.siwe,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function Se({query:e}={}){let{isAuthorized:r}=l(),n=c();return reactQuery.useQuery({...e,queryKey:d.getAuthContext,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getAuthContext()},enabled:!!(n&&r&&(e?.enabled??true))})}function Pe({profile:e,query:r}={}){let{isAuthorized:n}=l(),t=c(),{data:i}=B(),a=e||i?.profiles?.[0]?.id;return reactQuery.useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return t.getProfile(a)},enabled:!!(t&&n&&a&&(r?.enabled??true))})}function B({query:e}={}){let{isAuthorized:r}=l(),n=c();return reactQuery.useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??true))})}function qe({query:e}={}){let r=c(),{isAuthorized:n}=l();return reactQuery.useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??true))})}function ve({address:e,query:r={}}){let n=c(),{isAuthorized:t}=l();return reactQuery.useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function Ie({profile:e,chain:r,query:n={}}={}){let t=c(),{isAuthorized:i}=l();return reactQuery.useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?sdk.parseChain(r):undefined}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getAddresses({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function xe({address:e,chain:r,currencies:n,query:t}){let i=c(),{isAuthorized:a}=l();return reactQuery.useQuery({...t,queryKey:d.getBalances(e,sdk.parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(t?.enabled??true))})}function Ce({iban:e,query:r}){let n=c(),{isAuthorized:t}=l();return reactQuery.useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function ze({profile:e,chain:r,query:n={}}={}){let t=c(),{isAuthorized:i}=l();return reactQuery.useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getIbans({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function Ke({orderId:e,query:r={}}){let n=c(),{isAuthorized:t}=l();return reactQuery.useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&t&&e&&(r.enabled??true))})}function Ne({query:e={},...r}={}){let n=c(),{isAuthorized:t}=l();return reactQuery.useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&t&&(e.enabled??true))})}function Re({profile:e,mutation:r={}}){let n=c(),{isAuthorized:t}=l(),i=reactQuery.useQueryClient(),{mutateAsync:a,...u}=reactQuery.useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.submitProfileDetails(e,s)},onSuccess(s,o,f){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(s,o,f);},onError(s,o,f){throw r?.onError?.(s,o,f),s}});return {submitProfileDetails:a,...u}}function Me({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),{mutateAsync:t,...i}=reactQuery.useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:s})},onSuccess(a,u,s){e?.onSuccess?.(a,u,s);},onError(a,u,s){throw e?.onError?.(a,u,s),a}});return {requestIban:t,...i}}function De({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),t=reactQuery.useQueryClient(),{mutateAsync:i,...a}=reactQuery.useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:s,chain:o})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:s,chain:o})},onSuccess(u,s,o){t.invalidateQueries({queryKey:d.getIban(s.iban)}),t.invalidateQueries({queryKey:d.getIbans()}),t.invalidateQueries({queryKey:d.getAddress(s.address)}),e?.onSuccess?.(u,s,o);},onError(u,s,o){throw e?.onError?.(u,s,o),u}});return {moveIban:i,...a}}function Be({supportingDocument:e,mutation:r}={}){let n=c(),{isAuthorized:t}=l(),i=reactQuery.useQueryClient(),{mutateAsync:a,...u}=reactQuery.useMutation({...r,mutationKey:d.placeOrder,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");let o;if(parseInt(s.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");o=(await n.uploadSupportingDocument(e)).id;}let f={...s,documentId:o};return n.placeOrder(f)},onSuccess(s,o,f){i.invalidateQueries({queryKey:d.getOrders()}),i.invalidateQueries({queryKey:d.getBalances(s.address,s.chain)}),r?.onSuccess?.(s,o,f);},onError(s,o,f){throw r?.onError?.(s,o,f),s}});return {placeOrder:a,...u}}function Fe({mutation:e}={}){let r=c(),{isAuthorized:n}=l(),t=reactQuery.useQueryClient(),{mutateAsync:i,...a}=reactQuery.useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,s,o){t.invalidateQueries({queryKey:d.getAddresses()}),s.profile&&t.invalidateQueries({queryKey:d.getProfile(s.profile)}),e?.onSuccess?.(u,s,o);},onError(u,s,o){throw e?.onError?.(u,s,o),u}});return {linkAddress:i,...a}}var Qe=({state:e,profile:r,onMessage:n,onError:t})=>{let i=c();return react.useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:t}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};exports.MoneriumContext=w;exports.MoneriumProvider=J;exports.keys=d;exports.useAddress=ve;exports.useAddresses=Ie;exports.useAuth=l;exports.useAuthContext=Se;exports.useBalances=xe;exports.useIBAN=Ce;exports.useIBANs=ze;exports.useLinkAddress=Fe;exports.useMoveIban=De;exports.useOrder=Ke;exports.useOrders=Ne;exports.usePlaceOrder=Be;exports.useProfile=Pe;exports.useProfiles=B;exports.useRequestIban=Me;exports.useSubmitProfileDetails=Re;exports.useSubscribeOrderNotification=Qe;exports.useTokens=qe;//# sourceMappingURL=index.js.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlQXV0aENvbnRleHQiLCJxdWVyeSIsInVzZVF1ZXJ5IiwidXNlUHJvZmlsZSIsImRhdGEiLCJ1c2VQcm9maWxlcyIsInByb2ZpbGVUb1VzZSIsInVzZVRva2VucyIsInVzZUFkZHJlc3MiLCJ1c2VBZGRyZXNzZXMiLCJwYXJzZUNoYWluIiwidXNlQmFsYW5jZXMiLCJ1c2VJQkFOIiwidXNlSUJBTnMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VTdWJtaXRQcm9maWxlRGV0YWlscyIsIm11dGF0aW9uIiwibXV0YXRlQXN5bmMiLCJyZXN0IiwidXNlTXV0YXRpb24iLCJib2R5IiwidmFyaWFibGVzIiwidmFycyIsInVzZVJlcXVlc3RJYmFuIiwiZW1haWxOb3RpZmljYXRpb25zIiwidXNlTW92ZUliYW4iLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJ1c2VMaW5rQWRkcmVzcyIsInVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uIiwic3RhdGUiLCJvbk1lc3NhZ2UiLCJvbkVycm9yIl0sIm1hcHBpbmdzIjoieUpBSWFBLElBQUFBLENBQUFBLENBQWtCQyxtQkFFN0IsQ0FBQSxJQUFJLEVDa0JPQyxJQUFBQSxDQUFBQSxDQUFtQixDQUFDLENBQy9CLFFBQUFDLENBQUFBLENBQUFBLENBQ0EsUUFBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxXQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFdBQUFDLENBQUFBLENBQUFBLENBQWMsU0FDZCxDQUFBLFlBQUEsQ0FBQUMsQ0FDQSxDQUFBLG9CQUFBLENBQUFDLENBQ0EsQ0FBQSxLQUFBLENBQUFDLENBQVEsQ0FBQSxLQUNWLENBVU0sR0FBQSxDQUNKLElBQU1DLENBQUFBLENBQWNDLHlCQUFlLEVBQUEsQ0FFN0IsQ0FBQ0MsQ0FBRyxDQUFJQyxDQUFBQSxjQUFBQSxDQUFTLElBRWQsSUFBSUMsa0JBQWUsQ0FBQSxDQUN4QixXQUFBUixDQUFBQSxDQUFBQSxDQUNBLFFBQUFGLENBQUFBLENBQUFBLENBQ0EsV0FBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxLQUFPSSxDQUFBQSxDQUNULENBQUMsQ0FDRixDQUVLLENBQUEsQ0FBQ00sQ0FBY0MsQ0FBQUEsQ0FBZSxDQUFJSCxDQUFBQSxjQUFBQSxDQUFrQixLQUFLLENBQUEsQ0FDekQsQ0FBQ0ksQ0FBQUEsQ0FBT0MsQ0FBUSxDQUFBLENBQUlMLGNBQWlDLENBQUEsSUFBSSxDQUN6RCxDQUFBLENBQUNNLENBQWFDLENBQUFBLENBQWMsQ0FBSVAsQ0FBQUEsY0FBQUEsQ0FBUyxJQUFJLENBQUEsQ0FFbkRRLGVBQVUsQ0FBQSxLQUFBLENBQ1EsU0FBWSxDQUMxQixHQUFJ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S0FBTytELENBQUFBLENBQUFBLENBQU8sT0FBUzdDLENBQUFBLENBQVEsQ0FBQyxFQUV6RSxDQUNDLENBQUEsQ0FBQSxDQUFDbEIsQ0FBS2tCLENBQUFBLENBQUFBLENBQVM2QyxDQUFLLENBQUMsQ0FFakIsQ0FBQSxJQUNML0QsQ0FBSyxFQUFBLDZCQUFBLENBQThCLENBQUUsS0FBQSxDQUFPK0QsQ0FBTyxDQUFBLE9BQUEsQ0FBUzdDLENBQVEsQ0FBQyxDQUN6RSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQge1xuICBBdXRoRmxvd09wdGlvbnMsXG4gIEF1dGhGbG93U0lXRU9wdGlvbnMsXG4gIE1vbmVyaXVtQ2xpZW50LFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBXcmFwIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aGUgTW9uZXJpdW0gcHJvdmlkZXIuXG4gKiBAZ3JvdXAgUHJvdmlkZXJcbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hpbGRyZW4gLSBSZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMuY2xpZW50SWQgLSBNb25lcml1bSBhdXRoIGZsb3cgY2xpZW50IGlkLlxuICogQHBhcmFtIHBhcmFtcy5yZWRpcmVjdFVyaSAtIE1vbmVyaXVtIGF1dGggZmxvdyByZWRpcmVjdCB1cmwuXG4gKiBAcGFyYW0gcGFyYW1zLmVudmlyb25tZW50IC0gTW9uZXJpdW0gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gcGFyYW1zLm9uUmVmcmVzaFRva2VuVXBkYXRlIC0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmcmVzaCB0b2tlbiBpcyB1cGRhdGVkLiBTdG9yZSBpdCBzZWN1cmVseS5cbiAqIEBwYXJhbSBwYXJhbXMucmVmcmVzaFRva2VuIC0gUHJvdmlkZSB0aGUgc2VjdXJlbHkgc3RvcmVkIHJlZnJlc2ggdG9rZW4gdG8gcmVjb25uZWN0LlxuICogQHBhcmFtIHBhcmFtcy5kZWJ1ZyAtIEVuYWJsZSBkZWJ1ZyBtb2RlLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJpLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94JyxcbiAgcmVmcmVzaFRva2VuLFxuICBvblJlZnJlc2hUb2tlblVwZGF0ZSxcbiAgZGVidWcgPSBmYWxzZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSByZWRpcmVjdFVyaSAqL1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGU/OiAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgZGVidWc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nka10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gICAgcmV0dXJuIG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmksXG4gICAgICBkZWJ1ZzogZGVidWcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MocmVmcmVzaFRva2VuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBhY2Nlc3M6JywgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVmcmVzaFRva2VuICYmICFpc0F1dGhvcml6ZWQgJiYgIWxvYWRpbmdBdXRoKSB7XG4gICAgICByZWNvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtyZWZyZXNoVG9rZW5dKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aEZsb3dPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3Qgc2l3ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM6IEF1dGhGbG93U0lXRU9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuc2l3ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNpZ24gaW4gd2l0aCBldGhlcmV1bTonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIHNpd2UsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBZGRyZXNzLFxuICBBZGRyZXNzZXNSZXNwb25zZSxcbiAgQXV0aENvbnRleHQsXG4gIEJhbGFuY2VzLFxuICBDaGFpbixcbiAgQ2hhaW5JZCxcbiAgQ3VycmVuY3ksXG4gIEN1cnJlbmN5Q29kZSxcbiAgSUJBTixcbiAgSUJBTnNSZXNwb25zZSxcbiAgTGlua0FkZHJlc3MsXG4gIExpbmtlZEFkZHJlc3MsXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTmV3T3JkZXIsXG4gIE9yZGVyLFxuICBPcmRlcnNSZXNwb25zZSxcbiAgT3JkZXJTdGF0ZSxcbiAgcGFyc2VDaGFpbixcbiAgUHJvZmlsZSxcbiAgUHJvZmlsZXNSZXNwb25zZSxcbiAgUmVxdWVzdEliYW5QYXlsb2FkLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkLFxuICBUb2tlbixcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge1xuICBNdXRhdGlvbk9wdGlvbnMsXG4gIE11dGF0aW9uUmVzdWx0LFxuICBRdWVyeU9wdGlvbnMsXG4gIFVzZUF1dGhSZXR1cm4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUXVlcnkga2V5cyBmb3IgUmVhY3QgcXVlcnlcbiAqICovXG5leHBvcnQgY29uc3Qga2V5cyA9IHtcbiAgZ2V0QWxsOiBbJ21vbmVyaXVtJ10sXG4gIGdldEF1dGhDb250ZXh0OiBbJ21vbmVyaXVtJywgJ2F1dGgtY29udGV4dCddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZTogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGUgPyBbcHJvZmlsZV0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEFkZHJlc3M6IChhZGRyZXNzOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnYWRkcmVzcycsIFthZGRyZXNzXV0sXG4gIGdldEFkZHJlc3NlczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdhZGRyZXNzZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0QmFsYW5jZXM6IChcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgY2hhaW46IENoYWluLFxuICAgIGN1cnJlbmNpZXM/OiBDdXJyZW5jeUNvZGUgfCBDdXJyZW5jeUNvZGVbXVxuICApID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAge1xuICAgICAgY3VycmVuY2llczogY3VycmVuY2llcyA/IFsuLi5jdXJyZW5jaWVzXSA6IFtdLFxuICAgICAgY2hhaW4sXG4gICAgICBhZGRyZXNzLFxuICAgIH0sXG4gIF0sXG4gIGdldEliYW46IChpYmFuOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnaWJhbicsIGliYW5dLFxuICBnZXRJYmFuczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdpYmFucycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBnZXRUb2tlbnM6IFsnbW9uZXJpdW0nLCAndG9rZW5zJ10sXG4gIGdldE9yZGVyOiAob3JkZXJJZDogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ29yZGVyJywgb3JkZXJJZF0sXG4gIGdldE9yZGVyczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdvcmRlcnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgc3VibWl0UHJvZmlsZURldGFpbHM6IFsnbW9uZXJpdW0nLCAnc3VibWl0LXByb2ZpbGUtZGV0YWlscyddLFxuICBtb3ZlSWJhbjogWydtb25lcml1bScsICdtb3ZlLWliYW4nXSxcbiAgcmVxdWVzdEliYW46IFsnbW9uZXJpdW0nLCAncmVxdWVzdC1pYmFuJ10sXG4gIHBsYWNlT3JkZXI6IFsnbW9uZXJpdW0nLCAncGxhY2Utb3JkZXInXSxcbiAgbGlua0FkZHJlc3M6IFsnbW9uZXJpdW0nLCAnbGluay1hZGRyZXNzJ10sXG59O1xuXG4vKiogSW50ZXJuYWwgaG9vayB0byB1c2UgU0RLICovXG5mdW5jdGlvbiB1c2VTZGsoKTogTW9uZXJpdW1DbGllbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VTZGsgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1vbmVyaXVtUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dD8uc2RrO1xufVxuXG4vKipcbiAqICMgUmVkaXJlY3QgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEF1dGhlbnRpY2F0aW9uXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHsgYXV0aG9yaXplLCBpc0F1dGhvcml6ZWQsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZUF1dGgoKTtcbiAqXG4gKiBhdXRob3JpemUoKTsgLy8gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKlxuICogLy8gT3B0LWluIHRvIGF1dG9tYXRlZCB3YWxsZXQgbGlua2luZyB3aXRoIHRoZXNlIHBhcmFtZXRlcnMuXG4gKiBhdXRob3JpemUoeyBhZGRyZXNzLCBzaWduYXR1cmUsIGNoYWluIH0pLlxuICogYGBgXG4gKlxuICogQHJldHVybnMge1VzZUF1dGhSZXR1cm59XG4gKiAtIGBhdXRob3JpemVgICAtIFJlZGlyZWN0cyB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogLSBgc2l3ZWAgICAgICAgLSBTaWduIGluIHdpdGggRXRoZXJldW0uIGh0dHBzOi8vbW9uZXJpdW0uY29tL3Npd2VcbiAqIC0gYGlzQXV0aG9yaXplZGAgLSBXaGV0aGVyIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQuXG4gKiAtIGBpc0xvYWRpbmdgIC0gV2hldGhlciB0aGUgYXV0aCBmbG93IGlzIGxvYWRpbmcuXG4gKiAtIGBlcnJvcmAgLSBFcnJvciBtZXNzYWdlIGlmIHRoZSBhdXRoIGZsb3cgZmFpbHMuXG4gKiAtIGBkaXNjb25uZWN0YCAtIERpc2Nvbm5lY3QgdGhlIHVzZXIuXG4gKiAtIGByZXZva2VBY2Nlc3NgIC0gUmV2b2tlIHRoZSB1c2VyJ3MgYWNjZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aCgpOiBVc2VBdXRoUmV0dXJuIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc0F1dGhvcml6ZWQ6IGNvbnRleHQuaXNBdXRob3JpemVkLFxuICAgIGF1dGhvcml6ZTogY29udGV4dC5hdXRob3JpemUsXG4gICAgc2l3ZTogY29udGV4dC5zaXdlLFxuICAgIGlzTG9hZGluZzogY29udGV4dC5pc0xvYWRpbmcsXG4gICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgZGlzY29ubmVjdDogY29udGV4dC5kaXNjb25uZWN0LFxuICAgIHJldm9rZUFjY2VzczogY29udGV4dC5yZXZva2VBY2Nlc3MsXG4gIH07XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGFcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQXV0aENvbnRleHQoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYXV0aC9vcGVyYXRpb24vYXV0aC1jb250ZXh0IHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoQ29udGV4dCh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QXV0aENvbnRleHQ+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QXV0aENvbnRleHQsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBJZiBubyBgcHJvZmlsZWAgaWQgaXMgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZC5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGUoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZSh7XG4gIHByb2ZpbGUsXG4gIHF1ZXJ5LFxufToge1xuICAvKiogVGhlIGlkIG9mIHRoZSBwcm9maWxlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEgfSA9IHVzZVByb2ZpbGVzKCk7XG5cbiAgY29uc3QgcHJvZmlsZVRvVXNlID0gcHJvZmlsZSB8fCAoZGF0YT8ucHJvZmlsZXM/LlswXT8uaWQgYXMgc3RyaW5nKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlVG9Vc2UpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgcHJvZmlsZVRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBwcm9maWxlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGVzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZXMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZXMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8VG9rZW5bXT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBcblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3MgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkZHJlc3Moe1xuICBhZGRyZXNzLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBhZGRyZXNzLiAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKGFkZHJlc3MpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgYWRkcmVzcyAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiBwcm9maWxlIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuY2hhaW5dIEZpbHRlciBiYXNlZCBvbiBjaGFpbiAtIENVUlJFTlRMWSBSRVRVUk5TIEFOIEVSUk9SLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzZXMoe1xuICBwcm9maWxlLFxuICBjaGFpbixcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgY2hhaW4/OiBDaGFpbiB8IENoYWluSWQ7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3Nlcyh7XG4gICAgICBwcm9maWxlLFxuICAgICAgY2hhaW46IGNoYWluID8gcGFyc2VDaGFpbihjaGFpbikgOiB1bmRlZmluZWQsXG4gICAgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzc2VzKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IGJhbGFuY2UgZm9yIGEgYW4gYWRkcmVzcyBvbiBhIGdpdmUgY2hhaW5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBmZXRjaCB0aGUgYmFsYW5jZSBmb3IuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlcz59IHBhcmFtcy5jaGFpbiBUaGUgY2hhaW4gdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBbcGFyYW1zLmN1cnJlbmNpZXNdIE9uZSBvciBtYW55OiBgZXVyYCwgYHVzZGAsIGBnYnBgLCBgaXNrYFxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9iYWxhbmNlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgYWRkcmVzcyxcbiAgY2hhaW4sXG4gIGN1cnJlbmNpZXMsXG4gIHF1ZXJ5LFxufToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBDaGFpbiB8IENoYWluSWQ7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeSB8IEN1cnJlbmN5W107XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoYWRkcmVzcywgcGFyc2VDaGFpbihjaGFpbiksIGN1cnJlbmNpZXMpLFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhhZGRyZXNzLCBjaGFpbiwgY3VycmVuY2llcyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlSUJBTigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU4oe1xuICBpYmFuLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgSUJBTiAqL1xuICBpYmFuOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxJQkFOPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKGliYW4pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbihpYmFuKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBpYmFuICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU5zKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vaWJhbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU5zKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiBGZXRjaCBJQkFOcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgY2hhaW4uICovXG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTnNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucyh7IHByb2ZpbGUsIGNoYWluIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqICBUaGUgaWQgb2YgdGhlIG9yZGVyLiAqL1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJzUmVzcG9uc2U+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTdWJtaXQgdGhlIHJlcXVpcmVkIGNvbXBsaWFuY2UgaW5mb3JtYXRpb24gdG8gb25ib2FyZCB0aGUgY3VzdG9tZXIuXG4gKlxuICogTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZmlsZSBcImtpbmRcIiBmcm9tIHBlcnNvbmFsIHRvIGNvcnBvcmF0ZSBvciB2aWNlIHZlcnNhIG9uY2UgdGhlIHByb2ZpbGUgaGFzIGJlZW4gYXBwcm92ZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ucHJvZmlsZSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gc3VibWl0IHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3VibWl0UHJvZmlsZURldGFpbHMsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVN1Ym1pdFByb2ZpbGVEZXRhaWxzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9wcm9maWxlcy9vcGVyYXRpb24vcHJvZmlsZS1kZXRhaWxzIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdWJtaXRQcm9maWxlRGV0YWlscyh7XG4gIHByb2ZpbGUsXG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIHByb2ZpbGU6IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuICA+O1xufSk6IE11dGF0aW9uUmVzdWx0PFxuICAnc3VibWl0UHJvZmlsZURldGFpbHMnLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnN1Ym1pdFByb2ZpbGVEZXRhaWxzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuc3VibWl0UHJvZmlsZURldGFpbHMocHJvZmlsZSwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc3VibWl0UHJvZmlsZURldGFpbHM6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhbiBJQkFOIGZvciBhIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgbGlua2VkIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEFueSBsaW5rZWQgYWRkcmVzcyBjYW4gdXNlIHRoaXMgSUJBTiBmb3Igb3V0Z29pbmcgcGF5bWVudHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICByZXF1ZXN0SWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUmVxdWVzdEliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9yZXF1ZXN0LWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlcXVlc3RJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFJlc3BvbnNlU3RhdHVzLCBFcnJvciwgUmVxdWVzdEliYW5QYXlsb2FkPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAncmVxdWVzdEliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5yZXF1ZXN0SWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25zLFxuICAgIH06IFJlcXVlc3RJYmFuUGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5yZXF1ZXN0SWJhbih7IGFkZHJlc3MsIGNoYWluLCBlbWFpbE5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0SWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogTW92ZSBhbiBleGlzdGluZyBJQkFOIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW4gY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG1vdmVJYmFuLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VNb3ZlSWJhbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvaWJhbnMvb3BlcmF0aW9uL21vdmUtaWJhbiB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb3ZlSWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4gID47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ21vdmVJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubW92ZUliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGliYW4sXG4gICAgICBhZGRyZXNzLFxuICAgICAgY2hhaW4sXG4gICAgfTogTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5tb3ZlSWJhbihpYmFuLCB7IGFkZHJlc3MsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW4odmFyaWFibGVzLmliYW4pLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW5zKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyh2YXJpYWJsZXMuYWRkcmVzcyksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1vdmVJYmFuOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhkYXRhLmFkZHJlc3MsIGRhdGEuY2hhaW4pLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwbGFjZU9yZGVyOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIG11dGF0aW9uLFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3NlcygpLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFyaWFibGVzLnByb2ZpbGUpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUodmFyaWFibGVzLnByb2ZpbGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxpbmtBZGRyZXNzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEFQSSBjb25zdW1lcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIHN1YnNjcmliZSB0byBhIFdlYlNvY2tldCBmb3IgcmVhbC10aW1lIG9yZGVyIG5vdGlmaWNhdGlvbnMuIFRoaXMgV2ViU29ja2V0IGNvbXBsaWVzIHdpdGggdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBQcm90b2NvbCwgYWxsb3dpbmcgdGhlIHVzZSBvZiBzdGFuZGFyZCBXZWJTb2NrZXQgbGlicmFyaWVzIGZvciBzdWJzY3JpcHRpb24uXG4gKlxuICogVGhlIFdlYlNvY2tldCBlbWl0cyBhbiBldmVudCB3aGVuIGEgb3JkZXIgY2hhbmdlcyBzdGF0ZTpcbiAqXG4gKiBgcGxhY2VkYDogVGhlIG9yZGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkLlxuICpcbiAqIGBwZW5kaW5nYDogVGhlIG9yZGVyIGlzIGF3YWl0aW5nIGZ1bGZpbGxtZW50IChlLmcuLCByZXZpZXcsIG1pbnRpbmcvYnVybmluZyB0b2tlbnMsIG9yIHNlbmRpbmcvcmVjZWl2aW5nIFNFUEEgcGF5bWVudCkuXG4gKlxuICogYHByb2Nlc3NlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIGByZWplY3RlZGA6IFRoZSBvcmRlciB3YXMgcmVqZWN0ZWQsIHBvc3NpYmx5IGR1ZSB0byBjb21wbGlhbmNlIHJlYXNvbnMgb3IgaW5zdWZmaWNpZW50IGZ1bmRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge09yZGVyU3RhdGV9IFtwYXJhbXMuc3RhdGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIGlkIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vbk1lc3NhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvcmRlciBub3RpZmljYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFyYW1zLm9uRXJyb3JdIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Igbm90aWZpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3RhdGUsXG4gKiAgICBwcm9maWxlLFxuICogICAgb25NZXNzYWdlLFxuICogICAgb25FcnJvclxuICogfSA9IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YxI29wZXJhdGlvbi9vcmRlcnMtbm90aWZpY2F0aW9uc3wgQVBJIERvY3VtZW50YXRpb259XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFVuc3Vic2NyaWJlIGZyb20gb3JkZXIgbm90aWZpY2F0aW9ucy5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24gPSAoe1xuICBzdGF0ZSxcbiAgcHJvZmlsZSxcbiAgb25NZXNzYWdlLFxuICBvbkVycm9yLFxufToge1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG9uTWVzc2FnZTogKG9yZGVyOiBPcmRlcikgPT4gdm9pZDtcbiAgb25FcnJvcj86ICgoZXJyOiBFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNkaykge1xuICAgICAgc2RrLnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgICAgICB9LFxuICAgICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZSxcbiAgICAgICAgb25FcnJvcjogb25FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgaW4gZGV2ZWxvcG1lbnQgbW9kZSwgUmVhY3QgU3RyaWN0IG1vZGUgd2lsbCBjYXVzZSB0aGlzXG4gICAgICAgKiBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0d2ljZSBvbiBjbGllbnQgc2lkZSByb3V0ZSBjaGFuZ2VzLlxuICAgICAgICogU28gYSBzb2NrZXQgd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbi5cbiAgICAgICAqIFRoaXMgaXMgbm90IGFuIGlzc3VlIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgICAqL1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGs/LnVuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHsgc3RhdGU6IHN0YXRlLCBwcm9maWxlOiBwcm9maWxlIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzZGssIHByb2ZpbGUsIHN0YXRlXSk7XG5cbiAgcmV0dXJuICgpID0+XG4gICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbn07XG5cbi8qKiBFeHBvcnQgdHlwZXMgZm9yIGRvY3VtZW50YXRpb24gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQWRkcmVzcyxcbiAgQmFsYW5jZXMsXG4gIElCQU4sXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTGlua0FkZHJlc3MsXG4gIFByb2ZpbGUsXG4gIFRva2VuLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQsXG4gIE5ld09yZGVyLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgT3JkZXIsXG59O1xuIl19
|
|
1
|
+
'use strict';var react=require('react'),reactQuery=require('@tanstack/react-query'),sdk=require('@monerium/sdk'),jsxRuntime=require('react/jsx-runtime');var g=react.createContext(null);var J=({children:e,clientId:r,redirectUri:n,environment:t="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=false})=>{let s=reactQuery.useQueryClient(),[o]=react.useState(()=>new sdk.MoneriumClient({environment:t,clientId:r,redirectUri:n,debug:u})),[c,y]=react.useState(false),[p,b]=react.useState(null),[k,I]=react.useState(true);react.useEffect(()=>((async()=>{if(o)try{y(await o.getAccess());}catch(m){b(m);}finally{I(false),o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})(),()=>{o&&o.disconnect();}),[]),react.useEffect(()=>{i&&!c&&!k&&(async()=>{if(o)try{y(await o.getAccess(i));}catch(m){b(m);}finally{o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})();},[i]);let x=react.useCallback(async w=>{try{o&&await o.authorize(w);}catch(m){console.error("Error during authorization:",m),b(m);}},[o]),z=react.useCallback(async w=>{try{o&&await o.siwe(w);}catch(m){console.error("Error during sign in with ethereum:",m),b(m);}},[o]),C=async()=>{try{o&&await o.revokeAccess();}catch(w){console.error("Error during revoking access:",w),b(w);}finally{s.clear(),y(false);}};return jsxRuntime.jsx(g.Provider,{value:{sdk:o,authorize:x,siwe:z,isAuthorized:c,isLoading:k,error:p,disconnect:async()=>o?.disconnect(),revokeAccess:async()=>C()},children:e})};var d={getAll:["monerium"],getAuthContext:["monerium","auth-context"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",{currencies:n?[...n]:[],chain:r,address:e}],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"],getSignatures:e=>["monerium","signatures",...e?[e]:[]]};function l(){let e=react.useContext(g);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function f(){let e=react.useContext(g);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,siwe:e.siwe,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function qe({query:e}={}){let{isAuthorized:r}=f(),n=l();return reactQuery.useQuery({...e,queryKey:d.getAuthContext,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getAuthContext()},enabled:!!(n&&r&&(e?.enabled??true))})}function ve({profile:e,query:r}={}){let{isAuthorized:n}=f(),t=l(),{data:i}=B(),a=e||i?.profiles?.[0]?.id;return reactQuery.useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return t.getProfile(a)},enabled:!!(t&&n&&a&&(r?.enabled??true))})}function B({query:e}={}){let{isAuthorized:r}=f(),n=l();return reactQuery.useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??true))})}function Ie({query:e}={}){let r=l(),{isAuthorized:n}=f();return reactQuery.useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??true))})}function xe({address:e,query:r={}}){let n=l(),{isAuthorized:t}=f();return reactQuery.useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function ze({profile:e,chain:r,query:n={}}={}){let t=l(),{isAuthorized:i}=f();return reactQuery.useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?sdk.parseChain(r):void 0}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getAddresses({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function Ce({address:e,chain:r,currencies:n,query:t}){let i=l(),{isAuthorized:a}=f();return reactQuery.useQuery({...t,queryKey:d.getBalances(e,sdk.parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(t?.enabled??true))})}function Ke({iban:e,query:r}){let n=l(),{isAuthorized:t}=f();return reactQuery.useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function Re({profile:e,chain:r,query:n={}}={}){let t=l(),{isAuthorized:i}=f();return reactQuery.useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getIbans({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function Ne({orderId:e,query:r={}}){let n=l(),{isAuthorized:t}=f();return reactQuery.useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&t&&e&&(r.enabled??true))})}function De({query:e={},...r}={}){let n=l(),{isAuthorized:t}=f();return reactQuery.useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&t&&(e.enabled??true))})}function Me({profile:e,mutation:r={}}){let n=l(),{isAuthorized:t}=f(),i=reactQuery.useQueryClient(),{mutateAsync:a,...u}=reactQuery.useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.submitProfileDetails(e,s)},onSuccess(s,o,c,y){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(s,o,c,y);},onError(s,o,c,y){throw r?.onError?.(s,o,c,y),s}});return {submitProfileDetails:a,...u}}function Be({mutation:e={}}={}){let r=l(),{isAuthorized:n}=f(),{mutateAsync:t,...i}=reactQuery.useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:s})},onSuccess(a,u,s,o){e?.onSuccess?.(a,u,s,o);},onError(a,u,s,o){throw e?.onError?.(a,u,s,o),a}});return {requestIban:t,...i}}function Qe({mutation:e={}}={}){let r=l(),{isAuthorized:n}=f(),t=reactQuery.useQueryClient(),{mutateAsync:i,...a}=reactQuery.useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:s,chain:o})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:s,chain:o})},onSuccess(u,s,o,c){t.invalidateQueries({queryKey:d.getIban(s.iban)}),t.invalidateQueries({queryKey:d.getIbans()}),t.invalidateQueries({queryKey:d.getAddress(s.address)}),e?.onSuccess?.(u,s,o,c);},onError(u,s,o,c){throw e?.onError?.(u,s,o,c),u}});return {moveIban:i,...a}}function Ue({supportingDocument:e,mutation:r}={}){let n=l(),{isAuthorized:t}=f(),i=reactQuery.useQueryClient(),{mutateAsync:a,...u}=reactQuery.useMutation({...r,mutationKey:d.placeOrder,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");let o;if(parseInt(s.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");o=(await n.uploadSupportingDocument(e)).id;}let c={...s,documentId:o};return n.placeOrder(c)},onSuccess(s,o,c,y){i.invalidateQueries({queryKey:d.getOrders()});let p=s;p.address&&p?.chain&&i.invalidateQueries({queryKey:d.getBalances(p.address,p.chain)}),r?.onSuccess?.(s,o,c,y);},onError(s,o,c,y){throw r?.onError?.(s,o,c,y),s}});return {placeOrder:a,...u}}function Fe({query:e,options:r}={}){let n=l(),{isAuthorized:t}=f();return reactQuery.useQuery({...r,queryKey:d.getSignatures(e),queryFn:()=>{if(!n)throw new Error("No SDK instance available");return n.getSignatures(e)},enabled:!!(n&&t&&(r?.enabled??true))})}function Le({mutation:e}={}){let r=l(),{isAuthorized:n}=f(),t=reactQuery.useQueryClient(),{mutateAsync:i,...a}=reactQuery.useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,s,o,c){t.invalidateQueries({queryKey:d.getAddresses()}),s.profile&&t.invalidateQueries({queryKey:d.getProfile(s.profile)}),e?.onSuccess?.(u,s,o,c);},onError(u,s,o,c){throw e?.onError?.(u,s,o,c),u}});return {linkAddress:i,...a}}var Te=({state:e,profile:r,onMessage:n,onError:t})=>{let i=l();return react.useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:t}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};exports.MoneriumContext=g;exports.MoneriumProvider=J;exports.keys=d;exports.useAddress=xe;exports.useAddresses=ze;exports.useAuth=f;exports.useAuthContext=qe;exports.useBalances=Ce;exports.useIBAN=Ke;exports.useIBANs=Re;exports.useLinkAddress=Le;exports.useMoveIban=Qe;exports.useOrder=Ne;exports.useOrders=De;exports.usePlaceOrder=Ue;exports.useProfile=ve;exports.useProfiles=B;exports.useRequestIban=Be;exports.useSignatures=Fe;exports.useSubmitProfileDetails=Me;exports.useSubscribeOrderNotification=Te;exports.useTokens=Ie;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlQXV0aENvbnRleHQiLCJxdWVyeSIsInVzZVF1ZXJ5IiwidXNlUHJvZmlsZSIsImRhdGEiLCJ1c2VQcm9maWxlcyIsInByb2ZpbGVUb1VzZSIsInVzZVRva2VucyIsInVzZUFkZHJlc3MiLCJ1c2VBZGRyZXNzZXMiLCJwYXJzZUNoYWluIiwidXNlQmFsYW5jZXMiLCJ1c2VJQkFOIiwidXNlSUJBTnMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VTdWJtaXRQcm9maWxlRGV0YWlscyIsIm11dGF0aW9uIiwibXV0YXRlQXN5bmMiLCJyZXN0IiwidXNlTXV0YXRpb24iLCJib2R5IiwidmFyaWFibGVzIiwibXV0YXRpb25Db250ZXh0IiwidmFycyIsInVzZVJlcXVlc3RJYmFuIiwiZW1haWxOb3RpZmljYXRpb25zIiwidXNlTW92ZUliYW4iLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJvcmRlckRhdGEiLCJ1c2VTaWduYXR1cmVzIiwib3B0aW9ucyIsInVzZUxpbmtBZGRyZXNzIiwidXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24iLCJzdGF0ZSIsIm9uTWVzc2FnZSIsIm9uRXJyb3IiXSwibWFwcGluZ3MiOiJ5SkFJTyxJQUFNQSxDQUFBQSxDQUFrQkMsbUJBQUFBLENBRTdCLElBQUksRUNrQkMsSUFBTUMsRUFBbUIsQ0FBQyxDQUMvQixRQUFBLENBQUFDLENBQUFBLENBQ0EsUUFBQSxDQUFBQyxDQUFBQSxDQUNBLFdBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxXQUFBLENBQUFDLENBQUFBLENBQWMsU0FBQSxDQUNkLFlBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxvQkFBQSxDQUFBQyxDQUFBQSxDQUNBLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FBUSxLQUNWLENBQUEsR0FVTSxDQUNKLElBQU1DLENBQUFBLENBQWNDLHlCQUFBQSxFQUFlLENBRTdCLENBQUNDLENBQUcsQ0FBQSxDQUFJQyxjQUFBQSxDQUFTLElBRWQsSUFBSUMsa0JBQUFBLENBQWUsQ0FDeEIsWUFBQVIsQ0FBQUEsQ0FDQSxRQUFBLENBQUFGLENBQUFBLENBQ0EsV0FBQSxDQUFBQyxDQUFBQSxDQUNBLEtBQUEsQ0FBT0ksQ0FDVCxDQUFDLENBQ0YsQ0FBQSxDQUVLLENBQUNNLENBQUFBLENBQWNDLENBQWUsQ0FBQSxDQUFJSCxjQUFBQSxDQUFrQixLQUFLLENBQUEsQ0FDekQsQ0FBQ0ksQ0FBQUEsQ0FBT0MsQ0FBUSxDQUFBLENBQUlMLGNBQUFBLENBQWlDLElBQUksQ0FBQSxDQUN6RCxDQUFDTSxDQUFBQSxDQUFhQyxDQUFjLENBQUEsQ0FBSVAsY0FBQUEsQ0FBUyxJQUFJLENBQUEsQ0FF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LENBQVNpRCxDQUFLLENBQUMsQ0FBQSxDQUVqQixJQUNMbkUsQ0FBQUEsRUFBSyw2QkFBQSxDQUE4QixDQUFFLEtBQUEsQ0FBT21FLENBQUFBLENBQU8sT0FBQSxDQUFTakQsQ0FBUSxDQUFDLENBQ3pFIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgU2RrSW5zdGFuY2UsIFVzZUF1dGhSZXR1cm4gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IE1vbmVyaXVtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8XG4gIChVc2VBdXRoUmV0dXJuICYgU2RrSW5zdGFuY2UpIHwgbnVsbFxuPihudWxsKTtcbiIsImltcG9ydCB7IFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCB7XG4gIEF1dGhGbG93T3B0aW9ucyxcbiAgQXV0aEZsb3dTSVdFT3B0aW9ucyxcbiAgTW9uZXJpdW1DbGllbnQsXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuXG4vKipcbiAqIFdyYXAgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBNb25lcml1bSBwcm92aWRlci5cbiAqIEBncm91cCBQcm92aWRlclxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5jaGlsZHJlbiAtIFJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHBhcmFtcy5jbGllbnRJZCAtIE1vbmVyaXVtIGF1dGggZmxvdyBjbGllbnQgaWQuXG4gKiBAcGFyYW0gcGFyYW1zLnJlZGlyZWN0VXJpIC0gTW9uZXJpdW0gYXV0aCBmbG93IHJlZGlyZWN0IHVybC5cbiAqIEBwYXJhbSBwYXJhbXMuZW52aXJvbm1lbnQgLSBNb25lcml1bSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSBwYXJhbXMub25SZWZyZXNoVG9rZW5VcGRhdGUgLSBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZWZyZXNoIHRva2VuIGlzIHVwZGF0ZWQuIFN0b3JlIGl0IHNlY3VyZWx5LlxuICogQHBhcmFtIHBhcmFtcy5yZWZyZXNoVG9rZW4gLSBQcm92aWRlIHRoZSBzZWN1cmVseSBzdG9yZWQgcmVmcmVzaCB0b2tlbiB0byByZWNvbm5lY3QuXG4gKiBAcGFyYW0gcGFyYW1zLmRlYnVnIC0gRW5hYmxlIGRlYnVnIG1vZGUuXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Qcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGllbnRJZCxcbiAgcmVkaXJlY3RVcmksXG4gIGVudmlyb25tZW50ID0gJ3NhbmRib3gnLFxuICByZWZyZXNoVG9rZW4sXG4gIG9uUmVmcmVzaFRva2VuVXBkYXRlLFxuICBkZWJ1ZyA9IGZhbHNlLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICByZWRpcmVjdFVyaTogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHJlZGlyZWN0VXJpICovXG4gIHJlZGlyZWN0VXJsPzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86ICdzYW5kYm94JyB8ICdwcm9kdWN0aW9uJztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICBvblJlZnJlc2hUb2tlblVwZGF0ZT86ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBkZWJ1Zz86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCBbc2RrXSA9IHVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBJbml0aWFsaXplIHRoZSBTREtcbiAgICByZXR1cm4gbmV3IE1vbmVyaXVtQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgY2xpZW50SWQsXG4gICAgICByZWRpcmVjdFVyaSxcbiAgICAgIGRlYnVnOiBkZWJ1ZyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgW2lzQXV0aG9yaXplZCwgc2V0SXNBdXRob3JpemVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVua25vd24gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmdBdXRoLCBzZXRMb2FkaW5nQXV0aF0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldExvYWRpbmdBdXRoKGZhbHNlKTtcbiAgICAgICAgICBpZiAoc2RrPy5iZWFyZXJQcm9maWxlKSB7XG4gICAgICAgICAgICBvblJlZnJlc2hUb2tlblVwZGF0ZT8uKHNkay5iZWFyZXJQcm9maWxlLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25uZWN0KCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGsuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHJlY29ubmVjdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRJc0F1dGhvcml6ZWQoYXdhaXQgc2RrLmdldEFjY2VzcyhyZWZyZXNoVG9rZW4pKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZWZyZXNoVG9rZW4gJiYgIWlzQXV0aG9yaXplZCAmJiAhbG9hZGluZ0F1dGgpIHtcbiAgICAgIHJlY29ubmVjdCgpO1xuICAgIH1cbiAgfSwgW3JlZnJlc2hUb2tlbl0pO1xuXG4gIGNvbnN0IGF1dGhvcml6ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM/OiBBdXRoRmxvd09wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuYXV0aG9yaXplKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgYXV0aG9yaXphdGlvbjonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCBzaXdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBhcmFtczogQXV0aEZsb3dTSVdFT3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNkaykge1xuICAgICAgICAgIGF3YWl0IHNkay5zaXdlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgc2lnbiBpbiB3aXRoIGV0aGVyZXVtOicsIGVycik7XG4gICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2RrXVxuICApO1xuXG4gIGNvbnN0IHJldm9rZUFjY2VzcyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBhd2FpdCBzZGsucmV2b2tlQWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcmV2b2tpbmcgYWNjZXNzOicsIGVycik7XG4gICAgICBzZXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyeUNsaWVudC5jbGVhcigpO1xuICAgICAgc2V0SXNBdXRob3JpemVkKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8TW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBzZGssXG4gICAgICAgIGF1dGhvcml6ZSxcbiAgICAgICAgc2l3ZSxcbiAgICAgICAgaXNBdXRob3JpemVkLFxuICAgICAgICBpc0xvYWRpbmc6IGxvYWRpbmdBdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZGlzY29ubmVjdDogYXN5bmMgKCkgPT4gc2RrPy5kaXNjb25uZWN0KCksXG4gICAgICAgIHJldm9rZUFjY2VzczogYXN5bmMgKCkgPT4gcmV2b2tlQWNjZXNzKCksXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L01vbmVyaXVtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnksIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IE1vbmVyaXVtQ2xpZW50LCB7XG4gIEFkZHJlc3MsXG4gIEFkZHJlc3Nlc1Jlc3BvbnNlLFxuICBBdXRoQ29udGV4dCxcbiAgQmFsYW5jZXMsXG4gIENoYWluLFxuICBDaGFpbklkLFxuICBDdXJyZW5jeSxcbiAgQ3VycmVuY3lDb2RlLFxuICBJQkFOLFxuICBJQkFOc1Jlc3BvbnNlLFxuICBMaW5rQWRkcmVzcyxcbiAgTGlua2VkQWRkcmVzcyxcbiAgTW92ZUliYW5QYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyc1Jlc3BvbnNlLFxuICBPcmRlclN0YXRlLFxuICBwYXJzZUNoYWluLFxuICBQcm9maWxlLFxuICBQcm9maWxlc1Jlc3BvbnNlLFxuICBSZXF1ZXN0SWJhblBheWxvYWQsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBTaWduYXR1cmVzUXVlcnlQYXJhbXMsXG4gIFNpZ25hdHVyZXNSZXNwb25zZSxcbiAgU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkLFxuICBUb2tlbixcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge1xuICBNdXRhdGlvbk9wdGlvbnMsXG4gIE11dGF0aW9uUmVzdWx0LFxuICBRdWVyeU9wdGlvbnMsXG4gIFVzZUF1dGhSZXR1cm4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUXVlcnkga2V5cyBmb3IgUmVhY3QgcXVlcnlcbiAqICovXG5leHBvcnQgY29uc3Qga2V5cyA9IHtcbiAgZ2V0QWxsOiBbJ21vbmVyaXVtJ10sXG4gIGdldEF1dGhDb250ZXh0OiBbJ21vbmVyaXVtJywgJ2F1dGgtY29udGV4dCddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZTogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGUgPyBbcHJvZmlsZV0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEFkZHJlc3M6IChhZGRyZXNzOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnYWRkcmVzcycsIFthZGRyZXNzXV0sXG4gIGdldEFkZHJlc3NlczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdhZGRyZXNzZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0QmFsYW5jZXM6IChcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgY2hhaW46IENoYWluLFxuICAgIGN1cnJlbmNpZXM/OiBDdXJyZW5jeUNvZGUgfCBDdXJyZW5jeUNvZGVbXVxuICApID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAge1xuICAgICAgY3VycmVuY2llczogY3VycmVuY2llcyA/IFsuLi5jdXJyZW5jaWVzXSA6IFtdLFxuICAgICAgY2hhaW4sXG4gICAgICBhZGRyZXNzLFxuICAgIH0sXG4gIF0sXG4gIGdldEliYW46IChpYmFuOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnaWJhbicsIGliYW5dLFxuICBnZXRJYmFuczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdpYmFucycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBnZXRUb2tlbnM6IFsnbW9uZXJpdW0nLCAndG9rZW5zJ10sXG4gIGdldE9yZGVyOiAob3JkZXJJZDogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ29yZGVyJywgb3JkZXJJZF0sXG4gIGdldE9yZGVyczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdvcmRlcnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgc3VibWl0UHJvZmlsZURldGFpbHM6IFsnbW9uZXJpdW0nLCAnc3VibWl0LXByb2ZpbGUtZGV0YWlscyddLFxuICBtb3ZlSWJhbjogWydtb25lcml1bScsICdtb3ZlLWliYW4nXSxcbiAgcmVxdWVzdEliYW46IFsnbW9uZXJpdW0nLCAncmVxdWVzdC1pYmFuJ10sXG4gIHBsYWNlT3JkZXI6IFsnbW9uZXJpdW0nLCAncGxhY2Utb3JkZXInXSxcbiAgbGlua0FkZHJlc3M6IFsnbW9uZXJpdW0nLCAnbGluay1hZGRyZXNzJ10sXG4gIGdldFNpZ25hdHVyZXM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnc2lnbmF0dXJlcycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxufTtcblxuLyoqIEludGVybmFsIGhvb2sgdG8gdXNlIFNESyAqL1xuZnVuY3Rpb24gdXNlU2RrKCk6IE1vbmVyaXVtQ2xpZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2RrIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ/LnNkaztcbn1cblxuLyoqXG4gKiAjIFJlZGlyZWN0IHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBdXRoZW50aWNhdGlvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7IGF1dGhvcml6ZSwgaXNBdXRob3JpemVkLCBpc0xvYWRpbmcsIGVycm9yIH0gPSB1c2VBdXRoKCk7XG4gKlxuICogYXV0aG9yaXplKCk7IC8vIFJlZGlyZWN0cyB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICpcbiAqIC8vIE9wdC1pbiB0byBhdXRvbWF0ZWQgd2FsbGV0IGxpbmtpbmcgd2l0aCB0aGVzZSBwYXJhbWV0ZXJzLlxuICogYXV0aG9yaXplKHsgYWRkcmVzcywgc2lnbmF0dXJlLCBjaGFpbiB9KS5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtVc2VBdXRoUmV0dXJufVxuICogLSBgYXV0aG9yaXplYCAgLSBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIC0gYHNpd2VgICAgICAgIC0gU2lnbiBpbiB3aXRoIEV0aGVyZXVtLiBodHRwczovL21vbmVyaXVtLmNvbS9zaXdlXG4gKiAtIGBpc0F1dGhvcml6ZWRgIC0gV2hldGhlciB0aGUgdXNlciBpcyBhdXRob3JpemVkLlxuICogLSBgaXNMb2FkaW5nYCAtIFdoZXRoZXIgdGhlIGF1dGggZmxvdyBpcyBsb2FkaW5nLlxuICogLSBgZXJyb3JgIC0gRXJyb3IgbWVzc2FnZSBpZiB0aGUgYXV0aCBmbG93IGZhaWxzLlxuICogLSBgZGlzY29ubmVjdGAgLSBEaXNjb25uZWN0IHRoZSB1c2VyLlxuICogLSBgcmV2b2tlQWNjZXNzYCAtIFJldm9rZSB0aGUgdXNlcidzIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGgoKTogVXNlQXV0aFJldHVybiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1vbmVyaXVtUHJvdmlkZXInKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNBdXRob3JpemVkOiBjb250ZXh0LmlzQXV0aG9yaXplZCxcbiAgICBhdXRob3JpemU6IGNvbnRleHQuYXV0aG9yaXplLFxuICAgIHNpd2U6IGNvbnRleHQuc2l3ZSxcbiAgICBpc0xvYWRpbmc6IGNvbnRleHQuaXNMb2FkaW5nLFxuICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgIGRpc2Nvbm5lY3Q6IGNvbnRleHQuZGlzY29ubmVjdCxcbiAgICByZXZva2VBY2Nlc3M6IGNvbnRleHQucmV2b2tlQWNjZXNzLFxuICB9O1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEF1dGhlbnRpY2F0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUF1dGhDb250ZXh0KCk7XG4gKiBgYGBcblxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2F1dGgvb3BlcmF0aW9uL2F1dGgtY29udGV4dCB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aENvbnRleHQoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPEF1dGhDb250ZXh0Pjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEF1dGhDb250ZXh0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogSWYgbm8gYHByb2ZpbGVgIGlkIGlzIHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlKCk7XG4gKiBgYGBcblxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGUoe1xuICBwcm9maWxlLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgcHJvZmlsZSAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZT47XG59ID0ge30pIHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBkYXRhIH0gPSB1c2VQcm9maWxlcygpO1xuXG4gIGNvbnN0IHByb2ZpbGVUb1VzZSA9IHByb2ZpbGUgfHwgKGRhdGE/LnByb2ZpbGVzPy5bMF0/LmlkIGFzIHN0cmluZyk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGVUb1VzZSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJvZmlsZVRvVXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvZmlsZSBJZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIHByb2ZpbGVUb1VzZSAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogIyBHZXQgcHJvZmlsZXNcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGVzKHtcbiAgcXVlcnksXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlc1Jlc3BvbnNlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGVzLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGVzKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VUb2tlbnMoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vdG9rZW5zIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbnMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFRva2VuW10+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFRva2VucyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRUb2tlbnMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBZGRyZXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3MgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkZHJlc3Moe1xuICBhZGRyZXNzLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBhZGRyZXNzLiAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKGFkZHJlc3MpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgYWRkcmVzcyAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiBwcm9maWxlIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuY2hhaW5dIEZpbHRlciBiYXNlZCBvbiBjaGFpbiAtIENVUlJFTlRMWSBSRVRVUk5TIEFOIEVSUk9SLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzZXMoe1xuICBwcm9maWxlLFxuICBjaGFpbixcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgY2hhaW4/OiBDaGFpbiB8IENoYWluSWQ7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3Nlcyh7XG4gICAgICBwcm9maWxlLFxuICAgICAgY2hhaW46IGNoYWluID8gcGFyc2VDaGFpbihjaGFpbikgOiB1bmRlZmluZWQsXG4gICAgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzc2VzKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IGJhbGFuY2UgZm9yIGEgYW4gYWRkcmVzcyBvbiBhIGdpdmUgY2hhaW5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBmZXRjaCB0aGUgYmFsYW5jZSBmb3IuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlcz59IHBhcmFtcy5jaGFpbiBUaGUgY2hhaW4gdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBbcGFyYW1zLmN1cnJlbmNpZXNdIE9uZSBvciBtYW55OiBgZXVyYCwgYHVzZGAsIGBnYnBgLCBgaXNrYFxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9iYWxhbmNlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgYWRkcmVzcyxcbiAgY2hhaW4sXG4gIGN1cnJlbmNpZXMsXG4gIHF1ZXJ5LFxufToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBDaGFpbiB8IENoYWluSWQ7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeSB8IEN1cnJlbmN5W107XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoYWRkcmVzcywgcGFyc2VDaGFpbihjaGFpbiksIGN1cnJlbmNpZXMpLFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhhZGRyZXNzLCBjaGFpbiwgY3VycmVuY2llcyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlSUJBTigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU4oe1xuICBpYmFuLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgSUJBTiAqL1xuICBpYmFuOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxJQkFOPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKGliYW4pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbihpYmFuKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBpYmFuICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU5zKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vaWJhbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU5zKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiBGZXRjaCBJQkFOcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgY2hhaW4uICovXG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTnNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucyh7IHByb2ZpbGUsIGNoYWluIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqICBUaGUgaWQgb2YgdGhlIG9yZGVyLiAqL1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJzUmVzcG9uc2U+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTdWJtaXQgdGhlIHJlcXVpcmVkIGNvbXBsaWFuY2UgaW5mb3JtYXRpb24gdG8gb25ib2FyZCB0aGUgY3VzdG9tZXIuXG4gKlxuICogTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZmlsZSBcImtpbmRcIiBmcm9tIHBlcnNvbmFsIHRvIGNvcnBvcmF0ZSBvciB2aWNlIHZlcnNhIG9uY2UgdGhlIHByb2ZpbGUgaGFzIGJlZW4gYXBwcm92ZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ucHJvZmlsZSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gc3VibWl0IHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3VibWl0UHJvZmlsZURldGFpbHMsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVN1Ym1pdFByb2ZpbGVEZXRhaWxzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9wcm9maWxlcy9vcGVyYXRpb24vcHJvZmlsZS1kZXRhaWxzIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdWJtaXRQcm9maWxlRGV0YWlscyh7XG4gIHByb2ZpbGUsXG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIHByb2ZpbGU6IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuICA+O1xufSk6IE11dGF0aW9uUmVzdWx0PFxuICAnc3VibWl0UHJvZmlsZURldGFpbHMnLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnN1Ym1pdFByb2ZpbGVEZXRhaWxzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuc3VibWl0UHJvZmlsZURldGFpbHMocHJvZmlsZSwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGUpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBzdWJtaXRQcm9maWxlRGV0YWlsczogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIElCQU4gZm9yIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW5kIGNoYWluLlxuICogQWxsIGluY29taW5nIEVVUiBwYXltZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcm91dGVkIHRvIHRoZSBsaW5rZWQgYWRkcmVzcyBvbiB0aGF0IGNoYWluLlxuICogQW55IGxpbmtlZCBhZGRyZXNzIGNhbiB1c2UgdGhpcyBJQkFOIGZvciBvdXRnb2luZyBwYXltZW50cy5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHJlcXVlc3RJYmFuLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VSZXF1ZXN0SWJhbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL3JlcXVlc3QtaWJhbiB8IEFQSSBEb2N1bWVudGF0aW9ufX1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVxdWVzdEliYW4oe1xuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8UmVzcG9uc2VTdGF0dXMsIEVycm9yLCBSZXF1ZXN0SWJhblBheWxvYWQ+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8XG4gICdyZXF1ZXN0SWJhbicsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBFcnJvcixcbiAgUmVxdWVzdEliYW5QYXlsb2FkXG4+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnJlcXVlc3RJYmFuLFxuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBhZGRyZXNzLFxuICAgICAgY2hhaW4sXG4gICAgICBlbWFpbE5vdGlmaWNhdGlvbnMsXG4gICAgfTogUmVxdWVzdEliYW5QYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLnJlcXVlc3RJYmFuKHsgYWRkcmVzcywgY2hhaW4sIGVtYWlsTm90aWZpY2F0aW9ucyB9KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdEliYW46IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIE1vdmUgYW4gZXhpc3RpbmcgSUJBTiB0byBhIHNwZWNpZmllZCBhZGRyZXNzIGFuIGNoYWluLlxuICogQWxsIGluY29taW5nIEVVUiBwYXltZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcm91dGVkIHRvIHRoZSBhZGRyZXNzIG9uIHRoYXQgY2hhaW4uXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBtb3ZlSWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlTW92ZUliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2liYW5zL29wZXJhdGlvbi9tb3ZlLWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTW92ZUliYW4oe1xuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8XG4gICAgUmVzcG9uc2VTdGF0dXMsXG4gICAgRXJyb3IsXG4gICAgTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfVxuICA+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8XG4gICdtb3ZlSWJhbicsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBFcnJvcixcbiAgTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfVxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLm1vdmVJYmFuLFxuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBpYmFuLFxuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgIH06IE1vdmVJYmFuUGF5bG9hZCAmIHsgaWJhbjogc3RyaW5nIH0pID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsubW92ZUliYW4oaWJhbiwgeyBhZGRyZXNzLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCB0aGUgaWJhbiBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKHZhcmlhYmxlcy5pYmFuKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucygpLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3ModmFyaWFibGVzLmFkZHJlc3MpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlSWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogV2hlbiB0aGUgb3JkZXIgaGFzIGJlZW4gcGxhY2VkLCB0aGUgb3JkZXJzIHF1ZXJ5IHdpbGwgYmUgaW52YWxpZGF0ZWQgYW5kIHJlLWZldGNoZWQuXG4gKlxuICogSWYgdGhlIG9yZGVyIGFtb3VudCBpcyBhYm92ZSAxNTAwMCwgYSBzdXBwb3J0aW5nIGRvY3VtZW50IGlzIHJlcXVpcmVkLlxuICpcbiAqICoqTm90ZToqKiBGb3IgbXVsdGktc2lnbmF0dXJlIG9yZGVycywgdGhlIEFQSSByZXR1cm5zIGEgMjAyIEFjY2VwdGVkIHJlc3BvbnNlXG4gKiB3aXRoIGB7c3RhdHVzOiAyMDIsIHN0YXR1c1RleHQ6IFwiQWNjZXB0ZWRcIn1gIGluc3RlYWQgb2YgdGhlIGZ1bGwgT3JkZXIgb2JqZWN0LlxuICpcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IE9yZGVyc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge0ZpbGV9IHBhcmFtLnN1cHBvcnRpbmdEb2N1bWVudCBTdXBwb3J0aW5nIGRvY3VtZW50IGZpbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBwbGFjZU9yZGVyLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VQbGFjZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wb3N0LW9yZGVyc3wgQVBJIERvY3VtZW50YXRpb259XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBsYWNlT3JkZXIoe1xuICBzdXBwb3J0aW5nRG9jdW1lbnQsXG4gIG11dGF0aW9uLFxufToge1xuICBzdXBwb3J0aW5nRG9jdW1lbnQ/OiBGaWxlO1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8T3JkZXIgfCBSZXNwb25zZVN0YXR1cywgRXJyb3IsIE5ld09yZGVyPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdwbGFjZU9yZGVyJywgT3JkZXIgfCBSZXNwb25zZVN0YXR1cywgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVycygpLFxuICAgICAgfSk7XG4gICAgICAvLyBPbmx5IGludmFsaWRhdGUgYmFsYW5jZXMgaWYgd2UgZ290IGEgZnVsbCBPcmRlciByZXNwb25zZSAobm90IGEgMjAyIG11bHRpLXNpZyByZXNwb25zZSlcbiAgICAgIGNvbnN0IG9yZGVyRGF0YSA9IGRhdGEgYXMgT3JkZXI7XG4gICAgICBpZiAob3JkZXJEYXRhLmFkZHJlc3MgJiYgb3JkZXJEYXRhPy5jaGFpbikge1xuICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMob3JkZXJEYXRhLmFkZHJlc3MsIG9yZGVyRGF0YS5jaGFpbiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcGxhY2VPcmRlcjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogR2V0IHBlbmRpbmcgc2lnbmF0dXJlcyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci5cbiAqXG4gKiBSZXR1cm5zIHBlbmRpbmcgc2lnbmF0dXJlcyB0aGF0IHJlcXVpcmUgdXNlciBhY3Rpb24sIHN1Y2ggYXMgb3JkZXIgc2lnbmF0dXJlc1xuICogb3IgbGluayBhZGRyZXNzIHNpZ25hdHVyZXMuIEFjY2VwdHMgZmlsdGVyaW5nIGJ5IGFkZHJlc3MsIGNoYWluLCBraW5kLCBhbmQgcHJvZmlsZS5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBTaWduYXR1cmVzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge1NpZ25hdHVyZXNRdWVyeVBhcmFtc30gcGFyYW1zLnF1ZXJ5IC0gT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgc2lnbmF0dXJlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gR2V0IGFsbCBwZW5kaW5nIHNpZ25hdHVyZXNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGE6IHNpZ25hdHVyZXMsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVNpZ25hdHVyZXMoKTtcbiAqXG4gKiAvLyBHZXQgcGVuZGluZyBvcmRlciBzaWduYXR1cmVzIGZvciBhIHNwZWNpZmljIGFkZHJlc3NcbiAqIGNvbnN0IHsgZGF0YTogb3JkZXJTaWduYXR1cmVzIH0gPSB1c2VTaWduYXR1cmVzKHtcbiAqICAgcXVlcnk6IHtcbiAqICAgICBhZGRyZXNzOiAnMHgxMjM0Li4uJyxcbiAqICAgICBraW5kOiAnb3JkZXInXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIC8vIENoZWNrIHRoZSBraW5kIG9mIHNpZ25hdHVyZVxuICogc2lnbmF0dXJlcz8ucGVuZGluZy5mb3JFYWNoKHNpZyA9PiB7XG4gKiAgIGlmIChzaWcua2luZCA9PT0gJ29yZGVyJykge1xuICogICAgIGNvbnNvbGUubG9nKCdPcmRlciBzaWduYXR1cmU6Jywgc2lnLmlkLCBzaWcuYW1vdW50KTtcbiAqICAgfSBlbHNlIHtcbiAqICAgICBjb25zb2xlLmxvZygnTGluayBhZGRyZXNzIHNpZ25hdHVyZScpO1xuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL3NpZ25hdHVyZXMvb3BlcmF0aW9uL2dldC1zaWduYXR1cmVzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTaWduYXR1cmVzKHtcbiAgcXVlcnksXG4gIG9wdGlvbnMsXG59OiB7XG4gIHF1ZXJ5PzogU2lnbmF0dXJlc1F1ZXJ5UGFyYW1zO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9uczxTaWduYXR1cmVzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeTxTaWduYXR1cmVzUmVzcG9uc2U+KHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFNpZ25hdHVyZXMocXVlcnkpLFxuICAgIHF1ZXJ5Rm46ICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRTaWduYXR1cmVzKHF1ZXJ5KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAob3B0aW9ucz8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqICMgQWRkIGFkZHJlc3MgdG8gcHJvZmlsZS5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBsaW5rQWRkcmVzcywgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlTGlua0FkZHJlc3MoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUtYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxpbmtBZGRyZXNzKHtcbiAgbXV0YXRpb24sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J2xpbmtBZGRyZXNzJywgTGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLmxpbmtBZGRyZXNzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBMaW5rQWRkcmVzcykgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsubGlua0FkZHJlc3MoYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzZXMoKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHZhcmlhYmxlcy5wcm9maWxlKSB7XG4gICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHZhcmlhYmxlcy5wcm9maWxlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsaW5rQWRkcmVzczogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBUEkgY29uc3VtZXJzIGhhdmUgdGhlIG9wdGlvbiB0byBzdWJzY3JpYmUgdG8gYSBXZWJTb2NrZXQgZm9yIHJlYWwtdGltZSBvcmRlciBub3RpZmljYXRpb25zLiBUaGlzIFdlYlNvY2tldCBjb21wbGllcyB3aXRoIHRoZSBzdGFuZGFyZCBXZWJTb2NrZXQgUHJvdG9jb2wsIGFsbG93aW5nIHRoZSB1c2Ugb2Ygc3RhbmRhcmQgV2ViU29ja2V0IGxpYnJhcmllcyBmb3Igc3Vic2NyaXB0aW9uLlxuICpcbiAqIFRoZSBXZWJTb2NrZXQgZW1pdHMgYW4gZXZlbnQgd2hlbiBhIG9yZGVyIGNoYW5nZXMgc3RhdGU6XG4gKlxuICogYHBsYWNlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBub3QgeWV0IHByb2Nlc3NlZC5cbiAqXG4gKiBgcGVuZGluZ2A6IFRoZSBvcmRlciBpcyBhd2FpdGluZyBmdWxmaWxsbWVudCAoZS5nLiwgcmV2aWV3LCBtaW50aW5nL2J1cm5pbmcgdG9rZW5zLCBvciBzZW5kaW5nL3JlY2VpdmluZyBTRVBBIHBheW1lbnQpLlxuICpcbiAqIGBwcm9jZXNzZWRgOiBUaGUgb3JkZXIgaGFzIGJlZW4gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBgcmVqZWN0ZWRgOiBUaGUgb3JkZXIgd2FzIHJlamVjdGVkLCBwb3NzaWJseSBkdWUgdG8gY29tcGxpYW5jZSByZWFzb25zIG9yIGluc3VmZmljaWVudCBmdW5kcy5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IE9yZGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtPcmRlclN0YXRlfSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgcHJvZmlsZSBpZCBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMub25NZXNzYWdlIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgb3JkZXIgbm90aWZpY2F0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3BhcmFtcy5vbkVycm9yXSBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGVycm9yIG5vdGlmaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHN0YXRlLFxuICogICAgcHJvZmlsZSxcbiAqICAgIG9uTWVzc2FnZSxcbiAqICAgIG9uRXJyb3JcbiAqIH0gPSB1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MSNvcGVyYXRpb24vb3JkZXJzLW5vdGlmaWNhdGlvbnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBVbnN1YnNjcmliZSBmcm9tIG9yZGVyIG5vdGlmaWNhdGlvbnMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uID0gKHtcbiAgc3RhdGUsXG4gIHByb2ZpbGUsXG4gIG9uTWVzc2FnZSxcbiAgb25FcnJvcixcbn06IHtcbiAgc3RhdGU/OiBPcmRlclN0YXRlO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBvbk1lc3NhZ2U6IChvcmRlcjogT3JkZXIpID0+IHZvaWQ7XG4gIG9uRXJyb3I/OiAoKGVycjogRXZlbnQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufSkgPT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZGspIHtcbiAgICAgIHNkay5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgcHJvZmlsZTogcHJvZmlsZSxcbiAgICAgICAgfSxcbiAgICAgICAgb25NZXNzYWdlOiBvbk1lc3NhZ2UsXG4gICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGluIGRldmVsb3BtZW50IG1vZGUsIFJlYWN0IFN0cmljdCBtb2RlIHdpbGwgY2F1c2UgdGhpc1xuICAgICAgICogY2xlYW51cCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdHdpY2Ugb24gY2xpZW50IHNpZGUgcm91dGUgY2hhbmdlcy5cbiAgICAgICAqIFNvIGEgc29ja2V0IHdpbGwgYmUgaW1tZWRpYXRlbHkgY2xvc2VkIGFuZCBvcGVuZWQgYWdhaW4uXG4gICAgICAgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAgKi9cbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbc2RrLCBwcm9maWxlLCBzdGF0ZV0pO1xuXG4gIHJldHVybiAoKSA9PlxuICAgIHNkaz8udW5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoeyBzdGF0ZTogc3RhdGUsIHByb2ZpbGU6IHByb2ZpbGUgfSk7XG59O1xuXG4vKiogRXhwb3J0IHR5cGVzIGZvciBkb2N1bWVudGF0aW9uICovXG5leHBvcnQgdHlwZSB7XG4gIEFkZHJlc3MsXG4gIEJhbGFuY2VzLFxuICBJQkFOLFxuICBNb3ZlSWJhblBheWxvYWQsXG4gIExpbmtBZGRyZXNzLFxuICBQcm9maWxlLFxuICBUb2tlbixcbiAgU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIE9yZGVyLFxufTtcbiJdfQ==
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {createContext,useState,useEffect,useCallback,useContext}from'react';import {useQueryClient,useQuery,useMutation}from'@tanstack/react-query';import {MoneriumClient,parseChain}from'@monerium/sdk';import {jsx}from'react/jsx-runtime';var w=createContext(null);var J=({children:e,clientId:r,redirectUri:n,environment:t="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=false})=>{let s=useQueryClient(),[o]=useState(()=>new MoneriumClient({environment:t,clientId:r,redirectUri:n,debug:u})),[f,p]=useState(false),[v,E]=useState(null),[k,I]=useState(true);useEffect(()=>((async()=>{if(o)try{p(await o.getAccess());}catch(h){console.error("Failed to get access:",h);}finally{I(false),o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})(),()=>{o&&o.disconnect();}),[]),useEffect(()=>{i&&!f&&!k&&(async()=>{if(o)try{p(await o.getAccess(i));}catch(h){console.error("Failed to get access:",h);}finally{o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})();},[i]);let x=useCallback(async m=>{try{o&&await o.authorize(m);}catch(h){console.error("Error during authorization:",h),E(h);}},[o]),C=useCallback(async m=>{try{o&&await o.siwe(m);}catch(h){console.error("Error during sign in with ethereum:",h),E(h);}},[o]),z=async()=>{try{o&&await o.revokeAccess();}catch(m){console.error("Error during revoking access:",m),E(m);}finally{s.clear(),p(false);}};return jsx(w.Provider,{value:{sdk:o,authorize:x,siwe:C,isAuthorized:f,isLoading:k,error:v,disconnect:async()=>o?.disconnect(),revokeAccess:async()=>z()},children:e})};var d={getAll:["monerium"],getAuthContext:["monerium","auth-context"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",{currencies:n?[...n]:[],chain:r,address:e}],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function c(){let e=useContext(w);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function l(){let e=useContext(w);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,siwe:e.siwe,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function Se({query:e}={}){let{isAuthorized:r}=l(),n=c();return useQuery({...e,queryKey:d.getAuthContext,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getAuthContext()},enabled:!!(n&&r&&(e?.enabled??true))})}function Pe({profile:e,query:r}={}){let{isAuthorized:n}=l(),t=c(),{data:i}=B(),a=e||i?.profiles?.[0]?.id;return useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return t.getProfile(a)},enabled:!!(t&&n&&a&&(r?.enabled??true))})}function B({query:e}={}){let{isAuthorized:r}=l(),n=c();return useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??true))})}function qe({query:e}={}){let r=c(),{isAuthorized:n}=l();return useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??true))})}function ve({address:e,query:r={}}){let n=c(),{isAuthorized:t}=l();return useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function Ie({profile:e,chain:r,query:n={}}={}){let t=c(),{isAuthorized:i}=l();return useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?parseChain(r):undefined}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getAddresses({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function xe({address:e,chain:r,currencies:n,query:t}){let i=c(),{isAuthorized:a}=l();return useQuery({...t,queryKey:d.getBalances(e,parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(t?.enabled??true))})}function Ce({iban:e,query:r}){let n=c(),{isAuthorized:t}=l();return useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function ze({profile:e,chain:r,query:n={}}={}){let t=c(),{isAuthorized:i}=l();return useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getIbans({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function Ke({orderId:e,query:r={}}){let n=c(),{isAuthorized:t}=l();return useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&t&&e&&(r.enabled??true))})}function Ne({query:e={},...r}={}){let n=c(),{isAuthorized:t}=l();return useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&t&&(e.enabled??true))})}function Re({profile:e,mutation:r={}}){let n=c(),{isAuthorized:t}=l(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.submitProfileDetails(e,s)},onSuccess(s,o,f){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(s,o,f);},onError(s,o,f){throw r?.onError?.(s,o,f),s}});return {submitProfileDetails:a,...u}}function Me({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),{mutateAsync:t,...i}=useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:s})},onSuccess(a,u,s){e?.onSuccess?.(a,u,s);},onError(a,u,s){throw e?.onError?.(a,u,s),a}});return {requestIban:t,...i}}function De({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),t=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:s,chain:o})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:s,chain:o})},onSuccess(u,s,o){t.invalidateQueries({queryKey:d.getIban(s.iban)}),t.invalidateQueries({queryKey:d.getIbans()}),t.invalidateQueries({queryKey:d.getAddress(s.address)}),e?.onSuccess?.(u,s,o);},onError(u,s,o){throw e?.onError?.(u,s,o),u}});return {moveIban:i,...a}}function Be({supportingDocument:e,mutation:r}={}){let n=c(),{isAuthorized:t}=l(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.placeOrder,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");let o;if(parseInt(s.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");o=(await n.uploadSupportingDocument(e)).id;}let f={...s,documentId:o};return n.placeOrder(f)},onSuccess(s,o,f){i.invalidateQueries({queryKey:d.getOrders()}),i.invalidateQueries({queryKey:d.getBalances(s.address,s.chain)}),r?.onSuccess?.(s,o,f);},onError(s,o,f){throw r?.onError?.(s,o,f),s}});return {placeOrder:a,...u}}function Fe({mutation:e}={}){let r=c(),{isAuthorized:n}=l(),t=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,s,o){t.invalidateQueries({queryKey:d.getAddresses()}),s.profile&&t.invalidateQueries({queryKey:d.getProfile(s.profile)}),e?.onSuccess?.(u,s,o);},onError(u,s,o){throw e?.onError?.(u,s,o),u}});return {linkAddress:i,...a}}var Qe=({state:e,profile:r,onMessage:n,onError:t})=>{let i=c();return useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:t}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};export{w as MoneriumContext,J as MoneriumProvider,d as keys,ve as useAddress,Ie as useAddresses,l as useAuth,Se as useAuthContext,xe as useBalances,Ce as useIBAN,ze as useIBANs,Fe as useLinkAddress,De as useMoveIban,Ke as useOrder,Ne as useOrders,Be as usePlaceOrder,Pe as useProfile,B as useProfiles,Me as useRequestIban,Re as useSubmitProfileDetails,Qe as useSubscribeOrderNotification,qe as useTokens};//# sourceMappingURL=index.mjs.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlQXV0aENvbnRleHQiLCJxdWVyeSIsInVzZVF1ZXJ5IiwidXNlUHJvZmlsZSIsImRhdGEiLCJ1c2VQcm9maWxlcyIsInByb2ZpbGVUb1VzZSIsInVzZVRva2VucyIsInVzZUFkZHJlc3MiLCJ1c2VBZGRyZXNzZXMiLCJwYXJzZUNoYWluIiwidXNlQmFsYW5jZXMiLCJ1c2VJQkFOIiwidXNlSUJBTnMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VTdWJtaXRQcm9maWxlRGV0YWlscyIsIm11dGF0aW9uIiwibXV0YXRlQXN5bmMiLCJyZXN0IiwidXNlTXV0YXRpb24iLCJib2R5IiwidmFyaWFibGVzIiwidmFycyIsInVzZVJlcXVlc3RJYmFuIiwiZW1haWxOb3RpZmljYXRpb25zIiwidXNlTW92ZUliYW4iLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJ1c2VMaW5rQWRkcmVzcyIsInVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uIiwic3RhdGUiLCJvbk1lc3NhZ2UiLCJvbkVycm9yIl0sIm1hcHBpbmdzIjoiOE9BSWFBLElBQUFBLENBQUFBLENBQWtCQyxhQUU3QixDQUFBLElBQUksRUNrQk9DLElBQUFBLENBQUFBLENBQW1CLENBQUMsQ0FDL0IsUUFBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxRQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFdBQUFDLENBQUFBLENBQUFBLENBQ0EsV0FBQUMsQ0FBQUEsQ0FBQUEsQ0FBYyxTQUNkLENBQUEsWUFBQSxDQUFBQyxDQUNBLENBQUEsb0JBQUEsQ0FBQUMsQ0FDQSxDQUFBLEtBQUEsQ0FBQUMsQ0FBUSxDQUFBLEtBQ1YsQ0FVTSxHQUFBLENBQ0osSUFBTUMsQ0FBQUEsQ0FBY0MsY0FBZSxFQUFBLENBRTdCLENBQUNDLENBQUcsQ0FBSUMsQ0FBQUEsUUFBQUEsQ0FBUyxJQUVkLElBQUlDLGNBQWUsQ0FBQSxDQUN4QixXQUFBUixDQUFBQSxDQUFBQSxDQUNBLFFBQUFGLENBQUFBLENBQUFBLENBQ0EsV0FBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxLQUFPSSxDQUFBQSxDQUNULENBQUMsQ0FDRixDQUVLLENBQUEsQ0FBQ00sQ0FBY0MsQ0FBQUEsQ0FBZSxDQUFJSCxDQUFBQSxRQUFBQSxDQUFrQixLQUFLLENBQUEsQ0FDekQsQ0FBQ0ksQ0FBQUEsQ0FBT0MsQ0FBUSxDQUFBLENBQUlMLFFBQWlDLENBQUEsSUFBSSxDQUN6RCxDQUFBLENBQUNNLENBQWFDLENBQUFBLENBQWMsQ0FBSVAsQ0FBQUEsUUFBQUEsQ0FBUyxJQUFJLENBQUEsQ0FFbkRRLFNBQVUsQ0FBQSxLQUFBLENBQ1EsU0FBWSxDQUMxQixHQUFJVCxD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UzdDLENBQUFBLENBQVEsQ0FBQyxFQUV6RSxDQUNDLENBQUEsQ0FBQSxDQUFDbEIsQ0FBS2tCLENBQUFBLENBQUFBLENBQVM2QyxDQUFLLENBQUMsQ0FFakIsQ0FBQSxJQUNML0QsQ0FBSyxFQUFBLDZCQUFBLENBQThCLENBQUUsS0FBQSxDQUFPK0QsQ0FBTyxDQUFBLE9BQUEsQ0FBUzdDLENBQVEsQ0FBQyxDQUN6RSIsImZpbGUiOiJpbmRleC5tanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZGtJbnN0YW5jZSwgVXNlQXV0aFJldHVybiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgKFVzZUF1dGhSZXR1cm4gJiBTZGtJbnN0YW5jZSkgfCBudWxsXG4+KG51bGwpO1xuIiwiaW1wb3J0IHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IHtcbiAgQXV0aEZsb3dPcHRpb25zLFxuICBBdXRoRmxvd1NJV0VPcHRpb25zLFxuICBNb25lcml1bUNsaWVudCxcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5cbi8qKlxuICogV3JhcCB5b3VyIGFwcGxpY2F0aW9uIHdpdGggdGhlIE1vbmVyaXVtIHByb3ZpZGVyLlxuICogQGdyb3VwIFByb3ZpZGVyXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLmNoaWxkcmVuIC0gUmVzdCBvZiB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gcGFyYW1zLmNsaWVudElkIC0gTW9uZXJpdW0gYXV0aCBmbG93IGNsaWVudCBpZC5cbiAqIEBwYXJhbSBwYXJhbXMucmVkaXJlY3RVcmkgLSBNb25lcml1bSBhdXRoIGZsb3cgcmVkaXJlY3QgdXJsLlxuICogQHBhcmFtIHBhcmFtcy5lbnZpcm9ubWVudCAtIE1vbmVyaXVtIGVudmlyb25tZW50LlxuICogQHBhcmFtIHBhcmFtcy5vblJlZnJlc2hUb2tlblVwZGF0ZSAtIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZnJlc2ggdG9rZW4gaXMgdXBkYXRlZC4gU3RvcmUgaXQgc2VjdXJlbHkuXG4gKiBAcGFyYW0gcGFyYW1zLnJlZnJlc2hUb2tlbiAtIFByb3ZpZGUgdGhlIHNlY3VyZWx5IHN0b3JlZCByZWZyZXNoIHRva2VuIHRvIHJlY29ubmVjdC5cbiAqIEBwYXJhbSBwYXJhbXMuZGVidWcgLSBFbmFibGUgZGVidWcgbW9kZS5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBNb25lcml1bVByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsaWVudElkLFxuICByZWRpcmVjdFVyaSxcbiAgZW52aXJvbm1lbnQgPSAnc2FuZGJveCcsXG4gIHJlZnJlc2hUb2tlbixcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGUsXG4gIGRlYnVnID0gZmFsc2UsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgcmVkaXJlY3RVcmkgKi9cbiAgcmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50PzogJ3NhbmRib3gnIHwgJ3Byb2R1Y3Rpb24nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIG9uUmVmcmVzaFRva2VuVXBkYXRlPzogKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGRlYnVnPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IFtzZGtdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIEluaXRpYWxpemUgdGhlIFNES1xuICAgIHJldHVybiBuZXcgTW9uZXJpdW1DbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgICAgZGVidWc6IGRlYnVnLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBbaXNBdXRob3JpemVkLCBzZXRJc0F1dGhvcml6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPEVycm9yIHwgdW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbbG9hZGluZ0F1dGgsIHNldExvYWRpbmdBdXRoXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29ubmVjdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRJc0F1dGhvcml6ZWQoYXdhaXQgc2RrLmdldEFjY2VzcygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGFjY2VzczonLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0TG9hZGluZ0F1dGgoZmFsc2UpO1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbm5lY3QoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHNkay5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKHJlZnJlc2hUb2tlbikpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoc2RrPy5iZWFyZXJQcm9maWxlKSB7XG4gICAgICAgICAgICBvblJlZnJlc2hUb2tlblVwZGF0ZT8uKHNkay5iZWFyZXJQcm9maWxlLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlZnJlc2hUb2tlbiAmJiAhaXNBdXRob3JpemVkICYmICFsb2FkaW5nQXV0aCkge1xuICAgICAgcmVjb25uZWN0KCk7XG4gICAgfVxuICB9LCBbcmVmcmVzaFRva2VuXSk7XG5cbiAgY29uc3QgYXV0aG9yaXplID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBhcmFtcz86IEF1dGhGbG93T3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNkaykge1xuICAgICAgICAgIGF3YWl0IHNkay5hdXRob3JpemUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBhdXRob3JpemF0aW9uOicsIGVycik7XG4gICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2RrXVxuICApO1xuXG4gIGNvbnN0IHNpd2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zOiBBdXRoRmxvd1NJV0VPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLnNpd2UocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBzaWduIGluIHdpdGggZXRoZXJldW06JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3QgcmV2b2tlQWNjZXNzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIGF3YWl0IHNkay5yZXZva2VBY2Nlc3MoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZXZva2luZyBhY2Nlc3M6JywgZXJyKTtcbiAgICAgIHNldEVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmNsZWFyKCk7XG4gICAgICBzZXRJc0F1dGhvcml6ZWQoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxNb25lcml1bUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIHNkayxcbiAgICAgICAgYXV0aG9yaXplLFxuICAgICAgICBzaXdlLFxuICAgICAgICBpc0F1dGhvcml6ZWQsXG4gICAgICAgIGlzTG9hZGluZzogbG9hZGluZ0F1dGgsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBkaXNjb25uZWN0OiBhc3luYyAoKSA9PiBzZGs/LmRpc2Nvbm5lY3QoKSxcbiAgICAgICAgcmV2b2tlQWNjZXNzOiBhc3luYyAoKSA9PiByZXZva2VBY2Nlc3MoKSxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeSwgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQgTW9uZXJpdW1DbGllbnQsIHtcbiAgQWRkcmVzcyxcbiAgQWRkcmVzc2VzUmVzcG9uc2UsXG4gIEF1dGhDb250ZXh0LFxuICBCYWxhbmNlcyxcbiAgQ2hhaW4sXG4gIENoYWluSWQsXG4gIEN1cnJlbmN5LFxuICBDdXJyZW5jeUNvZGUsXG4gIElCQU4sXG4gIElCQU5zUmVzcG9uc2UsXG4gIExpbmtBZGRyZXNzLFxuICBMaW5rZWRBZGRyZXNzLFxuICBNb3ZlSWJhblBheWxvYWQsXG4gIE5ld09yZGVyLFxuICBPcmRlcixcbiAgT3JkZXJzUmVzcG9uc2UsXG4gIE9yZGVyU3RhdGUsXG4gIHBhcnNlQ2hhaW4sXG4gIFByb2ZpbGUsXG4gIFByb2ZpbGVzUmVzcG9uc2UsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZCxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXMgZm9yIFJlYWN0IHF1ZXJ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRBdXRoQ29udGV4dDogWydtb25lcml1bScsICdhdXRoLWNvbnRleHQnXSxcbiAgZ2V0UHJvZmlsZTogKHByb2ZpbGU6IHN0cmluZykgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ3Byb2ZpbGUnLFxuICAgIC4uLihwcm9maWxlID8gW3Byb2ZpbGVdIDogW10pLFxuICBdLFxuICBnZXRQcm9maWxlczogWydtb25lcml1bScsICdwcm9maWxlcyddLFxuICBnZXRBZGRyZXNzOiAoYWRkcmVzczogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ2FkZHJlc3MnLCBbYWRkcmVzc11dLFxuICBnZXRBZGRyZXNzZXM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnYWRkcmVzc2VzJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIGdldEJhbGFuY2VzOiAoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIGNoYWluOiBDaGFpbixcbiAgICBjdXJyZW5jaWVzPzogQ3VycmVuY3lDb2RlIHwgQ3VycmVuY3lDb2RlW11cbiAgKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnYmFsYW5jZXMnLFxuICAgIHtcbiAgICAgIGN1cnJlbmNpZXM6IGN1cnJlbmNpZXMgPyBbLi4uY3VycmVuY2llc10gOiBbXSxcbiAgICAgIGNoYWluLFxuICAgICAgYWRkcmVzcyxcbiAgICB9LFxuICBdLFxuICBnZXRJYmFuOiAoaWJhbjogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ2liYW4nLCBpYmFuXSxcbiAgZ2V0SWJhbnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnaWJhbnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0VG9rZW5zOiBbJ21vbmVyaXVtJywgJ3Rva2VucyddLFxuICBnZXRPcmRlcjogKG9yZGVySWQ6IHN0cmluZykgPT4gWydtb25lcml1bScsICdvcmRlcicsIG9yZGVySWRdLFxuICBnZXRPcmRlcnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnb3JkZXJzJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIHN1Ym1pdFByb2ZpbGVEZXRhaWxzOiBbJ21vbmVyaXVtJywgJ3N1Ym1pdC1wcm9maWxlLWRldGFpbHMnXSxcbiAgbW92ZUliYW46IFsnbW9uZXJpdW0nLCAnbW92ZS1pYmFuJ10sXG4gIHJlcXVlc3RJYmFuOiBbJ21vbmVyaXVtJywgJ3JlcXVlc3QtaWJhbiddLFxuICBwbGFjZU9yZGVyOiBbJ21vbmVyaXVtJywgJ3BsYWNlLW9yZGVyJ10sXG4gIGxpbmtBZGRyZXNzOiBbJ21vbmVyaXVtJywgJ2xpbmstYWRkcmVzcyddLFxufTtcblxuLyoqIEludGVybmFsIGhvb2sgdG8gdXNlIFNESyAqL1xuZnVuY3Rpb24gdXNlU2RrKCk6IE1vbmVyaXVtQ2xpZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2RrIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ/LnNkaztcbn1cblxuLyoqXG4gKiAjIFJlZGlyZWN0IHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBdXRoZW50aWNhdGlvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7IGF1dGhvcml6ZSwgaXNBdXRob3JpemVkLCBpc0xvYWRpbmcsIGVycm9yIH0gPSB1c2VBdXRoKCk7XG4gKlxuICogYXV0aG9yaXplKCk7IC8vIFJlZGlyZWN0cyB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICpcbiAqIC8vIE9wdC1pbiB0byBhdXRvbWF0ZWQgd2FsbGV0IGxpbmtpbmcgd2l0aCB0aGVzZSBwYXJhbWV0ZXJzLlxuICogYXV0aG9yaXplKHsgYWRkcmVzcywgc2lnbmF0dXJlLCBjaGFpbiB9KS5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtVc2VBdXRoUmV0dXJufVxuICogLSBgYXV0aG9yaXplYCAgLSBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIC0gYHNpd2VgICAgICAgIC0gU2lnbiBpbiB3aXRoIEV0aGVyZXVtLiBodHRwczovL21vbmVyaXVtLmNvbS9zaXdlXG4gKiAtIGBpc0F1dGhvcml6ZWRgIC0gV2hldGhlciB0aGUgdXNlciBpcyBhdXRob3JpemVkLlxuICogLSBgaXNMb2FkaW5nYCAtIFdoZXRoZXIgdGhlIGF1dGggZmxvdyBpcyBsb2FkaW5nLlxuICogLSBgZXJyb3JgIC0gRXJyb3IgbWVzc2FnZSBpZiB0aGUgYXV0aCBmbG93IGZhaWxzLlxuICogLSBgZGlzY29ubmVjdGAgLSBEaXNjb25uZWN0IHRoZSB1c2VyLlxuICogLSBgcmV2b2tlQWNjZXNzYCAtIFJldm9rZSB0aGUgdXNlcidzIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGgoKTogVXNlQXV0aFJldHVybiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1vbmVyaXVtUHJvdmlkZXInKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNBdXRob3JpemVkOiBjb250ZXh0LmlzQXV0aG9yaXplZCxcbiAgICBhdXRob3JpemU6IGNvbnRleHQuYXV0aG9yaXplLFxuICAgIHNpd2U6IGNvbnRleHQuc2l3ZSxcbiAgICBpc0xvYWRpbmc6IGNvbnRleHQuaXNMb2FkaW5nLFxuICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgIGRpc2Nvbm5lY3Q6IGNvbnRleHQuZGlzY29ubmVjdCxcbiAgICByZXZva2VBY2Nlc3M6IGNvbnRleHQucmV2b2tlQWNjZXNzLFxuICB9O1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEF1dGhlbnRpY2F0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUF1dGhDb250ZXh0KCk7XG4gKiBgYGBcblxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2F1dGgvb3BlcmF0aW9uL2F1dGgtY29udGV4dCB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aENvbnRleHQoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPEF1dGhDb250ZXh0Pjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEF1dGhDb250ZXh0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogSWYgbm8gYHByb2ZpbGVgIGlkIGlzIHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlKCk7XG4gKiBgYGBcblxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGUoe1xuICBwcm9maWxlLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgcHJvZmlsZSAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZT47XG59ID0ge30pIHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBkYXRhIH0gPSB1c2VQcm9maWxlcygpO1xuXG4gIGNvbnN0IHByb2ZpbGVUb1VzZSA9IHByb2ZpbGUgfHwgKGRhdGE/LnByb2ZpbGVzPy5bMF0/LmlkIGFzIHN0cmluZyk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGVUb1VzZSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJvZmlsZVRvVXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvZmlsZSBJZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIHByb2ZpbGVUb1VzZSAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogIyBHZXQgcHJvZmlsZXNcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGVzKHtcbiAgcXVlcnksXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlc1Jlc3BvbnNlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGVzLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGVzKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VUb2tlbnMoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vdG9rZW5zIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbnMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFRva2VuW10+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFRva2VucyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRUb2tlbnMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBZGRyZXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgXG5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9hZGRyZXNzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzKHtcbiAgYWRkcmVzcyxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgYWRkcmVzcy4gKi9cbiAgYWRkcmVzczogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QWRkcmVzcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyhhZGRyZXNzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIGFkZHJlc3MgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpXG4gICAgKSxcbiAgfSk7XG59XG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gcHJvZmlsZSBpZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmNoYWluXSBGaWx0ZXIgYmFzZWQgb24gY2hhaW4gLSBDVVJSRU5UTFkgUkVUVVJOUyBBTiBFUlJPUi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQWRkcmVzc2VzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRkcmVzc2VzKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QWRkcmVzc2VzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzZXMoe1xuICAgICAgcHJvZmlsZSxcbiAgICAgIGNoYWluOiBjaGFpbiA/IHBhcnNlQ2hhaW4oY2hhaW4pIDogdW5kZWZpbmVkLFxuICAgIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldEFkZHJlc3Nlcyh7IHByb2ZpbGUsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBiYWxhbmNlIGZvciBhIGFuIGFkZHJlc3Mgb24gYSBnaXZlIGNoYWluXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBZGRyZXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzPn0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3MgdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuY2hhaW4gVGhlIGNoYWluIHRvIGZldGNoIHRoZSBiYWxhbmNlIGZvci5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzPn0gW3BhcmFtcy5jdXJyZW5jaWVzXSBPbmUgb3IgbWFueTogYGV1cmAsIGB1c2RgLCBgZ2JwYCwgYGlza2BcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQmFsYW5jZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYmFsYW5jZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYWxhbmNlcyh7XG4gIGFkZHJlc3MsXG4gIGNoYWluLFxuICBjdXJyZW5jaWVzLFxuICBxdWVyeSxcbn06IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogQ2hhaW4gfCBDaGFpbklkO1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3kgfCBDdXJyZW5jeVtdO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QmFsYW5jZXM+O1xufSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEJhbGFuY2VzKGFkZHJlc3MsIHBhcnNlQ2hhaW4oY2hhaW4pLCBjdXJyZW5jaWVzKSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDUsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QmFsYW5jZXMoYWRkcmVzcywgY2hhaW4sIGN1cnJlbmNpZXMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9pYmFuIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJQkFOKHtcbiAgaWJhbixcbiAgcXVlcnksXG59OiB7XG4gIC8qKiBGZXRjaCBhIHNwZWNpZmljIElCQU4gKi9cbiAgaWJhbjogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbihpYmFuKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEliYW4oaWJhbik7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgaWJhbiAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VJQkFOcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW5zIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJQkFOcyh7XG4gIHByb2ZpbGUsXG4gIGNoYWluLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgcHJvZmlsZS4gKi9cbiAgcHJvZmlsZT86IHN0cmluZztcbiAgLyoqIEZldGNoIElCQU5zIGZvciBhIHNwZWNpZmljIGNoYWluLiAqL1xuICBjaGFpbj86IENoYWluIHwgQ2hhaW5JZDtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPElCQU5zUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEliYW5zKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcmRlcih7XG4gIG9yZGVySWQsXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiAgVGhlIGlkIG9mIHRoZSBvcmRlci4gKi9cbiAgb3JkZXJJZDogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXI+O1xufSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcihvcmRlcklkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFvcmRlcklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT3JkZXIgaWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcihvcmRlcklkKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBvcmRlcklkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmFkZHJlc3NdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5tZW1vXSBGaWx0ZXIgYnkgdGhlIHBheW1lbnQgbWVtby9yZWZlcmVuY2UuLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5zdGF0ZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy50eEhhc2hdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiB0cmFuc2FjdGlvbiBoYXNoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXJzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVycyh7XG4gIHF1ZXJ5ID0ge30sXG4gIC4uLmZpbHRlcnNcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPE9yZGVyc1Jlc3BvbnNlPjtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdHhIYXNoPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXJzKGZpbHRlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogU3VibWl0IHRoZSByZXF1aXJlZCBjb21wbGlhbmNlIGluZm9ybWF0aW9uIHRvIG9uYm9hcmQgdGhlIGN1c3RvbWVyLlxuICpcbiAqIE5vdGUgdGhhdCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHByb2ZpbGUgXCJraW5kXCIgZnJvbSBwZXJzb25hbCB0byBjb3Jwb3JhdGUgb3IgdmljZSB2ZXJzYSBvbmNlIHRoZSBwcm9maWxlIGhhcyBiZWVuIGFwcHJvdmVkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtLnByb2ZpbGUgVGhlIGlkIG9mIHRoZSBwcm9maWxlIHRvIHN1Ym1pdCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHN1Ym1pdFByb2ZpbGVEZXRhaWxzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VTdWJtaXRQcm9maWxlRGV0YWlscygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvcHJvZmlsZXMvb3BlcmF0aW9uL3Byb2ZpbGUtZGV0YWlscyB8IEFQSSBEb2N1bWVudGF0aW9ufX1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU3VibWl0UHJvZmlsZURldGFpbHMoe1xuICBwcm9maWxlLFxuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICBwcm9maWxlOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWRcbiAgPjtcbn0pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ3N1Ym1pdFByb2ZpbGVEZXRhaWxzJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWRcbj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5zdWJtaXRQcm9maWxlRGV0YWlscyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLnN1Ym1pdFByb2ZpbGVEZXRhaWxzKHByb2ZpbGUsIGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZSksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHN1Ym1pdFByb2ZpbGVEZXRhaWxzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gSUJBTiBmb3IgYSBzcGVjaWZpZWQgYWRkcmVzcyBhbmQgY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGxpbmtlZCBhZGRyZXNzIG9uIHRoYXQgY2hhaW4uXG4gKiBBbnkgbGlua2VkIGFkZHJlc3MgY2FuIHVzZSB0aGlzIElCQU4gZm9yIG91dGdvaW5nIHBheW1lbnRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcmVxdWVzdEliYW4sIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVJlcXVlc3RJYmFuKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vcmVxdWVzdC1pYmFuIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXF1ZXN0SWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxSZXNwb25zZVN0YXR1cywgRXJyb3IsIFJlcXVlc3RJYmFuUGF5bG9hZD47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ3JlcXVlc3RJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBSZXF1ZXN0SWJhblBheWxvYWRcbj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMucmVxdWVzdEliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBjaGFpbixcbiAgICAgIGVtYWlsTm90aWZpY2F0aW9ucyxcbiAgICB9OiBSZXF1ZXN0SWJhblBheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsucmVxdWVzdEliYW4oeyBhZGRyZXNzLCBjaGFpbiwgZW1haWxOb3RpZmljYXRpb25zIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdEliYW46IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIE1vdmUgYW4gZXhpc3RpbmcgSUJBTiB0byBhIHNwZWNpZmllZCBhZGRyZXNzIGFuIGNoYWluLlxuICogQWxsIGluY29taW5nIEVVUiBwYXltZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcm91dGVkIHRvIHRoZSBhZGRyZXNzIG9uIHRoYXQgY2hhaW4uXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBtb3ZlSWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlTW92ZUliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2liYW5zL29wZXJhdGlvbi9tb3ZlLWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTW92ZUliYW4oe1xuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8XG4gICAgUmVzcG9uc2VTdGF0dXMsXG4gICAgRXJyb3IsXG4gICAgTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfVxuICA+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8XG4gICdtb3ZlSWJhbicsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBFcnJvcixcbiAgTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfVxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLm1vdmVJYmFuLFxuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBpYmFuLFxuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgIH06IE1vdmVJYmFuUGF5bG9hZCAmIHsgaWJhbjogc3RyaW5nIH0pID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsubW92ZUliYW4oaWJhbiwgeyBhZGRyZXNzLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKHZhcmlhYmxlcy5pYmFuKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucygpLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3ModmFyaWFibGVzLmFkZHJlc3MpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlSWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogV2hlbiB0aGUgb3JkZXIgaGFzIGJlZW4gcGxhY2VkLCB0aGUgb3JkZXJzIHF1ZXJ5IHdpbGwgYmUgaW52YWxpZGF0ZWQgYW5kIHJlLWZldGNoZWQuXG4gKlxuICogSWYgdGhlIG9yZGVyIGFtb3VudCBpcyBhYm92ZSAxNTAwMCwgYSBzdXBwb3J0aW5nIGRvY3VtZW50IGlzIHJlcXVpcmVkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0gcGFyYW1cbiAqIEBwYXJhbSB7RmlsZX0gcGFyYW0uc3VwcG9ydGluZ0RvY3VtZW50IFN1cHBvcnRpbmcgZG9jdW1lbnQgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHBsYWNlT3JkZXIsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVBsYWNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Bvc3Qtb3JkZXJzfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUGxhY2VPcmRlcih7XG4gIHN1cHBvcnRpbmdEb2N1bWVudCxcbiAgbXV0YXRpb24sXG59OiB7XG4gIHN1cHBvcnRpbmdEb2N1bWVudD86IEZpbGU7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxPcmRlciwgRXJyb3IsIE5ld09yZGVyPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdwbGFjZU9yZGVyJywgT3JkZXIsIEVycm9yLCBOZXdPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5wbGFjZU9yZGVyLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBOZXdPcmRlcikgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBkb2N1bWVudElkO1xuICAgICAgaWYgKHBhcnNlSW50KGJvZHkuYW1vdW50KSA+IDE1MDAwKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGluZ0RvY3VtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1N1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQgZm9yIG9yZGVycyBhYm92ZSAxNTAwMCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRG9jdW1lbnQgPVxuICAgICAgICAgIGF3YWl0IHNkay51cGxvYWRTdXBwb3J0aW5nRG9jdW1lbnQoc3VwcG9ydGluZ0RvY3VtZW50KTtcbiAgICAgICAgZG9jdW1lbnRJZCA9IHVwbG9hZGVkRG9jdW1lbnQuaWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0JvZHkgPSB7XG4gICAgICAgIC4uLmJvZHksXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc2RrLnBsYWNlT3JkZXIobmV3Qm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoZGF0YS5hZGRyZXNzLCBkYXRhLmNoYWluKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcGxhY2VPcmRlcjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBBZGQgYWRkcmVzcyB0byBwcm9maWxlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGxpbmtBZGRyZXNzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VMaW5rQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZS1hZGRyZXNzZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTGlua0FkZHJlc3Moe1xuICBtdXRhdGlvbixcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDwnbGlua0FkZHJlc3MnLCBMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubGlua0FkZHJlc3MsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IExpbmtBZGRyZXNzKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5saW5rQWRkcmVzcyhib2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzZXMoKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHZhcmlhYmxlcy5wcm9maWxlKSB7XG4gICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHZhcmlhYmxlcy5wcm9maWxlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsaW5rQWRkcmVzczogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBUEkgY29uc3VtZXJzIGhhdmUgdGhlIG9wdGlvbiB0byBzdWJzY3JpYmUgdG8gYSBXZWJTb2NrZXQgZm9yIHJlYWwtdGltZSBvcmRlciBub3RpZmljYXRpb25zLiBUaGlzIFdlYlNvY2tldCBjb21wbGllcyB3aXRoIHRoZSBzdGFuZGFyZCBXZWJTb2NrZXQgUHJvdG9jb2wsIGFsbG93aW5nIHRoZSB1c2Ugb2Ygc3RhbmRhcmQgV2ViU29ja2V0IGxpYnJhcmllcyBmb3Igc3Vic2NyaXB0aW9uLlxuICpcbiAqIFRoZSBXZWJTb2NrZXQgZW1pdHMgYW4gZXZlbnQgd2hlbiBhIG9yZGVyIGNoYW5nZXMgc3RhdGU6XG4gKlxuICogYHBsYWNlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBub3QgeWV0IHByb2Nlc3NlZC5cbiAqXG4gKiBgcGVuZGluZ2A6IFRoZSBvcmRlciBpcyBhd2FpdGluZyBmdWxmaWxsbWVudCAoZS5nLiwgcmV2aWV3LCBtaW50aW5nL2J1cm5pbmcgdG9rZW5zLCBvciBzZW5kaW5nL3JlY2VpdmluZyBTRVBBIHBheW1lbnQpLlxuICpcbiAqIGBwcm9jZXNzZWRgOiBUaGUgb3JkZXIgaGFzIGJlZW4gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBgcmVqZWN0ZWRgOiBUaGUgb3JkZXIgd2FzIHJlamVjdGVkLCBwb3NzaWJseSBkdWUgdG8gY29tcGxpYW5jZSByZWFzb25zIG9yIGluc3VmZmljaWVudCBmdW5kcy5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IE9yZGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtPcmRlclN0YXRlfSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgcHJvZmlsZSBpZCBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMub25NZXNzYWdlIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgb3JkZXIgbm90aWZpY2F0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3BhcmFtcy5vbkVycm9yXSBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGVycm9yIG5vdGlmaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHN0YXRlLFxuICogICAgcHJvZmlsZSxcbiAqICAgIG9uTWVzc2FnZSxcbiAqICAgIG9uRXJyb3JcbiAqIH0gPSB1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MSNvcGVyYXRpb24vb3JkZXJzLW5vdGlmaWNhdGlvbnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBVbnN1YnNjcmliZSBmcm9tIG9yZGVyIG5vdGlmaWNhdGlvbnMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uID0gKHtcbiAgc3RhdGUsXG4gIHByb2ZpbGUsXG4gIG9uTWVzc2FnZSxcbiAgb25FcnJvcixcbn06IHtcbiAgc3RhdGU/OiBPcmRlclN0YXRlO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBvbk1lc3NhZ2U6IChvcmRlcjogT3JkZXIpID0+IHZvaWQ7XG4gIG9uRXJyb3I/OiAoKGVycjogRXZlbnQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufSkgPT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZGspIHtcbiAgICAgIHNkay5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgcHJvZmlsZTogcHJvZmlsZSxcbiAgICAgICAgfSxcbiAgICAgICAgb25NZXNzYWdlOiBvbk1lc3NhZ2UsXG4gICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGluIGRldmVsb3BtZW50IG1vZGUsIFJlYWN0IFN0cmljdCBtb2RlIHdpbGwgY2F1c2UgdGhpc1xuICAgICAgICogY2xlYW51cCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdHdpY2Ugb24gY2xpZW50IHNpZGUgcm91dGUgY2hhbmdlcy5cbiAgICAgICAqIFNvIGEgc29ja2V0IHdpbGwgYmUgaW1tZWRpYXRlbHkgY2xvc2VkIGFuZCBvcGVuZWQgYWdhaW4uXG4gICAgICAgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAgKi9cbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbc2RrLCBwcm9maWxlLCBzdGF0ZV0pO1xuXG4gIHJldHVybiAoKSA9PlxuICAgIHNkaz8udW5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoeyBzdGF0ZTogc3RhdGUsIHByb2ZpbGU6IHByb2ZpbGUgfSk7XG59O1xuXG4vKiogRXhwb3J0IHR5cGVzIGZvciBkb2N1bWVudGF0aW9uICovXG5leHBvcnQgdHlwZSB7XG4gIEFkZHJlc3MsXG4gIEJhbGFuY2VzLFxuICBJQkFOLFxuICBNb3ZlSWJhblBheWxvYWQsXG4gIExpbmtBZGRyZXNzLFxuICBQcm9maWxlLFxuICBUb2tlbixcbiAgU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIE9yZGVyLFxufTtcbiJdfQ==
|
|
1
|
+
import {createContext,useState,useEffect,useCallback,useContext}from'react';import {useQueryClient,useQuery,useMutation}from'@tanstack/react-query';import {MoneriumClient,parseChain}from'@monerium/sdk';import {jsx}from'react/jsx-runtime';var g=createContext(null);var J=({children:e,clientId:r,redirectUri:n,environment:t="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=false})=>{let s=useQueryClient(),[o]=useState(()=>new MoneriumClient({environment:t,clientId:r,redirectUri:n,debug:u})),[c,y]=useState(false),[p,b]=useState(null),[k,I]=useState(true);useEffect(()=>((async()=>{if(o)try{y(await o.getAccess());}catch(m){b(m);}finally{I(false),o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})(),()=>{o&&o.disconnect();}),[]),useEffect(()=>{i&&!c&&!k&&(async()=>{if(o)try{y(await o.getAccess(i));}catch(m){b(m);}finally{o?.bearerProfile&&a?.(o.bearerProfile.refresh_token);}})();},[i]);let x=useCallback(async w=>{try{o&&await o.authorize(w);}catch(m){console.error("Error during authorization:",m),b(m);}},[o]),z=useCallback(async w=>{try{o&&await o.siwe(w);}catch(m){console.error("Error during sign in with ethereum:",m),b(m);}},[o]),C=async()=>{try{o&&await o.revokeAccess();}catch(w){console.error("Error during revoking access:",w),b(w);}finally{s.clear(),y(false);}};return jsx(g.Provider,{value:{sdk:o,authorize:x,siwe:z,isAuthorized:c,isLoading:k,error:p,disconnect:async()=>o?.disconnect(),revokeAccess:async()=>C()},children:e})};var d={getAll:["monerium"],getAuthContext:["monerium","auth-context"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",{currencies:n?[...n]:[],chain:r,address:e}],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"],getSignatures:e=>["monerium","signatures",...e?[e]:[]]};function l(){let e=useContext(g);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function f(){let e=useContext(g);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,siwe:e.siwe,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function qe({query:e}={}){let{isAuthorized:r}=f(),n=l();return useQuery({...e,queryKey:d.getAuthContext,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getAuthContext()},enabled:!!(n&&r&&(e?.enabled??true))})}function ve({profile:e,query:r}={}){let{isAuthorized:n}=f(),t=l(),{data:i}=B(),a=e||i?.profiles?.[0]?.id;return useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return t.getProfile(a)},enabled:!!(t&&n&&a&&(r?.enabled??true))})}function B({query:e}={}){let{isAuthorized:r}=f(),n=l();return useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??true))})}function Ie({query:e}={}){let r=l(),{isAuthorized:n}=f();return useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??true))})}function xe({address:e,query:r={}}){let n=l(),{isAuthorized:t}=f();return useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function ze({profile:e,chain:r,query:n={}}={}){let t=l(),{isAuthorized:i}=f();return useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?parseChain(r):void 0}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getAddresses({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function Ce({address:e,chain:r,currencies:n,query:t}){let i=l(),{isAuthorized:a}=f();return useQuery({...t,queryKey:d.getBalances(e,parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(t?.enabled??true))})}function Ke({iban:e,query:r}){let n=l(),{isAuthorized:t}=f();return useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&t&&e&&(r?.enabled??true))})}function Re({profile:e,chain:r,query:n={}}={}){let t=l(),{isAuthorized:i}=f();return useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return t.getIbans({profile:e,chain:r})},enabled:!!(t&&i&&(n?.enabled??true))})}function Ne({orderId:e,query:r={}}){let n=l(),{isAuthorized:t}=f();return useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&t&&e&&(r.enabled??true))})}function De({query:e={},...r}={}){let n=l(),{isAuthorized:t}=f();return useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&t&&(e.enabled??true))})}function Me({profile:e,mutation:r={}}){let n=l(),{isAuthorized:t}=f(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return n.submitProfileDetails(e,s)},onSuccess(s,o,c,y){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(s,o,c,y);},onError(s,o,c,y){throw r?.onError?.(s,o,c,y),s}});return {submitProfileDetails:a,...u}}function Be({mutation:e={}}={}){let r=l(),{isAuthorized:n}=f(),{mutateAsync:t,...i}=useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:s})},onSuccess(a,u,s,o){e?.onSuccess?.(a,u,s,o);},onError(a,u,s,o){throw e?.onError?.(a,u,s,o),a}});return {requestIban:t,...i}}function Qe({mutation:e={}}={}){let r=l(),{isAuthorized:n}=f(),t=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:s,chain:o})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:s,chain:o})},onSuccess(u,s,o,c){t.invalidateQueries({queryKey:d.getIban(s.iban)}),t.invalidateQueries({queryKey:d.getIbans()}),t.invalidateQueries({queryKey:d.getAddress(s.address)}),e?.onSuccess?.(u,s,o,c);},onError(u,s,o,c){throw e?.onError?.(u,s,o,c),u}});return {moveIban:i,...a}}function Ue({supportingDocument:e,mutation:r}={}){let n=l(),{isAuthorized:t}=f(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.placeOrder,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");let o;if(parseInt(s.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");o=(await n.uploadSupportingDocument(e)).id;}let c={...s,documentId:o};return n.placeOrder(c)},onSuccess(s,o,c,y){i.invalidateQueries({queryKey:d.getOrders()});let p=s;p.address&&p?.chain&&i.invalidateQueries({queryKey:d.getBalances(p.address,p.chain)}),r?.onSuccess?.(s,o,c,y);},onError(s,o,c,y){throw r?.onError?.(s,o,c,y),s}});return {placeOrder:a,...u}}function Fe({query:e,options:r}={}){let n=l(),{isAuthorized:t}=f();return useQuery({...r,queryKey:d.getSignatures(e),queryFn:()=>{if(!n)throw new Error("No SDK instance available");return n.getSignatures(e)},enabled:!!(n&&t&&(r?.enabled??true))})}function Le({mutation:e}={}){let r=l(),{isAuthorized:n}=f(),t=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,s,o,c){t.invalidateQueries({queryKey:d.getAddresses()}),s.profile&&t.invalidateQueries({queryKey:d.getProfile(s.profile)}),e?.onSuccess?.(u,s,o,c);},onError(u,s,o,c){throw e?.onError?.(u,s,o,c),u}});return {linkAddress:i,...a}}var Te=({state:e,profile:r,onMessage:n,onError:t})=>{let i=l();return useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:t}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};export{g as MoneriumContext,J as MoneriumProvider,d as keys,xe as useAddress,ze as useAddresses,f as useAuth,qe as useAuthContext,Ce as useBalances,Ke as useIBAN,Re as useIBANs,Le as useLinkAddress,Qe as useMoveIban,Ne as useOrder,De as useOrders,Ue as usePlaceOrder,ve as useProfile,B as useProfiles,Be as useRequestIban,Fe as useSignatures,Me as useSubmitProfileDetails,Te as useSubscribeOrderNotification,Ie as useTokens};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlQXV0aENvbnRleHQiLCJxdWVyeSIsInVzZVF1ZXJ5IiwidXNlUHJvZmlsZSIsImRhdGEiLCJ1c2VQcm9maWxlcyIsInByb2ZpbGVUb1VzZSIsInVzZVRva2VucyIsInVzZUFkZHJlc3MiLCJ1c2VBZGRyZXNzZXMiLCJwYXJzZUNoYWluIiwidXNlQmFsYW5jZXMiLCJ1c2VJQkFOIiwidXNlSUJBTnMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VTdWJtaXRQcm9maWxlRGV0YWlscyIsIm11dGF0aW9uIiwibXV0YXRlQXN5bmMiLCJyZXN0IiwidXNlTXV0YXRpb24iLCJib2R5IiwidmFyaWFibGVzIiwibXV0YXRpb25Db250ZXh0IiwidmFycyIsInVzZVJlcXVlc3RJYmFuIiwiZW1haWxOb3RpZmljYXRpb25zIiwidXNlTW92ZUliYW4iLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJvcmRlckRhdGEiLCJ1c2VTaWduYXR1cmVzIiwib3B0aW9ucyIsInVzZUxpbmtBZGRyZXNzIiwidXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24iLCJzdGF0ZSIsIm9uTWVzc2FnZSIsIm9uRXJyb3IiXSwibWFwcGluZ3MiOiI4T0FJTyxJQUFNQSxDQUFBQSxDQUFrQkMsYUFBQUEsQ0FFN0IsSUFBSSxFQ2tCQyxJQUFNQyxFQUFtQixDQUFDLENBQy9CLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxRQUFBLENBQUFDLENBQUFBLENBQ0EsV0FBQSxDQUFBQyxDQUFBQSxDQUNBLFdBQUEsQ0FBQUMsQ0FBQUEsQ0FBYyxTQUFBLENBQ2QsWUFBQSxDQUFBQyxDQUFBQSxDQUNBLG9CQUFBLENBQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBQyxDQUFBQSxDQUFRLEtBQ1YsQ0FBQSxHQVVNLENBQ0osSUFBTUMsQ0FBQUEsQ0FBY0MsY0FBQUEsRUFBZSxDQUU3QixDQUFDQyxDQUFHLENBQUEsQ0FBSUMsUUFBQUEsQ0FBUyxJQUVkLElBQUlDLGNBQUFBLENBQWUsQ0FDeEIsWUFBQVIsQ0FBQUEsQ0FDQSxRQUFBLENBQUFGLENBQUFBLENBQ0EsV0FBQSxDQUFBQyxDQUFBQSxDQUNBLEtBQUEsQ0FBT0ksQ0FDVCxDQUFDLENBQ0YsQ0FBQSxDQUVLLENBQUNNLENBQUFBLENBQWNDLENBQWUsQ0FBQSxDQUFJSCxRQUFBQSxDQUFrQixLQUFLLENBQUEsQ0FDekQsQ0FBQ0ksQ0FBQUEsQ0FBT0MsQ0FBUSxDQUFBLENBQUlMLFFBQUFBLENBQWlDLElBQUksQ0FBQSxDQUN6RCxDQUFDTSxDQUFBQSxDQUFhQyxDQUFjLENBQUEsQ0FBSVAsUUFBQUEsQ0FBUyxJQUFJLENBQUEsQ0FFbkRRLFNBQUFBLENBQVUsTUFDUSxTQUFZLENBQzFCLEdBQUlULENBQUFBLENBQ0YsR0FBSSxDQUNGSSxDQUFBQSxDQUFnQixNQUFNSixDQUFBQSxDQUFJLFNBQUEsRUFBVyxFQUN2QyxDQUFBLE1BQVNLLENBQUFBLENBQU8sQ0FDZEMsQ0FBQUEsQ0FBU0QsQ0FBSyxFQUNoQixDQUFBLE9BQUUsQ0FDQUcsQ0FBQUEsQ0FBZSxLQUFLLENBQUEsQ0FDaEJSLENBQUFBLEVBQUssYUFBQSxFQUNQSixDQUFBQSxHQUF1QkksQ0FBQUEsQ0FBSSxhQUFBLENBQWMsYUFBYSxFQUUxRCxDQUVKLENBQUEsR0FFUSxDQUVELElBQU0sQ0FDUEEsQ0FBQUEsRUFDRkEsQ0FBQUEsQ0FBSSxVQUFBLEdBRVIsQ0FBQSxDQUFBLENBQ0MsRUFBRSxDQUFBLENBRUxTLFNBQUFBLENBQVUsSUFBTSxDQWNWZCxDQUFBQSxFQUFnQixDQUFDUSxDQUFBQSxFQUFnQixDQUFDSSxDQUFBQSxFQUFBQSxDQWJwQixTQUFZLENBQzVCLEdBQUlQLENBQUFBLENBQ0YsR0FBSSxDQUNGSSxDQUFBQSxDQUFnQixNQUFNSixDQUFBQSxDQUFJLFNBQUEsQ0FBVUwsQ0FBWSxDQUFDLEVBQ25ELENBQUEsTUFBU1UsQ0FBQUEsQ0FBTyxDQUNkQyxDQUFBQSxDQUFTRCxDQUFLLEVBQ2hCLENBQUEsT0FBRSxDQUNJTCxDQUFBQSxFQUFLLGFBQUEsRUFDUEosQ0FBQUEsR0FBdUJJLENBQUFBLENBQUksYUFBQSxDQUFjLGFBQWEsRUFFMUQsQ0FFSixDQUFBLElBSUYsQ0FBQSxDQUFHLENBQUNMLENBQVksQ0FBQyxDQUFBLENBRWpCLElBQU1lLENBQUFBLENBQVlDLFdBQUFBLENBQ2hCLE1BQU9DLENBQUFBLEVBQTZCLENBQ2xDLEdBQUksQ0FDRVosQ0FBQUEsRUFDRixNQUFNQSxDQUFBQSxDQUFJLFNBQUEsQ0FBVVksQ0FBTSxFQUU5QixDQUFBLE1BQVNDLENBQUFBLENBQUssQ0FDWixPQUFBLENBQVEsS0FBQSxDQUFNLDZCQUFBLENBQStCQSxDQUFHLENBQUEsQ0FDaERQLENBQUFBLENBQVNPLENBQUcsRUFDZCxDQUNGLENBQUEsQ0FDQSxDQUFDYixDQUFHLENBQ04sQ0FBQSxDQUVNYyxDQUFBQSxDQUFPSCxXQUFBQSxDQUNYLE1BQU9DLENBQUFBLEVBQWdDLENBQ3JDLEdBQUksQ0FDRVosQ0FBQUEsRUFDRixNQUFNQSxDQUFBQSxDQUFJLElBQUEsQ0FBS1ksQ0FBTSxFQUV6QixDQUFBLE1BQVNDLEVBQUssQ0FDWixPQUFBLENBQVEsS0FBQSxDQUFNLHFDQUFBLENBQXVDQSxDQUFHLENBQUEsQ0FDeERQLENBQUFBLENBQVNPLENBQUcsRUFDZCxDQUNGLENBQUEsQ0FDQSxDQUFDYixDQUFHLENBQ04sQ0FBQSxDQUVNZSxDQUFBQSxDQUFlLFNBQVksQ0FDL0IsR0FBSSxDQUNFZixDQUFBQSxFQUNGLE1BQU1BLENBQUFBLENBQUksWUFBQSxHQUVkLENBQUEsTUFBU2EsQ0FBQUEsQ0FBSyxDQUNaLE9BQUEsQ0FBUSxLQUFBLENBQU0sK0JBQUEsQ0FBaUNBLENBQUcsQ0FBQSxDQUNsRFAsRUFBU08sQ0FBRyxFQUNkLENBQUEsT0FBRSxDQUNBZixDQUFBQSxDQUFZLEtBQUEsRUFBTSxDQUNsQk0sQ0FBQUEsQ0FBZ0IsS0FBSyxFQUN2QixDQUNGLENBQUEsQ0FFQSxPQUNFWSxHQUFBQSxDQUFDNUIsQ0FBQUEsQ0FBZ0IsUUFBQSxDQUFoQixDQUNDLEtBQUEsQ0FBTyxDQUNMLEdBQUEsQ0FBQVksQ0FBQUEsQ0FDQSxTQUFBLENBQUFVLENBQUFBLENBQ0EsSUFBQSxDQUFBSSxDQUFBQSxDQUNBLFlBQUEsQ0FBQVgsQ0FBQUEsQ0FDQSxTQUFBLENBQVdJLENBQUFBLENBQ1gsS0FBQSxDQUFBRixDQUFBQSxDQUNBLFVBQUEsQ0FBWSxTQUFZTCxDQUFBQSxFQUFLLFVBQUEsRUFBVyxDQUN4QyxZQUFBLENBQWMsU0FBWWUsQ0FBQUEsRUFDNUIsQ0FBQSxDQUVDLFFBQUEsQ0FBQXhCLENBQUFBLENBQ0gsQ0FFSixFQ3JITyxJQUFNMEIsQ0FBQUEsQ0FBTyxDQUNsQixNQUFBLENBQVEsQ0FBQyxVQUFVLENBQUEsQ0FDbkIsY0FBQSxDQUFnQixDQUFDLFVBQUEsQ0FBWSxjQUFjLENBQUEsQ0FDM0MsVUFBQSxDQUFhQyxDQUFBQSxFQUFvQixDQUMvQixVQUFBLENBQ0EsU0FBQSxDQUNBLEdBQUlBLENBQUFBLENBQVUsQ0FBQ0EsQ0FBTyxDQUFBLENBQUksRUFDNUIsQ0FBQSxDQUNBLFdBQUEsQ0FBYSxDQUFDLFVBQUEsQ0FBWSxVQUFVLENBQUEsQ0FDcEMsVUFBQSxDQUFhQyxDQUFBQSxFQUFvQixDQUFDLFVBQUEsQ0FBWSxTQUFBLENBQVcsQ0FBQ0EsQ0FBTyxDQUFDLENBQUEsQ0FDbEUsWUFBQSxDQUFlQyxDQUFBQSxFQUFxQixDQUNsQyxVQUFBLENBQ0EsV0FBQSxDQUNBLEdBQUlBLENBQUFBLENBQVMsQ0FBQ0EsQ0FBTSxDQUFBLENBQUksRUFDMUIsQ0FBQSxDQUNBLFlBQWEsQ0FDWEQsQ0FBQUEsQ0FDQUUsQ0FBQUEsQ0FDQUMsQ0FBQUEsR0FDRyxDQUNILFVBQUEsQ0FDQSxVQUFBLENBQ0EsQ0FDRSxVQUFBLENBQVlBLENBQUFBLENBQWEsQ0FBQyxHQUFHQSxDQUFVLENBQUEsQ0FBSSxFQUFDLENBQzVDLE1BQUFELENBQUFBLENBQ0EsT0FBQSxDQUFBRixDQUNGLENBQ0YsQ0FBQSxDQUNBLE9BQUEsQ0FBVUksQ0FBQUEsRUFBaUIsQ0FBQyxVQUFBLENBQVksTUFBQSxDQUFRQSxDQUFJLENBQUEsQ0FDcEQsUUFBQSxDQUFXSCxDQUFBQSxFQUFxQixDQUM5QixVQUFBLENBQ0EsT0FBQSxDQUNBLEdBQUlBLENBQUFBLENBQVMsQ0FBQ0EsQ0FBTSxDQUFBLENBQUksRUFDMUIsQ0FBQSxDQUNBLFNBQUEsQ0FBVyxDQUFDLFVBQUEsQ0FBWSxRQUFRLENBQUEsQ0FDaEMsUUFBQSxDQUFXSSxDQUFBQSxFQUFvQixDQUFDLFVBQUEsQ0FBWSxPQUFBLENBQVNBLENBQU8sQ0FBQSxDQUM1RCxTQUFBLENBQVlKLENBQUFBLEVBQXFCLENBQy9CLFVBQUEsQ0FDQSxRQUFBLENBQ0EsR0FBSUEsQ0FBQUEsQ0FBUyxDQUFDQSxDQUFNLENBQUEsQ0FBSSxFQUMxQixFQUNBLG9CQUFBLENBQXNCLENBQUMsVUFBQSxDQUFZLHdCQUF3QixDQUFBLENBQzNELFFBQUEsQ0FBVSxDQUFDLFVBQUEsQ0FBWSxXQUFXLENBQUEsQ0FDbEMsV0FBQSxDQUFhLENBQUMsVUFBQSxDQUFZLGNBQWMsQ0FBQSxDQUN4QyxVQUFBLENBQVksQ0FBQyxVQUFBLENBQVksYUFBYSxDQUFBLENBQ3RDLFdBQUEsQ0FBYSxDQUFDLFVBQUEsQ0FBWSxjQUFjLENBQUEsQ0FDeEMsYUFBQSxDQUFnQkEsQ0FBQUEsRUFBcUIsQ0FDbkMsVUFBQSxDQUNBLFlBQUEsQ0FDQSxHQUFJQSxDQUFBQSxDQUFTLENBQUNBLENBQU0sQ0FBQSxDQUFJLEVBQzFCLENBQ0YsRUFHQSxTQUFTSyxDQUFBQSxFQUFxQyxDQUM1QyxJQUFNQyxDQUFBQSxDQUFVQyxVQUFBQSxDQUFXdkMsQ0FBZSxDQUFBLENBRTFDLEdBQUlzQyxDQUFBQSxHQUFZLEtBQ2QsTUFBTSxJQUFJLEtBQUEsQ0FBTSwrQ0FBK0MsQ0FBQSxDQUVqRSxPQUFPQSxDQUFBQSxFQUFTLEdBQ2xCLENBeUJPLFNBQVNFLENBQUFBLEVBQXlCLENBQ3ZDLElBQU1GLENBQUFBLENBQVVDLFVBQUFBLENBQVd2QyxDQUFlLEVBRTFDLEdBQUlzQyxDQUFBQSxHQUFZLElBQUEsQ0FDZCxNQUFNLElBQUksS0FBQSxDQUFNLGdEQUFnRCxDQUFBLENBR2xFLE9BQU8sQ0FDTCxZQUFBLENBQWNBLENBQUFBLENBQVEsWUFBQSxDQUN0QixTQUFBLENBQVdBLENBQUFBLENBQVEsU0FBQSxDQUNuQixLQUFNQSxDQUFBQSxDQUFRLElBQUEsQ0FDZCxTQUFBLENBQVdBLENBQUFBLENBQVEsU0FBQSxDQUNuQixLQUFBLENBQU9BLENBQUFBLENBQVEsS0FBQSxDQUNmLFVBQUEsQ0FBWUEsQ0FBQUEsQ0FBUSxVQUFBLENBQ3BCLFlBQUEsQ0FBY0EsQ0FBQUEsQ0FBUSxZQUN4QixDQUNGLENBcUJPLFNBQVNHLEVBQUFBLENBQWUsQ0FDN0IsS0FBQSxDQUFBQyxDQUNGLENBQUEsQ0FHSSxFQUFDLENBQUcsQ0FDTixHQUFNLENBQUUsWUFBQSxDQUFBM0IsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBQzNCNUIsRUFBTXlCLENBQUFBLEVBQU8sQ0FFbkIsT0FBT00sUUFBQUEsQ0FBUyxDQUNkLEdBQUdELENBQUFBLENBQ0gsUUFBQSxDQUFVYixDQUFBQSxDQUFLLGNBQUEsQ0FDZixPQUFBLENBQVMsU0FBWSxDQUNuQixHQUFJLENBQUNqQixDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FHdkMsT0FBT0gsQ0FBQUEsQ0FBSSxjQUFBLEVBQ2IsQ0FBQSxDQUNBLE9BQUEsQ0FBUyxDQUFBLEVBQVFBLENBQUFBLEVBQU9HLENBQUFBLEdBQWlCMkIsQ0FBQUEsRUFBTyxPQUFBLEVBQVcsSUFBQSxDQUFBLENBQzdELENBQUMsQ0FDSCxDQXFCTyxTQUFTRSxFQUFBQSxDQUFXLENBQ3pCLE9BQUEsQ0FBQWQsQ0FBQUEsQ0FDQSxLQUFBLENBQUFZLENBQ0YsQ0FBQSxDQUtJLEVBQUMsQ0FBRyxDQUNOLEdBQU0sQ0FBRSxZQUFBLENBQUEzQixDQUFhLENBQUEsQ0FBSXlCLENBQUFBLEVBQVEsQ0FDM0I1QixDQUFBQSxDQUFNeUIsQ0FBQUEsRUFBTyxDQUViLENBQUUsSUFBQSxDQUFBUSxDQUFLLENBQUEsQ0FBSUMsQ0FBQUEsRUFBWSxDQUV2QkMsQ0FBQUEsQ0FBZWpCLENBQUFBLEVBQVllLENBQUFBLEVBQU0sUUFBQSxHQUFXLENBQUMsQ0FBQSxFQUFHLEVBQUEsQ0FFdEQsT0FBT0YsUUFBQUEsQ0FBUyxDQUNkLEdBQUdELEVBQ0gsUUFBQSxDQUFVYixDQUFBQSxDQUFLLFVBQUEsQ0FBV2tCLENBQVksQ0FBQSxDQUN0QyxPQUFBLENBQVMsU0FBWSxDQUNuQixHQUFJLENBQUNuQyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FFdkMsR0FBSSxDQUFDZ0MsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHdCQUF3QixDQUFBLENBRzFDLE9BQU9uQyxDQUFBQSxDQUFJLFVBQUEsQ0FBV21DLENBQVksQ0FDcEMsQ0FBQSxDQUNBLE9BQUEsQ0FBUyxDQUFBLEVBQ1BuQyxDQUFBQSxFQUFPRyxDQUFBQSxFQUFnQmdDLENBQUFBLEdBQWlCTCxDQUFBQSxFQUFPLE9BQUEsRUFBVyxJQUFBLENBQUEsQ0FFOUQsQ0FBQyxDQUNILENBcUJPLFNBQVNJLENBQUFBLENBQVksQ0FDMUIsS0FBQSxDQUFBSixDQUNGLENBQUEsQ0FHSSxFQUFDLENBQUcsQ0FDTixHQUFNLENBQUUsWUFBQSxDQUFBM0IsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBQzNCNUIsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FFbkIsT0FBT00sUUFBQUEsQ0FBUyxDQUNkLEdBQUdELENBQUFBLENBQ0gsUUFBQSxDQUFVYixDQUFBQSxDQUFLLFdBQUEsQ0FDZixPQUFBLENBQVMsU0FBWSxDQUNuQixHQUFJLENBQUNqQixDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FFdkMsT0FBT0gsQ0FBQUEsQ0FBSSxXQUFBLEVBQ2IsQ0FBQSxDQUNBLE9BQUEsQ0FBUyxDQUFBLEVBQVFBLENBQUFBLEVBQU9HLENBQUFBLEdBQWlCMkIsQ0FBQUEsRUFBTyxPQUFBLEVBQVcsSUFBQSxDQUFBLENBQzdELENBQUMsQ0FDSCxDQW1CTyxTQUFTTSxFQUFBQSxDQUFVLENBQ3hCLEtBQUEsQ0FBQU4sQ0FDRixFQUdJLEVBQUMsQ0FBRyxDQUNOLElBQU05QixDQUFBQSxDQUFNeUIsQ0FBQUEsRUFBTyxDQUNiLENBQUUsWUFBQSxDQUFBdEIsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBQ2pDLE9BQU9HLFFBQUFBLENBQVMsQ0FDZCxHQUFHRCxDQUFBQSxDQUNILFFBQUEsQ0FBVWIsQ0FBQUEsQ0FBSyxTQUFBLENBQ2YsT0FBQSxDQUFTLFNBQVksQ0FDbkIsR0FBSSxDQUFDakIsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBRTdDLEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBRXZDLE9BQU9ILENBQUFBLENBQUksU0FBQSxFQUNiLENBQUEsQ0FDQSxPQUFBLENBQVMsQ0FBQSxFQUFRQSxDQUFBQSxFQUFPRyxDQUFBQSxHQUFpQjJCLENBQUFBLEVBQU8sT0FBQSxFQUFXLElBQUEsQ0FBQSxDQUM3RCxDQUFDLENBQ0gsQ0FvQk8sU0FBU08sRUFBQUEsQ0FBVyxDQUN6QixPQUFBLENBQUFsQixDQUFBQSxDQUNBLEtBQUEsQ0FBQVcsQ0FBQUEsQ0FBUSxFQUNWLENBQUEsQ0FLRyxDQUNELElBQU05QixDQUFBQSxDQUFNeUIsQ0FBQUEsRUFBTyxDQUNiLENBQUUsWUFBQSxDQUFBdEIsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBRWpDLE9BQU9HLFFBQUFBLENBQVMsQ0FDZCxHQUFHRCxDQUFBQSxDQUNILFFBQUEsQ0FBVWIsQ0FBQUEsQ0FBSyxVQUFBLENBQVdFLENBQU8sQ0FBQSxDQUNqQyxPQUFBLENBQVMsU0FBWSxDQUNuQixHQUFJLENBQUNuQixDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxFQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FHdkMsR0FBSSxDQUFDZ0IsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBR3ZDLE9BQU9uQixDQUFBQSxDQUFJLFVBQUEsQ0FBV21CLENBQU8sQ0FDL0IsQ0FBQSxDQUNBLE9BQUEsQ0FBUyxDQUFBLEVBQ1BuQixDQUFBQSxFQUFPRyxDQUFBQSxFQUFnQmdCLENBQUFBLEdBQVlXLENBQUFBLEVBQU8sT0FBQSxFQUFXLElBQUEsQ0FBQSxDQUV6RCxDQUFDLENBQ0gsQ0FvQk8sU0FBU1EsRUFBQUEsQ0FBYSxDQUMzQixPQUFBLENBQUFwQixDQUFBQSxDQUNBLEtBQUEsQ0FBQUcsQ0FBQUEsQ0FDQSxLQUFBLENBQUFTLENBQUFBLENBQVEsRUFDVixDQUFBLENBS0ksRUFBQyxDQUFHLENBQ04sSUFBTTlCLENBQUFBLENBQU15QixDQUFBQSxFQUFPLENBRWIsQ0FBRSxZQUFBLENBQUF0QixDQUFhLENBQUEsQ0FBSXlCLENBQUFBLEVBQVEsQ0FFakMsT0FBT0csUUFBQUEsQ0FBUyxDQUNkLEdBQUdELENBQUFBLENBQ0gsUUFBQSxDQUFVYixDQUFBQSxDQUFLLFlBQUEsQ0FBYSxDQUMxQixPQUFBLENBQUFDLENBQUFBLENBQ0EsTUFBT0csQ0FBQUEsQ0FBUWtCLFVBQUFBLENBQVdsQixDQUFLLENBQUEsQ0FBSSxNQUNyQyxDQUFDLENBQUEsQ0FDRCxPQUFBLENBQVMsU0FBWSxDQUNuQixHQUFJLENBQUNyQixDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FFdkMsT0FBT0gsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsQ0FBRSxPQUFBLENBQUFrQixDQUFBQSxDQUFTLE1BQUFHLENBQU0sQ0FBQyxDQUM1QyxDQUFBLENBQ0EsT0FBQSxDQUFTLENBQUEsRUFBUXJCLENBQUFBLEVBQU9HLENBQUFBLEdBQWlCMkIsQ0FBQUEsRUFBTyxPQUFBLEVBQVcsSUFBQSxDQUFBLENBQzdELENBQUMsQ0FDSCxDQXVCTyxTQUFTVSxFQUFBQSxDQUFZLENBQzFCLE9BQUEsQ0FBQXJCLENBQUFBLENBQ0EsS0FBQSxDQUFBRSxDQUFBQSxDQUNBLFVBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxLQUFBLENBQUFRLENBQ0YsQ0FBQSxDQU1HLENBQ0QsSUFBTTlCLENBQUFBLENBQU15QixDQUFBQSxFQUFPLENBQ2IsQ0FBRSxZQUFBLENBQUF0QixDQUFhLENBQUEsQ0FBSXlCLENBQUFBLEVBQVEsQ0FFakMsT0FBT0csUUFBQUEsQ0FBUyxDQUNkLEdBQUdELENBQUFBLENBQ0gsUUFBQSxDQUFVYixDQUFBQSxDQUFLLFdBQUEsQ0FBWUUsQ0FBQUEsQ0FBU29CLFVBQUFBLENBQVdsQixDQUFLLENBQUEsQ0FBR0MsQ0FBVSxDQUFBLENBQ2pFLFNBQUEsQ0FBVyxHQUFBLENBQU8sRUFBQSxDQUFLLENBQUEsQ0FDdkIsT0FBQSxDQUFTLFNBQVksQ0FDbkIsR0FBSSxDQUFDdEIsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBRTdDLEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBRXZDLE9BQU9ILENBQUFBLENBQUksV0FBQSxDQUFZbUIsQ0FBQUEsQ0FBU0UsQ0FBQUEsQ0FBT0MsQ0FBVSxDQUNuRCxDQUFBLENBQ0EsT0FBQSxDQUFTLEdBQVF0QixDQUFBQSxFQUFPRyxDQUFBQSxHQUFpQjJCLENBQUFBLEVBQU8sT0FBQSxFQUFXLElBQUEsQ0FBQSxDQUM3RCxDQUFDLENBQ0gsQ0FtQk8sU0FBU1csRUFBQUEsQ0FBUSxDQUN0QixJQUFBLENBQUFsQixDQUFBQSxDQUNBLEtBQUEsQ0FBQU8sQ0FDRixDQUFBLENBS0csQ0FDRCxJQUFNOUIsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FDYixDQUFFLFlBQUEsQ0FBQXRCLENBQWEsQ0FBQSxDQUFJeUIsQ0FBQUEsRUFBUSxDQUVqQyxPQUFPRyxRQUFBQSxDQUFTLENBQ2QsR0FBR0QsQ0FBQUEsQ0FDSCxRQUFBLENBQVViLENBQUFBLENBQUssT0FBQSxDQUFRTSxDQUFJLENBQUEsQ0FDM0IsT0FBQSxDQUFTLFNBQVksQ0FDbkIsR0FBSSxDQUFDdkIsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBRTdDLEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBR3ZDLE9BQU9ILENBQUFBLENBQUksT0FBQSxDQUFRdUIsQ0FBSSxDQUN6QixDQUFBLENBQ0EsT0FBQSxDQUFTLENBQUEsRUFBUXZCLENBQUFBLEVBQU9HLENBQUFBLEVBQWdCb0IsQ0FBQUEsR0FBU08sQ0FBQUEsRUFBTyxPQUFBLEVBQVcsSUFBQSxDQUFBLENBQ3JFLENBQUMsQ0FDSCxDQWtCTyxTQUFTWSxFQUFBQSxDQUFTLENBQ3ZCLE9BQUEsQ0FBQXhCLENBQUFBLENBQ0EsS0FBQSxDQUFBRyxDQUFBQSxDQUNBLEtBQUEsQ0FBQVMsQ0FBQUEsQ0FBUSxFQUNWLENBQUEsQ0FPSSxFQUFDLENBQUcsQ0FDTixJQUFNOUIsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FDYixDQUFFLFlBQUEsQ0FBQXRCLENBQWEsQ0FBQSxDQUFJeUIsQ0FBQUEsRUFBUSxDQUVqQyxPQUFPRyxRQUFBQSxDQUFTLENBQ2QsR0FBR0QsQ0FBQUEsQ0FDSCxRQUFBLENBQVViLENBQUFBLENBQUssUUFBQSxDQUFTLENBQUUsT0FBQSxDQUFBQyxDQUFBQSxDQUFTLEtBQUEsQ0FBQUcsQ0FBTSxDQUFDLENBQUEsQ0FDMUMsT0FBQSxDQUFTLFNBQVksQ0FDbkIsR0FBSSxDQUFDckIsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBRTdDLEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBR3ZDLE9BQU9ILENBQUFBLENBQUksUUFBQSxDQUFTLENBQUUsT0FBQSxDQUFBa0IsQ0FBQUEsQ0FBUyxLQUFBLENBQUFHLENBQU0sQ0FBQyxDQUN4QyxDQUFBLENBQ0EsT0FBQSxDQUFTLENBQUEsRUFBUXJCLENBQUFBLEVBQU9HLENBQUFBLEdBQWlCMkIsQ0FBQUEsRUFBTyxPQUFBLEVBQVcsTUFDN0QsQ0FBQyxDQUNILENBbUJPLFNBQVNhLEVBQUFBLENBQVMsQ0FDdkIsT0FBQSxDQUFBbkIsQ0FBQUEsQ0FDQSxLQUFBLENBQUFNLENBQUFBLENBQVEsRUFDVixDQUFBLENBS0csQ0FDRCxJQUFNOUIsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FDYixDQUFFLFlBQUEsQ0FBQXRCLENBQWEsQ0FBQSxDQUFJeUIsQ0FBQUEsRUFBUSxDQUNqQyxPQUFPRyxRQUFBQSxDQUFTLENBQ2QsR0FBR0QsQ0FBQUEsQ0FDSCxRQUFBLENBQVViLENBQUFBLENBQUssUUFBQSxDQUFTTyxDQUFPLENBQUEsQ0FDL0IsT0FBQSxDQUFTLFNBQVksQ0FDbkIsR0FBSSxDQUFDeEIsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBRTdDLEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBRXZDLEdBQUksQ0FBQ3FCLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSxzQkFBc0IsQ0FBQSxDQUd4QyxPQUFPeEIsQ0FBQUEsQ0FBSSxRQUFBLENBQVN3QixDQUFPLENBQzdCLENBQUEsQ0FDQSxPQUFBLENBQVMsQ0FBQSxFQUFReEIsQ0FBQUEsRUFBT0csQ0FBQUEsRUFBZ0JxQixDQUFBQSxHQUFZTSxDQUFBQSxDQUFNLE9BQUEsRUFBVyxJQUFBLENBQUEsQ0FDdkUsQ0FBQyxDQUNILENBeUJPLFNBQVNjLEVBQUFBLENBQVUsQ0FDeEIsS0FBQSxDQUFBZCxDQUFBQSxDQUFRLEVBQUMsQ0FDVCxHQUFHZSxDQUNMLENBQUEsQ0FRSSxFQUFDLENBQUcsQ0FDTixJQUFNN0MsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FDYixDQUFFLFlBQUEsQ0FBQXRCLENBQWEsRUFBSXlCLENBQUFBLEVBQVEsQ0FDakMsT0FBT0csUUFBQUEsQ0FBUyxDQUNkLEdBQUdELENBQUFBLENBQ0gsUUFBQSxDQUFVYixDQUFBQSxDQUFLLFNBQUEsQ0FBVTRCLENBQU8sQ0FBQSxDQUNoQyxPQUFBLENBQVMsU0FBWSxDQUNuQixHQUFJLENBQUM3QyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FHdkMsT0FBT0gsQ0FBQUEsQ0FBSSxVQUFVNkMsQ0FBTyxDQUM5QixDQUFBLENBQ0EsT0FBQSxDQUFTLENBQUEsRUFBUTdDLENBQUFBLEVBQU9HLENBQUFBLEdBQWlCMkIsQ0FBQUEsQ0FBTSxPQUFBLEVBQVcsSUFBQSxDQUFBLENBQzVELENBQUMsQ0FDSCxDQXlCTyxTQUFTZ0IsRUFBQUEsQ0FBd0IsQ0FDdEMsT0FBQSxDQUFBNUIsQ0FBQUEsQ0FDQSxRQUFBLENBQUE2QixDQUFBQSxDQUFXLEVBQ2IsQ0FBQSxDQWFFLENBQ0EsSUFBTS9DLENBQUFBLENBQU15QixDQUFBQSxFQUFPLENBQ2IsQ0FBRSxZQUFBLENBQUF0QixDQUFhLENBQUEsQ0FBSXlCLEdBQVEsQ0FDM0I5QixDQUFBQSxDQUFjQyxjQUFBQSxFQUFlLENBRTdCLENBQUUsV0FBQSxDQUFBaUQsQ0FBQUEsQ0FBYSxHQUFHQyxDQUFLLENBQUEsQ0FBSUMsV0FBQUEsQ0FBWSxDQUMzQyxHQUFHSCxDQUFBQSxDQUNILFdBQUEsQ0FBYTlCLENBQUFBLENBQUssb0JBQUEsQ0FDbEIsVUFBQSxDQUFZLE1BQU9rQyxDQUFBQSxFQUFzQyxDQUN2RCxHQUFJLENBQUNuRCxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FHdkMsT0FBT0gsQ0FBQUEsQ0FBSSxvQkFBQSxDQUFxQmtCLENBQUFBLENBQVNpQyxDQUFJLENBQy9DLENBQUEsQ0FDQSxTQUFBLENBQVVsQixDQUFBQSxDQUFNbUIsQ0FBQUEsQ0FBVzFCLENBQUFBLENBQVMyQixDQUFBQSxDQUFpQixDQUVuRHZELENBQUFBLENBQVksaUJBQUEsQ0FBa0IsQ0FDNUIsUUFBQSxDQUFVbUIsQ0FBQUEsQ0FBSyxVQUFBLENBQVdDLENBQU8sQ0FDbkMsQ0FBQyxDQUFBLENBRUQ2QixDQUFBQSxFQUFVLFNBQUEsR0FBWWQsQ0FBQUEsQ0FBTW1CLENBQUFBLENBQVcxQixDQUFBQSxDQUFTMkIsQ0FBZSxFQUNqRSxDQUFBLENBQ0EsT0FBQSxDQUFRaEQsQ0FBQUEsQ0FBT2lELENBQUFBLENBQU01QixDQUFBQSxDQUFTMkIsQ0FBQUEsQ0FBaUIsQ0FFN0MsTUFBQU4sQ0FBQUEsRUFBVSxPQUFBLEdBQVUxQyxDQUFBQSxDQUFPaUQsQ0FBQUEsQ0FBTTVCLENBQUFBLENBQVMyQixDQUFlLENBQUEsQ0FDbkRoRCxDQUNSLENBQ0YsQ0FBQyxDQUFBLENBQ0QsT0FBTyxDQUNMLG9CQUFBLENBQXNCMkMsQ0FBQUEsQ0FDdEIsR0FBR0MsQ0FDTCxDQUNGLENBdUJPLFNBQVNNLEVBQUFBLENBQWUsQ0FDN0IsUUFBQSxDQUFBUixDQUFBQSxDQUFXLEVBQ2IsQ0FBQSxDQUdJLEVBQUMsQ0FLSCxDQUNBLElBQU0vQyxDQUFBQSxDQUFNeUIsQ0FBQUEsRUFBTyxDQUNiLENBQUUsWUFBQSxDQUFBdEIsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBRTNCLENBQUUsV0FBQSxDQUFBb0IsQ0FBQUEsQ0FBYSxHQUFHQyxDQUFLLENBQUEsQ0FBSUMsV0FBQUEsQ0FBWSxDQUMzQyxHQUFHSCxDQUFBQSxDQUNILFdBQUEsQ0FBYTlCLENBQUFBLENBQUssV0FBQSxDQUNsQixVQUFBLENBQVksTUFBTyxDQUNqQixPQUFBLENBQUFFLEVBQ0EsS0FBQSxDQUFBRSxDQUFBQSxDQUNBLGtCQUFBLENBQUFtQyxDQUNGLENBQUEsR0FBMEIsQ0FDeEIsR0FBSSxDQUFDeEQsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDJCQUEyQixDQUFBLENBRTdDLEdBQUksQ0FBQ0csRUFDSCxNQUFNLElBQUksS0FBQSxDQUFNLHFCQUFxQixDQUFBLENBR3ZDLE9BQU9ILENBQUFBLENBQUksV0FBQSxDQUFZLENBQUUsT0FBQSxDQUFBbUIsQ0FBQUEsQ0FBUyxLQUFBLENBQUFFLENBQUFBLENBQU8sa0JBQUEsQ0FBQW1DLENBQW1CLENBQUMsQ0FDL0QsQ0FBQSxDQUNBLFNBQUEsQ0FBVXZCLENBQUFBLENBQU1tQixDQUFBQSxDQUFXMUIsQ0FBQUEsQ0FBUzJCLENBQUFBLENBQWlCLENBRW5ETixDQUFBQSxFQUFVLFNBQUEsR0FBWWQsQ0FBQUEsQ0FBTW1CLENBQUFBLENBQVcxQixDQUFBQSxDQUFTMkIsQ0FBZSxFQUNqRSxDQUFBLENBQ0EsT0FBQSxDQUFRaEQsQ0FBQUEsQ0FBT2lELENBQUFBLENBQU01QixDQUFBQSxDQUFTMkIsQ0FBQUEsQ0FBaUIsQ0FFN0MsTUFBQU4sQ0FBQUEsRUFBVSxPQUFBLEdBQVUxQyxDQUFBQSxDQUFPaUQsQ0FBQUEsQ0FBTTVCLENBQUFBLENBQVMyQixDQUFlLENBQUEsQ0FDbkRoRCxDQUNSLENBQ0YsQ0FBQyxFQUNELE9BQU8sQ0FDTCxXQUFBLENBQWEyQyxDQUFBQSxDQUNiLEdBQUdDLENBQ0wsQ0FDRixDQXNCTyxTQUFTUSxFQUFBQSxDQUFZLENBQzFCLFFBQUEsQ0FBQVYsQ0FBQUEsQ0FBVyxFQUNiLENBQUEsQ0FPSSxFQUFDLENBS0gsQ0FDQSxJQUFNL0MsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FDYixDQUFFLFlBQUEsQ0FBQXRCLENBQWEsQ0FBQSxDQUFJeUIsQ0FBQUEsRUFBUSxDQUMzQjlCLENBQUFBLENBQWNDLGNBQUFBLEVBQWUsQ0FFN0IsQ0FBRSxZQUFBaUQsQ0FBQUEsQ0FBYSxHQUFHQyxDQUFLLENBQUEsQ0FBSUMsV0FBQUEsQ0FBWSxDQUMzQyxHQUFHSCxDQUFBQSxDQUNILFdBQUEsQ0FBYTlCLENBQUFBLENBQUssUUFBQSxDQUNsQixVQUFBLENBQVksTUFBTyxDQUNqQixJQUFBLENBQUFNLENBQUFBLENBQ0EsT0FBQSxDQUFBSixDQUFBQSxDQUNBLEtBQUEsQ0FBQUUsQ0FDRixDQUFBLEdBQTBDLENBQ3hDLEdBQUksQ0FBQ3JCLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSwyQkFBMkIsQ0FBQSxDQUU3QyxHQUFJLENBQUNHLEVBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSxxQkFBcUIsQ0FBQSxDQUd2QyxPQUFPSCxDQUFBQSxDQUFJLFFBQUEsQ0FBU3VCLENBQUFBLENBQU0sQ0FBRSxPQUFBLENBQUFKLENBQUFBLENBQVMsS0FBQSxDQUFBRSxDQUFNLENBQUMsQ0FDOUMsQ0FBQSxDQUNBLFNBQUEsQ0FBVVksQ0FBQUEsQ0FBTW1CLENBQUFBLENBQVcxQixDQUFBQSxDQUFTMkIsQ0FBQUEsQ0FBaUIsQ0FFbkR2RCxDQUFBQSxDQUFZLGlCQUFBLENBQWtCLENBQzVCLFFBQUEsQ0FBVW1CLENBQUFBLENBQUssT0FBQSxDQUFRbUMsQ0FBQUEsQ0FBVSxJQUFJLENBQ3ZDLENBQUMsQ0FBQSxDQUNEdEQsQ0FBQUEsQ0FBWSxpQkFBQSxDQUFrQixDQUM1QixRQUFBLENBQVVtQixDQUFBQSxDQUFLLFFBQUEsRUFDakIsQ0FBQyxDQUFBLENBQ0RuQixDQUFBQSxDQUFZLGlCQUFBLENBQWtCLENBQzVCLFFBQUEsQ0FBVW1CLENBQUFBLENBQUssVUFBQSxDQUFXbUMsQ0FBQUEsQ0FBVSxPQUFPLENBQzdDLENBQUMsQ0FBQSxDQUVETCxDQUFBQSxFQUFVLFNBQUEsR0FBWWQsQ0FBQUEsQ0FBTW1CLENBQUFBLENBQVcxQixDQUFBQSxDQUFTMkIsQ0FBZSxFQUNqRSxDQUFBLENBQ0EsT0FBQSxDQUFRaEQsQ0FBQUEsQ0FBT2lELENBQUFBLENBQU01QixFQUFTMkIsQ0FBQUEsQ0FBaUIsQ0FFN0MsTUFBQU4sQ0FBQUEsRUFBVSxPQUFBLEdBQVUxQyxDQUFBQSxDQUFPaUQsQ0FBQUEsQ0FBTTVCLENBQUFBLENBQVMyQixDQUFlLENBQUEsQ0FDbkRoRCxDQUNSLENBQ0YsQ0FBQyxDQUFBLENBQ0QsT0FBTyxDQUNMLFNBQVUyQyxDQUFBQSxDQUNWLEdBQUdDLENBQ0wsQ0FDRixDQTRCTyxTQUFTUyxFQUFBQSxDQUFjLENBQzVCLGtCQUFBLENBQUFDLENBQUFBLENBQ0EsUUFBQSxDQUFBWixDQUNGLENBQUEsQ0FJSSxFQUFDLENBQTBFLENBQzdFLElBQU0vQyxDQUFBQSxDQUFNeUIsQ0FBQUEsRUFBTyxDQUNiLENBQUUsWUFBQSxDQUFBdEIsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBQzNCOUIsQ0FBQUEsQ0FBY0MsY0FBQUEsRUFBZSxDQUU3QixDQUFFLFdBQUEsQ0FBQWlELENBQUFBLENBQWEsR0FBR0MsQ0FBSyxDQUFBLENBQUlDLFdBQUFBLENBQVksQ0FDM0MsR0FBR0gsQ0FBQUEsQ0FDSCxXQUFBLENBQWE5QixDQUFBQSxDQUFLLFVBQUEsQ0FDbEIsVUFBQSxDQUFZLE1BQU9rQyxDQUFBQSxFQUFtQixDQUNwQyxHQUFJLENBQUNuRCxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0scUJBQXFCLENBQUEsQ0FFdkMsSUFBSXlELENBQUFBLENBQ0osR0FBSSxRQUFBLENBQVNULENBQUFBLENBQUssTUFBTSxDQUFBLENBQUksSUFBQSxDQUFPLENBQ2pDLEdBQUksQ0FBQ1EsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUNSLHdEQUNGLENBQUEsQ0FJRkMsQ0FBQUEsQ0FBQUEsQ0FERSxNQUFNNUQsQ0FBQUEsQ0FBSSx5QkFBeUIyRCxDQUFrQixDQUFBLEVBQ3pCLEdBQ2hDLENBRUEsSUFBTUUsQ0FBQUEsQ0FBVSxDQUNkLEdBQUdWLENBQUFBLENBQ0gsVUFBQSxDQUFZUyxDQUNkLENBQUEsQ0FFQSxPQUFPNUQsQ0FBQUEsQ0FBSSxVQUFBLENBQVc2RCxDQUFPLENBQy9CLENBQUEsQ0FDQSxTQUFBLENBQVU1QixDQUFBQSxDQUFNbUIsQ0FBQUEsQ0FBVzFCLENBQUFBLENBQVMyQixDQUFBQSxDQUFpQixDQUVuRHZELENBQUFBLENBQVksaUJBQUEsQ0FBa0IsQ0FDNUIsUUFBQSxDQUFVbUIsQ0FBQUEsQ0FBSyxTQUFBLEVBQ2pCLENBQUMsRUFFRCxJQUFNNkMsQ0FBQUEsQ0FBWTdCLENBQUFBLENBQ2Q2QixDQUFBQSxDQUFVLE9BQUEsRUFBV0EsQ0FBQUEsRUFBVyxLQUFBLEVBQ2xDaEUsQ0FBQUEsQ0FBWSxpQkFBQSxDQUFrQixDQUM1QixRQUFBLENBQVVtQixDQUFBQSxDQUFLLFdBQUEsQ0FBWTZDLENBQUFBLENBQVUsT0FBQSxDQUFTQSxDQUFBQSxDQUFVLEtBQUssQ0FDL0QsQ0FBQyxDQUFBLENBR0hmLENBQUFBLEVBQVUsU0FBQSxHQUFZZCxDQUFBQSxDQUFNbUIsQ0FBQUEsQ0FBVzFCLENBQUFBLENBQVMyQixDQUFlLEVBQ2pFLENBQUEsQ0FDQSxPQUFBLENBQVFoRCxDQUFBQSxDQUFPaUQsQ0FBQUEsQ0FBTTVCLENBQUFBLENBQVMyQixDQUFBQSxDQUFpQixDQUU3QyxNQUFBTixDQUFBQSxFQUFVLE9BQUEsR0FBVTFDLENBQUFBLENBQU9pRCxDQUFBQSxDQUFNNUIsQ0FBQUEsQ0FBUzJCLENBQWUsQ0FBQSxDQUNuRGhELENBQ1IsQ0FDRixDQUFDLENBQUEsQ0FDRCxPQUFPLENBQ0wsVUFBQSxDQUFZMkMsQ0FBQUEsQ0FDWixHQUFHQyxDQUNMLENBQ0YsQ0EyQ08sU0FBU2MsRUFBQUEsQ0FBYyxDQUM1QixLQUFBLENBQUFqQyxDQUFBQSxDQUNBLE9BQUEsQ0FBQWtDLENBQ0YsQ0FBQSxDQUlJLEVBQUMsQ0FBRyxDQUNOLElBQU1oRSxFQUFNeUIsQ0FBQUEsRUFBTyxDQUNiLENBQUUsWUFBQSxDQUFBdEIsQ0FBYSxDQUFBLENBQUl5QixDQUFBQSxFQUFRLENBRWpDLE9BQU9HLFFBQUFBLENBQTZCLENBQ2xDLEdBQUdpQyxDQUFBQSxDQUNILFFBQUEsQ0FBVS9DLENBQUFBLENBQUssYUFBQSxDQUFjYSxDQUFLLENBQUEsQ0FDbEMsT0FBQSxDQUFTLElBQU0sQ0FDYixHQUFJLENBQUM5QixDQUFBQSxDQUNILE1BQU0sSUFBSSxLQUFBLENBQU0sMkJBQTJCLENBQUEsQ0FFN0MsT0FBT0EsQ0FBQUEsQ0FBSSxhQUFBLENBQWM4QixDQUFLLENBQ2hDLENBQUEsQ0FDQSxPQUFBLENBQVMsQ0FBQSxFQUFROUIsQ0FBQUEsRUFBT0csQ0FBQUEsR0FBaUI2RCxDQUFBQSxFQUFTLE9BQUEsRUFBVyxJQUFBLENBQUEsQ0FDL0QsQ0FBQyxDQUNILENBdUJPLFNBQVNDLEVBQUFBLENBQWUsQ0FDN0IsUUFBQSxDQUFBbEIsQ0FDRixDQUFBLENBR0ksRUFBQyxDQUFxRSxDQUN4RSxJQUFNL0MsQ0FBQUEsQ0FBTXlCLENBQUFBLEVBQU8sQ0FDYixDQUFFLFlBQUEsQ0FBQXRCLENBQWEsQ0FBQSxDQUFJeUIsQ0FBQUEsRUFBUSxDQUMzQjlCLENBQUFBLENBQWNDLGdCQUFlLENBRTdCLENBQUUsV0FBQSxDQUFBaUQsQ0FBQUEsQ0FBYSxHQUFHQyxDQUFLLENBQUEsQ0FBSUMsV0FBQUEsQ0FBWSxDQUMzQyxHQUFHSCxDQUFBQSxDQUNILFdBQUEsQ0FBYTlCLENBQUFBLENBQUssV0FBQSxDQUNsQixVQUFBLENBQVksTUFBT2tDLEdBQXNCLENBQ3ZDLEdBQUksQ0FBQ25ELENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSwyQkFBMkIsQ0FBQSxDQUU3QyxHQUFJLENBQUNHLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSxxQkFBcUIsRUFFdkMsT0FBT0gsQ0FBQUEsQ0FBSSxXQUFBLENBQVltRCxDQUFJLENBQzdCLENBQUEsQ0FDQSxTQUFBLENBQVVsQixDQUFBQSxDQUFNbUIsQ0FBQUEsQ0FBVzFCLENBQUFBLENBQVMyQixDQUFBQSxDQUFpQixDQUVuRHZELENBQUFBLENBQVksaUJBQUEsQ0FBa0IsQ0FDNUIsUUFBQSxDQUFVbUIsQ0FBQUEsQ0FBSyxZQUFBLEVBQ2pCLENBQUMsQ0FBQSxDQUNHbUMsQ0FBQUEsQ0FBVSxPQUFBLEVBQ1p0RCxDQUFBQSxDQUFZLGlCQUFBLENBQWtCLENBQzVCLFFBQUEsQ0FBVW1CLENBQUFBLENBQUssVUFBQSxDQUFXbUMsQ0FBQUEsQ0FBVSxPQUFPLENBQzdDLENBQUMsQ0FBQSxDQUdITCxDQUFBQSxFQUFVLFNBQUEsR0FBWWQsQ0FBQUEsQ0FBTW1CLENBQUFBLENBQVcxQixDQUFBQSxDQUFTMkIsQ0FBZSxFQUNqRSxDQUFBLENBQ0EsT0FBQSxDQUFRaEQsQ0FBQUEsQ0FBT2lELENBQUFBLENBQU01QixDQUFBQSxDQUFTMkIsQ0FBQUEsQ0FBaUIsQ0FFN0MsTUFBQU4sR0FBVSxPQUFBLEdBQVUxQyxDQUFBQSxDQUFPaUQsQ0FBQUEsQ0FBTTVCLENBQUFBLENBQVMyQixDQUFlLENBQUEsQ0FDbkRoRCxDQUNSLENBQ0YsQ0FBQyxDQUFBLENBQ0QsT0FBTyxDQUNMLFdBQUEsQ0FBYTJDLENBQUFBLENBQ2IsR0FBR0MsQ0FDTCxDQUNGLENBbUNPLElBQU1pQixFQUFBQSxDQUFnQyxDQUFDLENBQzVDLEtBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxPQUFBLENBQUFqRCxDQUFBQSxDQUNBLFNBQUEsQ0FBQWtELENBQUFBLENBQ0EsT0FBQSxDQUFBQyxDQUNGLENBQUEsR0FLTSxDQUNKLElBQU1yRSxDQUFBQSxDQUFNeUIsQ0FBQUEsRUFBTyxDQUVuQixPQUFBaEIsU0FBQUEsQ0FBVSxLQUNKVCxDQUFBQSxFQUNGQSxDQUFBQSxDQUFJLDJCQUFBLENBQTRCLENBQzlCLE1BQUEsQ0FBUSxDQUNOLEtBQUEsQ0FBT21FLENBQUFBLENBQ1AsT0FBQSxDQUFTakQsQ0FDWCxFQUNBLFNBQUEsQ0FBV2tELENBQUFBLENBQ1gsT0FBQSxDQUFTQyxDQUNYLENBQUMsQ0FBQSxDQUVJLElBQU0sQ0FPUHJFLENBQUFBLEVBQ0ZBLENBQUFBLEVBQUssNkJBQUEsQ0FBOEIsQ0FBRSxLQUFBLENBQU9tRSxDQUFBQSxDQUFPLE9BQUEsQ0FBU2pELENBQVEsQ0FBQyxFQUV6RSxDQUFBLENBQUEsQ0FDQyxDQUFDbEIsQ0FBQUEsQ0FBS2tCLENBQUFBLENBQVNpRCxDQUFLLENBQUMsQ0FBQSxDQUVqQixJQUNMbkUsQ0FBQUEsRUFBSyw2QkFBQSxDQUE4QixDQUFFLEtBQUEsQ0FBT21FLENBQUFBLENBQU8sT0FBQSxDQUFTakQsQ0FBUSxDQUFDLENBQ3pFIiwiZmlsZSI6ImluZGV4Lm1qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQge1xuICBBdXRoRmxvd09wdGlvbnMsXG4gIEF1dGhGbG93U0lXRU9wdGlvbnMsXG4gIE1vbmVyaXVtQ2xpZW50LFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBXcmFwIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aGUgTW9uZXJpdW0gcHJvdmlkZXIuXG4gKiBAZ3JvdXAgUHJvdmlkZXJcbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hpbGRyZW4gLSBSZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMuY2xpZW50SWQgLSBNb25lcml1bSBhdXRoIGZsb3cgY2xpZW50IGlkLlxuICogQHBhcmFtIHBhcmFtcy5yZWRpcmVjdFVyaSAtIE1vbmVyaXVtIGF1dGggZmxvdyByZWRpcmVjdCB1cmwuXG4gKiBAcGFyYW0gcGFyYW1zLmVudmlyb25tZW50IC0gTW9uZXJpdW0gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gcGFyYW1zLm9uUmVmcmVzaFRva2VuVXBkYXRlIC0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmcmVzaCB0b2tlbiBpcyB1cGRhdGVkLiBTdG9yZSBpdCBzZWN1cmVseS5cbiAqIEBwYXJhbSBwYXJhbXMucmVmcmVzaFRva2VuIC0gUHJvdmlkZSB0aGUgc2VjdXJlbHkgc3RvcmVkIHJlZnJlc2ggdG9rZW4gdG8gcmVjb25uZWN0LlxuICogQHBhcmFtIHBhcmFtcy5kZWJ1ZyAtIEVuYWJsZSBkZWJ1ZyBtb2RlLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJpLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94JyxcbiAgcmVmcmVzaFRva2VuLFxuICBvblJlZnJlc2hUb2tlblVwZGF0ZSxcbiAgZGVidWcgPSBmYWxzZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSByZWRpcmVjdFVyaSAqL1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGU/OiAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgZGVidWc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nka10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gICAgcmV0dXJuIG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmksXG4gICAgICBkZWJ1ZzogZGVidWcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNldEVycm9yKGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MocmVmcmVzaFRva2VuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVmcmVzaFRva2VuICYmICFpc0F1dGhvcml6ZWQgJiYgIWxvYWRpbmdBdXRoKSB7XG4gICAgICByZWNvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtyZWZyZXNoVG9rZW5dKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aEZsb3dPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3Qgc2l3ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM6IEF1dGhGbG93U0lXRU9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuc2l3ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNpZ24gaW4gd2l0aCBldGhlcmV1bTonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIHNpd2UsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBZGRyZXNzLFxuICBBZGRyZXNzZXNSZXNwb25zZSxcbiAgQXV0aENvbnRleHQsXG4gIEJhbGFuY2VzLFxuICBDaGFpbixcbiAgQ2hhaW5JZCxcbiAgQ3VycmVuY3ksXG4gIEN1cnJlbmN5Q29kZSxcbiAgSUJBTixcbiAgSUJBTnNSZXNwb25zZSxcbiAgTGlua0FkZHJlc3MsXG4gIExpbmtlZEFkZHJlc3MsXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTmV3T3JkZXIsXG4gIE9yZGVyLFxuICBPcmRlcnNSZXNwb25zZSxcbiAgT3JkZXJTdGF0ZSxcbiAgcGFyc2VDaGFpbixcbiAgUHJvZmlsZSxcbiAgUHJvZmlsZXNSZXNwb25zZSxcbiAgUmVxdWVzdEliYW5QYXlsb2FkLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgU2lnbmF0dXJlc1F1ZXJ5UGFyYW1zLFxuICBTaWduYXR1cmVzUmVzcG9uc2UsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXMgZm9yIFJlYWN0IHF1ZXJ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRBdXRoQ29udGV4dDogWydtb25lcml1bScsICdhdXRoLWNvbnRleHQnXSxcbiAgZ2V0UHJvZmlsZTogKHByb2ZpbGU6IHN0cmluZykgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ3Byb2ZpbGUnLFxuICAgIC4uLihwcm9maWxlID8gW3Byb2ZpbGVdIDogW10pLFxuICBdLFxuICBnZXRQcm9maWxlczogWydtb25lcml1bScsICdwcm9maWxlcyddLFxuICBnZXRBZGRyZXNzOiAoYWRkcmVzczogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ2FkZHJlc3MnLCBbYWRkcmVzc11dLFxuICBnZXRBZGRyZXNzZXM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnYWRkcmVzc2VzJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIGdldEJhbGFuY2VzOiAoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIGNoYWluOiBDaGFpbixcbiAgICBjdXJyZW5jaWVzPzogQ3VycmVuY3lDb2RlIHwgQ3VycmVuY3lDb2RlW11cbiAgKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnYmFsYW5jZXMnLFxuICAgIHtcbiAgICAgIGN1cnJlbmNpZXM6IGN1cnJlbmNpZXMgPyBbLi4uY3VycmVuY2llc10gOiBbXSxcbiAgICAgIGNoYWluLFxuICAgICAgYWRkcmVzcyxcbiAgICB9LFxuICBdLFxuICBnZXRJYmFuOiAoaWJhbjogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ2liYW4nLCBpYmFuXSxcbiAgZ2V0SWJhbnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnaWJhbnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0VG9rZW5zOiBbJ21vbmVyaXVtJywgJ3Rva2VucyddLFxuICBnZXRPcmRlcjogKG9yZGVySWQ6IHN0cmluZykgPT4gWydtb25lcml1bScsICdvcmRlcicsIG9yZGVySWRdLFxuICBnZXRPcmRlcnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnb3JkZXJzJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIHN1Ym1pdFByb2ZpbGVEZXRhaWxzOiBbJ21vbmVyaXVtJywgJ3N1Ym1pdC1wcm9maWxlLWRldGFpbHMnXSxcbiAgbW92ZUliYW46IFsnbW9uZXJpdW0nLCAnbW92ZS1pYmFuJ10sXG4gIHJlcXVlc3RJYmFuOiBbJ21vbmVyaXVtJywgJ3JlcXVlc3QtaWJhbiddLFxuICBwbGFjZU9yZGVyOiBbJ21vbmVyaXVtJywgJ3BsYWNlLW9yZGVyJ10sXG4gIGxpbmtBZGRyZXNzOiBbJ21vbmVyaXVtJywgJ2xpbmstYWRkcmVzcyddLFxuICBnZXRTaWduYXR1cmVzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ3NpZ25hdHVyZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgeyBhdXRob3JpemUsIGlzQXV0aG9yaXplZCwgaXNMb2FkaW5nLCBlcnJvciB9ID0gdXNlQXV0aCgpO1xuICpcbiAqIGF1dGhvcml6ZSgpOyAvLyBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqXG4gKiAvLyBPcHQtaW4gdG8gYXV0b21hdGVkIHdhbGxldCBsaW5raW5nIHdpdGggdGhlc2UgcGFyYW1ldGVycy5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBzaXdlYCAgICAgICAtIFNpZ24gaW4gd2l0aCBFdGhlcmV1bS4gaHR0cHM6Ly9tb25lcml1bS5jb20vc2l3ZVxuICogLSBgaXNBdXRob3JpemVkYCAtIFdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIC0gYGlzTG9hZGluZ2AgLSBXaGV0aGVyIHRoZSBhdXRoIGZsb3cgaXMgbG9hZGluZy5cbiAqIC0gYGVycm9yYCAtIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGF1dGggZmxvdyBmYWlscy5cbiAqIC0gYGRpc2Nvbm5lY3RgIC0gRGlzY29ubmVjdCB0aGUgdXNlci5cbiAqIC0gYHJldm9rZUFjY2Vzc2AgLSBSZXZva2UgdGhlIHVzZXIncyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IFVzZUF1dGhSZXR1cm4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBzaXdlOiBjb250ZXh0LnNpd2UsXG4gICAgaXNMb2FkaW5nOiBjb250ZXh0LmlzTG9hZGluZyxcbiAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICBkaXNjb25uZWN0OiBjb250ZXh0LmRpc2Nvbm5lY3QsXG4gICAgcmV2b2tlQWNjZXNzOiBjb250ZXh0LnJldm9rZUFjY2VzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBdXRoZW50aWNhdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBdXRoQ29udGV4dCgpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YyI3RhZy9hdXRoL29wZXJhdGlvbi9hdXRoLWNvbnRleHQgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGhDb250ZXh0KHtcbiAgcXVlcnksXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBdXRoQ29udGV4dD47XG59ID0ge30pIHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBdXRoQ29udGV4dCxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEF1dGhDb250ZXh0KCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqIElmIG5vIGBwcm9maWxlYCBpZCBpcyBwcm92aWRlZCwgdGhlIGRlZmF1bHQgcHJvZmlsZSBpcyB1c2VkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGFcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlUHJvZmlsZSgpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9maWxlKHtcbiAgcHJvZmlsZSxcbiAgcXVlcnksXG59OiB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgKi9cbiAgcHJvZmlsZT86IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGU+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgZGF0YSB9ID0gdXNlUHJvZmlsZXMoKTtcblxuICBjb25zdCBwcm9maWxlVG9Vc2UgPSBwcm9maWxlIHx8IChkYXRhPy5wcm9maWxlcz8uWzBdPy5pZCBhcyBzdHJpbmcpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlVG9Vc2UpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXByb2ZpbGVUb1VzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2ZpbGUgSWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRQcm9maWxlKHByb2ZpbGVUb1VzZSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKFxuICAgICAgc2RrICYmIGlzQXV0aG9yaXplZCAmJiBwcm9maWxlVG9Vc2UgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpXG4gICAgKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IHByb2ZpbGVzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlUHJvZmlsZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGVzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9maWxlcyh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlcyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRQcm9maWxlcygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlVG9rZW5zKCk7XG4gKiBgYGBcblxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Rva2VucyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5zKHtcbiAgcXVlcnksXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxUb2tlbltdPjtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRUb2tlbnMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0VG9rZW5zKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9hZGRyZXNzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzKHtcbiAgYWRkcmVzcyxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgYWRkcmVzcy4gKi9cbiAgYWRkcmVzczogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QWRkcmVzcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyhhZGRyZXNzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIGFkZHJlc3MgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpXG4gICAgKSxcbiAgfSk7XG59XG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gcHJvZmlsZSBpZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmNoYWluXSBGaWx0ZXIgYmFzZWQgb24gY2hhaW4gLSBDVVJSRU5UTFkgUkVUVVJOUyBBTiBFUlJPUi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQWRkcmVzc2VzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRkcmVzc2VzKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QWRkcmVzc2VzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzZXMoe1xuICAgICAgcHJvZmlsZSxcbiAgICAgIGNoYWluOiBjaGFpbiA/IHBhcnNlQ2hhaW4oY2hhaW4pIDogdW5kZWZpbmVkLFxuICAgIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldEFkZHJlc3Nlcyh7IHByb2ZpbGUsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBiYWxhbmNlIGZvciBhIGFuIGFkZHJlc3Mgb24gYSBnaXZlIGNoYWluXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBZGRyZXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzPn0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3MgdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuY2hhaW4gVGhlIGNoYWluIHRvIGZldGNoIHRoZSBiYWxhbmNlIGZvci5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzPn0gW3BhcmFtcy5jdXJyZW5jaWVzXSBPbmUgb3IgbWFueTogYGV1cmAsIGB1c2RgLCBgZ2JwYCwgYGlza2BcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQmFsYW5jZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYmFsYW5jZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYWxhbmNlcyh7XG4gIGFkZHJlc3MsXG4gIGNoYWluLFxuICBjdXJyZW5jaWVzLFxuICBxdWVyeSxcbn06IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogQ2hhaW4gfCBDaGFpbklkO1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3kgfCBDdXJyZW5jeVtdO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QmFsYW5jZXM+O1xufSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEJhbGFuY2VzKGFkZHJlc3MsIHBhcnNlQ2hhaW4oY2hhaW4pLCBjdXJyZW5jaWVzKSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDUsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QmFsYW5jZXMoYWRkcmVzcywgY2hhaW4sIGN1cnJlbmNpZXMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9pYmFuIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJQkFOKHtcbiAgaWJhbixcbiAgcXVlcnksXG59OiB7XG4gIC8qKiBGZXRjaCBhIHNwZWNpZmljIElCQU4gKi9cbiAgaWJhbjogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbihpYmFuKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEliYW4oaWJhbik7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgaWJhbiAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VJQkFOcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW5zIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJQkFOcyh7XG4gIHByb2ZpbGUsXG4gIGNoYWluLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgcHJvZmlsZS4gKi9cbiAgcHJvZmlsZT86IHN0cmluZztcbiAgLyoqIEZldGNoIElCQU5zIGZvciBhIHNwZWNpZmljIGNoYWluLiAqL1xuICBjaGFpbj86IENoYWluIHwgQ2hhaW5JZDtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPElCQU5zUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEliYW5zKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcmRlcih7XG4gIG9yZGVySWQsXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiAgVGhlIGlkIG9mIHRoZSBvcmRlci4gKi9cbiAgb3JkZXJJZDogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXI+O1xufSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcihvcmRlcklkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFvcmRlcklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT3JkZXIgaWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcihvcmRlcklkKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBvcmRlcklkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmFkZHJlc3NdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5tZW1vXSBGaWx0ZXIgYnkgdGhlIHBheW1lbnQgbWVtby9yZWZlcmVuY2UuLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5zdGF0ZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy50eEhhc2hdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiB0cmFuc2FjdGlvbiBoYXNoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXJzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVycyh7XG4gIHF1ZXJ5ID0ge30sXG4gIC4uLmZpbHRlcnNcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPE9yZGVyc1Jlc3BvbnNlPjtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdHhIYXNoPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXJzKGZpbHRlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogU3VibWl0IHRoZSByZXF1aXJlZCBjb21wbGlhbmNlIGluZm9ybWF0aW9uIHRvIG9uYm9hcmQgdGhlIGN1c3RvbWVyLlxuICpcbiAqIE5vdGUgdGhhdCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHByb2ZpbGUgXCJraW5kXCIgZnJvbSBwZXJzb25hbCB0byBjb3Jwb3JhdGUgb3IgdmljZSB2ZXJzYSBvbmNlIHRoZSBwcm9maWxlIGhhcyBiZWVuIGFwcHJvdmVkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtLnByb2ZpbGUgVGhlIGlkIG9mIHRoZSBwcm9maWxlIHRvIHN1Ym1pdCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHN1Ym1pdFByb2ZpbGVEZXRhaWxzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VTdWJtaXRQcm9maWxlRGV0YWlscygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvcHJvZmlsZXMvb3BlcmF0aW9uL3Byb2ZpbGUtZGV0YWlscyB8IEFQSSBEb2N1bWVudGF0aW9ufX1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU3VibWl0UHJvZmlsZURldGFpbHMoe1xuICBwcm9maWxlLFxuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICBwcm9maWxlOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWRcbiAgPjtcbn0pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ3N1Ym1pdFByb2ZpbGVEZXRhaWxzJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWRcbj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5zdWJtaXRQcm9maWxlRGV0YWlscyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLnN1Ym1pdFByb2ZpbGVEZXRhaWxzKHByb2ZpbGUsIGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc3VibWl0UHJvZmlsZURldGFpbHM6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhbiBJQkFOIGZvciBhIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgbGlua2VkIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEFueSBsaW5rZWQgYWRkcmVzcyBjYW4gdXNlIHRoaXMgSUJBTiBmb3Igb3V0Z29pbmcgcGF5bWVudHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICByZXF1ZXN0SWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUmVxdWVzdEliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9yZXF1ZXN0LWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlcXVlc3RJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFJlc3BvbnNlU3RhdHVzLCBFcnJvciwgUmVxdWVzdEliYW5QYXlsb2FkPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAncmVxdWVzdEliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5yZXF1ZXN0SWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25zLFxuICAgIH06IFJlcXVlc3RJYmFuUGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5yZXF1ZXN0SWJhbih7IGFkZHJlc3MsIGNoYWluLCBlbWFpbE5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHJlcXVlc3RJYmFuOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBNb3ZlIGFuIGV4aXN0aW5nIElCQU4gdG8gYSBzcGVjaWZpZWQgYWRkcmVzcyBhbiBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgYWRkcmVzcyBvbiB0aGF0IGNoYWluLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbW92ZUliYW4sIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZU1vdmVJYmFuKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YyI3RhZy9pYmFucy9vcGVyYXRpb24vbW92ZS1pYmFuIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1vdmVJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIE1vdmVJYmFuUGF5bG9hZCAmIHsgaWJhbjogc3RyaW5nIH1cbiAgPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAnbW92ZUliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIE1vdmVJYmFuUGF5bG9hZCAmIHsgaWJhbjogc3RyaW5nIH1cbj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5tb3ZlSWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgaWJhbixcbiAgICAgIGFkZHJlc3MsXG4gICAgICBjaGFpbixcbiAgICB9OiBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9KSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLm1vdmVJYmFuKGliYW4sIHsgYWRkcmVzcywgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggdGhlIGliYW4gb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbih2YXJpYWJsZXMuaWJhbiksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbnMoKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKHZhcmlhYmxlcy5hZGRyZXNzKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbW92ZUliYW46IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIFdoZW4gdGhlIG9yZGVyIGhhcyBiZWVuIHBsYWNlZCwgdGhlIG9yZGVycyBxdWVyeSB3aWxsIGJlIGludmFsaWRhdGVkIGFuZCByZS1mZXRjaGVkLlxuICpcbiAqIElmIHRoZSBvcmRlciBhbW91bnQgaXMgYWJvdmUgMTUwMDAsIGEgc3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZC5cbiAqXG4gKiAqKk5vdGU6KiogRm9yIG11bHRpLXNpZ25hdHVyZSBvcmRlcnMsIHRoZSBBUEkgcmV0dXJucyBhIDIwMiBBY2NlcHRlZCByZXNwb25zZVxuICogd2l0aCBge3N0YXR1czogMjAyLCBzdGF0dXNUZXh0OiBcIkFjY2VwdGVkXCJ9YCBpbnN0ZWFkIG9mIHRoZSBmdWxsIE9yZGVyIG9iamVjdC5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyIHwgUmVzcG9uc2VTdGF0dXMsIEVycm9yLCBOZXdPcmRlcj47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDwncGxhY2VPcmRlcicsIE9yZGVyIHwgUmVzcG9uc2VTdGF0dXMsIEVycm9yLCBOZXdPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5wbGFjZU9yZGVyLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBOZXdPcmRlcikgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBkb2N1bWVudElkO1xuICAgICAgaWYgKHBhcnNlSW50KGJvZHkuYW1vdW50KSA+IDE1MDAwKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGluZ0RvY3VtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1N1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQgZm9yIG9yZGVycyBhYm92ZSAxNTAwMCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRG9jdW1lbnQgPVxuICAgICAgICAgIGF3YWl0IHNkay51cGxvYWRTdXBwb3J0aW5nRG9jdW1lbnQoc3VwcG9ydGluZ0RvY3VtZW50KTtcbiAgICAgICAgZG9jdW1lbnRJZCA9IHVwbG9hZGVkRG9jdW1lbnQuaWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0JvZHkgPSB7XG4gICAgICAgIC4uLmJvZHksXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc2RrLnBsYWNlT3JkZXIobmV3Qm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgLy8gT25seSBpbnZhbGlkYXRlIGJhbGFuY2VzIGlmIHdlIGdvdCBhIGZ1bGwgT3JkZXIgcmVzcG9uc2UgKG5vdCBhIDIwMiBtdWx0aS1zaWcgcmVzcG9uc2UpXG4gICAgICBjb25zdCBvcmRlckRhdGEgPSBkYXRhIGFzIE9yZGVyO1xuICAgICAgaWYgKG9yZGVyRGF0YS5hZGRyZXNzICYmIG9yZGVyRGF0YT8uY2hhaW4pIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEJhbGFuY2VzKG9yZGVyRGF0YS5hZGRyZXNzLCBvcmRlckRhdGEuY2hhaW4pLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQsIG11dGF0aW9uQ29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHBsYWNlT3JkZXI6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIEdldCBwZW5kaW5nIHNpZ25hdHVyZXMgZm9yIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gKlxuICogUmV0dXJucyBwZW5kaW5nIHNpZ25hdHVyZXMgdGhhdCByZXF1aXJlIHVzZXIgYWN0aW9uLCBzdWNoIGFzIG9yZGVyIHNpZ25hdHVyZXNcbiAqIG9yIGxpbmsgYWRkcmVzcyBzaWduYXR1cmVzLiBBY2NlcHRzIGZpbHRlcmluZyBieSBhZGRyZXNzLCBjaGFpbiwga2luZCwgYW5kIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgU2lnbmF0dXJlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtTaWduYXR1cmVzUXVlcnlQYXJhbXN9IHBhcmFtcy5xdWVyeSAtIE9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHNpZ25hdHVyZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEdldCBhbGwgcGVuZGluZyBzaWduYXR1cmVzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhOiBzaWduYXR1cmVzLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VTaWduYXR1cmVzKCk7XG4gKlxuICogLy8gR2V0IHBlbmRpbmcgb3JkZXIgc2lnbmF0dXJlcyBmb3IgYSBzcGVjaWZpYyBhZGRyZXNzXG4gKiBjb25zdCB7IGRhdGE6IG9yZGVyU2lnbmF0dXJlcyB9ID0gdXNlU2lnbmF0dXJlcyh7XG4gKiAgIHF1ZXJ5OiB7XG4gKiAgICAgYWRkcmVzczogJzB4MTIzNC4uLicsXG4gKiAgICAga2luZDogJ29yZGVyJ1xuICogICB9XG4gKiB9KTtcbiAqXG4gKiAvLyBDaGVjayB0aGUga2luZCBvZiBzaWduYXR1cmVcbiAqIHNpZ25hdHVyZXM/LnBlbmRpbmcuZm9yRWFjaChzaWcgPT4ge1xuICogICBpZiAoc2lnLmtpbmQgPT09ICdvcmRlcicpIHtcbiAqICAgICBjb25zb2xlLmxvZygnT3JkZXIgc2lnbmF0dXJlOicsIHNpZy5pZCwgc2lnLmFtb3VudCk7XG4gKiAgIH0gZWxzZSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0xpbmsgYWRkcmVzcyBzaWduYXR1cmUnKTtcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9zaWduYXR1cmVzL29wZXJhdGlvbi9nZXQtc2lnbmF0dXJlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lnbmF0dXJlcyh7XG4gIHF1ZXJ5LFxuICBvcHRpb25zLFxufToge1xuICBxdWVyeT86IFNpZ25hdHVyZXNRdWVyeVBhcmFtcztcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnM8U2lnbmF0dXJlc1Jlc3BvbnNlPjtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnk8U2lnbmF0dXJlc1Jlc3BvbnNlPih7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBxdWVyeUtleToga2V5cy5nZXRTaWduYXR1cmVzKHF1ZXJ5KSxcbiAgICBxdWVyeUZuOiAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0U2lnbmF0dXJlcyhxdWVyeSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKG9wdGlvbnM/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIG11dGF0aW9uLFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzc2VzKCksXG4gICAgICB9KTtcbiAgICAgIGlmICh2YXJpYWJsZXMucHJvZmlsZSkge1xuICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZSh2YXJpYWJsZXMucHJvZmlsZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCwgbXV0YXRpb25Db250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0LCBtdXRhdGlvbkNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbGlua0FkZHJlc3M6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogQVBJIGNvbnN1bWVycyBoYXZlIHRoZSBvcHRpb24gdG8gc3Vic2NyaWJlIHRvIGEgV2ViU29ja2V0IGZvciByZWFsLXRpbWUgb3JkZXIgbm90aWZpY2F0aW9ucy4gVGhpcyBXZWJTb2NrZXQgY29tcGxpZXMgd2l0aCB0aGUgc3RhbmRhcmQgV2ViU29ja2V0IFByb3RvY29sLCBhbGxvd2luZyB0aGUgdXNlIG9mIHN0YW5kYXJkIFdlYlNvY2tldCBsaWJyYXJpZXMgZm9yIHN1YnNjcmlwdGlvbi5cbiAqXG4gKiBUaGUgV2ViU29ja2V0IGVtaXRzIGFuIGV2ZW50IHdoZW4gYSBvcmRlciBjaGFuZ2VzIHN0YXRlOlxuICpcbiAqIGBwbGFjZWRgOiBUaGUgb3JkZXIgaGFzIGJlZW4gY3JlYXRlZCBidXQgbm90IHlldCBwcm9jZXNzZWQuXG4gKlxuICogYHBlbmRpbmdgOiBUaGUgb3JkZXIgaXMgYXdhaXRpbmcgZnVsZmlsbG1lbnQgKGUuZy4sIHJldmlldywgbWludGluZy9idXJuaW5nIHRva2Vucywgb3Igc2VuZGluZy9yZWNlaXZpbmcgU0VQQSBwYXltZW50KS5cbiAqXG4gKiBgcHJvY2Vzc2VkYDogVGhlIG9yZGVyIGhhcyBiZWVuIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKlxuICogYHJlamVjdGVkYDogVGhlIG9yZGVyIHdhcyByZWplY3RlZCwgcG9zc2libHkgZHVlIHRvIGNvbXBsaWFuY2UgcmVhc29ucyBvciBpbnN1ZmZpY2llbnQgZnVuZHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7T3JkZXJTdGF0ZX0gW3BhcmFtcy5zdGF0ZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgaWQgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLm9uTWVzc2FnZSBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG9yZGVyIG5vdGlmaWNhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXJhbXMub25FcnJvcl0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBlcnJvciBub3RpZmljYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBzdGF0ZSxcbiAqICAgIHByb2ZpbGUsXG4gKiAgICBvbk1lc3NhZ2UsXG4gKiAgICBvbkVycm9yXG4gKiB9ID0gdXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjEjb3BlcmF0aW9uL29yZGVycy1ub3RpZmljYXRpb25zfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVW5zdWJzY3JpYmUgZnJvbSBvcmRlciBub3RpZmljYXRpb25zLlxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbiA9ICh7XG4gIHN0YXRlLFxuICBwcm9maWxlLFxuICBvbk1lc3NhZ2UsXG4gIG9uRXJyb3IsXG59OiB7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgb25NZXNzYWdlOiAob3JkZXI6IE9yZGVyKSA9PiB2b2lkO1xuICBvbkVycm9yPzogKChlcnI6IEV2ZW50KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbn0pID0+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2RrKSB7XG4gICAgICBzZGsuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgIHByb2ZpbGU6IHByb2ZpbGUsXG4gICAgICAgIH0sXG4gICAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlLFxuICAgICAgICBvbkVycm9yOiBvbkVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIE5vdGUgdGhhdCBpbiBkZXZlbG9wbWVudCBtb2RlLCBSZWFjdCBTdHJpY3QgbW9kZSB3aWxsIGNhdXNlIHRoaXNcbiAgICAgICAqIGNsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHR3aWNlIG9uIGNsaWVudCBzaWRlIHJvdXRlIGNoYW5nZXMuXG4gICAgICAgKiBTbyBhIHNvY2tldCB3aWxsIGJlIGltbWVkaWF0ZWx5IGNsb3NlZCBhbmQgb3BlbmVkIGFnYWluLlxuICAgICAgICogVGhpcyBpcyBub3QgYW4gaXNzdWUgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgICovXG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHNkaz8udW5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoeyBzdGF0ZTogc3RhdGUsIHByb2ZpbGU6IHByb2ZpbGUgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW3NkaywgcHJvZmlsZSwgc3RhdGVdKTtcblxuICByZXR1cm4gKCkgPT5cbiAgICBzZGs/LnVuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHsgc3RhdGU6IHN0YXRlLCBwcm9maWxlOiBwcm9maWxlIH0pO1xufTtcblxuLyoqIEV4cG9ydCB0eXBlcyBmb3IgZG9jdW1lbnRhdGlvbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBZGRyZXNzLFxuICBCYWxhbmNlcyxcbiAgSUJBTixcbiAgTW92ZUliYW5QYXlsb2FkLFxuICBMaW5rQWRkcmVzcyxcbiAgUHJvZmlsZSxcbiAgVG9rZW4sXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgTmV3T3JkZXIsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBPcmRlcixcbn07XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monerium/sdk-react-provider",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "React provider for the Monerium SDK.",
|
|
6
6
|
"repository": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"build": "tsup",
|
|
47
|
-
"dev": "tsup --watch
|
|
47
|
+
"dev": "tsup --watch",
|
|
48
48
|
"typedoc": "typedoc",
|
|
49
49
|
"lint": "eslint . --fix",
|
|
50
50
|
"pub:pre": "pnpm publish --no-git-checks --dry-run",
|