UNPKG

design-angular-kit

Version:

Un toolkit Angular conforme alle linee guida di design per i servizi web della PA

191 lines 21.1 kB
//#region private utility functions const generateSelectAll = (checked, items) => { const selected = new Set(); if (checked) { items.forEach(item => selected.add(item)); } return selected; }; const updateSelected = (set, item) => { if (set.has(item)) { set.delete(item); } else { set.add(item); } return set; }; //#endregion //#region reducers const init = (state, { source, target }) => ({ ...state, initialItems: { source: [...source], target: [...target], }, current: { source: [...source], target: [...target], }, }); const transfer = (state) => { return { ...state, current: { ...state.current, source: state.current.source.filter(i => !state.selections.source.has(i)), target: Array.from(new Set([...state.current.target, ...Array.from(state.selections.source)])), }, selections: { ...state.selections, source: new Set(), }, operationsEnabled: { ...state.operationsEnabled, transfer: false, reset: true, }, }; }; const backtransfer = (state) => { return { ...state, current: { ...state.current, target: state.current.target.filter(i => !state.selections.target.has(i)), source: Array.from(new Set([...state.current.source, ...Array.from(state.selections.target)])), }, selections: { ...state.selections, target: new Set(), }, operationsEnabled: { ...state.operationsEnabled, backtransfer: false, reset: true, }, }; }; const reset = (state) => { return { ...state, current: { source: [...state.initialItems.source], target: [...state.initialItems.target], }, operationsEnabled: { ...state.operationsEnabled, reset: false, }, }; }; const selectAllSource = (state, { checked }) => { const items = state.current.source; const selected = generateSelectAll(checked, items); const transfer = Boolean(selected.size); return { ...state, selections: { ...state.selections, source: selected, }, operationsEnabled: { ...state.operationsEnabled, transfer, }, }; }; const selectAllTarget = (state, { checked }) => { const items = state.current.target; const selected = generateSelectAll(checked, items); const backtransfer = Boolean(selected.size); return { ...state, selections: { ...state.selections, target: selected, }, operationsEnabled: { ...state.operationsEnabled, backtransfer, }, }; }; const selectionItemSource = (previousState, { item }) => { const selected = updateSelected(previousState.selections.source, item); const selectedItems = Array.from(selected); const transfer = Boolean(selectedItems.length); const source = new Set([...selectedItems]); const state = { ...previousState, selections: { ...previousState.selections, source, }, operationsEnabled: { ...previousState.operationsEnabled, transfer, }, }; return state; }; const selectionItemTarget = (previousState, { item }) => { const selected = updateSelected(previousState.selections.target, item); const selectedItems = Array.from(selected); const backtransfer = Boolean(selectedItems.length); const target = new Set([...selectedItems]); const state = { ...previousState, selections: { ...previousState.selections, target, }, operationsEnabled: { ...previousState.operationsEnabled, backtransfer, }, }; return state; }; //#endregion reducers //#region public reducers const initialStateFn = () => ({ initialItems: { source: [], target: [], }, current: { source: [], target: [], }, selections: { source: new Set(), target: new Set(), }, operationsEnabled: { transfer: false, backtransfer: false, reset: false, }, }); const initFn = (payload) => (state) => init(state, payload); const transferFn = () => (state) => transfer(state); const backtransferFn = () => (state) => backtransfer(state); const resetFn = () => (state) => reset(state); const selectAllSourceFn = ({ checked }) => (state) => selectAllSource(state, { checked }); const selectAllTargetFn = ({ checked }) => (state) => selectAllTarget(state, { checked }); const selectionItemSourceFn = ({ item }) => (state) => selectionItemSource(state, { item }); const selectionItemTargetFn = ({ item }) => (state) => selectionItemTarget(state, { item }); //#endregion export default { initialStateFn, initFn, transferFn, backtransferFn, resetFn, selectAllSourceFn, selectAllTargetFn, selectionItemSourceFn, selectionItemTargetFn, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIucmVkdWNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvc3RvcmUvdHJhbnNmZXIucmVkdWNlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsbUNBQW1DO0FBQ25DLE1BQU0saUJBQWlCLEdBQUcsQ0FBSSxPQUFnQixFQUFFLEtBQXdCLEVBQUUsRUFBRTtJQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBSSxHQUF5QixFQUFFLElBQXFCLEVBQUUsRUFBRTtJQUM3RSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFDRixZQUFZO0FBRVosa0JBQWtCO0FBQ2xCLE1BQU0sSUFBSSxHQUFHLENBQUksS0FBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRSxHQUFHLEtBQUs7SUFDUixZQUFZLEVBQUU7UUFDWixNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNu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Q0FBYSxDQUFDO0FBRXBELE1BQU0scUJBQXFCLEdBQ3pCLENBQUksRUFBRSxJQUFJLEVBQTZCLEVBQUUsRUFBRSxDQUMzQyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQ2xCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFhLENBQUM7QUFFckQsTUFBTSxxQkFBcUIsR0FDekIsQ0FBSSxFQUFFLElBQUksRUFBNkIsRUFBRSxFQUFFLENBQzNDLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FDbEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQWEsQ0FBQztBQUNyRCxZQUFZO0FBRVosZUFBZTtJQUNiLGNBQWM7SUFDZCxNQUFNO0lBQ04sVUFBVTtJQUNWLGNBQWM7SUFDZCxPQUFPO0lBQ1AsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIscUJBQXFCO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2Zlckl0ZW0sIFRyYW5zZmVySXRlbVNlbGVjdGlvbiB9IGZyb20gJy4uL3RyYW5zZmVyLm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdGlvblN0YXRlLCBTdGF0ZSB9IGZyb20gJy4vdHJhbnNmZXIuc3RhdGUnO1xuXG4vLyNyZWdpb24gcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9uc1xuY29uc3QgZ2VuZXJhdGVTZWxlY3RBbGwgPSA8VD4oY2hlY2tlZDogYm9vbGVhbiwgaXRlbXM6IFRyYW5zZmVySXRlbTxUPltdKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IFNldDxUcmFuc2Zlckl0ZW08VD4+KCk7XG4gIGlmIChjaGVja2VkKSB7XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHNlbGVjdGVkLmFkZChpdGVtKSk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWQ7XG59O1xuXG5jb25zdCB1cGRhdGVTZWxlY3RlZCA9IDxUPihzZXQ6IFNldDxUcmFuc2Zlckl0ZW08VD4+LCBpdGVtOiBUcmFuc2Zlckl0ZW08VD4pID0+IHtcbiAgaWYgKHNldC5oYXMoaXRlbSkpIHtcbiAgICBzZXQuZGVsZXRlKGl0ZW0pO1xuICB9IGVsc2Uge1xuICAgIHNldC5hZGQoaXRlbSk7XG4gIH1cblxuICByZXR1cm4gc2V0O1xufTtcbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gcmVkdWNlcnNcbmNvbnN0IGluaXQgPSA8VD4oc3RhdGU6IFN0YXRlPFQ+LCB7IHNvdXJjZSwgdGFyZ2V0IH06IFNlbGVjdGlvblN0YXRlPFQ+KSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaW5pdGlhbEl0ZW1zOiB7XG4gICAgc291cmNlOiBbLi4uc291cmNlXSxcbiAgICB0YXJnZXQ6IFsuLi50YXJnZXRdLFxuICB9LFxuICBjdXJyZW50OiB7XG4gICAgc291cmNlOiBbLi4uc291cmNlXSxcbiAgICB0YXJnZXQ6IFsuLi50YXJnZXRdLFxuICB9LFxufSk7XG5cbmNvbnN0IHRyYW5zZmVyID0gPFQ+KHN0YXRlOiBTdGF0ZTxUPikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQ6IHtcbiAgICAgIC4uLnN0YXRlLmN1cnJlbnQsXG4gICAgICBzb3VyY2U6IHN0YXRlLmN1cnJlbnQuc291cmNlLmZpbHRlcihpID0+ICFzdGF0ZS5zZWxlY3Rpb25zLnNvdXJjZS5oYXMoaSkpLFxuICAgICAgdGFyZ2V0OiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLnN0YXRlLmN1cnJlbnQudGFyZ2V0LCAuLi5BcnJheS5mcm9tKHN0YXRlLnNlbGVjdGlvbnMuc291cmNlKV0gYXMgVHJhbnNmZXJJdGVtU2VsZWN0aW9uPFQ+KSksXG4gICAgfSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5zdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgc291cmNlOiBuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSxcbiAgICB9LFxuICAgIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgICAuLi5zdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIHRyYW5zZmVyOiBmYWxzZSxcbiAgICAgIHJlc2V0OiB0cnVlLFxuICAgIH0sXG4gIH0gc2F0aXNmaWVzIFN0YXRlPFQ+O1xufTtcblxuY29uc3QgYmFja3RyYW5zZmVyID0gPFQ+KHN0YXRlOiBTdGF0ZTxUPikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQ6IHtcbiAgICAgIC4uLnN0YXRlLmN1cnJlbnQsXG4gICAgICB0YXJnZXQ6IHN0YXRlLmN1cnJlbnQudGFyZ2V0LmZpbHRlcihpID0+ICFzdGF0ZS5zZWxlY3Rpb25zLnRhcmdldC5oYXMoaSkpLFxuICAgICAgc291cmNlOiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLnN0YXRlLmN1cnJlbnQuc291cmNlLCAuLi5BcnJheS5mcm9tKHN0YXRlLnNlbGVjdGlvbnMudGFyZ2V0KV0gYXMgVHJhbnNmZXJJdGVtU2VsZWN0aW9uPFQ+KSksXG4gICAgfSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5zdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgdGFyZ2V0OiBuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSxcbiAgICB9LFxuICAgIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgICAuLi5zdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIGJhY2t0cmFuc2ZlcjogZmFsc2UsXG4gICAgICByZXNldDogdHJ1ZSxcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcbn07XG5cbmNvbnN0IHJlc2V0ID0gPFQ+KHN0YXRlOiBTdGF0ZTxUPikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQ6IHtcbiAgICAgIHNvdXJjZTogWy4uLnN0YXRlLmluaXRpYWxJdGVtcy5zb3VyY2VdLFxuICAgICAgdGFyZ2V0OiBbLi4uc3RhdGUuaW5pdGlhbEl0ZW1zLnRhcmdldF0sXG4gICAgfSxcbiAgICBvcGVyYXRpb25zRW5hYmxlZDoge1xuICAgICAgLi4uc3RhdGUub3BlcmF0aW9uc0VuYWJsZWQsXG4gICAgICByZXNldDogZmFsc2UsXG4gICAgfSxcbiAgfSBzYXRpc2ZpZXMgU3RhdGU8VD47XG59O1xuXG5jb25zdCBzZWxlY3RBbGxTb3VyY2UgPSA8VD4oc3RhdGU6IFN0YXRlPFQ+LCB7IGNoZWNrZWQgfTogeyBjaGVja2VkOiBib29sZWFuIH0pID0+IHtcbiAgY29uc3QgaXRlbXMgPSBzdGF0ZS5jdXJyZW50LnNvdXJjZTtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBnZW5lcmF0ZVNlbGVjdEFsbChjaGVja2VkLCBpdGVtcyk7XG4gIGNvbnN0IHRyYW5zZmVyID0gQm9vbGVhbihzZWxlY3RlZC5zaXplKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGlvbnM6IHtcbiAgICAgIC4uLnN0YXRlLnNlbGVjdGlvbnMsXG4gICAgICBzb3VyY2U6IHNlbGVjdGVkLFxuICAgIH0sXG4gICAgb3BlcmF0aW9uc0VuYWJsZWQ6IHtcbiAgICAgIC4uLnN0YXRlLm9wZXJhdGlvbnNFbmFibGVkLFxuICAgICAgdHJhbnNmZXIsXG4gICAgfSxcbiAgfSBzYXRpc2ZpZXMgU3RhdGU8VD47XG59O1xuXG5jb25zdCBzZWxlY3RBbGxUYXJnZXQgPSA8VD4oc3RhdGU6IFN0YXRlPFQ+LCB7IGNoZWNrZWQgfTogeyBjaGVja2VkOiBib29sZWFuIH0pID0+IHtcbiAgY29uc3QgaXRlbXMgPSBzdGF0ZS5jdXJyZW50LnRhcmdldDtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBnZW5lcmF0ZVNlbGVjdEFsbChjaGVja2VkLCBpdGVtcyk7XG4gIGNvbnN0IGJhY2t0cmFuc2ZlciA9IEJvb2xlYW4oc2VsZWN0ZWQuc2l6ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5zdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgdGFyZ2V0OiBzZWxlY3RlZCxcbiAgICB9LFxuICAgIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgICAuLi5zdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIGJhY2t0cmFuc2ZlcixcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcbn07XG5cbmNvbnN0IHNlbGVjdGlvbkl0ZW1Tb3VyY2UgPSA8VD4ocHJldmlvdXNTdGF0ZTogU3RhdGU8VD4sIHsgaXRlbSB9OiB7IGl0ZW06IFRyYW5zZmVySXRlbTxUPiB9KSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkID0gdXBkYXRlU2VsZWN0ZWQocHJldmlvdXNTdGF0ZS5zZWxlY3Rpb25zLnNvdXJjZSwgaXRlbSk7XG4gIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHNlbGVjdGVkKTtcbiAgY29uc3QgdHJhbnNmZXIgPSBCb29sZWFuKHNlbGVjdGVkSXRlbXMubGVuZ3RoKTtcbiAgY29uc3Qgc291cmNlID0gbmV3IFNldChbLi4uc2VsZWN0ZWRJdGVtc10pO1xuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIC4uLnByZXZpb3VzU3RhdGUsXG4gICAgc2VsZWN0aW9uczoge1xuICAgICAgLi4ucHJldmlvdXNTdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgc291cmNlLFxuICAgIH0sXG4gICAgb3BlcmF0aW9uc0VuYWJsZWQ6IHtcbiAgICAgIC4uLnByZXZpb3VzU3RhdGUub3BlcmF0aW9uc0VuYWJsZWQsXG4gICAgICB0cmFuc2ZlcixcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG5jb25zdCBzZWxlY3Rpb25JdGVtVGFyZ2V0ID0gPFQ+KHByZXZpb3VzU3RhdGU6IFN0YXRlPFQ+LCB7IGl0ZW0gfTogeyBpdGVtOiBUcmFuc2Zlckl0ZW08VD4gfSkgPT4ge1xuICBjb25zdCBzZWxlY3RlZCA9IHVwZGF0ZVNlbGVjdGVkKHByZXZpb3VzU3RhdGUuc2VsZWN0aW9ucy50YXJnZXQsIGl0ZW0pO1xuICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbShzZWxlY3RlZCk7XG4gIGNvbnN0IGJhY2t0cmFuc2ZlciA9IEJvb2xlYW4oc2VsZWN0ZWRJdGVtcy5sZW5ndGgpO1xuICBjb25zdCB0YXJnZXQgPSBuZXcgU2V0KFsuLi5zZWxlY3RlZEl0ZW1zXSk7XG5cbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgLi4ucHJldmlvdXNTdGF0ZSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5wcmV2aW91c1N0YXRlLnNlbGVjdGlvbnMsXG4gICAgICB0YXJnZXQsXG4gICAgfSxcbiAgICBvcGVyYXRpb25zRW5hYmxlZDoge1xuICAgICAgLi4ucHJldmlvdXNTdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIGJhY2t0cmFuc2ZlcixcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcblxuICByZXR1cm4gc3RhdGU7XG59O1xuLy8jZW5kcmVnaW9uIHJlZHVjZXJzXG5cbi8vI3JlZ2lvbiBwdWJsaWMgcmVkdWNlcnNcbmNvbnN0IGluaXRpYWxTdGF0ZUZuID0gPFQ+KCkgPT4gKHtcbiAgaW5pdGlhbEl0ZW1zOiB7XG4gICAgc291cmNlOiBbXSxcbiAgICB0YXJnZXQ6IFtdLFxuICB9LFxuICBjdXJyZW50OiB7XG4gICAgc291cmNlOiBbXSxcbiAgICB0YXJnZXQ6IFtdLFxuICB9LFxuICBzZWxlY3Rpb25zOiB7XG4gICAgc291cmNlOiBuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSxcbiAgICB0YXJnZXQ6IG5ldyBTZXQ8VHJhbnNmZXJJdGVtPFQ+PigpLFxuICB9LFxuICBvcGVyYXRpb25zRW5hYmxlZDoge1xuICAgIHRyYW5zZmVyOiBmYWxzZSxcbiAgICBiYWNrdHJhbnNmZXI6IGZhbHNlLFxuICAgIHJlc2V0OiBmYWxzZSxcbiAgfSxcbn0pO1xuY29uc3QgaW5pdEZuID1cbiAgPFQ+KHBheWxvYWQ6IFNlbGVjdGlvblN0YXRlPFQ+KSA9PlxuICAoc3RhdGU6IFN0YXRlPFQ+KSA9PlxuICAgIGluaXQoc3RhdGUsIHBheWxvYWQpO1xuXG5jb25zdCB0cmFuc2ZlckZuID1cbiAgPFQ+KCkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICB0cmFuc2ZlcihzdGF0ZSk7XG5cbmNvbnN0IGJhY2t0cmFuc2ZlckZuID1cbiAgPFQ+KCkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICBiYWNrdHJhbnNmZXIoc3RhdGUpO1xuXG5jb25zdCByZXNldEZuID1cbiAgPFQ+KCkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICByZXNldChzdGF0ZSk7XG5cbmNvbnN0IHNlbGVjdEFsbFNvdXJjZUZuID1cbiAgPFQ+KHsgY2hlY2tlZCB9OiB7IGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICBzZWxlY3RBbGxTb3VyY2Uoc3RhdGUsIHsgY2hlY2tlZCB9KSBhcyBTdGF0ZTxUPjtcblxuY29uc3Qgc2VsZWN0QWxsVGFyZ2V0Rm4gPVxuICA8VD4oeyBjaGVja2VkIH06IHsgY2hlY2tlZDogYm9vbGVhbiB9KSA9PlxuICAoc3RhdGU6IFN0YXRlPFQ+KSA9PlxuICAgIHNlbGVjdEFsbFRhcmdldChzdGF0ZSwgeyBjaGVja2VkIH0pIGFzIFN0YXRlPFQ+O1xuXG5jb25zdCBzZWxlY3Rpb25JdGVtU291cmNlRm4gPVxuICA8VD4oeyBpdGVtIH06IHsgaXRlbTogVHJhbnNmZXJJdGVtPFQ+IH0pID0+XG4gIChzdGF0ZTogU3RhdGU8VD4pID0+XG4gICAgc2VsZWN0aW9uSXRlbVNvdXJjZShzdGF0ZSwgeyBpdGVtIH0pIGFzIFN0YXRlPFQ+O1xuXG5jb25zdCBzZWxlY3Rpb25JdGVtVGFyZ2V0Rm4gPVxuICA8VD4oeyBpdGVtIH06IHsgaXRlbTogVHJhbnNmZXJJdGVtPFQ+IH0pID0+XG4gIChzdGF0ZTogU3RhdGU8VD4pID0+XG4gICAgc2VsZWN0aW9uSXRlbVRhcmdldChzdGF0ZSwgeyBpdGVtIH0pIGFzIFN0YXRlPFQ+O1xuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdGlhbFN0YXRlRm4sXG4gIGluaXRGbixcbiAgdHJhbnNmZXJGbixcbiAgYmFja3RyYW5zZmVyRm4sXG4gIHJlc2V0Rm4sXG4gIHNlbGVjdEFsbFNvdXJjZUZuLFxuICBzZWxlY3RBbGxUYXJnZXRGbixcbiAgc2VsZWN0aW9uSXRlbVNvdXJjZUZuLFxuICBzZWxlY3Rpb25JdGVtVGFyZ2V0Rm4sXG59O1xuIl19