114 lines
23 KiB
Plaintext
114 lines
23 KiB
Plaintext
import { Trie } from "/_nuxt/node_modules/optimism/node_modules/@wry/trie/lib/index.js?v=e4f18c29";
|
|
import { StrongCache } from "/_nuxt/node_modules/@wry/caches/lib/index.js?v=e4f18c29";
|
|
import { Entry } from "/_nuxt/node_modules/optimism/lib/entry.js?v=e4f18c29";
|
|
import { parentEntrySlot } from "/_nuxt/node_modules/optimism/lib/context.js?v=e4f18c29";
|
|
// These helper functions are important for making optimism work with
|
|
// asynchronous code. In order to register parent-child dependencies,
|
|
// optimism needs to know about any currently active parent computations.
|
|
// In ordinary synchronous code, the parent context is implicit in the
|
|
// execution stack, but asynchronous code requires some extra guidance in
|
|
// order to propagate context from one async task segment to the next.
|
|
export { bindContext, noContext, nonReactive, setTimeout, asyncFromGen, Slot, } from "/_nuxt/node_modules/optimism/lib/context.js?v=e4f18c29";
|
|
// A lighter-weight dependency, similar to OptimisticWrapperFunction, except
|
|
// with only one argument, no makeCacheKey, no wrapped function to recompute,
|
|
// and no result value. Useful for representing dependency leaves in the graph
|
|
// of computation. Subscriptions are supported.
|
|
export { dep } from "/_nuxt/node_modules/optimism/lib/dep.js?v=e4f18c29";
|
|
// The defaultMakeCacheKey function is remarkably powerful, because it gives
|
|
// a unique object for any shallow-identical list of arguments. If you need
|
|
// to implement a custom makeCacheKey function, you may find it helpful to
|
|
// delegate the final work to defaultMakeCacheKey, which is why we export it
|
|
// here. However, you may want to avoid defaultMakeCacheKey if your runtime
|
|
// does not support WeakMap, or you have the ability to return a string key.
|
|
// In those cases, just write your own custom makeCacheKey functions.
|
|
let defaultKeyTrie;
|
|
export function defaultMakeCacheKey(...args) {
|
|
const trie = defaultKeyTrie || (defaultKeyTrie = new Trie(typeof WeakMap === "function"));
|
|
return trie.lookupArray(args);
|
|
}
|
|
// If you're paranoid about memory leaks, or you want to avoid using WeakMap
|
|
// under the hood, but you still need the behavior of defaultMakeCacheKey,
|
|
// import this constructor to create your own tries.
|
|
export { Trie as KeyTrie };
|
|
;
|
|
const caches = new Set();
|
|
export function wrap(originalFunction, { max = Math.pow(2, 16), keyArgs, makeCacheKey = defaultMakeCacheKey, normalizeResult, subscribe, cache: cacheOption = StrongCache, } = Object.create(null)) {
|
|
const cache = typeof cacheOption === "function"
|
|
? new cacheOption(max, entry => entry.dispose())
|
|
: cacheOption;
|
|
const optimistic = function () {
|
|
const key = makeCacheKey.apply(null, keyArgs ? keyArgs.apply(null, arguments) : arguments);
|
|
if (key === void 0) {
|
|
return originalFunction.apply(null, arguments);
|
|
}
|
|
let entry = cache.get(key);
|
|
if (!entry) {
|
|
cache.set(key, entry = new Entry(originalFunction));
|
|
entry.normalizeResult = normalizeResult;
|
|
entry.subscribe = subscribe;
|
|
// Give the Entry the ability to trigger cache.delete(key), even though
|
|
// the Entry itself does not know about key or cache.
|
|
entry.forget = () => cache.delete(key);
|
|
}
|
|
const value = entry.recompute(Array.prototype.slice.call(arguments));
|
|
// Move this entry to the front of the least-recently used queue,
|
|
// since we just finished computing its value.
|
|
cache.set(key, entry);
|
|
caches.add(cache);
|
|
// Clean up any excess entries in the cache, but only if there is no
|
|
// active parent entry, meaning we're not in the middle of a larger
|
|
// computation that might be flummoxed by the cleaning.
|
|
if (!parentEntrySlot.hasValue()) {
|
|
caches.forEach(cache => cache.clean());
|
|
caches.clear();
|
|
}
|
|
return value;
|
|
};
|
|
Object.defineProperty(optimistic, "size", {
|
|
get: () => cache.size,
|
|
configurable: false,
|
|
enumerable: false,
|
|
});
|
|
Object.freeze(optimistic.options = {
|
|
max,
|
|
keyArgs,
|
|
makeCacheKey,
|
|
normalizeResult,
|
|
subscribe,
|
|
cache,
|
|
});
|
|
function dirtyKey(key) {
|
|
const entry = key && cache.get(key);
|
|
if (entry) {
|
|
entry.setDirty();
|
|
}
|
|
}
|
|
optimistic.dirtyKey = dirtyKey;
|
|
optimistic.dirty = function dirty() {
|
|
dirtyKey(makeCacheKey.apply(null, arguments));
|
|
};
|
|
function peekKey(key) {
|
|
const entry = key && cache.get(key);
|
|
if (entry) {
|
|
return entry.peek();
|
|
}
|
|
}
|
|
optimistic.peekKey = peekKey;
|
|
optimistic.peek = function peek() {
|
|
return peekKey(makeCacheKey.apply(null, arguments));
|
|
};
|
|
function forgetKey(key) {
|
|
return key ? cache.delete(key) : false;
|
|
}
|
|
optimistic.forgetKey = forgetKey;
|
|
optimistic.forget = function forget() {
|
|
return forgetKey(makeCacheKey.apply(null, arguments));
|
|
};
|
|
optimistic.makeCacheKey = makeCacheKey;
|
|
optimistic.getKey = keyArgs ? function getKey() {
|
|
return makeCacheKey.apply(null, keyArgs.apply(null, arguments));
|
|
} : makeCacheKey;
|
|
return Object.freeze(optimistic);
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sYUFBYSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQVksTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcvQyxxRUFBcUU7QUFDckUscUVBQXFFO0FBQ3JFLHlFQUF5RTtBQUN6RSxzRUFBc0U7QUFDdEUseUVBQXlFO0FBQ3pFLHNFQUFzRTtBQUN0RSxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEdBQ0wsTUFBTSxjQUFjLENBQUM7QUFFdEIsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsK0NBQStDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQWdDLE1BQU0sVUFBVSxDQUFDO0FBRTdELDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSxJQUFJLGNBQXdDLENBQUM7QUFDN0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQUcsSUFBVztJQUNoRCxNQUFNLElBQUksR0FBRyxjQUFjLElBQUksQ0FDN0IsY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUN6RCxDQUFDO0lBQ0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLG9EQUFvRDtBQUNwRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE9BQU8s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RyxZQUFZLENBQUM7SUFDdkMsVUFBVSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsTUFBTTtRQUMzQyxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBeUQsQ0FBQztJQUU5RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyaWUgfSBmcm9tIFwiQHdyeS90cmllXCI7XG5cbmltcG9ydCB7IFN0cm9uZ0NhY2hlLCBDb21tb25DYWNoZSB9IGZyb20gXCJAd3J5L2NhY2hlc1wiO1xuaW1wb3J0IHsgRW50cnksIEFueUVudHJ5IH0gZnJvbSBcIi4vZW50cnkuanNcIjtcbmltcG9ydCB7IHBhcmVudEVudHJ5U2xvdCB9IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCB0eXBlIHsgTm9JbmZlciB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcblxuLy8gVGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50IGZvciBtYWtpbmcgb3B0aW1pc20gd29yayB3aXRoXG4vLyBhc3luY2hyb25vdXMgY29kZS4gSW4gb3JkZXIgdG8gcmVnaXN0ZXIgcGFyZW50LWNoaWxkIGRlcGVuZGVuY2llcyxcbi8vIG9wdGltaXNtIG5lZWRzIHRvIGtub3cgYWJvdXQgYW55IGN1cnJlbnRseSBhY3RpdmUgcGFyZW50IGNvbXB1dGF0aW9ucy5cbi8vIEluIG9yZGluYXJ5IHN5bmNocm9ub3VzIGNvZGUsIHRoZSBwYXJlbnQgY29udGV4dCBpcyBpbXBsaWNpdCBpbiB0aGVcbi8vIGV4ZWN1dGlvbiBzdGFjaywgYnV0IGFzeW5jaHJvbm91cyBjb2RlIHJlcXVpcmVzIHNvbWUgZXh0cmEgZ3VpZGFuY2UgaW5cbi8vIG9yZGVyIHRvIHByb3BhZ2F0ZSBjb250ZXh0IGZyb20gb25lIGFzeW5jIHRhc2sgc2VnbWVudCB0byB0aGUgbmV4dC5cbmV4cG9ydCB7XG4gIGJpbmRDb250ZXh0LFxuICBub0NvbnRleHQsXG4gIG5vblJlYWN0aXZlLFxuICBzZXRUaW1lb3V0LFxuICBhc3luY0Zyb21HZW4sXG4gIFNsb3QsXG59IGZyb20gXCIuL2NvbnRleHQuanNcIjtcblxuLy8gQSBsaWdodGVyLXdlaWdodCBkZXBlbmRlbmN5LCBzaW1pbGFyIHRvIE9wdGltaXN0aWNXcmFwcGVyRnVuY3Rpb24sIGV4Y2VwdFxuLy8gd2l0aCBvbmx5IG9uZSBhcmd1bWVudCwgbm8gbWFrZUNhY2hlS2V5LCBubyB3cmFwcGVkIGZ1bmN0aW9uIHRvIHJlY29tcHV0ZSxcbi8vIGFuZCBubyByZXN1bHQgdmFsdWUuIFVzZWZ1bCBmb3IgcmVwcmVzZW50aW5nIGRlcGVuZGVuY3kgbGVhdmVzIGluIHRoZSBncmFwaFxuLy8gb2YgY29tcHV0YXRpb24uIFN1YnNjcmlwdGlvbnMgYXJlIHN1cHBvcnRlZC5cbmV4cG9ydCB7IGRlcCwgT3B0aW1pc3RpY0RlcGVuZGVuY3lGdW5jdGlvbiB9IGZyb20gXCIuL2RlcC5qc1wiO1xuXG4vLyBUaGUgZGVmYXVsdE1ha2VDYWNoZUtleSBmdW5jdGlvbiBpcyByZW1hcmthYmx5IHBvd2VyZnVsLCBiZWNhdXNlIGl0IGdpdmVzXG4vLyBhIHVuaXF1ZSBvYmplY3QgZm9yIGFueSBzaGFsbG93LWlkZW50aWNhbCBsaXN0IG9mIGFyZ3VtZW50cy4gSWYgeW91IG5lZWRcbi8vIHRvIGltcGxlbWVudCBhIGN1c3RvbSBtYWtlQ2FjaGVLZXkgZnVuY3Rpb24sIHlvdSBtYXkgZmluZCBpdCBoZWxwZnVsIHRvXG4vLyBkZWxlZ2F0ZSB0aGUgZmluYWwgd29yayB0byBkZWZhdWx0TWFrZUNhY2hlS2V5LCB3aGljaCBpcyB3aHkgd2UgZXhwb3J0IGl0XG4vLyBoZXJlLiBIb3dldmVyLCB5b3UgbWF5IHdhbnQgdG8gYXZvaWQgZGVmYXVsdE1ha2VDYWNoZUtleSBpZiB5b3VyIHJ1bnRpbWVcbi8vIGRvZXMgbm90IHN1cHBvcnQgV2Vha01hcCwgb3IgeW91IGhhdmUgdGhlIGFiaWxpdHkgdG8gcmV0dXJuIGEgc3RyaW5nIGtleS5cbi8vIEluIHRob3NlIGNhc2VzLCBqdXN0IHdyaXRlIHlvdXIgb3duIGN1c3RvbSBtYWtlQ2FjaGVLZXkgZnVuY3Rpb25zLlxubGV0IGRlZmF1bHRLZXlUcmllOiBUcmllPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE1ha2VDYWNoZUtleSguLi5hcmdzOiBhbnlbXSk6IG9iamVjdCB7XG4gIGNvbnN0IHRyaWUgPSBkZWZhdWx0S2V5VHJpZSB8fCAoXG4gICAgZGVmYXVsdEtleVRyaWUgPSBuZXcgVHJpZSh0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiKVxuICApO1xuICByZXR1cm4gdHJpZS5sb29rdXBBcnJheShhcmdzKTtcbn1cblxuLy8gSWYgeW91J3JlIHBhcmFub2lkIGFib3V0IG1lbW9yeSBsZWFrcywgb3IgeW91IHdhbnQgdG8gYXZvaWQgdXNpbmcgV2Vha01hcFxuLy8gdW5kZXIgdGhlIGhvb2QsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0aGUgYmVoYXZpb3Igb2YgZGVmYXVsdE1ha2VDYWNoZUtleSxcbi8vIGltcG9ydCB0aGlzIGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSB5b3VyIG93biB0cmllcy5cbmV4cG9ydCB7IFRyaWUgYXMgS2V5VHJpZSB9XG5cbmV4cG9ydCB0eXBlIE9wdGltaXN0aWNXcmFwcGVyRnVuY3Rpb248XG4gIFRBcmdzIGV4dGVuZHMgYW55W10sXG4gIFRSZXN1bHQsXG4gIFRLZXlBcmdzIGV4dGVuZHMgYW55W10gPSBUQXJncyxcbiAgVENhY2hlS2V5ID0gYW55LFxuPiA9ICgoLi4uYXJnczogVEFyZ3MpID0+IFRSZXN1bHQpICYge1xuICAvLyBHZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIEVudHJ5IG9iamVjdHMgaW4gdGhlIExSVSBjYWNoZS5cbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuXG4gIC8vIFNuYXBzaG90IG9mIHdyYXAgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGlzIHdyYXBwZXIgZnVuY3Rpb24uXG4gIG9wdGlvbnM6IE9wdGlvbnNXaXRoQ2FjaGVJbnN0YW5jZTxUQXJncywgVEtleUFyZ3MsIFRDYWNoZUtleT47XG5cbiAgLy8gXCJEaXJ0eVwiIGFueSBjYWNoZWQgRW50cnkgc3RvcmVkIGZvciB0aGUgZ2l2ZW4gYXJndW1lbnRzLCBtYXJraW5nIHRoYXQgRW50cnlcbiAgLy8gYW5kIGl0cyBhbmNlc3RvcnMgYXMgcG90ZW50aWFsbHkgbmVlZGluZyB0byBiZSByZWNvbXB1dGVkLiBUaGUgLmRpcnR5KC4uLilcbiAgLy8gbWV0aG9kIG9mIGFuIG9wdGltaXN0aWMgZnVuY3Rpb24gdGFrZXMgdGhlIHNhbWUgcGFyYW1ldGVyIHR5cGVzIGFzIHRoZVxuICAvLyBvcmlnaW5hbCBmdW5jdGlvbiBieSBkZWZhdWx0LCB1bmxlc3MgYSBrZXlBcmdzIGZ1bmN0aW9uIGlzIGNvbmZpZ3VyZWQsIGFuZFxuICAvLyB0aGVuIGl0IG1hdHRlcnMgdGhhdCAuZGlydHkgdGFrZXMgVEtleUFyZ3MgaW5zdGVhZCBvZiBUQXJncy5cbiAgZGlydHk6ICguLi5hcmdzOiBUS2V5QXJncykgPT4gdm9pZDtcbiAgLy8gQSB2ZXJzaW9uIG9mIC5kaXJ0eSB0aGF0IGFjY2VwdHMgYSBrZXkgcmV0dXJuZWQgYnkgLmdldEtleS5cbiAgZGlydHlLZXk6IChrZXk6IFRDYWNoZUtleSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxuICAvLyBFeGFtaW5lIHRoZSBjdXJyZW50IHZhbHVlIHdpdGhvdXQgcmVjb21wdXRpbmcgaXQuXG4gIHBlZWs6ICguLi5hcmdzOiBUS2V5QXJncykgPT4gVFJlc3VsdCB8IHVuZGVmaW5lZDtcbiAgLy8gQSB2ZXJzaW9uIG9mIC5wZWVrIHRoYXQgYWNjZXB0cyBhIGtleSByZXR1cm5lZCBieSAuZ2V0S2V5LlxuICBwZWVrS2V5OiAoa2V5OiBUQ2FjaGVLZXkgfCB1bmRlZmluZWQpID0+IFRSZXN1bHQgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ29tcGxldGVseSByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGNhY2hlLCBkaXJ0eWluZyBhbnkgcGFyZW50IGVudHJpZXMuXG4gIGZvcmdldDogKC4uLmFyZ3M6IFRLZXlBcmdzKSA9PiBib29sZWFuO1xuICAvLyBBIHZlcnNpb24gb2YgLmZvcmdldCB0aGF0IGFjY2VwdHMgYSBrZXkgcmV0dXJuZWQgYnkgLmdldEtleS5cbiAgZm9yZ2V0S2V5OiAoa2V5OiBUQ2FjaGVLZXkgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cbiAgLy8gSW4gb3JkZXIgdG8gdXNlIHRoZSAtS2V5IHZlcnNpb24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucywgeW91IG5lZWQgYSBrZXlcbiAgLy8gcmF0aGVyIHRoYW4gdGhlIGFyZ3VtZW50cyB1c2VkIHRvIGNvbXB1dGUgdGhlIGtleS4gVGhlc2UgdHdvIGZ1bmN0aW9ucyB0YWtlXG4gIC8vIFRBcmdzIG9yIFRLZXlBcmdzIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgVENhY2hlS2V5LiBJZiBubyBrZXlBcmdzXG4gIC8vIGZ1bmN0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWQsIFRBcmdzIHdpbGwgYmUgdGhlIHNhbWUgYXMgVEtleUFyZ3MsIGFuZCB0aHVzXG4gIC8vIGdldEtleSBhbmQgbWFrZUNhY2hlS2V5IHdpbGwgYmUgc3lub255bW91cy5cbiAgZ2V0S2V5OiAoLi4uYXJnczogVEFyZ3MpID0+IFRDYWNoZUtleSB8IHVuZGVmaW5lZDtcblxuICAvLyBUaGlzIHByb3BlcnR5IGlzIGVxdWl2YWxlbnQgdG8gdGhlIG1ha2VDYWNoZUtleSBmdW5jdGlvbiBwcm92aWRlZCBpbiB0aGVcbiAgLy8gT3B0aW1pc3RpY1dyYXBPcHRpb25zLCBvciAoaWYgbm8gb3B0aW9ucy5tYWtlQ2FjaGVLZXkgZnVuY3Rpb24gaXMgcHJvdmlkZWQpXG4gIC8vIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWtlQ2FjaGVLZXkuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBleHBvc2VkIGFzXG4gIC8vIG9wdGltaXN0aWMub3B0aW9ucy5tYWtlQ2FjaGVLZXksIHNvbWV3aGF0IHJlZHVuZGFudGx5LlxuICBtYWtlQ2FjaGVLZXk6ICguLi5hcmdzOiBUS2V5QXJncykgPT4gVENhY2hlS2V5IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHsgQ29tbW9uQ2FjaGUgfVxuZXhwb3J0IGludGVyZmFjZSBDb21tb25DYWNoZUNvbnN0cnVjdG9yPFRDYWNoZUtleSwgVFJlc3VsdCwgVEFyZ3MgZXh0ZW5kcyBhbnlbXT4gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIG5ldyA8SyBleHRlbmRzIFRDYWNoZUtleSwgViBleHRlbmRzIEVudHJ5PFRBcmdzLCBUUmVzdWx0Pj4obWF4PzogbnVtYmVyLCBkaXNwb3NlPzogKHZhbHVlOiBWLCBrZXk/OiBLKSA9PiB2b2lkKTogQ29tbW9uQ2FjaGU8SyxWPjtcbn1cblxuZXhwb3J0IHR5cGUgT3B0aW1pc3RpY1dyYXBPcHRpb25zPFxuICBUQXJncyBleHRlbmRzIGFueVtdLFxuICBUS2V5QXJncyBleHRlbmRzIGFueVtdID0gVEFyZ3MsXG4gIFRDYWNoZUtleSA9IGFueSxcbiAgVFJlc3VsdCA9IGFueSxcbj4gPSB7XG4gIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzIHRoYXQgc2hvdWxkIGJlIHJldGFpbmVkIGJlZm9yZSB0aGVcbiAgLy8gY2FjaGUgYmVnaW5zIGV2aWN0aW5nIHRoZSBvbGRlc3Qgb25lcy5cbiAgbWF4PzogbnVtYmVyO1xuICAvLyBUcmFuc2Zvcm0gdGhlIHJhdyBhcmd1bWVudHMgdG8gc29tZSBvdGhlciB0eXBlIG9mIGFycmF5LCB3aGljaCB3aWxsIHRoZW5cbiAgLy8gYmUgcGFzc2VkIHRvIG1ha2VDYWNoZUtleS5cbiAga2V5QXJncz86ICguLi5hcmdzOiBUQXJncykgPT4gVEtleUFyZ3M7XG4gIC8vIFRoZSBtYWtlQ2FjaGVLZXkgZnVuY3Rpb24gdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIHRoYXQgd2VyZSBwYXNzZWQgdG9cbiAgLy8gdGhlIHdyYXBwZXIgZnVuY3Rpb24gYW5kIHJldHVybnMgYSBzaW5nbGUgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGtleVxuICAvLyBpbiBhIE1hcCB0byBpZGVudGlmeSB0aGUgY2FjaGVkIHJlc3VsdC5cbiAgbWFrZUNhY2hlS2V5PzogKC4uLmFyZ3M6IE5vSW5mZXI8VEtleUFyZ3M+KSA9PiBUQ2FjaGVLZXkgfCB1bmRlZmluZWQ7XG4gIC8vIENhbGxlZCB3aGVuIGEgbmV3IHZhbHVlIGlzIGNvbXB1dGVkIHRvIGFsbG93IGVmZmljaWVudCBub3JtYWxpemF0aW9uIG9mXG4gIC8vIHJlc3VsdHMgb3ZlciB0aW1lLCBmb3IgZXhhbXBsZSBieSByZXR1cm5pbmcgb2xkZXIgaWYgZXF1YWwobmV3ZXIsIG9sZGVyKS5cbiAgbm9ybWFsaXplUmVzdWx0PzogKG5ld2VyOiBUUmVzdWx0LCBvbGRlcjogVFJlc3VsdCkgPT4gVFJlc3VsdDtcbiAgLy8gSWYgcHJvdmlkZWQsIHRoZSBzdWJzY3JpYmUgZnVuY3Rpb24gc2hvdWxkIGVpdGhlciByZXR1cm4gYW4gdW5zdWJzY3JpYmVcbiAgLy8gZnVuY3Rpb24gb3IgcmV0dXJuIG5vdGhpbmcuXG4gIHN1YnNjcmliZT86ICguLi5hcmdzOiBUQXJncykgPT4gdm9pZCB8ICgoKSA9PiBhbnkpO1xuICBjYWNoZT86IENvbW1vbkNhY2hlPE5vSW5mZXI8VENhY2hlS2V5PiwgRW50cnk8Tm9JbmZlcjxUQXJncz4sIE5vSW5mZXI8VFJlc3VsdD4+PlxuICAgIHwgQ29tbW9uQ2FjaGVDb25zdHJ1Y3RvcjxOb0luZmVyPFRDYWNoZUtleT4sIE5vSW5mZXI8VFJlc3VsdD4sIE5vSW5mZXI8VEFyZ3M+Pjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc1dpdGhDYWNoZUluc3RhbmNlPFxuICBUQXJncyBleHRlbmRzIGFueVtdLFxuICBUS2V5QXJncyBleHRlbmRzIGFueVtdID0gVEFyZ3MsXG4gIFRDYWNoZUtleSA9IGFueSxcbiAgVFJlc3VsdCA9IGFueSxcbj4gZXh0ZW5kcyBPcHRpbWlzdGljV3JhcE9wdGlvbnM8VEFyZ3MsIFRLZXlBcmdzLCBUQ2FjaGVLZXksIFRSZXN1bHQ+IHtcbiAgY2FjaGU6IENvbW1vbkNhY2hlPE5vSW5mZXI8VENhY2hlS2V5PiwgRW50cnk8Tm9JbmZlcjxUQXJncz4sIE5vSW5mZXI8VFJlc3VsdD4+Pjtcbn07XG5cbmNvbnN0IGNhY2hlcyA9IG5ldyBTZXQ8Q29tbW9uQ2FjaGU8YW55LCBBbnlFbnRyeT4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwPFxuICBUQXJncyBleHRlbmRzIGFueVtdLFxuICBUUmVzdWx0LFxuICBUS2V5QXJncyBleHRlbmRzIGFueVtdID0gVEFyZ3MsXG4gIFRDYWNoZUtleSA9IGFueSxcbj4ob3JpZ2luYWxGdW5jdGlvbjogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmVzdWx0LCB7XG4gIG1heCA9IE1hdGgucG93KDIsIDE2KSxcbiAga2V5QXJncyxcbiAgbWFrZUNhY2hlS2V5ID0gKGRlZmF1bHRNYWtlQ2FjaGVLZXkgYXMgKCkgPT4gVENhY2hlS2V5KSxcbiAgbm9ybWFsaXplUmVzdWx0LFxuICBzdWJzY3JpYmUsXG4gIGNhY2hlOiBjYWNoZU9wdGlvbiA9IFN0cm9uZ0NhY2hlLFxufTogT3B0aW1pc3RpY1dyYXBPcHRpb25zPFRBcmdzLCBUS2V5QXJncywgVENhY2hlS2V5LCBUUmVzdWx0PiA9IE9iamVjdC5jcmVhdGUobnVsbCkpIHtcbiAgY29uc3QgY2FjaGU6IENvbW1vbkNhY2hlPFRDYWNoZUtleSwgRW50cnk8VEFyZ3MsIFRSZXN1bHQ+PiA9XG4gICAgdHlwZW9mIGNhY2hlT3B0aW9uID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gbmV3IGNhY2hlT3B0aW9uKG1heCwgZW50cnkgPT4gZW50cnkuZGlzcG9zZSgpKVxuICAgICAgOiBjYWNoZU9wdGlvbjtcblxuICBjb25zdCBvcHRpbWlzdGljID0gZnVuY3Rpb24gKCk6IFRSZXN1bHQge1xuICAgIGNvbnN0IGtleSA9IG1ha2VDYWNoZUtleS5hcHBseShcbiAgICAgIG51bGwsXG4gICAgICBrZXlBcmdzID8ga2V5QXJncy5hcHBseShudWxsLCBhcmd1bWVudHMgYXMgYW55KSA6IGFyZ3VtZW50cyBhcyBhbnlcbiAgICApO1xuXG4gICAgaWYgKGtleSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShudWxsLCBhcmd1bWVudHMgYXMgYW55KTtcbiAgICB9XG5cbiAgICBsZXQgZW50cnkgPSBjYWNoZS5nZXQoa2V5KSE7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgY2FjaGUuc2V0KGtleSwgZW50cnkgPSBuZXcgRW50cnkob3JpZ2luYWxGdW5jdGlvbikpO1xuICAgICAgZW50cnkubm9ybWFsaXplUmVzdWx0ID0gbm9ybWFsaXplUmVzdWx0O1xuICAgICAgZW50cnkuc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgLy8gR2l2ZSB0aGUgRW50cnkgdGhlIGFiaWxpdHkgdG8gdHJpZ2dlciBjYWNoZS5kZWxldGUoa2V5KSwgZXZlbiB0aG91Z2hcbiAgICAgIC8vIHRoZSBFbnRyeSBpdHNlbGYgZG9lcyBub3Qga25vdyBhYm91dCBrZXkgb3IgY2FjaGUuXG4gICAgICBlbnRyeS5mb3JnZXQgPSAoKSA9PiBjYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGVudHJ5LnJlY29tcHV0ZShcbiAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykgYXMgVEFyZ3MsXG4gICAgKTtcblxuICAgIC8vIE1vdmUgdGhpcyBlbnRyeSB0byB0aGUgZnJvbnQgb2YgdGhlIGxlYXN0LXJlY2VudGx5IHVzZWQgcXVldWUsXG4gICAgLy8gc2luY2Ugd2UganVzdCBmaW5pc2hlZCBjb21wdXRpbmcgaXRzIHZhbHVlLlxuICAgIGNhY2hlLnNldChrZXksIGVudHJ5KTtcblxuICAgIGNhY2hlcy5hZGQoY2FjaGUpO1xuXG4gICAgLy8gQ2xlYW4gdXAgYW55IGV4Y2VzcyBlbnRyaWVzIGluIHRoZSBjYWNoZSwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm9cbiAgICAvLyBhY3RpdmUgcGFyZW50IGVudHJ5LCBtZWFuaW5nIHdlJ3JlIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgbGFyZ2VyXG4gICAgLy8gY29tcHV0YXRpb24gdGhhdCBtaWdodCBiZSBmbHVtbW94ZWQgYnkgdGhlIGNsZWFuaW5nLlxuICAgIGlmICghIHBhcmVudEVudHJ5U2xvdC5oYXNWYWx1ZSgpKSB7XG4gICAgICBjYWNoZXMuZm9yRWFjaChjYWNoZSA9PiBjYWNoZS5jbGVhbigpKTtcbiAgICAgIGNhY2hlcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBhcyBPcHRpbWlzdGljV3JhcHBlckZ1bmN0aW9uPFRBcmdzLCBUUmVzdWx0LCBUS2V5QXJncywgVENhY2hlS2V5PjtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW1pc3RpYywgXCJzaXplXCIsIHtcbiAgICBnZXQ6ICgpID0+IGNhY2hlLnNpemUsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgfSk7XG5cbiAgT2JqZWN0LmZyZWV6ZShvcHRpbWlzdGljLm9wdGlvbnMgPSB7XG4gICAgbWF4LFxuICAgIGtleUFyZ3MsXG4gICAgbWFrZUNhY2hlS2V5LFxuICAgIG5vcm1hbGl6ZVJlc3VsdCxcbiAgICBzdWJzY3JpYmUsXG4gICAgY2FjaGUsXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGRpcnR5S2V5KGtleTogVENhY2hlS2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZW50cnkgPSBrZXkgJiYgY2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS5zZXREaXJ0eSgpO1xuICAgIH1cbiAgfVxuICBvcHRpbWlzdGljLmRpcnR5S2V5ID0gZGlydHlLZXk7XG4gIG9wdGltaXN0aWMuZGlydHkgPSBmdW5jdGlvbiBkaXJ0eSgpIHtcbiAgICBkaXJ0eUtleShtYWtlQ2FjaGVLZXkuYXBwbHkobnVsbCwgYXJndW1lbnRzIGFzIGFueSkpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBlZWtLZXkoa2V5OiBUQ2FjaGVLZXkgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbnRyeSA9IGtleSAmJiBjYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHJldHVybiBlbnRyeS5wZWVrKCk7XG4gICAgfVxuICB9XG4gIG9wdGltaXN0aWMucGVla0tleSA9IHBlZWtLZXk7XG4gIG9wdGltaXN0aWMucGVlayA9IGZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgcmV0dXJuIHBlZWtLZXkobWFrZUNhY2hlS2V5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyBhcyBhbnkpKTtcbiAgfTtcblxuICBmdW5jdGlvbiBmb3JnZXRLZXkoa2V5OiBUQ2FjaGVLZXkgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ga2V5ID8gY2FjaGUuZGVsZXRlKGtleSkgOiBmYWxzZTtcbiAgfVxuICBvcHRpbWlzdGljLmZvcmdldEtleSA9IGZvcmdldEtleTtcbiAgb3B0aW1pc3RpYy5mb3JnZXQgPSBmdW5jdGlvbiBmb3JnZXQoKSB7XG4gICAgcmV0dXJuIGZvcmdldEtleShtYWtlQ2FjaGVLZXkuYXBwbHkobnVsbCwgYXJndW1lbnRzIGFzIGFueSkpO1xuICB9O1xuXG4gIG9wdGltaXN0aWMubWFrZUNhY2hlS2V5ID0gbWFrZUNhY2hlS2V5O1xuICBvcHRpbWlzdGljLmdldEtleSA9IGtleUFyZ3MgPyBmdW5jdGlvbiBnZXRLZXkoKSB7XG4gICAgcmV0dXJuIG1ha2VDYWNoZUtleS5hcHBseShudWxsLCBrZXlBcmdzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyBhcyBhbnkpKTtcbiAgfSA6IG1ha2VDYWNoZUtleSBhcyAoLi4uYXJnczogYW55W10pID0+IFRDYWNoZUtleSB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvcHRpbWlzdGljKTtcbn1cbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19 |