Socket
Socket
Sign inDemoInstall

@glimmer/validator

Package Overview
Dependencies
Maintainers
11
Versions
143
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/validator - npm Package Compare versions

Comparing version 0.44.0 to 0.45.0

dist/commonjs/es2017/lib/debug.d.ts.map

880

dist/amd/es5/glimmer-validator.js

@@ -1,359 +0,587 @@

define('@glimmer/validator', ['exports'], function (exports) { 'use strict';
define('@glimmer/validator', ['exports', '@glimmer/env'], function (exports, env) { 'use strict';
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
// This is a duplicate utility from @glimmer/util because `@glimmer/validator`
// should not depend on any other @glimmer packages, in order to avoid pulling
// in types and prevent regressions in `@glimmer/tracking` (which has public types).
var symbol = typeof Symbol !== 'undefined' ? Symbol : function (key) {
return '__' + key + Math.floor(Math.random() * Date.now()) + '__';
};
var symbol = typeof Symbol !== 'undefined' ? Symbol : function (key) {
return '__' + key + Math.floor(Math.random() * Date.now()) + '__';
};
var CONSTANT = 0;
var INITIAL = 1;
var VOLATILE = 9007199254740991; // MAX_INT
var $REVISION = INITIAL;
function bump() {
$REVISION++;
}
//////////
var COMPUTE = symbol('TAG_COMPUTE');
//////////
/**
* `value` receives a tag and returns an opaque Revision based on that tag. This
* snapshot can then later be passed to `validate` with the same tag to
* determine if the tag has changed at all since the time that `value` was
* called.
*
* The current implementation returns the global revision count directly for
* performance reasons. This is an implementation detail, and should not be
* relied on directly by users of these APIs. Instead, Revisions should be
* treated as if they are opaque/unknown, and should only be interacted with via
* the `value`/`validate` API.
*
* @param tag
*/
function value(_tag) {
return $REVISION;
}
/**
* `validate` receives a tag and a snapshot from a previous call to `value` with
* the same tag, and determines if the tag is still valid compared to the
* snapshot. If the tag's state has changed at all since then, `validate` will
* return false, otherwise it will return true. This is used to determine if a
* calculation related to the tags should be rerun.
*
* @param tag
* @param snapshot
*/
function validate(tag, snapshot) {
return snapshot >= tag[COMPUTE]();
}
var TYPE = symbol('TAG_TYPE');
var ALLOW_CYCLES = void 0;
exports.runInAutotrackingTransaction = void 0;
exports.deprecateMutationsInAutotrackingTransaction = void 0;
exports.setAutotrackingTransactionEnv = void 0;
var assertTagNotConsumed = void 0;
var _markTagAsConsumed = void 0;
if (env.DEBUG) {
var DEPRECATE_IN_AUTOTRACKING_TRANSACTION = false;
var AUTOTRACKING_TRANSACTION = null;
var debuggingContexts = [];
/////////
var TRANSACTION_ENV = {
assert: function assert(message) {
throw new Error(message);
},
deprecate: function deprecate(message) {
console.warn(message);
},
debugMessage: function debugMessage(obj, keyName) {
var objName = void 0;
if (typeof obj === 'function') {
objName = obj.name;
} else if (typeof obj === 'object' && obj !== null) {
var className = obj.constructor && obj.constructor.name || '(unknown class)';
objName = '(an instance of ' + className + ')';
} else if (obj === undefined) {
objName = '(an unknown tag)';
} else {
objName = String(obj);
}
var dirtyString = keyName ? '`' + keyName + '` on `' + objName + '`' : '`' + objName + '`';
return 'You attempted to update ' + dirtyString + ', but it had already been used previously in the same computation. Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.';
}
};
exports.setAutotrackingTransactionEnv = function setAutotrackingTransactionEnv(env$$1) {
return Object.assign(TRANSACTION_ENV, env$$1);
};
/**
* Creates a global autotracking transaction. This will prevent any backflow
* in any `track` calls within the transaction, even if they are not
* externally consumed.
*
* `runInAutotrackingTransaction` can be called within itself, and it will add
* onto the existing transaction if one exists.
*
* TODO: Only throw an error if the `track` is consumed.
*/
exports.runInAutotrackingTransaction = function runInAutotrackingTransaction(fn, debuggingContext) {
var previousDeprecateState = DEPRECATE_IN_AUTOTRACKING_TRANSACTION;
var previousTransactionState = AUTOTRACKING_TRANSACTION;
DEPRECATE_IN_AUTOTRACKING_TRANSACTION = false;
if (previousTransactionState === null) {
// if there was no transaction start it. Otherwise, the transaction already exists.
AUTOTRACKING_TRANSACTION = new WeakMap();
}
if (debuggingContext) {
debuggingContexts.unshift(debuggingContext);
}
try {
fn();
} finally {
if (debuggingContext) {
debuggingContexts.shift();
}
DEPRECATE_IN_AUTOTRACKING_TRANSACTION = previousDeprecateState;
AUTOTRACKING_TRANSACTION = previousTransactionState;
}
};
/**
* Switches to deprecating within an autotracking transaction, if one exists.
* If `runInAutotrackingTransaction` is called within the callback of this
* method, it switches back to throwing an error, allowing zebra-striping of
* the types of errors that are thrown.
*
* Does not start an autotracking transaction.
*
* NOTE: For Ember usage only, in general you should assert that these
* invariants are true.
*/
exports.deprecateMutationsInAutotrackingTransaction = function deprecateMutationsInAutotrackingTransaction(fn) {
var previousDeprecateState = DEPRECATE_IN_AUTOTRACKING_TRANSACTION;
DEPRECATE_IN_AUTOTRACKING_TRANSACTION = true;
try {
fn();
} finally {
DEPRECATE_IN_AUTOTRACKING_TRANSACTION = previousDeprecateState;
}
};
var nthIndex = function nthIndex(str, pattern, n) {
var startingPos = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;
var MonomorphicTagImpl = function () {
function MonomorphicTagImpl(type) {
_classCallCheck(this, MonomorphicTagImpl);
var i = startingPos;
while (n-- > 0 && i++ < str.length) {
i = str.indexOf(pattern, i);
if (i < 0) break;
}
return i;
};
var makeAutotrackingErrorMessage = function makeAutotrackingErrorMessage(sourceData, obj, keyName) {
var message = [TRANSACTION_ENV.debugMessage(obj, keyName && String(keyName))];
if (sourceData.context) {
message.push('`' + String(keyName) + '` was first used:\n\n' + sourceData.context);
}
if (sourceData.error.stack) {
var sourceStack = sourceData.error.stack;
var thirdIndex = nthIndex(sourceStack, '\n', 3);
sourceStack = sourceStack.substr(thirdIndex);
message.push('Stack trace for the first usage: ' + sourceStack);
}
message.push('Stack trace for the update:');
return message.join('\n\n');
};
_markTagAsConsumed = function markTagAsConsumed(_tag, sourceError) {
if (!AUTOTRACKING_TRANSACTION || AUTOTRACKING_TRANSACTION.has(_tag)) return;
AUTOTRACKING_TRANSACTION.set(_tag, {
context: debuggingContexts.map(function (c) {
return c.replace(/^/gm, ' ').replace(/^ /, '-');
}).join('\n\n'),
error: sourceError
});
// We need to mark the tag and all of its subtags as consumed, so we need to
// cast it and access its internals. In the future this shouldn't be necessary,
// this is only for computed properties.
var tag = _tag;
if (tag.subtag) {
_markTagAsConsumed(tag.subtag, sourceError);
}
if (tag.subtags) {
tag.subtags.forEach(function (tag) {
return _markTagAsConsumed(tag, sourceError);
});
}
};
assertTagNotConsumed = function assertTagNotConsumed(tag, obj, keyName) {
var forceHardError = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
this.revision = INITIAL;
this.lastChecked = INITIAL;
this.lastValue = INITIAL;
this.isUpdating = false;
this.subtag = null;
this.subtags = null;
this[TYPE] = type;
}
if (AUTOTRACKING_TRANSACTION === null) return;
var sourceData = AUTOTRACKING_TRANSACTION.get(tag);
if (!sourceData) return;
if (DEPRECATE_IN_AUTOTRACKING_TRANSACTION && !forceHardError) {
TRANSACTION_ENV.deprecate(makeAutotrackingErrorMessage(sourceData, obj, keyName));
} else {
// This hack makes the assertion message nicer, we can cut off the first
// few lines of the stack trace and let users know where the actual error
// occurred.
try {
TRANSACTION_ENV.assert(makeAutotrackingErrorMessage(sourceData, obj, keyName));
} catch (e) {
if (e.stack) {
var updateStackBegin = e.stack.indexOf('Stack trace for the update:');
if (updateStackBegin !== -1) {
var start = nthIndex(e.stack, '\n', 1, updateStackBegin);
var end = nthIndex(e.stack, '\n', 4, updateStackBegin);
e.stack = e.stack.substr(0, start) + e.stack.substr(end);
}
}
throw e;
}
}
};
}
MonomorphicTagImpl.prototype[COMPUTE] = function () {
var lastChecked = this.lastChecked;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var CONSTANT = 0;
var INITIAL = 1;
var VOLATILE = 9007199254740991; // MAX_INT
var $REVISION = INITIAL;
function bump() {
$REVISION++;
}
//////////
var COMPUTE = symbol('TAG_COMPUTE');
//////////
/**
* `value` receives a tag and returns an opaque Revision based on that tag. This
* snapshot can then later be passed to `validate` with the same tag to
* determine if the tag has changed at all since the time that `value` was
* called.
*
* The current implementation returns the global revision count directly for
* performance reasons. This is an implementation detail, and should not be
* relied on directly by users of these APIs. Instead, Revisions should be
* treated as if they are opaque/unknown, and should only be interacted with via
* the `value`/`validate` API.
*
* @param tag
*/
function value(tag) {
if (env.DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
return $REVISION;
}
/**
* `validate` receives a tag and a snapshot from a previous call to `value` with
* the same tag, and determines if the tag is still valid compared to the
* snapshot. If the tag's state has changed at all since then, `validate` will
* return false, otherwise it will return true. This is used to determine if a
* calculation related to the tags should be rerun.
*
* @param tag
* @param snapshot
*/
function validate(tag, snapshot) {
if (env.DEBUG) {
IS_VALIDATING = true;
}
var isValid = snapshot >= tag[COMPUTE]();
if (env.DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
}
var IS_VALIDATING = void 0;
var TYPE = symbol('TAG_TYPE');
exports.ALLOW_CYCLES = void 0;
if (env.DEBUG) {
exports.ALLOW_CYCLES = new WeakMap();
}
if (lastChecked !== $REVISION) {
this.isUpdating = true;
this.lastChecked = $REVISION;
try {
var subtags = this.subtags,
subtag = this.subtag,
revision = this.revision;
var MonomorphicTagImpl = function () {
function MonomorphicTagImpl(type) {
_classCallCheck(this, MonomorphicTagImpl);
if (subtag !== null) {
revision = Math.max(revision, subtag[COMPUTE]());
}
if (subtags !== null) {
for (var i = 0; i < subtags.length; i++) {
var _value = subtags[i][COMPUTE]();
revision = Math.max(_value, revision);
}
}
this.lastValue = revision;
} finally {
this.isUpdating = false;
}
}
if (this.isUpdating === true) {
this.lastChecked = ++$REVISION;
}
return this.lastValue;
};
this.revision = INITIAL;
this.lastChecked = INITIAL;
this.lastValue = INITIAL;
this.isUpdating = false;
this.subtag = null;
this.subtags = null;
this[TYPE] = type;
}
MonomorphicTagImpl.update = function update(_tag, subtag) {
// TODO: TS 3.7 should allow us to do this via assertion
var tag = _tag;
if (subtag === CONSTANT_TAG) {
tag.subtag = null;
} else {
tag.subtag = subtag;
// subtag could be another type of tag, e.g. CURRENT_TAG or VOLATILE_TAG.
// If so, lastChecked/lastValue will be undefined, result in these being
// NaN. This is fine, it will force the system to recompute.
tag.lastChecked = Math.min(tag.lastChecked, subtag.lastChecked);
tag.lastValue = Math.max(tag.lastValue, subtag.lastValue);
}
};
MonomorphicTagImpl.prototype[COMPUTE] = function () {
var lastChecked = this.lastChecked;
MonomorphicTagImpl.dirty = function dirty(tag) {
tag.revision = ++$REVISION;
};
if (this.isUpdating === true) {
if (env.DEBUG && !exports.ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
} else if (lastChecked !== $REVISION) {
this.isUpdating = true;
if (env.DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
try {
var subtags = this.subtags,
subtag = this.subtag,
revision = this.revision;
return MonomorphicTagImpl;
}();
if (subtag !== null) {
revision = Math.max(revision, subtag[COMPUTE]());
}
if (subtags !== null) {
for (var i = 0; i < subtags.length; i++) {
var _value = subtags[i][COMPUTE]();
revision = Math.max(_value, revision);
}
}
this.lastValue = revision;
} finally {
this.isUpdating = false;
}
}
return this.lastValue;
};
var dirty = MonomorphicTagImpl.dirty;
var update = MonomorphicTagImpl.update;
//////////
function createTag() {
return new MonomorphicTagImpl(0 /* Dirtyable */);
}
function createUpdatableTag() {
return new MonomorphicTagImpl(1 /* Updatable */);
}
//////////
var CONSTANT_TAG = new MonomorphicTagImpl(3 /* Constant */);
function isConst(_ref) {
var tag = _ref.tag;
MonomorphicTagImpl.update = function update(_tag, subtag) {
if (env.DEBUG && _tag[TYPE] !== 1 /* Updatable */) {
throw new Error('Attempted to update a tag that was not updatable');
}
// TODO: TS 3.7 should allow us to do this via assertion
var tag = _tag;
if (subtag === CONSTANT_TAG) {
tag.subtag = null;
} else {
if (env.DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
tag.subtag = subtag;
}
};
return tag === CONSTANT_TAG;
}
function isConstTag(tag) {
return tag === CONSTANT_TAG;
}
//////////
MonomorphicTagImpl.dirty = function dirty(tag) {
if (env.DEBUG && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
throw new Error('Attempted to dirty a tag that was not dirtyable');
}
if (env.DEBUG) {
// Usually by this point, we've already asserted with better error information,
// but this is our last line of defense.
assertTagNotConsumed(tag);
}
tag.revision = ++$REVISION;
};
var VolatileTag = function () {
function VolatileTag() {
_classCallCheck(this, VolatileTag);
}
return MonomorphicTagImpl;
}();
VolatileTag.prototype[COMPUTE] = function () {
return VOLATILE;
};
var dirty = MonomorphicTagImpl.dirty;
var update = MonomorphicTagImpl.update;
//////////
function createTag() {
return new MonomorphicTagImpl(0 /* Dirtyable */);
}
function createUpdatableTag() {
return new MonomorphicTagImpl(1 /* Updatable */);
}
//////////
var CONSTANT_TAG = new MonomorphicTagImpl(3 /* Constant */);
function isConst(_ref) {
var tag = _ref.tag;
return VolatileTag;
}();
return tag === CONSTANT_TAG;
}
function isConstTag(tag) {
return tag === CONSTANT_TAG;
}
//////////
var VOLATILE_TAG = new VolatileTag();
//////////
var VolatileTag = function () {
function VolatileTag() {
_classCallCheck(this, VolatileTag);
}
var CurrentTag = function () {
function CurrentTag() {
_classCallCheck(this, CurrentTag);
}
VolatileTag.prototype[COMPUTE] = function () {
return VOLATILE;
};
CurrentTag.prototype[COMPUTE] = function () {
return $REVISION;
};
return VolatileTag;
}();
return CurrentTag;
}();
var VOLATILE_TAG = new VolatileTag();
//////////
var CURRENT_TAG = new CurrentTag();
//////////
function combine(tags) {
var optimized = [];
for (var i = 0, l = tags.length; i < l; i++) {
var tag = tags[i];
if (tag === CONSTANT_TAG) continue;
optimized.push(tag);
}
return createCombinatorTag(optimized);
}
function createCombinatorTag(tags) {
switch (tags.length) {
case 0:
return CONSTANT_TAG;
case 1:
return tags[0];
default:
var tag = new MonomorphicTagImpl(2 /* Combinator */);
tag.subtags = tags;
return tag;
}
}
var CurrentTag = function () {
function CurrentTag() {
_classCallCheck(this, CurrentTag);
}
var TRACKED_TAGS = new WeakMap();
function isObject(u) {
return typeof u === 'object' && u !== null;
}
function dirtyTag(obj, key) {
if (isObject(obj)) {
var tag = tagFor(obj, key);
if (tag === undefined) {
updateTag(obj, key, createUpdatableTag());
} else if (isConstTag(tag)) {
throw new Error('BUG: Can\'t update a constant tag');
} else {
dirty(tag);
}
} else {
throw new Error('BUG: Can\'t update a tag for a primitive');
}
}
function tagFor(obj, key) {
if (isObject(obj)) {
var tags = TRACKED_TAGS.get(obj);
if (tags === undefined) {
tags = new Map();
TRACKED_TAGS.set(obj, tags);
} else if (tags.has(key)) {
return tags.get(key);
}
var tag = createUpdatableTag();
tags.set(key, tag);
return tag;
} else {
return CONSTANT_TAG;
}
}
function updateTag(obj, key, newTag) {
if (isObject(obj)) {
var tag = tagFor(obj, key);
if (isConstTag(tag)) {
throw new Error('BUG: Can\'t update a constant tag');
} else {
update(tag, newTag);
}
return tag;
} else {
throw new Error('BUG: Can\'t update a tag for a primitive');
}
}
CurrentTag.prototype[COMPUTE] = function () {
return $REVISION;
};
function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* Whenever a tracked computed property is entered, the current tracker is
* saved off and a new tracker is replaced.
*
* Any tracked properties consumed are added to the current tracker.
*
* When a tracked computed property is exited, the tracker's tags are
* combined and added to the parent tracker.
*
* The consequence is that each tracked computed property has a tag
* that corresponds to the tracked properties consumed inside of
* itself, including child tracked computed properties.
*/
var CURRENT_TRACKER = null;
/**
* An object that that tracks @tracked properties that were consumed.
*/
return CurrentTag;
}();
var Tracker = function () {
function Tracker() {
_classCallCheck$1(this, Tracker);
var CURRENT_TAG = new CurrentTag();
//////////
function combine(tags) {
var optimized = [];
for (var i = 0, l = tags.length; i < l; i++) {
var tag = tags[i];
if (tag === CONSTANT_TAG) continue;
optimized.push(tag);
}
return createCombinatorTag(optimized);
}
function createCombinatorTag(tags) {
switch (tags.length) {
case 0:
return CONSTANT_TAG;
case 1:
return tags[0];
default:
var tag = new MonomorphicTagImpl(2 /* Combinator */);
tag.subtags = tags;
return tag;
}
}
this.tags = new Set();
this.last = null;
}
var propertyDidChange = function propertyDidChange() {};
function setPropertyDidChange(cb) {
propertyDidChange = cb;
}
function isObject(u) {
return typeof u === 'object' && u !== null || typeof u === 'function';
}
var TRACKED_TAGS = new WeakMap();
function dirtyTagFor(obj, key) {
if (isObject(obj)) {
var tags = TRACKED_TAGS.get(obj);
// No tags have been setup for this object yet, return
if (tags === undefined) return;
// Dirty the tag for the specific property if it exists
var propertyTag = tags.get(key);
if (propertyTag !== undefined) {
if (env.DEBUG) {
assertTagNotConsumed(propertyTag, obj, key);
}
dirty(propertyTag);
propertyDidChange();
}
} else {
throw new Error('BUG: Can\'t update a tag for a primitive');
}
}
function tagFor(obj, key) {
if (isObject(obj)) {
var tags = TRACKED_TAGS.get(obj);
if (tags === undefined) {
tags = new Map();
TRACKED_TAGS.set(obj, tags);
} else if (tags.has(key)) {
return tags.get(key);
}
var tag = createUpdatableTag();
tags.set(key, tag);
return tag;
} else {
return CONSTANT_TAG;
}
}
Tracker.prototype.add = function add(tag) {
this.tags.add(tag);
this.last = tag;
};
function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* Whenever a tracked computed property is entered, the current tracker is
* saved off and a new tracker is replaced.
*
* Any tracked properties consumed are added to the current tracker.
*
* When a tracked computed property is exited, the tracker's tags are
* combined and added to the parent tracker.
*
* The consequence is that each tracked computed property has a tag
* that corresponds to the tracked properties consumed inside of
* itself, including child tracked computed properties.
*/
var CURRENT_TRACKER = null;
/**
* An object that that tracks @tracked properties that were consumed.
*/
Tracker.prototype.combine = function combine$$1() {
var tags = this.tags;
var Tracker = function () {
function Tracker() {
_classCallCheck$1(this, Tracker);
if (tags.size === 0) {
return CONSTANT_TAG;
} else if (tags.size === 1) {
return this.last;
} else {
var tagsArr = [];
tags.forEach(function (tag) {
return tagsArr.push(tag);
});
return combine(tagsArr);
}
};
this.tags = new Set();
this.last = null;
}
return Tracker;
}();
Tracker.prototype.add = function add(tag) {
this.tags.add(tag);
if (env.DEBUG) {
_markTagAsConsumed(tag, new Error());
}
this.last = tag;
};
function track(callback) {
var parent = CURRENT_TRACKER;
var current = new Tracker();
CURRENT_TRACKER = current;
try {
callback();
} finally {
CURRENT_TRACKER = parent;
}
return current.combine();
}
function consume(tag) {
if (CURRENT_TRACKER !== null) {
CURRENT_TRACKER.add(tag);
}
}
//////////
var EPOCH = createTag();
function trackedData(key, initializer) {
var values = new WeakMap();
var hasInitializer = typeof initializer === 'function';
function getter(self) {
consume(tagFor(self, key));
var value$$1 = void 0;
// If the field has never been initialized, we should initialize it
if (hasInitializer && !values.has(self)) {
value$$1 = initializer();
values.set(self, value$$1);
} else {
value$$1 = values.get(self);
}
return value$$1;
}
function setter(self, value$$1) {
dirty(EPOCH);
dirtyTag(self, key);
values.set(self, value$$1);
}
return { getter: getter, setter: setter };
}
Tracker.prototype.combine = function combine$$1() {
var tags = this.tags;
exports.ALLOW_CYCLES = ALLOW_CYCLES;
exports.bump = bump;
exports.combine = combine;
exports.COMPUTE = COMPUTE;
exports.CONSTANT_TAG = CONSTANT_TAG;
exports.CONSTANT = CONSTANT;
exports.createCombinatorTag = createCombinatorTag;
exports.createTag = createTag;
exports.createUpdatableTag = createUpdatableTag;
exports.CURRENT_TAG = CURRENT_TAG;
exports.dirty = dirty;
exports.INITIAL = INITIAL;
exports.isConst = isConst;
exports.isConstTag = isConstTag;
exports.update = update;
exports.validate = validate;
exports.value = value;
exports.VOLATILE_TAG = VOLATILE_TAG;
exports.VOLATILE = VOLATILE;
exports.dirtyTag = dirtyTag;
exports.tagFor = tagFor;
exports.updateTag = updateTag;
exports.track = track;
exports.consume = consume;
exports.EPOCH = EPOCH;
exports.trackedData = trackedData;
if (tags.size === 0) {
return CONSTANT_TAG;
} else if (tags.size === 1) {
return this.last;
} else {
var tagsArr = [];
tags.forEach(function (tag) {
return tagsArr.push(tag);
});
return combine(tagsArr);
}
};
Object.defineProperty(exports, '__esModule', { value: true });
return Tracker;
}();
//////////
function track(callback, debuggingContext) {
var parent = CURRENT_TRACKER;
var current = new Tracker();
CURRENT_TRACKER = current;
try {
if (env.DEBUG) {
exports.runInAutotrackingTransaction(callback, debuggingContext);
} else {
callback();
}
} finally {
CURRENT_TRACKER = parent;
}
return current.combine();
}
function consume(tag) {
if (CURRENT_TRACKER !== null) {
CURRENT_TRACKER.add(tag);
}
}
function isTracking() {
return CURRENT_TRACKER !== null;
}
function untrack(callback) {
var parent = CURRENT_TRACKER;
CURRENT_TRACKER = null;
try {
callback();
} finally {
CURRENT_TRACKER = parent;
}
}
//////////
var EPOCH = createTag();
function trackedData(key, initializer) {
var values = new WeakMap();
var hasInitializer = typeof initializer === 'function';
function getter(self) {
consume(tagFor(self, key));
var value$$1 = void 0;
// If the field has never been initialized, we should initialize it
if (hasInitializer && !values.has(self)) {
value$$1 = initializer();
values.set(self, value$$1);
} else {
value$$1 = values.get(self);
}
return value$$1;
}
function setter(self, value$$1) {
if (env.DEBUG) {
assertTagNotConsumed(tagFor(self, key), self, key, true);
}
dirty(EPOCH);
dirtyTagFor(self, key);
values.set(self, value$$1);
}
return { getter: getter, setter: setter };
}
exports.bump = bump;
exports.combine = combine;
exports.COMPUTE = COMPUTE;
exports.CONSTANT_TAG = CONSTANT_TAG;
exports.CONSTANT = CONSTANT;
exports.createCombinatorTag = createCombinatorTag;
exports.createTag = createTag;
exports.createUpdatableTag = createUpdatableTag;
exports.CURRENT_TAG = CURRENT_TAG;
exports.dirty = dirty;
exports.INITIAL = INITIAL;
exports.isConst = isConst;
exports.isConstTag = isConstTag;
exports.update = update;
exports.validate = validate;
exports.value = value;
exports.VOLATILE_TAG = VOLATILE_TAG;
exports.VOLATILE = VOLATILE;
exports.dirtyTagFor = dirtyTagFor;
exports.tagFor = tagFor;
exports.setPropertyDidChange = setPropertyDidChange;
exports.consume = consume;
exports.EPOCH = EPOCH;
exports.isTracking = isTracking;
exports.track = track;
exports.trackedData = trackedData;
exports.untrack = untrack;
Object.defineProperty(exports, '__esModule', { value: true });
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpbW1lci12YWxpZGF0b3IuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFncyc7XG5cbi8vLy8vLy8vLy9cblxuLy8gdXRpbHNcbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoKFxuICBrOiBpbmZlciBJXG4pID0+IHZvaWQpXG4gID8gSVxuICA6IG5ldmVyO1xuXG5jb25zdCBzeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJ1xuICAgID8gU3ltYm9sXG4gICAgOiAoa2V5OiBzdHJpbmcpID0+IGBfXyR7a2V5fSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogRGF0ZS5ub3coKSl9X19gIGFzIGFueTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKF90YWc6IFRhZyk6IFJldmlzaW9uIHtcbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICByZXR1cm4gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBUaGlzIGVudW0gcmVwcmVzZW50cyBhbGwgb2YgdGhlIHBvc3NpYmxlIHRhZyB0eXBlcyBmb3IgdGhlIG1vbm9tb3JwaGljIHRhZyBjbGFzcy5cbiAqIE90aGVyIGN1c3RvbSB0YWcgY2xhc3NlcyBjYW4gZXhpc3QsIHN1Y2ggYXMgQ3VycmVudFRhZyBhbmQgVm9sYXRpbGVUYWcsIGJ1dCBmb3JcbiAqIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGFueSB0eXBlIG9mIHRhZyB0aGF0IGlzIG1lYW50IHRvIGJlIHVzZWQgZnJlcXVlbnRseSBzaG91bGRcbiAqIGJlIGFkZGVkIHRvIHRoZSBtb25vbW9ycGhpYyB0YWcuXG4gKi9cbmNvbnN0IGVudW0gTW9ub21vcnBoaWNUYWdUeXBlcyB7XG4gIERpcnR5YWJsZSxcbiAgVXBkYXRhYmxlLFxuICBDb21iaW5hdG9yLFxuICBDb25zdGFudCxcbn1cblxuY29uc3QgVFlQRTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX1RZUEUnKTtcblxuZXhwb3J0IGxldCBBTExPV19DWUNMRVM6IFdlYWtTZXQ8VXBkYXRhYmxlVGFnPjtcblxuaWYgKERFQlVHKSB7XG4gIEFMTE9XX0NZQ0xFUyA9IG5ldyBXZWFrU2V0KCk7XG59XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ0Jhc2U8VCBleHRlbmRzIE1vbm9tb3JwaGljVGFnVHlwZXM+IGV4dGVuZHMgVGFnIHtcbiAgW1RZUEVdOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcnR5YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5hdG9yVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcj4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudD4ge31cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnTWFwcGluZyB7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZV06IERpcnR5YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlXTogVXBkYXRhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yXTogQ29tYmluYXRvclRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnRdOiBDb25zdGFudFRhZztcbn1cblxudHlwZSBNb25vbW9ycGhpY1RhZyA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdNYXBwaW5nW01vbm9tb3JwaGljVGFnVHlwZXNdPjtcbnR5cGUgTW9ub21vcnBoaWNUYWdUeXBlID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ1R5cGVzPjtcblxuY2xhc3MgTW9ub21vcnBoaWNUYWdJbXBsIGltcGxlbWVudHMgTW9ub21vcnBoaWNUYWcge1xuICBwcml2YXRlIHJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0Q2hlY2tlZCA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdFZhbHVlID0gSU5JVElBTDtcblxuICBwcml2YXRlIGlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJ0YWc6IFRhZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnRhZ3M6IFRhZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgW1RZUEVdOiBNb25vbW9ycGhpY1RhZ1R5cGU7XG5cbiAgY29uc3RydWN0b3IodHlwZTogTW9ub21vcnBoaWNUYWdUeXBlcykge1xuICAgIHRoaXNbVFlQRV0gPSB0eXBlIGFzIE1vbm9tb3JwaGljVGFnVHlwZTtcbiAgfVxuXG4gIFtDT01QVVRFXSgpOiBSZXZpc2lvbiB7XG4gICAgbGV0IHsgbGFzdENoZWNrZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgocmV2aXNpb24sIHN1YnRhZ1tDT01QVVRFXSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZShfdGFnOiBVcGRhdGFibGVUYWcsIHN1YnRhZzogVGFnKSB7XG4gICAgaWYgKERFQlVHICYmIF90YWdbVFlQRV0gIT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgdGhhdCB3YXMgbm90IHVwZGF0YWJsZScpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFRTIDMuNyBzaG91bGQgYWxsb3cgdXMgdG8gZG8gdGhpcyB2aWEgYXNzZXJ0aW9uXG4gICAgbGV0IHRhZyA9IF90YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsO1xuXG4gICAgaWYgKHN1YnRhZyA9PT0gQ09OU1RBTlRfVEFHKSB7XG4gICAgICB0YWcuc3VidGFnID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcblxuICAgICAgLy8gc3VidGFnIGNvdWxkIGJlIGFub3RoZXIgdHlwZSBvZiB0YWcsIGUuZy4gQ1VSUkVOVF9UQUcgb3IgVk9MQVRJTEVfVEFHLlxuICAgICAgLy8gSWYgc28sIGxhc3RDaGVja2VkL2xhc3RWYWx1ZSB3aWxsIGJlIHVuZGVmaW5lZCwgcmVzdWx0IGluIHRoZXNlIGJlaW5nXG4gICAgICAvLyBOYU4uIFRoaXMgaXMgZmluZSwgaXQgd2lsbCBmb3JjZSB0aGUgc3lzdGVtIHRvIHJlY29tcHV0ZS5cbiAgICAgIHRhZy5sYXN0Q2hlY2tlZCA9IE1hdGgubWluKHRhZy5sYXN0Q2hlY2tlZCwgKHN1YnRhZyBhcyBhbnkpLmxhc3RDaGVja2VkKTtcbiAgICAgIHRhZy5sYXN0VmFsdWUgPSBNYXRoLm1heCh0YWcubGFzdFZhbHVlLCAoc3VidGFnIGFzIGFueSkubGFzdFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGRpcnR5LFxuICB1cGRhdGUsXG4gIGNyZWF0ZVVwZGF0YWJsZVRhZyxcbiAgVXBkYXRhYmxlVGFnLFxuICBDT05TVEFOVF9UQUcsXG4gIGlzQ29uc3RUYWcsXG4gIENvbnN0YW50VGFnLFxufSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG50eXBlIFRhZ3MgPSBNYXA8UHJvcGVydHlLZXksIFVwZGF0YWJsZVRhZz47XG5jb25zdCBUUkFDS0VEX1RBR1MgPSBuZXcgV2Vha01hcDxvYmplY3QsIFRhZ3M+KCk7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0PFQ+KHU6IFQpOiB1IGlzIG9iamVjdCAmIFQge1xuICByZXR1cm4gdHlwZW9mIHUgPT09ICdvYmplY3QnICYmIHUgIT09IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJ0eVRhZzxUPihvYmo6IFQsIGtleToga2V5b2YgVCk6IHZvaWQge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWcgPSB0YWdGb3Iob2JqLCBrZXkpO1xuXG4gICAgaWYgKHRhZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVUYWcob2JqLCBrZXksIGNyZWF0ZVVwZGF0YWJsZVRhZygpKTtcbiAgICB9IGVsc2UgaWYgKGlzQ29uc3RUYWcodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIGNvbnN0YW50IHRhZ2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJ0eSh0YWcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogQ2FuJ3QgdXBkYXRlIGEgdGFnIGZvciBhIHByaW1pdGl2ZWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiBVcGRhdGFibGVUYWc7XG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBDb25zdGFudFRhZztcbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiBVcGRhdGFibGVUYWcgfCBDb25zdGFudFRhZyB7XG4gIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgbGV0IHRhZ3MgPSBUUkFDS0VEX1RBR1MuZ2V0KG9iaik7XG5cbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YWdzID0gbmV3IE1hcCgpO1xuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG4gICAgcmV0dXJuIHRhZztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWc8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQsIG5ld1RhZzogVXBkYXRhYmxlVGFnKTogVXBkYXRhYmxlVGFnIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFnID0gdGFnRm9yKG9iaiwga2V5KTtcblxuICAgIGlmIChpc0NvbnN0VGFnKHRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSBjb25zdGFudCB0YWdgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlKHRhZywgbmV3VGFnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSB0YWcgZm9yIGEgcHJpbWl0aXZlYCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFRhZywgY29tYmluZSwgQ09OU1RBTlRfVEFHIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZVRhZywgZGlydHkgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgdGFnRm9yLCBkaXJ0eVRhZyB9IGZyb20gJy4vbWV0YSc7XG5cbnR5cGUgT3B0aW9uPFQ+ID0gVCB8IG51bGw7XG5cbi8qKlxuICogV2hlbmV2ZXIgYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGVudGVyZWQsIHRoZSBjdXJyZW50IHRyYWNrZXIgaXNcbiAqIHNhdmVkIG9mZiBhbmQgYSBuZXcgdHJhY2tlciBpcyByZXBsYWNlZC5cbiAqXG4gKiBBbnkgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCB0cmFja2VyLlxuICpcbiAqIFdoZW4gYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGV4aXRlZCwgdGhlIHRyYWNrZXIncyB0YWdzIGFyZVxuICogY29tYmluZWQgYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgdHJhY2tlci5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBlYWNoIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaGFzIGEgdGFnXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgaW5zaWRlIG9mXG4gKiBpdHNlbGYsIGluY2x1ZGluZyBjaGlsZCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnRpZXMuXG4gKi9cbmxldCBDVVJSRU5UX1RSQUNLRVI6IE9wdGlvbjxUcmFja2VyPiA9IG51bGw7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgdGhhdCB0cmFja3MgQHRyYWNrZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgY29uc3VtZWQuXG4gKi9cbmNsYXNzIFRyYWNrZXIge1xuICBwcml2YXRlIHRhZ3MgPSBuZXcgU2V0PFRhZz4oKTtcbiAgcHJpdmF0ZSBsYXN0OiBPcHRpb248VGFnPiA9IG51bGw7XG5cbiAgYWRkKHRhZzogVGFnKSB7XG4gICAgdGhpcy50YWdzLmFkZCh0YWcpO1xuICAgIHRoaXMubGFzdCA9IHRhZztcbiAgfVxuXG4gIGNvbWJpbmUoKTogVGFnIHtcbiAgICBsZXQgeyB0YWdzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRhZ3Muc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICB9IGVsc2UgaWYgKHRhZ3Muc2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdCBhcyBUYWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YWdzQXJyOiBUYWdbXSA9IFtdO1xuICAgICAgdGFncy5mb3JFYWNoKHRhZyA9PiB0YWdzQXJyLnB1c2godGFnKSk7XG4gICAgICByZXR1cm4gY29tYmluZSh0YWdzQXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogVGFnIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgbGV0IGN1cnJlbnQgPSBuZXcgVHJhY2tlcigpO1xuXG4gIENVUlJFTlRfVFJBQ0tFUiA9IGN1cnJlbnQ7XG5cbiAgdHJ5IHtcbiAgICBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIENVUlJFTlRfVFJBQ0tFUiA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmNvbWJpbmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWUodGFnOiBUYWcpIHtcbiAgaWYgKENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbCkge1xuICAgIENVUlJFTlRfVFJBQ0tFUi5hZGQodGFnKTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBFUE9DSCA9IGNyZWF0ZVRhZygpO1xuXG5leHBvcnQgdHlwZSBHZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQpID0+IFRbS10gfCB1bmRlZmluZWQ7XG5leHBvcnQgdHlwZSBTZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQsIHZhbHVlOiBUW0tdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tlZERhdGE8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBrZXk6IEssXG4gIGluaXRpYWxpemVyPzogKCkgPT4gVFtLXVxuKTogeyBnZXR0ZXI6IEdldHRlcjxULCBLPjsgc2V0dGVyOiBTZXR0ZXI8VCwgSz4gfSB7XG4gIGxldCB2YWx1ZXMgPSBuZXcgV2Vha01hcDxULCBUW0tdPigpO1xuICBsZXQgaGFzSW5pdGlhbGl6ZXIgPSB0eXBlb2YgaW5pdGlhbGl6ZXIgPT09ICdmdW5jdGlvbic7XG5cbiAgZnVuY3Rpb24gZ2V0dGVyKHNlbGY6IFQpIHtcbiAgICBjb25zdW1lKHRhZ0ZvcihzZWxmLCBrZXkpKTtcblxuICAgIGxldCB2YWx1ZTtcblxuICAgIC8vIElmIHRoZSBmaWVsZCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCwgd2Ugc2hvdWxkIGluaXRpYWxpemUgaXRcbiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIgJiYgIXZhbHVlcy5oYXMoc2VsZikpIHtcbiAgICAgIHZhbHVlID0gaW5pdGlhbGl6ZXIhKCk7XG4gICAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZXMuZ2V0KHNlbGYpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRlcihzZWxmOiBULCB2YWx1ZTogVFtLXSk6IHZvaWQge1xuICAgIGRpcnR5KEVQT0NIKTtcbiAgICBkaXJ0eVRhZyhzZWxmLCBrZXkpO1xuICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgZ2V0dGVyLCBzZXR0ZXIgfTtcbn1cbiJdLCJuYW1lcyI6WyJfY29tYmluZSIsInZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7O0lBV0EsSUFBTSxTQUNKLE9BQUEsTUFBQSxLQUFBLFdBQUEsR0FBQSxNQUFBLEdBRUk7SUFBQSxrQkFBc0IsR0FBdEIsR0FBNEIsS0FBQSxLQUFBLENBQVcsS0FBQSxNQUFBLEtBQWdCLEtBSDdELEdBRzZELEVBQTNCLENBQTVCO0lBQUEsQ0FITjtBQVNBLFFBQWEsV0FBTixDQUFBO0FBQ1AsUUFBYSxVQUFOLENBQUE7QUFDUCxRQUFhLFdBQU4sZ0JBQUE7SUFFUCxJQUFJLFlBQUosT0FBQTtBQUVBLElBQU0sU0FBQSxJQUFBLEdBQWM7SUFDbEI7SUFDRDtJQUVEO0FBRUEsUUFBYSxVQUF5QixPQUEvQixhQUErQixDQUEv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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpbW1lci12YWxpZGF0b3IuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdXRpbHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci92YWxpZGF0b3IvbGliL2RlYnVnLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvdmFsaWRhdG9yL2xpYi92YWxpZGF0b3JzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvdmFsaWRhdG9yL2xpYi9tZXRhLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvdmFsaWRhdG9yL2xpYi90cmFja2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzICgoXG4gIGs6IGluZmVyIElcbikgPT4gdm9pZClcbiAgPyBJXG4gIDogbmV2ZXI7XG5cbi8vIFRoaXMgaXMgYSBkdXBsaWNhdGUgdXRpbGl0eSBmcm9tIEBnbGltbWVyL3V0aWwgYmVjYXVzZSBgQGdsaW1tZXIvdmFsaWRhdG9yYFxuLy8gc2hvdWxkIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEBnbGltbWVyIHBhY2thZ2VzLCBpbiBvcmRlciB0byBhdm9pZCBwdWxsaW5nXG4vLyBpbiB0eXBlcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucyBpbiBgQGdsaW1tZXIvdHJhY2tpbmdgICh3aGljaCBoYXMgcHVibGljIHR5cGVzKS5cbmV4cG9ydCBjb25zdCBzeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJ1xuICAgID8gU3ltYm9sXG4gICAgOiAoa2V5OiBzdHJpbmcpID0+IGBfXyR7a2V5fSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogRGF0ZS5ub3coKSl9X19gIGFzIGFueTtcbiIsImltcG9ydCB7IFRhZyB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5cbmludGVyZmFjZSBBdXRvdHJhY2tpbmdUcmFuc2FjdGlvblNvdXJjZURhdGEge1xuICBjb250ZXh0Pzogc3RyaW5nO1xuICBlcnJvcjogRXJyb3I7XG59XG5cbmV4cG9ydCBsZXQgcnVuSW5BdXRvdHJhY2tpbmdUcmFuc2FjdGlvbjpcbiAgfCB1bmRlZmluZWRcbiAgfCAoKGZuOiAoKSA9PiB2b2lkLCBkZWJ1Z2dpbmdDb250ZXh0Pzogc3RyaW5nIHwgZmFsc2UpID0+IHZvaWQpO1xuZXhwb3J0IGxldCBkZXByZWNhdGVNdXRhdGlvbnNJbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uOiB1bmRlZmluZWQgfCAoKGZuOiAoKSA9PiB2b2lkKSA9PiB2b2lkKTtcbmV4cG9ydCBsZXQgc2V0QXV0b3RyYWNraW5nVHJhbnNhY3Rpb25FbnY6XG4gIHwgdW5kZWZpbmVkXG4gIHwgKChlbnY6IHtcbiAgICAgIGFzc2VydD8obWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgICAgIGRlcHJlY2F0ZT8obWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgICAgIGRlYnVnTWVzc2FnZT8ob2JqPzogdW5rbm93biwga2V5TmFtZT86IHN0cmluZyk6IHN0cmluZztcbiAgICB9KSA9PiB2b2lkKTtcblxuZXhwb3J0IGxldCBhc3NlcnRUYWdOb3RDb25zdW1lZDpcbiAgfCB1bmRlZmluZWRcbiAgfCAoPFQ+KHRhZzogVGFnLCBvYmo/OiBULCBrZXlOYW1lPzoga2V5b2YgVCB8IHN0cmluZyB8IHN5bWJvbCwgZm9yY2VIYXJkRXJyb3I/OiBib29sZWFuKSA9PiB2b2lkKTtcblxuZXhwb3J0IGxldCBtYXJrVGFnQXNDb25zdW1lZDogdW5kZWZpbmVkIHwgKChfdGFnOiBUYWcsIHNvdXJjZUVycm9yOiBFcnJvcikgPT4gdm9pZCk7XG5cbmlmIChERUJVRykge1xuICBsZXQgREVQUkVDQVRFX0lOX0FVVE9UUkFDS0lOR19UUkFOU0FDVElPTiA9IGZhbHNlO1xuICBsZXQgQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OOiBXZWFrTWFwPFRhZywgQXV0b3RyYWNraW5nVHJhbnNhY3Rpb25Tb3VyY2VEYXRhPiB8IG51bGwgPSBudWxsO1xuXG4gIGxldCBkZWJ1Z2dpbmdDb250ZXh0czogc3RyaW5nW10gPSBbXTtcblxuICAvLy8vLy8vLy9cblxuICBsZXQgVFJBTlNBQ1RJT05fRU5WID0ge1xuICAgIGFzc2VydChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgZGVwcmVjYXRlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICBkZWJ1Z01lc3NhZ2Uob2JqPzogdW5rbm93biwga2V5TmFtZT86IHN0cmluZykge1xuICAgICAgbGV0IG9iak5hbWU7XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iak5hbWUgPSBvYmoubmFtZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnKHVua25vd24gY2xhc3MpJztcblxuICAgICAgICBvYmpOYW1lID0gYChhbiBpbnN0YW5jZSBvZiAke2NsYXNzTmFtZX0pYDtcbiAgICAgIH0gZWxzZSBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb2JqTmFtZSA9ICcoYW4gdW5rbm93biB0YWcpJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iak5hbWUgPSBTdHJpbmcob2JqKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRpcnR5U3RyaW5nID0ga2V5TmFtZSA/IGBcXGAke2tleU5hbWV9XFxgIG9uIFxcYCR7b2JqTmFtZX1cXGBgIDogYFxcYCR7b2JqTmFtZX1cXGBgO1xuXG4gICAgICByZXR1cm4gYFlvdSBhdHRlbXB0ZWQgdG8gdXBkYXRlICR7ZGlydHlTdHJpbmd9LCBidXQgaXQgaGFkIGFscmVhZHkgYmVlbiB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHNhbWUgY29tcHV0YXRpb24uICBBdHRlbXB0aW5nIHRvIHVwZGF0ZSBhIHZhbHVlIGFmdGVyIHVzaW5nIGl0IGluIGEgY29tcHV0YXRpb24gY2FuIGNhdXNlIGxvZ2ljYWwgZXJyb3JzLCBpbmZpbml0ZSByZXZhbGlkYXRpb24gYnVncywgYW5kIHBlcmZvcm1hbmNlIGlzc3VlcywgYW5kIGlzIG5vdCBzdXBwb3J0ZWQuYDtcbiAgICB9LFxuICB9O1xuXG4gIHNldEF1dG90cmFja2luZ1RyYW5zYWN0aW9uRW52ID0gZW52ID0+IE9iamVjdC5hc3NpZ24oVFJBTlNBQ1RJT05fRU5WLCBlbnYpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZ2xvYmFsIGF1dG90cmFja2luZyB0cmFuc2FjdGlvbi4gVGhpcyB3aWxsIHByZXZlbnQgYW55IGJhY2tmbG93XG4gICAqIGluIGFueSBgdHJhY2tgIGNhbGxzIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24sIGV2ZW4gaWYgdGhleSBhcmUgbm90XG4gICAqIGV4dGVybmFsbHkgY29uc3VtZWQuXG4gICAqXG4gICAqIGBydW5JbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uYCBjYW4gYmUgY2FsbGVkIHdpdGhpbiBpdHNlbGYsIGFuZCBpdCB3aWxsIGFkZFxuICAgKiBvbnRvIHRoZSBleGlzdGluZyB0cmFuc2FjdGlvbiBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBUT0RPOiBPbmx5IHRocm93IGFuIGVycm9yIGlmIHRoZSBgdHJhY2tgIGlzIGNvbnN1bWVkLlxuICAgKi9cbiAgcnVuSW5BdXRvdHJhY2tpbmdUcmFuc2FjdGlvbiA9IChmbjogKCkgPT4gdm9pZCwgZGVidWdnaW5nQ29udGV4dD86IHN0cmluZyB8IGZhbHNlKSA9PiB7XG4gICAgbGV0IHByZXZpb3VzRGVwcmVjYXRlU3RhdGUgPSBERVBSRUNBVEVfSU5fQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OO1xuICAgIGxldCBwcmV2aW91c1RyYW5zYWN0aW9uU3RhdGUgPSBBVVRPVFJBQ0tJTkdfVFJBTlNBQ1RJT047XG5cbiAgICBERVBSRUNBVEVfSU5fQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OID0gZmFsc2U7XG5cbiAgICBpZiAocHJldmlvdXNUcmFuc2FjdGlvblN0YXRlID09PSBudWxsKSB7XG4gICAgICAvLyBpZiB0aGVyZSB3YXMgbm8gdHJhbnNhY3Rpb24gc3RhcnQgaXQuIE90aGVyd2lzZSwgdGhlIHRyYW5zYWN0aW9uIGFscmVhZHkgZXhpc3RzLlxuICAgICAgQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG5cbiAgICBpZiAoZGVidWdnaW5nQ29udGV4dCkge1xuICAgICAgZGVidWdnaW5nQ29udGV4dHMhLnVuc2hpZnQoZGVidWdnaW5nQ29udGV4dCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChkZWJ1Z2dpbmdDb250ZXh0KSB7XG4gICAgICAgIGRlYnVnZ2luZ0NvbnRleHRzIS5zaGlmdCgpO1xuICAgICAgfVxuXG4gICAgICBERVBSRUNBVEVfSU5fQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OID0gcHJldmlvdXNEZXByZWNhdGVTdGF0ZTtcbiAgICAgIEFVVE9UUkFDS0lOR19UUkFOU0FDVElPTiA9IHByZXZpb3VzVHJhbnNhY3Rpb25TdGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHRvIGRlcHJlY2F0aW5nIHdpdGhpbiBhbiBhdXRvdHJhY2tpbmcgdHJhbnNhY3Rpb24sIGlmIG9uZSBleGlzdHMuXG4gICAqIElmIGBydW5JbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjYWxsYmFjayBvZiB0aGlzXG4gICAqIG1ldGhvZCwgaXQgc3dpdGNoZXMgYmFjayB0byB0aHJvd2luZyBhbiBlcnJvciwgYWxsb3dpbmcgemVicmEtc3RyaXBpbmcgb2ZcbiAgICogdGhlIHR5cGVzIG9mIGVycm9ycyB0aGF0IGFyZSB0aHJvd24uXG4gICAqXG4gICAqIERvZXMgbm90IHN0YXJ0IGFuIGF1dG90cmFja2luZyB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogTk9URTogRm9yIEVtYmVyIHVzYWdlIG9ubHksIGluIGdlbmVyYWwgeW91IHNob3VsZCBhc3NlcnQgdGhhdCB0aGVzZVxuICAgKiBpbnZhcmlhbnRzIGFyZSB0cnVlLlxuICAgKi9cbiAgZGVwcmVjYXRlTXV0YXRpb25zSW5BdXRvdHJhY2tpbmdUcmFuc2FjdGlvbiA9IChmbjogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGxldCBwcmV2aW91c0RlcHJlY2F0ZVN0YXRlID0gREVQUkVDQVRFX0lOX0FVVE9UUkFDS0lOR19UUkFOU0FDVElPTjtcbiAgICBERVBSRUNBVEVfSU5fQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBERVBSRUNBVEVfSU5fQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OID0gcHJldmlvdXNEZXByZWNhdGVTdGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IG50aEluZGV4ID0gKHN0cjogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcsIG46IG51bWJlciwgc3RhcnRpbmdQb3MgPSAtMSkgPT4ge1xuICAgIGxldCBpID0gc3RhcnRpbmdQb3M7XG5cbiAgICB3aGlsZSAobi0tID4gMCAmJiBpKysgPCBzdHIubGVuZ3RoKSB7XG4gICAgICBpID0gc3RyLmluZGV4T2YocGF0dGVybiwgaSk7XG4gICAgICBpZiAoaSA8IDApIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBpO1xuICB9O1xuXG4gIGxldCBtYWtlQXV0b3RyYWNraW5nRXJyb3JNZXNzYWdlID0gPFQ+KFxuICAgIHNvdXJjZURhdGE6IEF1dG90cmFja2luZ1RyYW5zYWN0aW9uU291cmNlRGF0YSxcbiAgICBvYmo/OiBULFxuICAgIGtleU5hbWU/OiBrZXlvZiBUIHwgc3RyaW5nIHwgc3ltYm9sXG4gICkgPT4ge1xuICAgIGxldCBtZXNzYWdlID0gW1RSQU5TQUNUSU9OX0VOVi5kZWJ1Z01lc3NhZ2Uob2JqLCBrZXlOYW1lICYmIFN0cmluZyhrZXlOYW1lKSldO1xuXG4gICAgaWYgKHNvdXJjZURhdGEuY29udGV4dCkge1xuICAgICAgbWVzc2FnZS5wdXNoKGBcXGAke1N0cmluZyhrZXlOYW1lKX1cXGAgd2FzIGZpcnN0IHVzZWQ6XFxuXFxuJHtzb3VyY2VEYXRhLmNvbnRleHR9YCk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZURhdGEuZXJyb3Iuc3RhY2spIHtcbiAgICAgIGxldCBzb3VyY2VTdGFjayA9IHNvdXJjZURhdGEuZXJyb3Iuc3RhY2s7XG4gICAgICBsZXQgdGhpcmRJbmRleCA9IG50aEluZGV4KHNvdXJjZVN0YWNrLCAnXFxuJywgMyk7XG4gICAgICBzb3VyY2VTdGFjayA9IHNvdXJjZVN0YWNrLnN1YnN0cih0aGlyZEluZGV4KTtcblxuICAgICAgbWVzc2FnZS5wdXNoKGBTdGFjayB0cmFjZSBmb3IgdGhlIGZpcnN0IHVzYWdlOiAke3NvdXJjZVN0YWNrfWApO1xuICAgIH1cblxuICAgIG1lc3NhZ2UucHVzaChgU3RhY2sgdHJhY2UgZm9yIHRoZSB1cGRhdGU6YCk7XG5cbiAgICByZXR1cm4gbWVzc2FnZS5qb2luKCdcXG5cXG4nKTtcbiAgfTtcblxuICBtYXJrVGFnQXNDb25zdW1lZCA9IChfdGFnOiBUYWcsIHNvdXJjZUVycm9yOiBFcnJvcikgPT4ge1xuICAgIGlmICghQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OIHx8IEFVVE9UUkFDS0lOR19UUkFOU0FDVElPTi5oYXMoX3RhZykpIHJldHVybjtcblxuICAgIEFVVE9UUkFDS0lOR19UUkFOU0FDVElPTi5zZXQoX3RhZywge1xuICAgICAgY29udGV4dDogZGVidWdnaW5nQ29udGV4dHMhLm1hcChjID0+IGMucmVwbGFjZSgvXi9nbSwgJyAgJykucmVwbGFjZSgvXiAvLCAnLScpKS5qb2luKCdcXG5cXG4nKSxcbiAgICAgIGVycm9yOiBzb3VyY2VFcnJvcixcbiAgICB9KTtcblxuICAgIC8vIFdlIG5lZWQgdG8gbWFyayB0aGUgdGFnIGFuZCBhbGwgb2YgaXRzIHN1YnRhZ3MgYXMgY29uc3VtZWQsIHNvIHdlIG5lZWQgdG9cbiAgICAvLyBjYXN0IGl0IGFuZCBhY2Nlc3MgaXRzIGludGVybmFscy4gSW4gdGhlIGZ1dHVyZSB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksXG4gICAgLy8gdGhpcyBpcyBvbmx5IGZvciBjb21wdXRlZCBwcm9wZXJ0aWVzLlxuICAgIGxldCB0YWcgPSBfdGFnIGFzIGFueTtcblxuICAgIGlmICh0YWcuc3VidGFnKSB7XG4gICAgICBtYXJrVGFnQXNDb25zdW1lZCEodGFnLnN1YnRhZywgc291cmNlRXJyb3IpO1xuICAgIH1cblxuICAgIGlmICh0YWcuc3VidGFncykge1xuICAgICAgdGFnLnN1YnRhZ3MuZm9yRWFjaCgodGFnOiBUYWcpID0+IG1hcmtUYWdBc0NvbnN1bWVkISh0YWcsIHNvdXJjZUVycm9yKSk7XG4gICAgfVxuICB9O1xuXG4gIGFzc2VydFRhZ05vdENvbnN1bWVkID0gPFQ+KFxuICAgIHRhZzogVGFnLFxuICAgIG9iaj86IFQsXG4gICAga2V5TmFtZT86IGtleW9mIFQgfCBzdHJpbmcgfCBzeW1ib2wsXG4gICAgZm9yY2VIYXJkRXJyb3I6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZVxuICApID0+IHtcbiAgICBpZiAoQVVUT1RSQUNLSU5HX1RSQU5TQUNUSU9OID09PSBudWxsKSByZXR1cm47XG5cbiAgICBsZXQgc291cmNlRGF0YSA9IEFVVE9UUkFDS0lOR19UUkFOU0FDVElPTi5nZXQodGFnKTtcblxuICAgIGlmICghc291cmNlRGF0YSkgcmV0dXJuO1xuXG4gICAgaWYgKERFUFJFQ0FURV9JTl9BVVRPVFJBQ0tJTkdfVFJBTlNBQ1RJT04gJiYgIWZvcmNlSGFyZEVycm9yKSB7XG4gICAgICBUUkFOU0FDVElPTl9FTlYuZGVwcmVjYXRlKG1ha2VBdXRvdHJhY2tpbmdFcnJvck1lc3NhZ2Uoc291cmNlRGF0YSwgb2JqLCBrZXlOYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaGFjayBtYWtlcyB0aGUgYXNzZXJ0aW9uIG1lc3NhZ2UgbmljZXIsIHdlIGNhbiBjdXQgb2ZmIHRoZSBmaXJzdFxuICAgICAgLy8gZmV3IGxpbmVzIG9mIHRoZSBzdGFjayB0cmFjZSBhbmQgbGV0IHVzZXJzIGtub3cgd2hlcmUgdGhlIGFjdHVhbCBlcnJvclxuICAgICAgLy8gb2NjdXJyZWQuXG4gICAgICB0cnkge1xuICAgICAgICBUUkFOU0FDVElPTl9FTlYuYXNzZXJ0KG1ha2VBdXRvdHJhY2tpbmdFcnJvck1lc3NhZ2Uoc291cmNlRGF0YSwgb2JqLCBrZXlOYW1lKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLnN0YWNrKSB7XG4gICAgICAgICAgbGV0IHVwZGF0ZVN0YWNrQmVnaW4gPSBlLnN0YWNrLmluZGV4T2YoJ1N0YWNrIHRyYWNlIGZvciB0aGUgdXBkYXRlOicpO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVN0YWNrQmVnaW4gIT09IC0xKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSBudGhJbmRleChlLnN0YWNrLCAnXFxuJywgMSwgdXBkYXRlU3RhY2tCZWdpbik7XG4gICAgICAgICAgICBsZXQgZW5kID0gbnRoSW5kZXgoZS5zdGFjaywgJ1xcbicsIDQsIHVwZGF0ZVN0YWNrQmVnaW4pO1xuICAgICAgICAgICAgZS5zdGFjayA9IGUuc3RhY2suc3Vic3RyKDAsIHN0YXJ0KSArIGUuc3RhY2suc3Vic3RyKGVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBVbmlvblRvSW50ZXJzZWN0aW9uLCBzeW1ib2wgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGFzc2VydFRhZ05vdENvbnN1bWVkIH0gZnJvbSAnLi9kZWJ1Zyc7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IHR5cGUgUmV2aXNpb24gPSBudW1iZXI7XG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVDogUmV2aXNpb24gPSAwO1xuZXhwb3J0IGNvbnN0IElOSVRJQUw6IFJldmlzaW9uID0gMTtcbmV4cG9ydCBjb25zdCBWT0xBVElMRTogUmV2aXNpb24gPSA5MDA3MTk5MjU0NzQwOTkxOyAvLyBNQVhfSU5UXG5cbmxldCAkUkVWSVNJT04gPSBJTklUSUFMO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVtcCgpIHtcbiAgJFJFVklTSU9OKys7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTVBVVEU6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ1RBR19DT01QVVRFJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnPFQ+IHtcbiAgW0NPTVBVVEVdKCk6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIGV4dGVuZHMgRW50aXR5VGFnPFJldmlzaW9uPiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZ2dlZDxUPiB7XG4gIHRhZzogRW50aXR5VGFnPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ2dlZCB7XG4gIHRhZzogVGFnO1xufVxuXG4vLy8vLy8vLy8vXG5cbi8qKlxuICogYHZhbHVlYCByZWNlaXZlcyBhIHRhZyBhbmQgcmV0dXJucyBhbiBvcGFxdWUgUmV2aXNpb24gYmFzZWQgb24gdGhhdCB0YWcuIFRoaXNcbiAqIHNuYXBzaG90IGNhbiB0aGVuIGxhdGVyIGJlIHBhc3NlZCB0byBgdmFsaWRhdGVgIHdpdGggdGhlIHNhbWUgdGFnIHRvXG4gKiBkZXRlcm1pbmUgaWYgdGhlIHRhZyBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlIHRpbWUgdGhhdCBgdmFsdWVgIHdhc1xuICogY2FsbGVkLlxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIGdsb2JhbCByZXZpc2lvbiBjb3VudCBkaXJlY3RseSBmb3JcbiAqIHBlcmZvcm1hbmNlIHJlYXNvbnMuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBhbmQgc2hvdWxkIG5vdCBiZVxuICogcmVsaWVkIG9uIGRpcmVjdGx5IGJ5IHVzZXJzIG9mIHRoZXNlIEFQSXMuIEluc3RlYWQsIFJldmlzaW9ucyBzaG91bGQgYmVcbiAqIHRyZWF0ZWQgYXMgaWYgdGhleSBhcmUgb3BhcXVlL3Vua25vd24sIGFuZCBzaG91bGQgb25seSBiZSBpbnRlcmFjdGVkIHdpdGggdmlhXG4gKiB0aGUgYHZhbHVlYC9gdmFsaWRhdGVgIEFQSS5cbiAqXG4gKiBAcGFyYW0gdGFnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZSh0YWc6IFRhZyk6IFJldmlzaW9uIHtcbiAgaWYgKERFQlVHKSB7XG4gICAgLy8gY29tcHV0ZSB0byBjYWNoZSB0aGUgbGF0ZXN0IHZhbHVlLCB3aGljaCB3aWxsIHByZXZlbnQgdXMgZnJvbSBkb2luZ1xuICAgIC8vIGludmFsaWQgdXBkYXRlcyBsYXRlciBvbi5cbiAgICB0YWdbQ09NUFVURV0oKTtcbiAgfVxuXG4gIHJldHVybiAkUkVWSVNJT047XG59XG5cbi8qKlxuICogYHZhbGlkYXRlYCByZWNlaXZlcyBhIHRhZyBhbmQgYSBzbmFwc2hvdCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byBgdmFsdWVgIHdpdGhcbiAqIHRoZSBzYW1lIHRhZywgYW5kIGRldGVybWluZXMgaWYgdGhlIHRhZyBpcyBzdGlsbCB2YWxpZCBjb21wYXJlZCB0byB0aGVcbiAqIHNuYXBzaG90LiBJZiB0aGUgdGFnJ3Mgc3RhdGUgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZW4sIGB2YWxpZGF0ZWAgd2lsbFxuICogcmV0dXJuIGZhbHNlLCBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gdHJ1ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhXG4gKiBjYWxjdWxhdGlvbiByZWxhdGVkIHRvIHRoZSB0YWdzIHNob3VsZCBiZSByZXJ1bi5cbiAqXG4gKiBAcGFyYW0gdGFnXG4gKiBAcGFyYW0gc25hcHNob3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKHRhZzogVGFnLCBzbmFwc2hvdDogUmV2aXNpb24pIHtcbiAgaWYgKERFQlVHKSB7XG4gICAgSVNfVkFMSURBVElORyA9IHRydWU7XG4gIH1cblxuICBsZXQgaXNWYWxpZCA9IHNuYXBzaG90ID49IHRhZ1tDT01QVVRFXSgpO1xuXG4gIGlmIChERUJVRykge1xuICAgIElTX1ZBTElEQVRJTkcgPSBmYWxzZTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBjb21wdXRlIHRvIGNhY2hlIHRoZSBsYXRlc3QgdmFsdWUsIHdoaWNoIHdpbGwgcHJldmVudCB1cyBmcm9tIGRvaW5nXG4gICAgICAvLyBpbnZhbGlkIHVwZGF0ZXMgbGF0ZXIgb24uXG4gICAgICB0YWdbQ09NUFVURV0oKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNWYWxpZDtcbn1cblxubGV0IElTX1ZBTElEQVRJTkc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBUaGlzIGVudW0gcmVwcmVzZW50cyBhbGwgb2YgdGhlIHBvc3NpYmxlIHRhZyB0eXBlcyBmb3IgdGhlIG1vbm9tb3JwaGljIHRhZyBjbGFzcy5cbiAqIE90aGVyIGN1c3RvbSB0YWcgY2xhc3NlcyBjYW4gZXhpc3QsIHN1Y2ggYXMgQ3VycmVudFRhZyBhbmQgVm9sYXRpbGVUYWcsIGJ1dCBmb3JcbiAqIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGFueSB0eXBlIG9mIHRhZyB0aGF0IGlzIG1lYW50IHRvIGJlIHVzZWQgZnJlcXVlbnRseSBzaG91bGRcbiAqIGJlIGFkZGVkIHRvIHRoZSBtb25vbW9ycGhpYyB0YWcuXG4gKi9cbmNvbnN0IGVudW0gTW9ub21vcnBoaWNUYWdUeXBlcyB7XG4gIERpcnR5YWJsZSxcbiAgVXBkYXRhYmxlLFxuICBDb21iaW5hdG9yLFxuICBDb25zdGFudCxcbn1cblxuY29uc3QgVFlQRTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX1RZUEUnKTtcblxuZXhwb3J0IGxldCBBTExPV19DWUNMRVM6IFdlYWtNYXA8VGFnLCBib29sZWFuPiB8IHVuZGVmaW5lZDtcblxuaWYgKERFQlVHKSB7XG4gIEFMTE9XX0NZQ0xFUyA9IG5ldyBXZWFrTWFwKCk7XG59XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ0Jhc2U8VCBleHRlbmRzIE1vbm9tb3JwaGljVGFnVHlwZXM+IGV4dGVuZHMgVGFnIHtcbiAgW1RZUEVdOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcnR5YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5hdG9yVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcj4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudD4ge31cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnTWFwcGluZyB7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZV06IERpcnR5YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlXTogVXBkYXRhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yXTogQ29tYmluYXRvclRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnRdOiBDb25zdGFudFRhZztcbn1cblxudHlwZSBNb25vbW9ycGhpY1RhZyA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdNYXBwaW5nW01vbm9tb3JwaGljVGFnVHlwZXNdPjtcbnR5cGUgTW9ub21vcnBoaWNUYWdUeXBlID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ1R5cGVzPjtcblxuY2xhc3MgTW9ub21vcnBoaWNUYWdJbXBsIGltcGxlbWVudHMgTW9ub21vcnBoaWNUYWcge1xuICBwcml2YXRlIHJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0Q2hlY2tlZCA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdFZhbHVlID0gSU5JVElBTDtcblxuICBwcml2YXRlIGlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJ0YWc6IFRhZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnRhZ3M6IFRhZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgW1RZUEVdOiBNb25vbW9ycGhpY1RhZ1R5cGU7XG5cbiAgY29uc3RydWN0b3IodHlwZTogTW9ub21vcnBoaWNUYWdUeXBlcykge1xuICAgIHRoaXNbVFlQRV0gPSB0eXBlIGFzIE1vbm9tb3JwaGljVGFnVHlwZTtcbiAgfVxuXG4gIFtDT01QVVRFXSgpOiBSZXZpc2lvbiB7XG4gICAgbGV0IHsgbGFzdENoZWNrZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5pc1VwZGF0aW5nID09PSB0cnVlKSB7XG4gICAgICBpZiAoREVCVUcgJiYgIUFMTE9XX0NZQ0xFUyEuaGFzKHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3ljbGVzIGluIHRhZ3MgYXJlIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSArKyRSRVZJU0lPTjtcbiAgICB9IGVsc2UgaWYgKGxhc3RDaGVja2VkICE9PSAkUkVWSVNJT04pIHtcbiAgICAgIHRoaXMuaXNVcGRhdGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChERUJVRykge1xuICAgICAgICAvLyBJbiBERUJVRywgd2UgZG9uJ3QgY2FjaGUgd2hpbGUgdmFsaWRhdGluZyBvbmx5LCBiZWNhdXNlIGl0IGlzIHZhbGlkXG4gICAgICAgIC8vIHVwZGF0ZSBhIHRhZyBiZXR3ZWVuIGNhbGxpbmcgYHZhbGlkYXRlKClgIGFuZCBgdmFsdWUoKWAuIE9uY2UgeW91XG4gICAgICAgIC8vIGNhbGwgYHZhbHVlKClgIG9uIGEgdGFnLCBpdHMgcmV2aXNpb24gaXMgZWZmZWN0aXZlbHkgbG9ja2VkIGluLCBhbmRcbiAgICAgICAgLy8gaWYgeW91IGF0dGVtcHQgdG8gdXBkYXRlIGl0IHRvIGEgdGFnIHRoYXQgaXMgbW9yZSByZWNlbnQgaXQgY291bGRcbiAgICAgICAgLy8gYnJlYWsgYXNzdW1wdGlvbnMgaW4gb3VyIHN5c3RlbS4gVGhpcyBpcyB3aHkgdGhlIGFzc2VydGlvbiBleGlzdHMgaW5cbiAgICAgICAgLy8gdGhlIHN0YXRpYyBgdXBkYXRlKClgIG1ldGhvZCBiZWxvdy5cbiAgICAgICAgaWYgKCFJU19WQUxJREFUSU5HKSB7XG4gICAgICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heChyZXZpc2lvbiwgc3VidGFnW0NPTVBVVEVdKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZShfdGFnOiBVcGRhdGFibGVUYWcsIHN1YnRhZzogVGFnKSB7XG4gICAgaWYgKERFQlVHICYmIF90YWdbVFlQRV0gIT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgdGhhdCB3YXMgbm90IHVwZGF0YWJsZScpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFRTIDMuNyBzaG91bGQgYWxsb3cgdXMgdG8gZG8gdGhpcyB2aWEgYXNzZXJ0aW9uXG4gICAgbGV0IHRhZyA9IF90YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsO1xuXG4gICAgaWYgKHN1YnRhZyA9PT0gQ09OU1RBTlRfVEFHKSB7XG4gICAgICB0YWcuc3VidGFnID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBERUJVRyAmJlxuICAgICAgICB0YWcubGFzdENoZWNrZWQgPT09ICRSRVZJU0lPTiAmJlxuICAgICAgICAoc3VidGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbClbQ09NUFVURV0oKSA+IHRhZy5sYXN0VmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0JVRzogYXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB3aXRoIGEgdGFnIHRoYXQgaGFzIGEgbW9yZSByZWNlbnQgcmV2aXNpb24gYXMgaXRzIHZhbHVlJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0YWcuc3VidGFnID0gc3VidGFnO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaXJ0eSh0YWc6IERpcnR5YWJsZVRhZyB8IFVwZGF0YWJsZVRhZykge1xuICAgIGlmIChcbiAgICAgIERFQlVHICYmXG4gICAgICAhKHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUgfHwgdGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIGRpcnR5IGEgdGFnIHRoYXQgd2FzIG5vdCBkaXJ0eWFibGUnKTtcbiAgICB9XG5cbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIC8vIFVzdWFsbHkgYnkgdGhpcyBwb2ludCwgd2UndmUgYWxyZWFkeSBhc3NlcnRlZCB3aXRoIGJldHRlciBlcnJvciBpbmZvcm1hdGlvbixcbiAgICAgIC8vIGJ1dCB0aGlzIGlzIG91ciBsYXN0IGxpbmUgb2YgZGVmZW5zZS5cbiAgICAgIGFzc2VydFRhZ05vdENvbnN1bWVkISh0YWcpO1xuICAgIH1cblxuICAgICh0YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsKS5yZXZpc2lvbiA9ICsrJFJFVklTSU9OO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkaXJ0eSA9IE1vbm9tb3JwaGljVGFnSW1wbC5kaXJ0eTtcbmV4cG9ydCBjb25zdCB1cGRhdGUgPSBNb25vbW9ycGhpY1RhZ0ltcGwudXBkYXRlO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWcoKTogRGlydHlhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXBkYXRhYmxlVGFnKCk6IFVwZGF0YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlKTtcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlRfVEFHID0gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50KSBhcyBDb25zdGFudFRhZztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3QoeyB0YWcgfTogVGFnZ2VkKTogYm9vbGVhbiB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RUYWcodGFnOiBUYWcpOiB0YWcgaXMgQ29uc3RhbnRUYWcge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgVm9sYXRpbGVUYWcgaW1wbGVtZW50cyBUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuIFZPTEFUSUxFO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBWT0xBVElMRV9UQUcgPSBuZXcgVm9sYXRpbGVUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBDdXJyZW50VGFnIGltcGxlbWVudHMgQ3VycmVudFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gJFJFVklTSU9OO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBDVVJSRU5UX1RBRyA9IG5ldyBDdXJyZW50VGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUodGFnczogVGFnW10pOiBUYWcge1xuICBsZXQgb3B0aW1pemVkOiBUYWdbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gdGFncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgdGFnID0gdGFnc1tpXTtcbiAgICBpZiAodGFnID09PSBDT05TVEFOVF9UQUcpIGNvbnRpbnVlO1xuICAgIG9wdGltaXplZC5wdXNoKHRhZyk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQ29tYmluYXRvclRhZyhvcHRpbWl6ZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tYmluYXRvclRhZyh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIHN3aXRjaCAodGFncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB0YWdzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsZXQgdGFnID0gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3IpIGFzIENvbWJpbmF0b3JUYWc7XG4gICAgICAodGFnIGFzIGFueSkuc3VidGFncyA9IHRhZ3M7XG4gICAgICByZXR1cm4gdGFnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBkaXJ0eSwgY3JlYXRlVXBkYXRhYmxlVGFnLCBVcGRhdGFibGVUYWcsIENPTlNUQU5UX1RBRywgQ29uc3RhbnRUYWcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuZXhwb3J0IGxldCBwcm9wZXJ0eURpZENoYW5nZSA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eURpZENoYW5nZShjYjogKCkgPT4gdm9pZCkge1xuICBwcm9wZXJ0eURpZENoYW5nZSA9IGNiO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdDxUPih1OiBUKTogdSBpcyBvYmplY3QgJiBUIHtcbiAgcmV0dXJuICh0eXBlb2YgdSA9PT0gJ29iamVjdCcgJiYgdSAhPT0gbnVsbCkgfHwgdHlwZW9mIHUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vLy8vLy8vLy8vXG5cbnR5cGUgVGFncyA9IE1hcDxQcm9wZXJ0eUtleSwgVXBkYXRhYmxlVGFnPjtcblxuY29uc3QgVFJBQ0tFRF9UQUdTID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWdzPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlydHlUYWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQgfCBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFncyA9IFRSQUNLRURfVEFHUy5nZXQob2JqKTtcblxuICAgIC8vIE5vIHRhZ3MgaGF2ZSBiZWVuIHNldHVwIGZvciB0aGlzIG9iamVjdCB5ZXQsIHJldHVyblxuICAgIGlmICh0YWdzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIERpcnR5IHRoZSB0YWcgZm9yIHRoZSBzcGVjaWZpYyBwcm9wZXJ0eSBpZiBpdCBleGlzdHNcbiAgICBsZXQgcHJvcGVydHlUYWcgPSB0YWdzLmdldChrZXkpO1xuXG4gICAgaWYgKHByb3BlcnR5VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChERUJVRykge1xuICAgICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEocHJvcGVydHlUYWcsIG9iaiwga2V5KTtcbiAgICAgIH1cblxuICAgICAgZGlydHkocHJvcGVydHlUYWcpO1xuICAgICAgcHJvcGVydHlEaWRDaGFuZ2UoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIHRhZyBmb3IgYSBwcmltaXRpdmVgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUIHwgc3RyaW5nIHwgc3ltYm9sKTogVXBkYXRhYmxlVGFnIHwgQ29uc3RhbnRUYWcge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWdzID0gVFJBQ0tFRF9UQUdTLmdldChvYmopO1xuXG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFncyA9IG5ldyBNYXAoKTtcblxuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gIH1cbn1cbiIsImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFRhZywgY29tYmluZSwgY3JlYXRlVGFnLCBkaXJ0eSwgQ09OU1RBTlRfVEFHIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IHRhZ0ZvciwgZGlydHlUYWdGb3IgfSBmcm9tICcuL21ldGEnO1xuaW1wb3J0IHsgbWFya1RhZ0FzQ29uc3VtZWQsIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sIGFzc2VydFRhZ05vdENvbnN1bWVkIH0gZnJvbSAnLi9kZWJ1Zyc7XG5cbnR5cGUgT3B0aW9uPFQ+ID0gVCB8IG51bGw7XG5cbi8qKlxuICogV2hlbmV2ZXIgYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGVudGVyZWQsIHRoZSBjdXJyZW50IHRyYWNrZXIgaXNcbiAqIHNhdmVkIG9mZiBhbmQgYSBuZXcgdHJhY2tlciBpcyByZXBsYWNlZC5cbiAqXG4gKiBBbnkgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCB0cmFja2VyLlxuICpcbiAqIFdoZW4gYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGV4aXRlZCwgdGhlIHRyYWNrZXIncyB0YWdzIGFyZVxuICogY29tYmluZWQgYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgdHJhY2tlci5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBlYWNoIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaGFzIGEgdGFnXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgaW5zaWRlIG9mXG4gKiBpdHNlbGYsIGluY2x1ZGluZyBjaGlsZCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnRpZXMuXG4gKi9cbmxldCBDVVJSRU5UX1RSQUNLRVI6IE9wdGlvbjxUcmFja2VyPiA9IG51bGw7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgdGhhdCB0cmFja3MgQHRyYWNrZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgY29uc3VtZWQuXG4gKi9cbmNsYXNzIFRyYWNrZXIge1xuICBwcml2YXRlIHRhZ3MgPSBuZXcgU2V0PFRhZz4oKTtcbiAgcHJpdmF0ZSBsYXN0OiBPcHRpb248VGFnPiA9IG51bGw7XG5cbiAgYWRkKHRhZzogVGFnKSB7XG4gICAgdGhpcy50YWdzLmFkZCh0YWcpO1xuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBtYXJrVGFnQXNDb25zdW1lZCEodGFnLCBuZXcgRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gdGFnO1xuICB9XG5cbiAgY29tYmluZSgpOiBUYWcge1xuICAgIGxldCB7IHRhZ3MgfSA9IHRoaXM7XG5cbiAgICBpZiAodGFncy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICAgIH0gZWxzZSBpZiAodGFncy5zaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0IGFzIFRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhZ3NBcnI6IFRhZ1tdID0gW107XG4gICAgICB0YWdzLmZvckVhY2godGFnID0+IHRhZ3NBcnIucHVzaCh0YWcpKTtcbiAgICAgIHJldHVybiBjb21iaW5lKHRhZ3NBcnIpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCwgZGVidWdnaW5nQ29udGV4dD86IHN0cmluZyB8IGZhbHNlKTogVGFnIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgbGV0IGN1cnJlbnQgPSBuZXcgVHJhY2tlcigpO1xuXG4gIENVUlJFTlRfVFJBQ0tFUiA9IGN1cnJlbnQ7XG5cbiAgdHJ5IHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24hKGNhbGxiYWNrLCBkZWJ1Z2dpbmdDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSID0gcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQuY29tYmluZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZSh0YWc6IFRhZykge1xuICBpZiAoQ1VSUkVOVF9UUkFDS0VSICE9PSBudWxsKSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSLmFkZCh0YWcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYWNraW5nKCkge1xuICByZXR1cm4gQ1VSUkVOVF9UUkFDS0VSICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW50cmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICBsZXQgcGFyZW50ID0gQ1VSUkVOVF9UUkFDS0VSO1xuICBDVVJSRU5UX1RSQUNLRVIgPSBudWxsO1xuXG4gIHRyeSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBDVVJSRU5UX1RSQUNLRVIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgRVBPQ0ggPSBjcmVhdGVUYWcoKTtcblxuZXhwb3J0IHR5cGUgR2V0dGVyPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IChzZWxmOiBUKSA9PiBUW0tdIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgU2V0dGVyPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IChzZWxmOiBULCB2YWx1ZTogVFtLXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrZWREYXRhPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAga2V5OiBLLFxuICBpbml0aWFsaXplcj86ICgpID0+IFRbS11cbik6IHsgZ2V0dGVyOiBHZXR0ZXI8VCwgSz47IHNldHRlcjogU2V0dGVyPFQsIEs+IH0ge1xuICBsZXQgdmFsdWVzID0gbmV3IFdlYWtNYXA8VCwgVFtLXT4oKTtcbiAgbGV0IGhhc0luaXRpYWxpemVyID0gdHlwZW9mIGluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nO1xuXG4gIGZ1bmN0aW9uIGdldHRlcihzZWxmOiBUKSB7XG4gICAgY29uc3VtZSh0YWdGb3Ioc2VsZiwga2V5KSk7XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICAvLyBJZiB0aGUgZmllbGQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQsIHdlIHNob3VsZCBpbml0aWFsaXplIGl0XG4gICAgaWYgKGhhc0luaXRpYWxpemVyICYmICF2YWx1ZXMuaGFzKHNlbGYpKSB7XG4gICAgICB2YWx1ZSA9IGluaXRpYWxpemVyISgpO1xuICAgICAgdmFsdWVzLnNldChzZWxmLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdmFsdWVzLmdldChzZWxmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0ZXIoc2VsZjogVCwgdmFsdWU6IFRbS10pOiB2b2lkIHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIGFzc2VydFRhZ05vdENvbnN1bWVkISh0YWdGb3Ioc2VsZiwga2V5KSwgc2VsZiwga2V5LCB0cnVlKTtcbiAgICB9XG5cbiAgICBkaXJ0eShFUE9DSCk7XG4gICAgZGlydHlUYWdGb3Ioc2VsZiwga2V5KTtcbiAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7IGdldHRlciwgc2V0dGVyIH07XG59XG4iXSwibmFtZXMiOlsicnVuSW5BdXRvdHJhY2tpbmdUcmFuc2FjdGlvbiIsImRlcHJlY2F0ZU11dGF0aW9uc0luQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24iLCJzZXRBdXRvdHJhY2tpbmdUcmFuc2FjdGlvbkVudiIsIkRFQlVHIiwiZW52IiwiQUxMT1dfQ1lDTEVTIiwiX2NvbWJpbmUiLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6Ijs7O0VBT0E7RUFDQTtBQUNBLEVBQU8sSUFBTSxTQUNYLE9BQUEsTUFBQSxLQUFBLFdBQUEsR0FBQSxNQUFBLEdBRUk7RUFBQSxnQkFBc0IsR0FBdEIsR0FBNEIsS0FBQSxLQUFBLENBQVcsS0FBQSxNQUFBLEtBQWdCLEtBSHRELEdBR3NELEVBQTNCLENBQTVCO0VBQUEsQ0FIQzs7QUNEQUEsK0NBQUE7QUFHUCxBQUFPQyw4REFBQTtBQUNQLEFBQU9DLGdEQUFBO0FBUVAsRUFBTyxJQUFBLDZCQUFBO0VBSUEsSUFBQSwyQkFBQTtFQUVQLElBQUFDLFNBQUEsRUFBVztFQUNULFFBQUksd0NBQUosS0FBQTtFQUNBLFFBQUksMkJBQUosSUFBQTtFQUVBLFFBQUksb0JBQUosRUFBQTtFQUVBO0VBRUEsUUFBSSxrQkFBa0I7RUFDcEIsY0FEb0Isa0JBQ3BCLE9BRG9CLEVBQ0U7RUFDcEIsa0JBQU0sSUFBQSxLQUFBLENBQU4sT0FBTSxDQUFOO0VBRmtCLFNBQUE7RUFLcEIsaUJBTG9CLHFCQUtwQixPQUxvQixFQUtLO0VBQ3ZCLG9CQUFBLElBQUEsQ0FBQSxPQUFBO0VBTmtCLFNBQUE7RUFTcEIsb0JBVG9CLHdCQVNwQixHQVRvQixFQVNwQixPQVRvQixFQVN3QjtFQUMxQyxnQkFBQSxnQkFBQTtFQUVB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

@@ -126,6 +126,6 @@ 'use strict';

Object.defineProperty(exports, 'dirtyTag', {
Object.defineProperty(exports, 'dirtyTagFor', {
enumerable: true,
get: function () {
return _meta.dirtyTag;
return _meta.dirtyTagFor;
}

@@ -139,6 +139,6 @@ });

});
Object.defineProperty(exports, 'updateTag', {
Object.defineProperty(exports, 'setPropertyDidChange', {
enumerable: true,
get: function () {
return _meta.updateTag;
return _meta.setPropertyDidChange;
}

@@ -149,8 +149,2 @@ });

Object.defineProperty(exports, 'track', {
enumerable: true,
get: function () {
return _tracking.track;
}
});
Object.defineProperty(exports, 'consume', {

@@ -168,2 +162,14 @@ enumerable: true,

});
Object.defineProperty(exports, 'isTracking', {
enumerable: true,
get: function () {
return _tracking.isTracking;
}
});
Object.defineProperty(exports, 'track', {
enumerable: true,
get: function () {
return _tracking.track;
}
});
Object.defineProperty(exports, 'trackedData', {

@@ -175,2 +181,29 @@ enumerable: true,

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFBQSxJOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLE87Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLG1COzs7Ozs7dUJBQUEsUzs7Ozs7O3VCQUFBLGtCOzs7Ozs7dUJBQUEsVzs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxPOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLFU7Ozs7Ozt1QkFBQSxNOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7Ozs7O2lCQStCQSxROzs7Ozs7aUJBQUEsTTs7Ozs7O2lCQUFBLFM7Ozs7Ozs7OztxQkFFQSxLOzs7Ozs7cUJBQUEsTzs7Ozs7O3FCQUFBLEs7Ozs7OztxQkFBQSxXIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWcsIHRhZ0ZvciwgdXBkYXRlVGFnIH0gZnJvbSAnLi9saWIvbWV0YSc7XG5cbmV4cG9ydCB7IHRyYWNrLCBjb25zdW1lLCBFUE9DSCwgdHJhY2tlZERhdGEgfSBmcm9tICcuL2xpYi90cmFja2luZyc7XG4iXSwic291cmNlUm9vdCI6IiJ9
Object.defineProperty(exports, 'untrack', {
enumerable: true,
get: function () {
return _tracking.untrack;
}
});
var _debug = require('./lib/debug');
Object.defineProperty(exports, 'setAutotrackingTransactionEnv', {
enumerable: true,
get: function () {
return _debug.setAutotrackingTransactionEnv;
}
});
Object.defineProperty(exports, 'runInAutotrackingTransaction', {
enumerable: true,
get: function () {
return _debug.runInAutotrackingTransaction;
}
});
Object.defineProperty(exports, 'deprecateMutationsInAutotrackingTransaction', {
enumerable: true,
get: function () {
return _debug.deprecateMutationsInAutotrackingTransaction;
}
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFBQSxJOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLE87Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLG1COzs7Ozs7dUJBQUEsUzs7Ozs7O3VCQUFBLGtCOzs7Ozs7dUJBQUEsVzs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxPOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLFU7Ozs7Ozt1QkFBQSxNOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7Ozs7O2lCQStCQSxXOzs7Ozs7aUJBQUEsTTs7Ozs7O2lCQUFBLG9COzs7Ozs7Ozs7cUJBRUEsTzs7Ozs7O3FCQUFBLEs7Ozs7OztxQkFBQSxVOzs7Ozs7cUJBQUEsSzs7Ozs7O3FCQUFBLFc7Ozs7OztxQkFBQSxPOzs7Ozs7Ozs7a0JBRUEsNkI7Ozs7OztrQkFBQSw0Qjs7Ozs7O2tCQUFBLDJDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWdGb3IsIHRhZ0Zvciwgc2V0UHJvcGVydHlEaWRDaGFuZ2UgfSBmcm9tICcuL2xpYi9tZXRhJztcblxuZXhwb3J0IHsgY29uc3VtZSwgRVBPQ0gsIGlzVHJhY2tpbmcsIHRyYWNrLCB0cmFja2VkRGF0YSwgdW50cmFjayB9IGZyb20gJy4vbGliL3RyYWNraW5nJztcblxuZXhwb3J0IHtcbiAgc2V0QXV0b3RyYWNraW5nVHJhbnNhY3Rpb25FbnYsXG4gIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG4gIGRlcHJlY2F0ZU11dGF0aW9uc0luQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG59IGZyb20gJy4vbGliL2RlYnVnJztcbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -6,21 +6,34 @@ 'use strict';

});
exports.dirtyTag = dirtyTag;
exports.propertyDidChange = undefined;
exports.setPropertyDidChange = setPropertyDidChange;
exports.dirtyTagFor = dirtyTagFor;
exports.tagFor = tagFor;
exports.updateTag = updateTag;
var _env = require('@glimmer/env');
var _validators = require('./validators');
const TRACKED_TAGS = new WeakMap();
var _debug = require('./debug');
let propertyDidChange = exports.propertyDidChange = function () {};
function setPropertyDidChange(cb) {
exports.propertyDidChange = propertyDidChange = cb;
}
function isObject(u) {
return typeof u === 'object' && u !== null;
return typeof u === 'object' && u !== null || typeof u === 'function';
}
function dirtyTag(obj, key) {
const TRACKED_TAGS = new WeakMap();
function dirtyTagFor(obj, key) {
if (isObject(obj)) {
let tag = tagFor(obj, key);
if (tag === undefined) {
updateTag(obj, key, (0, _validators.createUpdatableTag)());
} else if ((0, _validators.isConstTag)(tag)) {
throw new Error(`BUG: Can't update a constant tag`);
} else {
(0, _validators.dirty)(tag);
let tags = TRACKED_TAGS.get(obj);
// No tags have been setup for this object yet, return
if (tags === undefined) return;
// Dirty the tag for the specific property if it exists
let propertyTag = tags.get(key);
if (propertyTag !== undefined) {
if (_env.DEBUG) {
(0, _debug.assertTagNotConsumed)(propertyTag, obj, key);
}
(0, _validators.dirty)(propertyTag);
propertyDidChange();
}

@@ -47,15 +60,2 @@ } else {

}
function updateTag(obj, key, newTag) {
if (isObject(obj)) {
let tag = tagFor(obj, key);
if ((0, _validators.isConstTag)(tag)) {
throw new Error(`BUG: Can't update a constant tag`);
} else {
(0, _validators.update)(tag, newTag);
}
return tag;
} else {
throw new Error(`BUG: Can't update a tag for a primitive`);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQWlCTSxRLEdBQUEsUTtRQWtCQSxNLEdBQUEsTTtRQW1CQSxTLEdBQUEsUzs7OztBQTNDTixNQUFNLGVBQWUsSUFBckIsT0FBcUIsRUFBckI7QUFFQSxTQUFBLFFBQUEsQ0FBQSxDQUFBLEVBQXlCO0FBQ3ZCLFdBQU8sT0FBQSxDQUFBLEtBQUEsUUFBQSxJQUF5QixNQUFoQyxJQUFBO0FBQ0Q7QUFFSyxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxFQUEwQztBQUM5QyxRQUFJLFNBQUosR0FBSSxDQUFKLEVBQW1CO0FBQ2pCLFlBQUksTUFBTSxPQUFBLEdBQUEsRUFBVixHQUFVLENBQVY7QUFFQSxZQUFJLFFBQUosU0FBQSxFQUF1QjtBQUNyQixzQkFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLHFDQUFBO0FBREYsU0FBQSxNQUVPLElBQUksNEJBQUosR0FBSSxDQUFKLEVBQXFCO0FBQzFCLGtCQUFNLElBQUEsS0FBQSxDQUFOLGtDQUFNLENBQU47QUFESyxTQUFBLE1BRUE7QUFDTCxtQ0FBQSxHQUFBO0FBQ0Q7QUFUSCxLQUFBLE1BVU87QUFDTCxjQUFNLElBQUEsS0FBQSxDQUFOLHlDQUFNLENBQU47QUFDRDtBQUNGO0FBSUssU0FBQSxNQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBd0M7QUFDNUMsUUFBSSxTQUFKLEdBQUksQ0FBSixFQUFtQjtBQUNqQixZQUFJLE9BQU8sYUFBQSxHQUFBLENBQVgsR0FBVyxDQUFYO0FBRUEsWUFBSSxTQUFKLFNBQUEsRUFBd0I7QUFDdEIsbUJBQU8sSUFBUCxHQUFPLEVBQVA7QUFDQSx5QkFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLElBQUE7QUFGRixTQUFBLE1BR08sSUFBSSxLQUFBLEdBQUEsQ0FBSixHQUFJLENBQUosRUFBbUI7QUFDeEIsbUJBQU8sS0FBQSxHQUFBLENBQVAsR0FBTyxDQUFQO0FBQ0Q7QUFFRCxZQUFJLE1BQUoscUNBQUE7QUFDQSxhQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQTtBQUNBLGVBQUEsR0FBQTtBQVpGLEtBQUEsTUFhTztBQUNMLGVBQUEsd0JBQUE7QUFDRDtBQUNGO0FBRUssU0FBQSxTQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxNQUFBLEVBQWlFO0FBQ3JFLFFBQUksU0FBSixHQUFJLENBQUosRUFBbUI7QUFDakIsWUFBSSxNQUFNLE9BQUEsR0FBQSxFQUFWLEdBQVUsQ0FBVjtBQUVBLFlBQUksNEJBQUosR0FBSSxDQUFKLEVBQXFCO0FBQ25CLGtCQUFNLElBQUEsS0FBQSxDQUFOLGtDQUFNLENBQU47QUFERixTQUFBLE1BRU87QUFDTCxvQ0FBQSxHQUFBLEVBQUEsTUFBQTtBQUNEO0FBRUQsZUFBQSxHQUFBO0FBVEYsS0FBQSxNQVVPO0FBQ0wsY0FBTSxJQUFBLEtBQUEsQ0FBTix5Q0FBTSxDQUFOO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRpcnR5LFxuICB1cGRhdGUsXG4gIGNyZWF0ZVVwZGF0YWJsZVRhZyxcbiAgVXBkYXRhYmxlVGFnLFxuICBDT05TVEFOVF9UQUcsXG4gIGlzQ29uc3RUYWcsXG4gIENvbnN0YW50VGFnLFxufSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG50eXBlIFRhZ3MgPSBNYXA8UHJvcGVydHlLZXksIFVwZGF0YWJsZVRhZz47XG5jb25zdCBUUkFDS0VEX1RBR1MgPSBuZXcgV2Vha01hcDxvYmplY3QsIFRhZ3M+KCk7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0PFQ+KHU6IFQpOiB1IGlzIG9iamVjdCAmIFQge1xuICByZXR1cm4gdHlwZW9mIHUgPT09ICdvYmplY3QnICYmIHUgIT09IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJ0eVRhZzxUPihvYmo6IFQsIGtleToga2V5b2YgVCk6IHZvaWQge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWcgPSB0YWdGb3Iob2JqLCBrZXkpO1xuXG4gICAgaWYgKHRhZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVUYWcob2JqLCBrZXksIGNyZWF0ZVVwZGF0YWJsZVRhZygpKTtcbiAgICB9IGVsc2UgaWYgKGlzQ29uc3RUYWcodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIGNvbnN0YW50IHRhZ2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJ0eSh0YWcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogQ2FuJ3QgdXBkYXRlIGEgdGFnIGZvciBhIHByaW1pdGl2ZWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiBVcGRhdGFibGVUYWc7XG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBDb25zdGFudFRhZztcbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiBVcGRhdGFibGVUYWcgfCBDb25zdGFudFRhZyB7XG4gIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgbGV0IHRhZ3MgPSBUUkFDS0VEX1RBR1MuZ2V0KG9iaik7XG5cbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YWdzID0gbmV3IE1hcCgpO1xuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG4gICAgcmV0dXJuIHRhZztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWc8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQsIG5ld1RhZzogVXBkYXRhYmxlVGFnKTogVXBkYXRhYmxlVGFnIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFnID0gdGFnRm9yKG9iaiwga2V5KTtcblxuICAgIGlmIChpc0NvbnN0VGFnKHRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSBjb25zdGFudCB0YWdgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlKHRhZywgbmV3VGFnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSB0YWcgZm9yIGEgcHJpbWl0aXZlYCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFNTSxvQixHQUFBLG9CO1FBY0EsVyxHQUFBLFc7UUF1QkEsTSxHQUFBLE07Ozs7QUExQ047O0FBQ0E7O0FBRU8sSUFBSSxnREFBb0IsWUFBQSxDQUF4QixDQUFBO0FBRUQsU0FBQSxvQkFBQSxDQUFBLEVBQUEsRUFBNkM7QUFDakQsWUFIUyxpQkFHVCx1QkFBQSxFQUFBO0FBQ0Q7QUFFRCxTQUFBLFFBQUEsQ0FBQSxDQUFBLEVBQXlCO0FBQ3ZCLFdBQVEsT0FBQSxDQUFBLEtBQUEsUUFBQSxJQUF5QixNQUExQixJQUFDLElBQXdDLE9BQUEsQ0FBQSxLQUFoRCxVQUFBO0FBQ0Q7QUFNRCxNQUFNLGVBQWUsSUFBckIsT0FBcUIsRUFBckI7QUFFTSxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxFQUErRDtBQUNuRSxRQUFJLFNBQUosR0FBSSxDQUFKLEVBQW1CO0FBQ2pCLFlBQUksT0FBTyxhQUFBLEdBQUEsQ0FBWCxHQUFXLENBQVg7QUFFQTtBQUNBLFlBQUksU0FBSixTQUFBLEVBQXdCO0FBRXhCO0FBQ0EsWUFBSSxjQUFjLEtBQUEsR0FBQSxDQUFsQixHQUFrQixDQUFsQjtBQUVBLFlBQUksZ0JBQUosU0FBQSxFQUErQjtBQUM3QixnQkFBQSxVQUFBLEVBQVc7QUFDVCxpREFBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUE7QUFDRDtBQUVELG1DQUFBLFdBQUE7QUFDQTtBQUNEO0FBaEJILEtBQUEsTUFpQk87QUFDTCxjQUFNLElBQUEsS0FBQSxDQUFOLHlDQUFNLENBQU47QUFDRDtBQUNGO0FBRUssU0FBQSxNQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBMEQ7QUFDOUQsUUFBSSxTQUFKLEdBQUksQ0FBSixFQUFtQjtBQUNqQixZQUFJLE9BQU8sYUFBQSxHQUFBLENBQVgsR0FBVyxDQUFYO0FBRUEsWUFBSSxTQUFKLFNBQUEsRUFBd0I7QUFDdEIsbUJBQU8sSUFBUCxHQUFPLEVBQVA7QUFFQSx5QkFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLElBQUE7QUFIRixTQUFBLE1BSU8sSUFBSSxLQUFBLEdBQUEsQ0FBSixHQUFJLENBQUosRUFBbUI7QUFDeEIsbUJBQU8sS0FBQSxHQUFBLENBQVAsR0FBTyxDQUFQO0FBQ0Q7QUFFRCxZQUFJLE1BQUoscUNBQUE7QUFDQSxhQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQTtBQUVBLGVBQUEsR0FBQTtBQWRGLEtBQUEsTUFlTztBQUNMLGVBQUEsd0JBQUE7QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgZGlydHksIGNyZWF0ZVVwZGF0YWJsZVRhZywgVXBkYXRhYmxlVGFnLCBDT05TVEFOVF9UQUcsIENvbnN0YW50VGFnIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IGFzc2VydFRhZ05vdENvbnN1bWVkIH0gZnJvbSAnLi9kZWJ1Zyc7XG5cbmV4cG9ydCBsZXQgcHJvcGVydHlEaWRDaGFuZ2UgPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHlEaWRDaGFuZ2UoY2I6ICgpID0+IHZvaWQpIHtcbiAgcHJvcGVydHlEaWRDaGFuZ2UgPSBjYjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Q8VD4odTogVCk6IHUgaXMgb2JqZWN0ICYgVCB7XG4gIHJldHVybiAodHlwZW9mIHUgPT09ICdvYmplY3QnICYmIHUgIT09IG51bGwpIHx8IHR5cGVvZiB1ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vLy8vLy8vLy8vL1xuXG50eXBlIFRhZ3MgPSBNYXA8UHJvcGVydHlLZXksIFVwZGF0YWJsZVRhZz47XG5cbmNvbnN0IFRSQUNLRURfVEFHUyA9IG5ldyBXZWFrTWFwPG9iamVjdCwgVGFncz4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpcnR5VGFnRm9yPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUIHwgc3RyaW5nIHwgc3ltYm9sKTogdm9pZCB7XG4gIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgbGV0IHRhZ3MgPSBUUkFDS0VEX1RBR1MuZ2V0KG9iaik7XG5cbiAgICAvLyBObyB0YWdzIGhhdmUgYmVlbiBzZXR1cCBmb3IgdGhpcyBvYmplY3QgeWV0LCByZXR1cm5cbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAvLyBEaXJ0eSB0aGUgdGFnIGZvciB0aGUgc3BlY2lmaWMgcHJvcGVydHkgaWYgaXQgZXhpc3RzXG4gICAgbGV0IHByb3BlcnR5VGFnID0gdGFncy5nZXQoa2V5KTtcblxuICAgIGlmIChwcm9wZXJ0eVRhZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoREVCVUcpIHtcbiAgICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHByb3BlcnR5VGFnLCBvYmosIGtleSk7XG4gICAgICB9XG5cbiAgICAgIGRpcnR5KHByb3BlcnR5VGFnKTtcbiAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSB0YWcgZm9yIGEgcHJpbWl0aXZlYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ0ZvcjxUPihvYmo6IFQsIGtleToga2V5b2YgVCB8IHN0cmluZyB8IHN5bWJvbCk6IFVwZGF0YWJsZVRhZyB8IENvbnN0YW50VGFnIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFncyA9IFRSQUNLRURfVEFHUy5nZXQob2JqKTtcblxuICAgIGlmICh0YWdzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhZ3MgPSBuZXcgTWFwKCk7XG5cbiAgICAgIFRSQUNLRURfVEFHUy5zZXQob2JqLCB0YWdzKTtcbiAgICB9IGVsc2UgaWYgKHRhZ3MuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0YWdzLmdldChrZXkpITtcbiAgICB9XG5cbiAgICBsZXQgdGFnID0gY3JlYXRlVXBkYXRhYmxlVGFnKCk7XG4gICAgdGFncy5zZXQoa2V5LCB0YWcpO1xuXG4gICAgcmV0dXJuIHRhZztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -9,4 +9,8 @@ 'use strict';

exports.consume = consume;
exports.isTracking = isTracking;
exports.untrack = untrack;
exports.trackedData = trackedData;
var _env = require('@glimmer/env');
var _validators = require('./validators');

@@ -16,2 +20,4 @@

var _debug = require('./debug');
/**

@@ -41,2 +47,5 @@ * Whenever a tracked computed property is entered, the current tracker is

this.tags.add(tag);
if (_env.DEBUG) {
(0, _debug.markTagAsConsumed)(tag, new Error());
}
this.last = tag;

@@ -57,3 +66,4 @@ }

}
function track(callback) {
//////////
function track(callback, debuggingContext) {
let parent = CURRENT_TRACKER;

@@ -63,3 +73,7 @@ let current = new Tracker();

try {
callback();
if (_env.DEBUG) {
(0, _debug.runInAutotrackingTransaction)(callback, debuggingContext);
} else {
callback();
}
} finally {

@@ -75,2 +89,14 @@ CURRENT_TRACKER = parent;

}
function isTracking() {
return CURRENT_TRACKER !== null;
}
function untrack(callback) {
let parent = CURRENT_TRACKER;
CURRENT_TRACKER = null;
try {
callback();
} finally {
CURRENT_TRACKER = parent;
}
}
//////////

@@ -94,4 +120,7 @@ const EPOCH = exports.EPOCH = (0, _validators.createTag)();

function setter(self, value) {
if (_env.DEBUG) {
(0, _debug.assertTagNotConsumed)((0, _meta.tagFor)(self, key), self, key, true);
}
(0, _validators.dirty)(EPOCH);
(0, _meta.dirtyTag)(self, key);
(0, _meta.dirtyTagFor)(self, key);
values.set(self, value);

@@ -101,2 +130,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBZ0RNLEssR0FBQSxLO1FBZUEsTyxHQUFBLE87UUFhQSxXLEdBQUEsVzs7OztBQTFFTjs7QUFJQTs7Ozs7Ozs7Ozs7OztBQWFBLElBQUksa0JBQUosSUFBQTtBQUVBOzs7QUFHQSxNQUFBLE9BQUEsQ0FBYTtBQUFiLGtCQUFBO0FBQ1UsYUFBQSxJQUFBLEdBQU8sSUFBUCxHQUFPLEVBQVA7QUFDQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBb0JUO0FBbEJDLFFBQUEsR0FBQSxFQUFZO0FBQ1YsYUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLEdBQUE7QUFDQSxhQUFBLElBQUEsR0FBQSxHQUFBO0FBQ0Q7QUFFRCxjQUFPO0FBQ0wsWUFBSSxFQUFBLElBQUEsS0FBSixJQUFBO0FBRUEsWUFBSSxLQUFBLElBQUEsS0FBSixDQUFBLEVBQXFCO0FBQ25CLG1CQUFBLHdCQUFBO0FBREYsU0FBQSxNQUVPLElBQUksS0FBQSxJQUFBLEtBQUosQ0FBQSxFQUFxQjtBQUMxQixtQkFBTyxLQUFQLElBQUE7QUFESyxTQUFBLE1BRUE7QUFDTCxnQkFBSSxVQUFKLEVBQUE7QUFDQSxpQkFBQSxPQUFBLENBQWEsT0FBTyxRQUFBLElBQUEsQ0FBcEIsR0FBb0IsQ0FBcEI7QUFDQSxtQkFBTyx5QkFBUCxPQUFPLENBQVA7QUFDRDtBQUNGO0FBckJVO0FBd0JQLFNBQUEsS0FBQSxDQUFBLFFBQUEsRUFBb0M7QUFDeEMsUUFBSSxTQUFKLGVBQUE7QUFDQSxRQUFJLFVBQVUsSUFBZCxPQUFjLEVBQWQ7QUFFQSxzQkFBQSxPQUFBO0FBRUEsUUFBSTtBQUNGO0FBREYsS0FBQSxTQUVVO0FBQ1IsMEJBQUEsTUFBQTtBQUNEO0FBRUQsV0FBTyxRQUFQLE9BQU8sRUFBUDtBQUNEO0FBRUssU0FBQSxPQUFBLENBQUEsR0FBQSxFQUEwQjtBQUM5QixRQUFJLG9CQUFKLElBQUEsRUFBOEI7QUFDNUIsd0JBQUEsR0FBQSxDQUFBLEdBQUE7QUFDRDtBQUNGO0FBRUQ7QUFFTyxNQUFNLHdCQUFOLDRCQUFBO0FBS0QsU0FBQSxXQUFBLENBQUEsR0FBQSxFQUFBLFdBQUEsRUFFb0I7QUFFeEIsUUFBSSxTQUFTLElBQWIsT0FBYSxFQUFiO0FBQ0EsUUFBSSxpQkFBaUIsT0FBQSxXQUFBLEtBQXJCLFVBQUE7QUFFQSxhQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQXVCO0FBQ3JCLGdCQUFRLGtCQUFBLElBQUEsRUFBUixHQUFRLENBQVI7QUFFQSxZQUFBLEtBQUE7QUFFQTtBQUNBLFlBQUksa0JBQWtCLENBQUMsT0FBQSxHQUFBLENBQXZCLElBQXVCLENBQXZCLEVBQXlDO0FBQ3ZDLG9CQUFBLGFBQUE7QUFDQSxtQkFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFGRixTQUFBLE1BR087QUFDTCxvQkFBUSxPQUFBLEdBQUEsQ0FBUixJQUFRLENBQVI7QUFDRDtBQUVELGVBQUEsS0FBQTtBQUNEO0FBRUQsYUFBQSxNQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBb0M7QUFDbEMsK0JBQUEsS0FBQTtBQUNBLDRCQUFBLElBQUEsRUFBQSxHQUFBO0FBQ0EsZUFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFDRDtBQUVELFdBQU8sRUFBQSxNQUFBLEVBQVAsTUFBTyxFQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWcsIGNvbWJpbmUsIENPTlNUQU5UX1RBRyB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVUYWcsIGRpcnR5IH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IHRhZ0ZvciwgZGlydHlUYWcgfSBmcm9tICcuL21ldGEnO1xuXG50eXBlIE9wdGlvbjxUPiA9IFQgfCBudWxsO1xuXG4vKipcbiAqIFdoZW5ldmVyIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBlbnRlcmVkLCB0aGUgY3VycmVudCB0cmFja2VyIGlzXG4gKiBzYXZlZCBvZmYgYW5kIGEgbmV3IHRyYWNrZXIgaXMgcmVwbGFjZWQuXG4gKlxuICogQW55IHRyYWNrZWQgcHJvcGVydGllcyBjb25zdW1lZCBhcmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdHJhY2tlci5cbiAqXG4gKiBXaGVuIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBleGl0ZWQsIHRoZSB0cmFja2VyJ3MgdGFncyBhcmVcbiAqIGNvbWJpbmVkIGFuZCBhZGRlZCB0byB0aGUgcGFyZW50IHRyYWNrZXIuXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHRoYXQgZWFjaCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGhhcyBhIHRhZ1xuICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGluc2lkZSBvZlxuICogaXRzZWxmLCBpbmNsdWRpbmcgY2hpbGQgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0aWVzLlxuICovXG5sZXQgQ1VSUkVOVF9UUkFDS0VSOiBPcHRpb248VHJhY2tlcj4gPSBudWxsO1xuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IHRoYXQgdHJhY2tzIEB0cmFja2VkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGNvbnN1bWVkLlxuICovXG5jbGFzcyBUcmFja2VyIHtcbiAgcHJpdmF0ZSB0YWdzID0gbmV3IFNldDxUYWc+KCk7XG4gIHByaXZhdGUgbGFzdDogT3B0aW9uPFRhZz4gPSBudWxsO1xuXG4gIGFkZCh0YWc6IFRhZykge1xuICAgIHRoaXMudGFncy5hZGQodGFnKTtcbiAgICB0aGlzLmxhc3QgPSB0YWc7XG4gIH1cblxuICBjb21iaW5lKCk6IFRhZyB7XG4gICAgbGV0IHsgdGFncyB9ID0gdGhpcztcblxuICAgIGlmICh0YWdzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgfSBlbHNlIGlmICh0YWdzLnNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhc3QgYXMgVGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdGFnc0FycjogVGFnW10gPSBbXTtcbiAgICAgIHRhZ3MuZm9yRWFjaCh0YWcgPT4gdGFnc0Fyci5wdXNoKHRhZykpO1xuICAgICAgcmV0dXJuIGNvbWJpbmUodGFnc0Fycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCk6IFRhZyB7XG4gIGxldCBwYXJlbnQgPSBDVVJSRU5UX1RSQUNLRVI7XG4gIGxldCBjdXJyZW50ID0gbmV3IFRyYWNrZXIoKTtcblxuICBDVVJSRU5UX1RSQUNLRVIgPSBjdXJyZW50O1xuXG4gIHRyeSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBDVVJSRU5UX1RSQUNLRVIgPSBwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gY3VycmVudC5jb21iaW5lKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lKHRhZzogVGFnKSB7XG4gIGlmIChDVVJSRU5UX1RSQUNLRVIgIT09IG51bGwpIHtcbiAgICBDVVJSRU5UX1RSQUNLRVIuYWRkKHRhZyk7XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgRVBPQ0ggPSBjcmVhdGVUYWcoKTtcblxuZXhwb3J0IHR5cGUgR2V0dGVyPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IChzZWxmOiBUKSA9PiBUW0tdIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgU2V0dGVyPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IChzZWxmOiBULCB2YWx1ZTogVFtLXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrZWREYXRhPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAga2V5OiBLLFxuICBpbml0aWFsaXplcj86ICgpID0+IFRbS11cbik6IHsgZ2V0dGVyOiBHZXR0ZXI8VCwgSz47IHNldHRlcjogU2V0dGVyPFQsIEs+IH0ge1xuICBsZXQgdmFsdWVzID0gbmV3IFdlYWtNYXA8VCwgVFtLXT4oKTtcbiAgbGV0IGhhc0luaXRpYWxpemVyID0gdHlwZW9mIGluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nO1xuXG4gIGZ1bmN0aW9uIGdldHRlcihzZWxmOiBUKSB7XG4gICAgY29uc3VtZSh0YWdGb3Ioc2VsZiwga2V5KSk7XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICAvLyBJZiB0aGUgZmllbGQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQsIHdlIHNob3VsZCBpbml0aWFsaXplIGl0XG4gICAgaWYgKGhhc0luaXRpYWxpemVyICYmICF2YWx1ZXMuaGFzKHNlbGYpKSB7XG4gICAgICB2YWx1ZSA9IGluaXRpYWxpemVyISgpO1xuICAgICAgdmFsdWVzLnNldChzZWxmLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdmFsdWVzLmdldChzZWxmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0ZXIoc2VsZjogVCwgdmFsdWU6IFRbS10pOiB2b2lkIHtcbiAgICBkaXJ0eShFUE9DSCk7XG4gICAgZGlydHlUYWcoc2VsZiwga2V5KTtcbiAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7IGdldHRlciwgc2V0dGVyIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBd0RNLEssR0FBQSxLO1FBbUJBLE8sR0FBQSxPO1FBTUEsVSxHQUFBLFU7UUFJQSxPLEdBQUEsTztRQWtCQSxXLEdBQUEsVzs7OztBQXRHTjs7QUFDQTs7QUFDQTs7QUFJQTs7Ozs7Ozs7Ozs7OztBQWFBLElBQUksa0JBQUosSUFBQTtBQUVBOzs7QUFHQSxNQUFBLE9BQUEsQ0FBYTtBQUFiLGtCQUFBO0FBQ1UsYUFBQSxJQUFBLEdBQU8sSUFBUCxHQUFPLEVBQVA7QUFDQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBeUJUO0FBdkJDLFFBQUEsR0FBQSxFQUFZO0FBQ1YsYUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLEdBQUE7QUFFQSxZQUFBLFVBQUEsRUFBVztBQUNULDBDQUFBLEdBQUEsRUFBd0IsSUFBeEIsS0FBd0IsRUFBeEI7QUFDRDtBQUVELGFBQUEsSUFBQSxHQUFBLEdBQUE7QUFDRDtBQUVELGNBQU87QUFDTCxZQUFJLEVBQUEsSUFBQSxLQUFKLElBQUE7QUFFQSxZQUFJLEtBQUEsSUFBQSxLQUFKLENBQUEsRUFBcUI7QUFDbkIsbUJBQUEsd0JBQUE7QUFERixTQUFBLE1BRU8sSUFBSSxLQUFBLElBQUEsS0FBSixDQUFBLEVBQXFCO0FBQzFCLG1CQUFPLEtBQVAsSUFBQTtBQURLLFNBQUEsTUFFQTtBQUNMLGdCQUFJLFVBQUosRUFBQTtBQUNBLGlCQUFBLE9BQUEsQ0FBYSxPQUFPLFFBQUEsSUFBQSxDQUFwQixHQUFvQixDQUFwQjtBQUNBLG1CQUFPLHlCQUFQLE9BQU8sQ0FBUDtBQUNEO0FBQ0Y7QUExQlU7QUE2QmI7QUFFTSxTQUFBLEtBQUEsQ0FBQSxRQUFBLEVBQUEsZ0JBQUEsRUFBdUU7QUFDM0UsUUFBSSxTQUFKLGVBQUE7QUFDQSxRQUFJLFVBQVUsSUFBZCxPQUFjLEVBQWQ7QUFFQSxzQkFBQSxPQUFBO0FBRUEsUUFBSTtBQUNGLFlBQUEsVUFBQSxFQUFXO0FBQ1QscURBQUEsUUFBQSxFQUFBLGdCQUFBO0FBREYsU0FBQSxNQUVPO0FBQ0w7QUFDRDtBQUxILEtBQUEsU0FNVTtBQUNSLDBCQUFBLE1BQUE7QUFDRDtBQUVELFdBQU8sUUFBUCxPQUFPLEVBQVA7QUFDRDtBQUVLLFNBQUEsT0FBQSxDQUFBLEdBQUEsRUFBMEI7QUFDOUIsUUFBSSxvQkFBSixJQUFBLEVBQThCO0FBQzVCLHdCQUFBLEdBQUEsQ0FBQSxHQUFBO0FBQ0Q7QUFDRjtBQUVLLFNBQUEsVUFBQSxHQUFvQjtBQUN4QixXQUFPLG9CQUFQLElBQUE7QUFDRDtBQUVLLFNBQUEsT0FBQSxDQUFBLFFBQUEsRUFBc0M7QUFDMUMsUUFBSSxTQUFKLGVBQUE7QUFDQSxzQkFBQSxJQUFBO0FBRUEsUUFBSTtBQUNGO0FBREYsS0FBQSxTQUVVO0FBQ1IsMEJBQUEsTUFBQTtBQUNEO0FBQ0Y7QUFFRDtBQUVPLE1BQU0sd0JBQU4sNEJBQUE7QUFLRCxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQUEsV0FBQSxFQUVvQjtBQUV4QixRQUFJLFNBQVMsSUFBYixPQUFhLEVBQWI7QUFDQSxRQUFJLGlCQUFpQixPQUFBLFdBQUEsS0FBckIsVUFBQTtBQUVBLGFBQUEsTUFBQSxDQUFBLElBQUEsRUFBdUI7QUFDckIsZ0JBQVEsa0JBQUEsSUFBQSxFQUFSLEdBQVEsQ0FBUjtBQUVBLFlBQUEsS0FBQTtBQUVBO0FBQ0EsWUFBSSxrQkFBa0IsQ0FBQyxPQUFBLEdBQUEsQ0FBdkIsSUFBdUIsQ0FBdkIsRUFBeUM7QUFDdkMsb0JBQUEsYUFBQTtBQUNBLG1CQUFBLEdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQTtBQUZGLFNBQUEsTUFHTztBQUNMLG9CQUFRLE9BQUEsR0FBQSxDQUFSLElBQVEsQ0FBUjtBQUNEO0FBRUQsZUFBQSxLQUFBO0FBQ0Q7QUFFRCxhQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFvQztBQUNsQyxZQUFBLFVBQUEsRUFBVztBQUNULDZDQUFzQixrQkFBQSxJQUFBLEVBQXRCLEdBQXNCLENBQXRCLEVBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBO0FBQ0Q7QUFFRCwrQkFBQSxLQUFBO0FBQ0EsK0JBQUEsSUFBQSxFQUFBLEdBQUE7QUFDQSxlQUFBLEdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQTtBQUNEO0FBRUQsV0FBTyxFQUFBLE1BQUEsRUFBUCxNQUFPLEVBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFRhZywgY29tYmluZSwgY3JlYXRlVGFnLCBkaXJ0eSwgQ09OU1RBTlRfVEFHIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IHRhZ0ZvciwgZGlydHlUYWdGb3IgfSBmcm9tICcuL21ldGEnO1xuaW1wb3J0IHsgbWFya1RhZ0FzQ29uc3VtZWQsIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sIGFzc2VydFRhZ05vdENvbnN1bWVkIH0gZnJvbSAnLi9kZWJ1Zyc7XG5cbnR5cGUgT3B0aW9uPFQ+ID0gVCB8IG51bGw7XG5cbi8qKlxuICogV2hlbmV2ZXIgYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGVudGVyZWQsIHRoZSBjdXJyZW50IHRyYWNrZXIgaXNcbiAqIHNhdmVkIG9mZiBhbmQgYSBuZXcgdHJhY2tlciBpcyByZXBsYWNlZC5cbiAqXG4gKiBBbnkgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCB0cmFja2VyLlxuICpcbiAqIFdoZW4gYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGV4aXRlZCwgdGhlIHRyYWNrZXIncyB0YWdzIGFyZVxuICogY29tYmluZWQgYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgdHJhY2tlci5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBlYWNoIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaGFzIGEgdGFnXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgaW5zaWRlIG9mXG4gKiBpdHNlbGYsIGluY2x1ZGluZyBjaGlsZCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnRpZXMuXG4gKi9cbmxldCBDVVJSRU5UX1RSQUNLRVI6IE9wdGlvbjxUcmFja2VyPiA9IG51bGw7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgdGhhdCB0cmFja3MgQHRyYWNrZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgY29uc3VtZWQuXG4gKi9cbmNsYXNzIFRyYWNrZXIge1xuICBwcml2YXRlIHRhZ3MgPSBuZXcgU2V0PFRhZz4oKTtcbiAgcHJpdmF0ZSBsYXN0OiBPcHRpb248VGFnPiA9IG51bGw7XG5cbiAgYWRkKHRhZzogVGFnKSB7XG4gICAgdGhpcy50YWdzLmFkZCh0YWcpO1xuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBtYXJrVGFnQXNDb25zdW1lZCEodGFnLCBuZXcgRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gdGFnO1xuICB9XG5cbiAgY29tYmluZSgpOiBUYWcge1xuICAgIGxldCB7IHRhZ3MgfSA9IHRoaXM7XG5cbiAgICBpZiAodGFncy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICAgIH0gZWxzZSBpZiAodGFncy5zaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0IGFzIFRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhZ3NBcnI6IFRhZ1tdID0gW107XG4gICAgICB0YWdzLmZvckVhY2godGFnID0+IHRhZ3NBcnIucHVzaCh0YWcpKTtcbiAgICAgIHJldHVybiBjb21iaW5lKHRhZ3NBcnIpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCwgZGVidWdnaW5nQ29udGV4dD86IHN0cmluZyB8IGZhbHNlKTogVGFnIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgbGV0IGN1cnJlbnQgPSBuZXcgVHJhY2tlcigpO1xuXG4gIENVUlJFTlRfVFJBQ0tFUiA9IGN1cnJlbnQ7XG5cbiAgdHJ5IHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24hKGNhbGxiYWNrLCBkZWJ1Z2dpbmdDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSID0gcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQuY29tYmluZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZSh0YWc6IFRhZykge1xuICBpZiAoQ1VSUkVOVF9UUkFDS0VSICE9PSBudWxsKSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSLmFkZCh0YWcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYWNraW5nKCkge1xuICByZXR1cm4gQ1VSUkVOVF9UUkFDS0VSICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW50cmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICBsZXQgcGFyZW50ID0gQ1VSUkVOVF9UUkFDS0VSO1xuICBDVVJSRU5UX1RSQUNLRVIgPSBudWxsO1xuXG4gIHRyeSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBDVVJSRU5UX1RSQUNLRVIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgRVBPQ0ggPSBjcmVhdGVUYWcoKTtcblxuZXhwb3J0IHR5cGUgR2V0dGVyPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IChzZWxmOiBUKSA9PiBUW0tdIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgU2V0dGVyPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IChzZWxmOiBULCB2YWx1ZTogVFtLXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrZWREYXRhPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAga2V5OiBLLFxuICBpbml0aWFsaXplcj86ICgpID0+IFRbS11cbik6IHsgZ2V0dGVyOiBHZXR0ZXI8VCwgSz47IHNldHRlcjogU2V0dGVyPFQsIEs+IH0ge1xuICBsZXQgdmFsdWVzID0gbmV3IFdlYWtNYXA8VCwgVFtLXT4oKTtcbiAgbGV0IGhhc0luaXRpYWxpemVyID0gdHlwZW9mIGluaXRpYWxpemVyID09PSAnZnVuY3Rpb24nO1xuXG4gIGZ1bmN0aW9uIGdldHRlcihzZWxmOiBUKSB7XG4gICAgY29uc3VtZSh0YWdGb3Ioc2VsZiwga2V5KSk7XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICAvLyBJZiB0aGUgZmllbGQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQsIHdlIHNob3VsZCBpbml0aWFsaXplIGl0XG4gICAgaWYgKGhhc0luaXRpYWxpemVyICYmICF2YWx1ZXMuaGFzKHNlbGYpKSB7XG4gICAgICB2YWx1ZSA9IGluaXRpYWxpemVyISgpO1xuICAgICAgdmFsdWVzLnNldChzZWxmLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdmFsdWVzLmdldChzZWxmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0ZXIoc2VsZjogVCwgdmFsdWU6IFRbS10pOiB2b2lkIHtcbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIGFzc2VydFRhZ05vdENvbnN1bWVkISh0YWdGb3Ioc2VsZiwga2V5KSwgc2VsZiwga2V5LCB0cnVlKTtcbiAgICB9XG5cbiAgICBkaXJ0eShFUE9DSCk7XG4gICAgZGlydHlUYWdGb3Ioc2VsZiwga2V5KTtcbiAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7IGdldHRlciwgc2V0dGVyIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9

@@ -6,2 +6,3 @@ 'use strict';

});
exports.CURRENT_TAG = exports.VOLATILE_TAG = exports.CONSTANT_TAG = exports.update = exports.dirty = exports.ALLOW_CYCLES = exports.COMPUTE = exports.VOLATILE = exports.INITIAL = exports.CONSTANT = undefined;
exports.bump = bump;

@@ -17,3 +18,8 @@ exports.value = value;

const symbol = typeof Symbol !== 'undefined' ? Symbol : key => `__${key}${Math.floor(Math.random() * Date.now())}__`;
var _env = require('@glimmer/env');
var _utils = require('./utils');
var _debug = require('./debug');
const CONSTANT = exports.CONSTANT = 0;

@@ -27,3 +33,3 @@ const INITIAL = exports.INITIAL = 1;

//////////
const COMPUTE = exports.COMPUTE = symbol('TAG_COMPUTE');
const COMPUTE = exports.COMPUTE = (0, _utils.symbol)('TAG_COMPUTE');
//////////

@@ -44,3 +50,8 @@ /**

*/
function value(_tag) {
function value(tag) {
if (_env.DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
return $REVISION;

@@ -59,8 +70,21 @@ }

function validate(tag, snapshot) {
return snapshot >= tag[COMPUTE]();
if (_env.DEBUG) {
IS_VALIDATING = true;
}
let isValid = snapshot >= tag[COMPUTE]();
if (_env.DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
}
const TYPE = symbol('TAG_TYPE');
let IS_VALIDATING;
const TYPE = (0, _utils.symbol)('TAG_TYPE');
let ALLOW_CYCLES = exports.ALLOW_CYCLES = undefined;
if (false) {
exports.ALLOW_CYCLES = ALLOW_CYCLES = new WeakSet();
if (_env.DEBUG) {
exports.ALLOW_CYCLES = ALLOW_CYCLES = new WeakMap();
}

@@ -79,5 +103,22 @@ class MonomorphicTagImpl {

let { lastChecked } = this;
if (lastChecked !== $REVISION) {
if (this.isUpdating === true) {
if (_env.DEBUG && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
} else if (lastChecked !== $REVISION) {
this.isUpdating = true;
this.lastChecked = $REVISION;
if (_env.DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
try {

@@ -99,12 +140,6 @@ let { subtags, subtag, revision } = this;

}
if (this.isUpdating === true) {
if (false && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
}
return this.lastValue;
}
static update(_tag, subtag) {
if (false && _tag[TYPE] !== 1 /* Updatable */) {
if (_env.DEBUG && _tag[TYPE] !== 1 /* Updatable */) {
throw new Error('Attempted to update a tag that was not updatable');

@@ -117,14 +152,17 @@ }

} else {
if (_env.DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
tag.subtag = subtag;
// subtag could be another type of tag, e.g. CURRENT_TAG or VOLATILE_TAG.
// If so, lastChecked/lastValue will be undefined, result in these being
// NaN. This is fine, it will force the system to recompute.
tag.lastChecked = Math.min(tag.lastChecked, subtag.lastChecked);
tag.lastValue = Math.max(tag.lastValue, subtag.lastValue);
}
}
static dirty(tag) {
if (false && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
if (_env.DEBUG && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
throw new Error('Attempted to dirty a tag that was not dirtyable');
}
if (_env.DEBUG) {
// Usually by this point, we've already asserted with better error information,
// but this is our last line of defense.
(0, _debug.assertTagNotConsumed)(tag);
}
tag.revision = ++$REVISION;

@@ -186,2 +224,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBCTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQWNBLFEsR0FBQSxRO1FBeUlBLFMsR0FBQSxTO1FBSUEsa0IsR0FBQSxrQjtRQVFBLE8sR0FBQSxPO1FBSUEsVSxHQUFBLFU7UUEwQkEsTyxHQUFBLE87UUFZQSxtQixHQUFBLG1COztBQWxRTixNQUFNLFNBQ0osT0FBQSxNQUFBLEtBQUEsV0FBQSxHQUFBLE1BQUEsR0FFSSxPQUFpQixLQUFLLEdBQUcsR0FBRyxLQUFBLEtBQUEsQ0FBVyxLQUFBLE1BQUEsS0FBZ0IsS0FBM0IsR0FBMkIsRUFBM0IsQ0FIbEMsSUFBQTtBQVNPLE1BQU0sOEJBQU4sQ0FBQTtBQUNBLE1BQU0sNEJBQU4sQ0FBQTtBQUNBLE1BQU0sOEJBQU4sZ0JBQUEsQyxDQUE2QztBQUVwRCxJQUFJLFlBQUosT0FBQTtBQUVNLFNBQUEsSUFBQSxHQUFjO0FBQ2xCO0FBQ0Q7QUFFRDtBQUVPLE1BQU0sNEJBQXlCLE9BQS9CLGFBQStCLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY00sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUF5QjtBQUM3QixXQUFBLFNBQUE7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVU0sU0FBQSxRQUFBLENBQUEsR0FBQSxFQUFBLFFBQUEsRUFBK0M7QUFDbkQsV0FBTyxZQUFZLElBQW5CLE9BQW1CLEdBQW5CO0FBQ0Q7QUFpQkQsTUFBTSxPQUFzQixPQUE1QixVQUE0QixDQUE1QjtBQUVPLElBQUEsK0NBQUE7QUFFUCxJQUFBLEtBQUEsRUFBVztBQUNULFlBSEssWUFHTCxrQkFBZSxJQUFmLE9BQWUsRUFBZjtBQUNEO0FBcUJELE1BQUEsa0JBQUEsQ0FBd0I7QUFXdEIsZ0JBQUEsSUFBQSxFQUFxQztBQVY3QixhQUFBLFFBQUEsR0FBQSxPQUFBO0FB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YWdzJztcblxuLy8vLy8vLy8vL1xuXG4vLyB1dGlsc1xudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzICgoXG4gIGs6IGluZmVyIElcbikgPT4gdm9pZClcbiAgPyBJXG4gIDogbmV2ZXI7XG5cbmNvbnN0IHN5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnXG4gICAgPyBTeW1ib2xcbiAgICA6IChrZXk6IHN0cmluZykgPT4gYF9fJHtrZXl9JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBEYXRlLm5vdygpKX1fX2AgYXMgYW55O1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUoX3RhZzogVGFnKTogUmV2aXNpb24ge1xuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIHJldHVybiBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha1NldDxVcGRhdGFibGVUYWc+O1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtTZXQoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heChyZXZpc2lvbiwgc3VidGFnW0NPTVBVVEVdKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMuaGFzKHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3ljbGVzIGluIHRhZ3MgYXJlIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSArKyRSRVZJU0lPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuc3VidGFnID0gc3VidGFnO1xuXG4gICAgICAvLyBzdWJ0YWcgY291bGQgYmUgYW5vdGhlciB0eXBlIG9mIHRhZywgZS5nLiBDVVJSRU5UX1RBRyBvciBWT0xBVElMRV9UQUcuXG4gICAgICAvLyBJZiBzbywgbGFzdENoZWNrZWQvbGFzdFZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkLCByZXN1bHQgaW4gdGhlc2UgYmVpbmdcbiAgICAgIC8vIE5hTi4gVGhpcyBpcyBmaW5lLCBpdCB3aWxsIGZvcmNlIHRoZSBzeXN0ZW0gdG8gcmVjb21wdXRlLlxuICAgICAgdGFnLmxhc3RDaGVja2VkID0gTWF0aC5taW4odGFnLmxhc3RDaGVja2VkLCAoc3VidGFnIGFzIGFueSkubGFzdENoZWNrZWQpO1xuICAgICAgdGFnLmxhc3RWYWx1ZSA9IE1hdGgubWF4KHRhZy5sYXN0VmFsdWUsIChzdWJ0YWcgYXMgYW55KS5sYXN0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaXJ0eSh0YWc6IERpcnR5YWJsZVRhZyB8IFVwZGF0YWJsZVRhZykge1xuICAgIGlmIChcbiAgICAgIERFQlVHICYmXG4gICAgICAhKHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUgfHwgdGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIGRpcnR5IGEgdGFnIHRoYXQgd2FzIG5vdCBkaXJ0eWFibGUnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFjTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQW9CQSxRLEdBQUEsUTtRQWdMQSxTLEdBQUEsUztRQUlBLGtCLEdBQUEsa0I7UUFRQSxPLEdBQUEsTztRQUlBLFUsR0FBQSxVO1FBMEJBLE8sR0FBQSxPO1FBWUEsbUIsR0FBQSxtQjs7OztBQTdTTjs7QUFDQTs7QUFNTyxNQUFNLDhCQUFOLENBQUE7QUFDQSxNQUFNLDRCQUFOLENBQUE7QUFDQSxNQUFNLDhCQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFTSxTQUFBLElBQUEsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFTyxNQUFNLDRCQUF5QixtQkFBL0IsYUFBK0IsQ0FBL0I7QUFnQlA7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFjTSxTQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQXdCO0FBQzVCLFFBQUEsVUFBQSxFQUFXO0FBQ1Q7QUFDQTtBQUNBLFlBQUEsT0FBQTtBQUNEO0FBRUQsV0FBQSxTQUFBO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxRQUFBLEVBQStDO0FBQ25ELFFBQUEsVUFBQSxFQUFXO0FBQ1Qsd0JBQUEsSUFBQTtBQUNEO0FBRUQsUUFBSSxVQUFVLFlBQVksSUFBMUIsT0FBMEIsR0FBMUI7QUFFQSxRQUFBLFVBQUEsRUFBVztBQUNULHdCQUFBLEtBQUE7QUFFQSxZQUFBLE9BQUEsRUFBYTtBQUNYO0FBQ0E7QUFDQSxnQkFBQSxPQUFBO0FBQ0Q7QUFDRjtBQUVELFdBQUEsT0FBQTtBQUNEO0FBRUQsSUFBQSxhQUFBO0FBaUJBLE1BQU0sT0FBc0IsbUJBQTVCLFVBQTRCLENBQTVCO0FBRU8sSUFBQSwrQ0FBQTtBQUVQLElBQUEsVUFBQSxFQUFXO0FBQ1QsWUFISyxZ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QUFDRSxhQUFBLENBQUE7QUFDRSxtQkFBQSxZQUFBO0FBQ0YsYUFBQSxDQUFBO0FBQ0UsbUJBQU8sS0FBUCxDQUFPLENBQVA7QUFDRjtBQUNFLGdCQUFJLE1BQU0sSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBVixnQkFBVSxDQUFWO0FBQ0MsZ0JBQUEsT0FBQSxHQUFBLElBQUE7QUFDRCxtQkFBQSxHQUFBO0FBUko7QUFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFVuaW9uVG9JbnRlcnNlY3Rpb24sIHN5bWJvbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKHRhZzogVGFnKTogUmV2aXNpb24ge1xuICBpZiAoREVCVUcpIHtcbiAgICAvLyBjb21wdXRlIHRvIGNhY2hlIHRoZSBsYXRlc3QgdmFsdWUsIHdoaWNoIHdpbGwgcHJldmVudCB1cyBmcm9tIGRvaW5nXG4gICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgIHRhZ1tDT01QVVRFXSgpO1xuICB9XG5cbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBpc1ZhbGlkID0gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG5cbiAgaWYgKERFQlVHKSB7XG4gICAgSVNfVkFMSURBVElORyA9IGZhbHNlO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAgIC8vIGludmFsaWQgdXBkYXRlcyBsYXRlciBvbi5cbiAgICAgIHRhZ1tDT01QVVRFXSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc1ZhbGlkO1xufVxuXG5sZXQgSVNfVkFMSURBVElORzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTIS5oYXModGhpcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsZXMgaW4gdGFncyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICsrJFJFVklTSU9OO1xuICAgIH0gZWxzZSBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKERFQlVHKSB7XG4gICAgICAgIC8vIEluIERFQlVHLCB3ZSBkb24ndCBjYWNoZSB3aGlsZSB2YWxpZGF0aW5nIG9ubHksIGJlY2F1c2UgaXQgaXMgdmFsaWRcbiAgICAgICAgLy8gdXBkYXRlIGEgdGFnIGJldHdlZW4gY2FsbGluZyBgdmFsaWRhdGUoKWAgYW5kIGB2YWx1ZSgpYC4gT25jZSB5b3VcbiAgICAgICAgLy8gY2FsbCBgdmFsdWUoKWAgb24gYSB0YWcsIGl0cyByZXZpc2lvbiBpcyBlZmZlY3RpdmVseSBsb2NrZWQgaW4sIGFuZFxuICAgICAgICAvLyBpZiB5b3UgYXR0ZW1wdCB0byB1cGRhdGUgaXQgdG8gYSB0YWcgdGhhdCBpcyBtb3JlIHJlY2VudCBpdCBjb3VsZFxuICAgICAgICAvLyBicmVhayBhc3N1bXB0aW9ucyBpbiBvdXIgc3lzdGVtLiBUaGlzIGlzIHdoeSB0aGUgYXNzZXJ0aW9uIGV4aXN0cyBpblxuICAgICAgICAvLyB0aGUgc3RhdGljIGB1cGRhdGUoKWAgbWV0aG9kIGJlbG93LlxuICAgICAgICBpZiAoIUlTX1ZBTElEQVRJTkcpIHtcbiAgICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgeyBzdWJ0YWdzLCBzdWJ0YWcsIHJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChzdWJ0YWcgIT09IG51bGwpIHtcbiAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdbQ09NUFVURV0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VidGFncyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VidGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gc3VidGFnc1tpXVtDT01QVVRFXSgpO1xuICAgICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heCh2YWx1ZSwgcmV2aXNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gcmV2aXNpb247XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIERFQlVHICYmXG4gICAgICAgIHRhZy5sYXN0Q2hlY2tlZCA9PT0gJFJFVklTSU9OICYmXG4gICAgICAgIChzdWJ0YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsKVtDT01QVVRFXSgpID4gdGFnLmxhc3RWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQlVHOiBhdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHdpdGggYSB0YWcgdGhhdCBoYXMgYSBtb3JlIHJlY2VudCByZXZpc2lvbiBhcyBpdHMgdmFsdWUnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRhZy5zdWJ0YWcgPSBzdWJ0YWc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpcnR5KHRhZzogRGlydHlhYmxlVGFnIHwgVXBkYXRhYmxlVGFnKSB7XG4gICAgaWYgKFxuICAgICAgREVCVUcgJiZcbiAgICAgICEodGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSB8fCB0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gZGlydHkgYSB0YWcgdGhhdCB3YXMgbm90IGRpcnR5YWJsZScpO1xuICAgIH1cblxuICAgIGlmIChERUJVRykge1xuICAgICAgLy8gVXN1YWxseSBieSB0aGlzIHBvaW50LCB3ZSd2ZSBhbHJlYWR5IGFzc2VydGVkIHdpdGggYmV0dGVyIGVycm9yIGluZm9ybWF0aW9uLFxuICAgICAgLy8gYnV0IHRoaXMgaXMgb3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlLlxuICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHRhZyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -126,6 +126,6 @@ 'use strict';

Object.defineProperty(exports, 'dirtyTag', {
Object.defineProperty(exports, 'dirtyTagFor', {
enumerable: true,
get: function () {
return _meta.dirtyTag;
return _meta.dirtyTagFor;
}

@@ -139,6 +139,6 @@ });

});
Object.defineProperty(exports, 'updateTag', {
Object.defineProperty(exports, 'setPropertyDidChange', {
enumerable: true,
get: function () {
return _meta.updateTag;
return _meta.setPropertyDidChange;
}

@@ -149,8 +149,2 @@ });

Object.defineProperty(exports, 'track', {
enumerable: true,
get: function () {
return _tracking.track;
}
});
Object.defineProperty(exports, 'consume', {

@@ -168,2 +162,14 @@ enumerable: true,

});
Object.defineProperty(exports, 'isTracking', {
enumerable: true,
get: function () {
return _tracking.isTracking;
}
});
Object.defineProperty(exports, 'track', {
enumerable: true,
get: function () {
return _tracking.track;
}
});
Object.defineProperty(exports, 'trackedData', {

@@ -175,2 +181,29 @@ enumerable: true,

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFBQSxJOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLE87Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLG1COzs7Ozs7dUJBQUEsUzs7Ozs7O3VCQUFBLGtCOzs7Ozs7dUJBQUEsVzs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxPOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLFU7Ozs7Ozt1QkFBQSxNOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7Ozs7O2lCQStCQSxROzs7Ozs7aUJBQUEsTTs7Ozs7O2lCQUFBLFM7Ozs7Ozs7OztxQkFFQSxLOzs7Ozs7cUJBQUEsTzs7Ozs7O3FCQUFBLEs7Ozs7OztxQkFBQSxXIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWcsIHRhZ0ZvciwgdXBkYXRlVGFnIH0gZnJvbSAnLi9saWIvbWV0YSc7XG5cbmV4cG9ydCB7IHRyYWNrLCBjb25zdW1lLCBFUE9DSCwgdHJhY2tlZERhdGEgfSBmcm9tICcuL2xpYi90cmFja2luZyc7XG4iXSwic291cmNlUm9vdCI6IiJ9
Object.defineProperty(exports, 'untrack', {
enumerable: true,
get: function () {
return _tracking.untrack;
}
});
var _debug = require('./lib/debug');
Object.defineProperty(exports, 'setAutotrackingTransactionEnv', {
enumerable: true,
get: function () {
return _debug.setAutotrackingTransactionEnv;
}
});
Object.defineProperty(exports, 'runInAutotrackingTransaction', {
enumerable: true,
get: function () {
return _debug.runInAutotrackingTransaction;
}
});
Object.defineProperty(exports, 'deprecateMutationsInAutotrackingTransaction', {
enumerable: true,
get: function () {
return _debug.deprecateMutationsInAutotrackingTransaction;
}
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFBQSxJOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLE87Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLG1COzs7Ozs7dUJBQUEsUzs7Ozs7O3VCQUFBLGtCOzs7Ozs7dUJBQUEsVzs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxPOzs7Ozs7dUJBQUEsTzs7Ozs7O3VCQUFBLFU7Ozs7Ozt1QkFBQSxNOzs7Ozs7dUJBQUEsUTs7Ozs7O3VCQUFBLEs7Ozs7Ozt1QkFBQSxZOzs7Ozs7dUJBQUEsUTs7Ozs7Ozs7O2lCQStCQSxXOzs7Ozs7aUJBQUEsTTs7Ozs7O2lCQUFBLG9COzs7Ozs7Ozs7cUJBRUEsTzs7Ozs7O3FCQUFBLEs7Ozs7OztxQkFBQSxVOzs7Ozs7cUJBQUEsSzs7Ozs7O3FCQUFBLFc7Ozs7OztxQkFBQSxPOzs7Ozs7Ozs7a0JBRUEsNkI7Ozs7OztrQkFBQSw0Qjs7Ozs7O2tCQUFBLDJDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWdGb3IsIHRhZ0Zvciwgc2V0UHJvcGVydHlEaWRDaGFuZ2UgfSBmcm9tICcuL2xpYi9tZXRhJztcblxuZXhwb3J0IHsgY29uc3VtZSwgRVBPQ0gsIGlzVHJhY2tpbmcsIHRyYWNrLCB0cmFja2VkRGF0YSwgdW50cmFjayB9IGZyb20gJy4vbGliL3RyYWNraW5nJztcblxuZXhwb3J0IHtcbiAgc2V0QXV0b3RyYWNraW5nVHJhbnNhY3Rpb25FbnYsXG4gIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG4gIGRlcHJlY2F0ZU11dGF0aW9uc0luQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG59IGZyb20gJy4vbGliL2RlYnVnJztcbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -6,21 +6,34 @@ 'use strict';

});
exports.dirtyTag = dirtyTag;
exports.propertyDidChange = undefined;
exports.setPropertyDidChange = setPropertyDidChange;
exports.dirtyTagFor = dirtyTagFor;
exports.tagFor = tagFor;
exports.updateTag = updateTag;
var _env = require('@glimmer/env');
var _validators = require('./validators');
var TRACKED_TAGS = new WeakMap();
var _debug = require('./debug');
var propertyDidChange = exports.propertyDidChange = function propertyDidChange() {};
function setPropertyDidChange(cb) {
exports.propertyDidChange = propertyDidChange = cb;
}
function isObject(u) {
return typeof u === 'object' && u !== null;
return typeof u === 'object' && u !== null || typeof u === 'function';
}
function dirtyTag(obj, key) {
var TRACKED_TAGS = new WeakMap();
function dirtyTagFor(obj, key) {
if (isObject(obj)) {
var tag = tagFor(obj, key);
if (tag === undefined) {
updateTag(obj, key, (0, _validators.createUpdatableTag)());
} else if ((0, _validators.isConstTag)(tag)) {
throw new Error('BUG: Can\'t update a constant tag');
} else {
(0, _validators.dirty)(tag);
var tags = TRACKED_TAGS.get(obj);
// No tags have been setup for this object yet, return
if (tags === undefined) return;
// Dirty the tag for the specific property if it exists
var propertyTag = tags.get(key);
if (propertyTag !== undefined) {
if (_env.DEBUG) {
(0, _debug.assertTagNotConsumed)(propertyTag, obj, key);
}
(0, _validators.dirty)(propertyTag);
propertyDidChange();
}

@@ -47,15 +60,2 @@ } else {

}
function updateTag(obj, key, newTag) {
if (isObject(obj)) {
var tag = tagFor(obj, key);
if ((0, _validators.isConstTag)(tag)) {
throw new Error('BUG: Can\'t update a constant tag');
} else {
(0, _validators.update)(tag, newTag);
}
return tag;
} else {
throw new Error('BUG: Can\'t update a tag for a primitive');
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQWlCTSxRLEdBQUEsUTtRQWtCQSxNLEdBQUEsTTtRQW1CQSxTLEdBQUEsUzs7OztBQTNDTixJQUFNLGVBQWUsSUFBckIsT0FBcUIsRUFBckI7QUFFQSxTQUFBLFFBQUEsQ0FBQSxDQUFBLEVBQXlCO0FBQ3ZCLFdBQU8sT0FBQSxDQUFBLEtBQUEsUUFBQSxJQUF5QixNQUFoQyxJQUFBO0FBQ0Q7QUFFSyxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxFQUEwQztBQUM5QyxRQUFJLFNBQUosR0FBSSxDQUFKLEVBQW1CO0FBQ2pCLFlBQUksTUFBTSxPQUFBLEdBQUEsRUFBVixHQUFVLENBQVY7QUFFQSxZQUFJLFFBQUosU0FBQSxFQUF1QjtBQUNyQixzQkFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLHFDQUFBO0FBREYsU0FBQSxNQUVPLElBQUksNEJBQUosR0FBSSxDQUFKLEVBQXFCO0FBQzFCLGtCQUFNLElBQU4sS0FBTSxDQUFOLG1DQUFNLENBQU47QUFESyxTQUFBLE1BRUE7QUFDTCxtQ0FBQSxHQUFBO0FBQ0Q7QUFUSCxLQUFBLE1BVU87QUFDTCxjQUFNLElBQU4sS0FBTSxDQUFOLDBDQUFNLENBQU47QUFDRDtBQUNGO0FBSUssU0FBQSxNQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBd0M7QUFDNUMsUUFBSSxTQUFKLEdBQUksQ0FBSixFQUFtQjtBQUNqQixZQUFJLE9BQU8sYUFBQSxHQUFBLENBQVgsR0FBVyxDQUFYO0FBRUEsWUFBSSxTQUFKLFNBQUEsRUFBd0I7QUFDdEIsbUJBQU8sSUFBUCxHQUFPLEVBQVA7QUFDQSx5QkFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLElBQUE7QUFGRixTQUFBLE1BR08sSUFBSSxLQUFBLEdBQUEsQ0FBSixHQUFJLENBQUosRUFBbUI7QUFDeEIsbUJBQU8sS0FBQSxHQUFBLENBQVAsR0FBTyxDQUFQO0FBQ0Q7QUFFRCxZQUFJLE1BQUoscUNBQUE7QUFDQSxhQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQTtBQUNBLGVBQUEsR0FBQTtBQVpGLEtBQUEsTUFhTztBQUNMLGVBQUEsd0JBQUE7QUFDRDtBQUNGO0FBRUssU0FBQSxTQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxNQUFBLEVBQWlFO0FBQ3JFLFFBQUksU0FBSixHQUFJLENBQUosRUFBbUI7QUFDakIsWUFBSSxNQUFNLE9BQUEsR0FBQSxFQUFWLEdBQVUsQ0FBVjtBQUVBLFlBQUksNEJBQUosR0FBSSxDQUFKLEVBQXFCO0FBQ25CLGtCQUFNLElBQU4sS0FBTSxDQUFOLG1DQUFNLENBQU47QUFERixTQUFBLE1BRU87QUFDTCxvQ0FBQSxHQUFBLEVBQUEsTUFBQTtBQUNEO0FBRUQsZUFBQSxHQUFBO0FBVEYsS0FBQSxNQVVPO0FBQ0wsY0FBTSxJQUFOLEtBQU0sQ0FBTiwwQ0FBTSxDQUFOO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRpcnR5LFxuICB1cGRhdGUsXG4gIGNyZWF0ZVVwZGF0YWJsZVRhZyxcbiAgVXBkYXRhYmxlVGFnLFxuICBDT05TVEFOVF9UQUcsXG4gIGlzQ29uc3RUYWcsXG4gIENvbnN0YW50VGFnLFxufSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG50eXBlIFRhZ3MgPSBNYXA8UHJvcGVydHlLZXksIFVwZGF0YWJsZVRhZz47XG5jb25zdCBUUkFDS0VEX1RBR1MgPSBuZXcgV2Vha01hcDxvYmplY3QsIFRhZ3M+KCk7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0PFQ+KHU6IFQpOiB1IGlzIG9iamVjdCAmIFQge1xuICByZXR1cm4gdHlwZW9mIHUgPT09ICdvYmplY3QnICYmIHUgIT09IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJ0eVRhZzxUPihvYmo6IFQsIGtleToga2V5b2YgVCk6IHZvaWQge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWcgPSB0YWdGb3Iob2JqLCBrZXkpO1xuXG4gICAgaWYgKHRhZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVUYWcob2JqLCBrZXksIGNyZWF0ZVVwZGF0YWJsZVRhZygpKTtcbiAgICB9IGVsc2UgaWYgKGlzQ29uc3RUYWcodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIGNvbnN0YW50IHRhZ2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJ0eSh0YWcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogQ2FuJ3QgdXBkYXRlIGEgdGFnIGZvciBhIHByaW1pdGl2ZWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiBVcGRhdGFibGVUYWc7XG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBDb25zdGFudFRhZztcbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiBVcGRhdGFibGVUYWcgfCBDb25zdGFudFRhZyB7XG4gIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgbGV0IHRhZ3MgPSBUUkFDS0VEX1RBR1MuZ2V0KG9iaik7XG5cbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YWdzID0gbmV3IE1hcCgpO1xuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG4gICAgcmV0dXJuIHRhZztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWc8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQsIG5ld1RhZzogVXBkYXRhYmxlVGFnKTogVXBkYXRhYmxlVGFnIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFnID0gdGFnRm9yKG9iaiwga2V5KTtcblxuICAgIGlmIChpc0NvbnN0VGFnKHRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSBjb25zdGFudCB0YWdgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlKHRhZywgbmV3VGFnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSB0YWcgZm9yIGEgcHJpbWl0aXZlYCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFNTSxvQixHQUFBLG9CO1FBY0EsVyxHQUFBLFc7UUF1QkEsTSxHQUFBLE07Ozs7QUExQ047O0FBQ0E7O0FBRU8sSUFBSSxnREFBb0IsU0FBQSxpQkFBQSxHQUF4QixDQUFBLENBQUE7QUFFRCxTQUFBLG9CQUFBLENBQUEsRUFBQSxFQUE2QztBQUNqRCxZQUhTLGlCQUdULHVCQUFBLEVBQUE7QUFDRDtBQUVELFNBQUEsUUFBQSxDQUFBLENBQUEsRUFBeUI7QUFDdkIsV0FBUSxPQUFBLENBQUEsS0FBQSxRQUFBLElBQXlCLE1BQTFCLElBQUMsSUFBd0MsT0FBQSxDQUFBLEtBQWhELFVBQUE7QUFDRDtBQU1ELElBQU0sZUFBZSxJQUFyQixPQUFxQixFQUFyQjtBQUVNLFNBQUEsV0FBQSxDQUFBLEdBQUEsRUFBQSxHQUFBLEVBQStEO0FBQ25FLFFBQUksU0FBSixHQUFJLENBQUosRUFBbUI7QUFDakIsWUFBSSxPQUFPLGFBQUEsR0FBQSxDQUFYLEdBQVcsQ0FBWDtBQUVBO0FBQ0EsWUFBSSxTQUFKLFNBQUEsRUFBd0I7QUFFeEI7QUFDQSxZQUFJLGNBQWMsS0FBQSxHQUFBLENBQWxCLEdBQWtCLENBQWxCO0FBRUEsWUFBSSxnQkFBSixTQUFBLEVBQStCO0FBQzdCLGdCQUFBLFVBQUEsRUFBVztBQUNULGlEQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQTtBQUNEO0FBRUQsbUNBQUEsV0FBQTtBQUNBO0FBQ0Q7QUFoQkgsS0FBQSxNQWlCTztBQUNMLGNBQU0sSUFBTixLQUFNLENBQU4sMENBQU0sQ0FBTjtBQUNEO0FBQ0Y7QUFFSyxTQUFBLE1BQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxFQUEwRDtBQUM5RCxRQUFJLFNBQUosR0FBSSxDQUFKLEVBQW1CO0FBQ2pCLFlBQUksT0FBTyxhQUFBLEdBQUEsQ0FBWCxHQUFXLENBQVg7QUFFQSxZQUFJLFNBQUosU0FBQSxFQUF3QjtBQUN0QixtQkFBTyxJQUFQLEdBQU8sRUFBUDtBQUVBLHlCQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsSUFBQTtBQUhGLFNBQUEsTUFJTyxJQUFJLEtBQUEsR0FBQSxDQUFKLEdBQUksQ0FBSixFQUFtQjtBQUN4QixtQkFBTyxLQUFBLEdBQUEsQ0FBUCxHQUFPLENBQVA7QUFDRDtBQUVELFlBQUksTUFBSixxQ0FBQTtBQUNBLGFBQUEsR0FBQSxDQUFBLEdBQUEsRUFBQSxHQUFBO0FBRUEsZUFBQSxHQUFBO0FBZEYsS0FBQSxNQWVPO0FBQ0wsZUFBQSx3QkFBQTtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBkaXJ0eSwgY3JlYXRlVXBkYXRhYmxlVGFnLCBVcGRhdGFibGVUYWcsIENPTlNUQU5UX1RBRywgQ29uc3RhbnRUYWcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuZXhwb3J0IGxldCBwcm9wZXJ0eURpZENoYW5nZSA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eURpZENoYW5nZShjYjogKCkgPT4gdm9pZCkge1xuICBwcm9wZXJ0eURpZENoYW5nZSA9IGNiO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdDxUPih1OiBUKTogdSBpcyBvYmplY3QgJiBUIHtcbiAgcmV0dXJuICh0eXBlb2YgdSA9PT0gJ29iamVjdCcgJiYgdSAhPT0gbnVsbCkgfHwgdHlwZW9mIHUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vLy8vLy8vLy8vXG5cbnR5cGUgVGFncyA9IE1hcDxQcm9wZXJ0eUtleSwgVXBkYXRhYmxlVGFnPjtcblxuY29uc3QgVFJBQ0tFRF9UQUdTID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWdzPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlydHlUYWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQgfCBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFncyA9IFRSQUNLRURfVEFHUy5nZXQob2JqKTtcblxuICAgIC8vIE5vIHRhZ3MgaGF2ZSBiZWVuIHNldHVwIGZvciB0aGlzIG9iamVjdCB5ZXQsIHJldHVyblxuICAgIGlmICh0YWdzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIERpcnR5IHRoZSB0YWcgZm9yIHRoZSBzcGVjaWZpYyBwcm9wZXJ0eSBpZiBpdCBleGlzdHNcbiAgICBsZXQgcHJvcGVydHlUYWcgPSB0YWdzLmdldChrZXkpO1xuXG4gICAgaWYgKHByb3BlcnR5VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChERUJVRykge1xuICAgICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEocHJvcGVydHlUYWcsIG9iaiwga2V5KTtcbiAgICAgIH1cblxuICAgICAgZGlydHkocHJvcGVydHlUYWcpO1xuICAgICAgcHJvcGVydHlEaWRDaGFuZ2UoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIHRhZyBmb3IgYSBwcmltaXRpdmVgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUIHwgc3RyaW5nIHwgc3ltYm9sKTogVXBkYXRhYmxlVGFnIHwgQ29uc3RhbnRUYWcge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWdzID0gVFJBQ0tFRF9UQUdTLmdldChvYmopO1xuXG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFncyA9IG5ldyBNYXAoKTtcblxuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -9,4 +9,8 @@ 'use strict';

exports.consume = consume;
exports.isTracking = isTracking;
exports.untrack = untrack;
exports.trackedData = trackedData;
var _env = require('@glimmer/env');
var _validators = require('./validators');

@@ -16,2 +20,4 @@

var _debug = require('./debug');
function _classCallCheck(instance, Constructor) {

@@ -51,2 +57,5 @@ if (!(instance instanceof Constructor)) {

this.tags.add(tag);
if (_env.DEBUG) {
(0, _debug.markTagAsConsumed)(tag, new Error());
}
this.last = tag;

@@ -73,4 +82,6 @@ };

}();
//////////
function track(callback) {
function track(callback, debuggingContext) {
var parent = CURRENT_TRACKER;

@@ -80,3 +91,7 @@ var current = new Tracker();

try {
callback();
if (_env.DEBUG) {
(0, _debug.runInAutotrackingTransaction)(callback, debuggingContext);
} else {
callback();
}
} finally {

@@ -92,2 +107,14 @@ CURRENT_TRACKER = parent;

}
function isTracking() {
return CURRENT_TRACKER !== null;
}
function untrack(callback) {
var parent = CURRENT_TRACKER;
CURRENT_TRACKER = null;
try {
callback();
} finally {
CURRENT_TRACKER = parent;
}
}
//////////

@@ -111,4 +138,7 @@ var EPOCH = exports.EPOCH = (0, _validators.createTag)();

function setter(self, value) {
if (_env.DEBUG) {
(0, _debug.assertTagNotConsumed)((0, _meta.tagFor)(self, key), self, key, true);
}
(0, _validators.dirty)(EPOCH);
(0, _meta.dirtyTag)(self, key);
(0, _meta.dirtyTagFor)(self, key);
values.set(self, value);

@@ -118,2 +148,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBZ0RNLEssR0FBQSxLO1FBZUEsTyxHQUFBLE87UUFhQSxXLEdBQUEsVzs7QUE1RU47O0FBRUE7Ozs7Ozs7O0FBSUE7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFJLGtCQUFKLElBQUE7QUFFQTs7OztJQUdBLFU7QUFBQSxhQUFBLE9BQUEsR0FBQTtBQUFBLHdCQUFBLElBQUEsRUFBQSxPQUFBOztBQUNVLGFBQUEsSUFBQSxHQUFPLElBQVAsR0FBTyxFQUFQO0FBQ0EsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQW9CVDs7c0JBbEJDLEcsZ0JBQUEsRyxFQUFZO0FBQ1YsYUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLEdBQUE7QUFDQSxhQUFBLElBQUEsR0FBQSxHQUFBOzs7c0JBR0YsTyxzQkFBTztBQUFBLFlBQUEsT0FBQSxLQUFBLElBQUE7O0FBR0wsWUFBSSxLQUFBLElBQUEsS0FBSixDQUFBLEVBQXFCO0FBQ25CLG1CQUFBLHdCQUFBO0FBREYsU0FBQSxNQUVPLElBQUksS0FBQSxJQUFBLEtBQUosQ0FBQSxFQUFxQjtBQUMxQixtQkFBTyxLQUFQLElBQUE7QUFESyxTQUFBLE1BRUE7QUFDTCxnQkFBSSxVQUFKLEVBQUE7QUFDQSxpQkFBQSxPQUFBLENBQWEsVUFBQSxHQUFBLEVBQUE7QUFBQSx1QkFBTyxRQUFBLElBQUEsQ0FBcEIsR0FBb0IsQ0FBUDtBQUFiLGFBQUE7QUFDQSxtQkFBTyx5QkFBUCxPQUFPLENBQVA7QUFDRDs7Ozs7O0FBSUMsU0FBQSxLQUFBLENBQUEsUUFBQSxFQUFvQztBQUN4QyxRQUFJLFNBQUosZUFBQTtBQUNBLFFBQUksVUFBVSxJQUFkLE9BQWMsRUFBZDtBQUVBLHNCQUFBLE9BQUE7QUFFQSxRQUFJO0FBQ0Y7QUFERixLQUFBLFNBRVU7QUFDUiwwQkFBQSxNQUFBO0FBQ0Q7QUFFRCxXQUFPLFFBQVAsT0FBTyxFQUFQO0FBQ0Q7QUFFSyxTQUFBLE9BQUEsQ0FBQSxHQUFBLEVBQTBCO0FBQzlCLFFBQUksb0JBQUosSUFBQSxFQUE4QjtBQUM1Qix3QkFBQSxHQUFBLENBQUEsR0FBQTtBQUNEO0FBQ0Y7QUFFRDtBQUVPLElBQU0sd0JBQU4sNEJBQUE7QUFLRCxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQUEsV0FBQSxFQUVvQjtBQUV4QixRQUFJLFNBQVMsSUFBYixPQUFhLEVBQWI7QUFDQSxRQUFJLGlCQUFpQixPQUFBLFdBQUEsS0FBckIsVUFBQTtBQUVBLGFBQUEsTUFBQSxDQUFBLElBQUEsRUFBdUI7QUFDckIsZ0JBQVEsa0JBQUEsSUFBQSxFQUFSLEdBQVEsQ0FBUjtBQUVBLFlBQUEsUUFBQSxLQUFBLENBQUE7QUFFQTtBQUNBLFlBQUksa0JBQWtCLENBQUMsT0FBQSxHQUFBLENBQXZCLElBQXVCLENBQXZCLEVBQXlDO0FBQ3ZDLG9CQUFBLGFBQUE7QUFDQSxtQkFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFGRixTQUFBLE1BR087QUFDTCxvQkFBUSxPQUFBLEdBQUEsQ0FBUixJQUFRLENBQVI7QUFDRDtBQUVELGVBQUEsS0FBQTtBQUNEO0FBRUQsYUFBQSxNQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBb0M7QUFDbEMsK0JBQUEsS0FBQTtBQUNBLDRCQUFBLElBQUEsRUFBQSxHQUFBO0FBQ0EsZUFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFDRDtBQUVELFdBQU8sRUFBQSxRQUFBLE1BQUEsRUFBUCxRQUFBLE1BQU8sRUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFnLCBjb21iaW5lLCBDT05TVEFOVF9UQUcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgY3JlYXRlVGFnLCBkaXJ0eSB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB0YWdGb3IsIGRpcnR5VGFnIH0gZnJvbSAnLi9tZXRhJztcblxudHlwZSBPcHRpb248VD4gPSBUIHwgbnVsbDtcblxuLyoqXG4gKiBXaGVuZXZlciBhIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaXMgZW50ZXJlZCwgdGhlIGN1cnJlbnQgdHJhY2tlciBpc1xuICogc2F2ZWQgb2ZmIGFuZCBhIG5ldyB0cmFja2VyIGlzIHJlcGxhY2VkLlxuICpcbiAqIEFueSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgYXJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHRyYWNrZXIuXG4gKlxuICogV2hlbiBhIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaXMgZXhpdGVkLCB0aGUgdHJhY2tlcidzIHRhZ3MgYXJlXG4gKiBjb21iaW5lZCBhbmQgYWRkZWQgdG8gdGhlIHBhcmVudCB0cmFja2VyLlxuICpcbiAqIFRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0IGVhY2ggdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBoYXMgYSB0YWdcbiAqIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRyYWNrZWQgcHJvcGVydGllcyBjb25zdW1lZCBpbnNpZGUgb2ZcbiAqIGl0c2VsZiwgaW5jbHVkaW5nIGNoaWxkIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydGllcy5cbiAqL1xubGV0IENVUlJFTlRfVFJBQ0tFUjogT3B0aW9uPFRyYWNrZXI+ID0gbnVsbDtcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCB0aGF0IHRyYWNrcyBAdHJhY2tlZCBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBjb25zdW1lZC5cbiAqL1xuY2xhc3MgVHJhY2tlciB7XG4gIHByaXZhdGUgdGFncyA9IG5ldyBTZXQ8VGFnPigpO1xuICBwcml2YXRlIGxhc3Q6IE9wdGlvbjxUYWc+ID0gbnVsbDtcblxuICBhZGQodGFnOiBUYWcpIHtcbiAgICB0aGlzLnRhZ3MuYWRkKHRhZyk7XG4gICAgdGhpcy5sYXN0ID0gdGFnO1xuICB9XG5cbiAgY29tYmluZSgpOiBUYWcge1xuICAgIGxldCB7IHRhZ3MgfSA9IHRoaXM7XG5cbiAgICBpZiAodGFncy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gQ09OU1RBTlRfVEFHO1xuICAgIH0gZWxzZSBpZiAodGFncy5zaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0IGFzIFRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhZ3NBcnI6IFRhZ1tdID0gW107XG4gICAgICB0YWdzLmZvckVhY2godGFnID0+IHRhZ3NBcnIucHVzaCh0YWcpKTtcbiAgICAgIHJldHVybiBjb21iaW5lKHRhZ3NBcnIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpOiBUYWcge1xuICBsZXQgcGFyZW50ID0gQ1VSUkVOVF9UUkFDS0VSO1xuICBsZXQgY3VycmVudCA9IG5ldyBUcmFja2VyKCk7XG5cbiAgQ1VSUkVOVF9UUkFDS0VSID0gY3VycmVudDtcblxuICB0cnkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSID0gcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQuY29tYmluZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZSh0YWc6IFRhZykge1xuICBpZiAoQ1VSUkVOVF9UUkFDS0VSICE9PSBudWxsKSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSLmFkZCh0YWcpO1xuICB9XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IEVQT0NIID0gY3JlYXRlVGFnKCk7XG5cbmV4cG9ydCB0eXBlIEdldHRlcjxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSAoc2VsZjogVCkgPT4gVFtLXSB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIFNldHRlcjxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSAoc2VsZjogVCwgdmFsdWU6IFRbS10pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFja2VkRGF0YTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIGtleTogSyxcbiAgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUW0tdXG4pOiB7IGdldHRlcjogR2V0dGVyPFQsIEs+OyBzZXR0ZXI6IFNldHRlcjxULCBLPiB9IHtcbiAgbGV0IHZhbHVlcyA9IG5ldyBXZWFrTWFwPFQsIFRbS10+KCk7XG4gIGxldCBoYXNJbml0aWFsaXplciA9IHR5cGVvZiBpbml0aWFsaXplciA9PT0gJ2Z1bmN0aW9uJztcblxuICBmdW5jdGlvbiBnZXR0ZXIoc2VsZjogVCkge1xuICAgIGNvbnN1bWUodGFnRm9yKHNlbGYsIGtleSkpO1xuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgLy8gSWYgdGhlIGZpZWxkIGhhcyBuZXZlciBiZWVuIGluaXRpYWxpemVkLCB3ZSBzaG91bGQgaW5pdGlhbGl6ZSBpdFxuICAgIGlmIChoYXNJbml0aWFsaXplciAmJiAhdmFsdWVzLmhhcyhzZWxmKSkge1xuICAgICAgdmFsdWUgPSBpbml0aWFsaXplciEoKTtcbiAgICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlcy5nZXQoc2VsZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGVyKHNlbGY6IFQsIHZhbHVlOiBUW0tdKTogdm9pZCB7XG4gICAgZGlydHkoRVBPQ0gpO1xuICAgIGRpcnR5VGFnKHNlbGYsIGtleSk7XG4gICAgdmFsdWVzLnNldChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4geyBnZXR0ZXIsIHNldHRlciB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBd0RNLEssR0FBQSxLO1FBbUJBLE8sR0FBQSxPO1FBTUEsVSxHQUFBLFU7UUFJQSxPLEdBQUEsTztRQWtCQSxXLEdBQUEsVzs7QUF2R047O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBSUE7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFJLGtCQUFKLElBQUE7QUFFQTs7OztJQUdBLFU7QUFBQSxhQUFBLE9BQUEsR0FBQTtBQUFBLHdCQUFBLElBQUEsRUFBQSxPQUFBOztBQUNVLGFBQUEsSUFBQSxHQUFPLElBQVAsR0FBTyxFQUFQO0FBQ0EsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQXlCVDs7c0JBdkJDLEcsZ0JBQUEsRyxFQUFZO0FBQ1YsYUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLEdBQUE7QUFFQSxZQUFBLFVBQUEsRUFBVztBQUNULDBDQUFBLEdBQUEsRUFBd0IsSUFBeEIsS0FBd0IsRUFBeEI7QUFDRDtBQUVELGFBQUEsSUFBQSxHQUFBLEdBQUE7OztzQkFHRixPLHNCQUFPO0FBQUEsWUFBQSxPQUFBLEtBQUEsSUFBQTs7QUFHTCxZQUFJLEtBQUEsSUFBQSxLQUFKLENBQUEsRUFBcUI7QUFDbkIsbUJBQUEsd0JBQUE7QUFERixTQUFBLE1BRU8sSUFBSSxLQUFBLElBQUEsS0FBSixDQUFBLEVBQXFCO0FBQzFCLG1CQUFPLEtBQVAsSUFBQTtBQURLLFNBQUEsTUFFQTtBQUNMLGdCQUFJLFVBQUosRUFBQTtBQUNBLGlCQUFBLE9BQUEsQ0FBYSxVQUFBLEdBQUEsRUFBQTtBQUFBLHVCQUFPLFFBQUEsSUFBQSxDQUFwQixHQUFvQixDQUFQO0FBQWIsYUFBQTtBQUNBLG1CQUFPLHlCQUFQLE9BQU8sQ0FBUDtBQUNEOzs7OztBQUlMOzs7QUFFTSxTQUFBLEtBQUEsQ0FBQSxRQUFBLEVBQUEsZ0JBQUEsRUFBdUU7QUFDM0UsUUFBSSxTQUFKLGVBQUE7QUFDQSxRQUFJLFVBQVUsSUFBZCxPQUFjLEVBQWQ7QUFFQSxzQkFBQSxPQUFBO0FBRUEsUUFBSTtBQUNGLFlBQUEsVUFBQSxFQUFXO0FBQ1QscURBQUEsUUFBQSxFQUFBLGdCQUFBO0FBREYsU0FBQSxNQUVPO0FBQ0w7QUFDRDtBQUxILEtBQUEsU0FNVTtBQUNSLDBCQUFBLE1BQUE7QUFDRDtBQUVELFdBQU8sUUFBUCxPQUFPLEVBQVA7QUFDRDtBQUVLLFNBQUEsT0FBQSxDQUFBLEdBQUEsRUFBMEI7QUFDOUIsUUFBSSxvQkFBSixJQUFBLEVBQThCO0FBQzVCLHdCQUFBLEdBQUEsQ0FBQSxHQUFBO0FBQ0Q7QUFDRjtBQUVLLFNBQUEsVUFBQSxHQUFvQjtBQUN4QixXQUFPLG9CQUFQLElBQUE7QUFDRDtBQUVLLFNBQUEsT0FBQSxDQUFBLFFBQUEsRUFBc0M7QUFDMUMsUUFBSSxTQUFKLGVBQUE7QUFDQSxzQkFBQSxJQUFBO0FBRUEsUUFBSTtBQUNGO0FBREYsS0FBQSxTQUVVO0FBQ1IsMEJBQUEsTUFBQTtBQUNEO0FBQ0Y7QUFFRDtBQUVPLElBQU0sd0JBQU4sNEJBQUE7QUFLRCxTQUFBLFdBQUEsQ0FBQSxHQUFBLEVBQUEsV0FBQSxFQUVvQjtBQUV4QixRQUFJLFNBQVMsSUFBYixPQUFhLEVBQWI7QUFDQSxRQUFJLGlCQUFpQixPQUFBLFdBQUEsS0FBckIsVUFBQTtBQUVBLGFBQUEsTUFBQSxDQUFBLElBQUEsRUFBdUI7QUFDckIsZ0JBQVEsa0JBQUEsSUFBQSxFQUFSLEdBQVEsQ0FBUjtBQUVBLFlBQUEsUUFBQSxLQUFBLENBQUE7QUFFQTtBQUNBLFlBQUksa0JBQWtCLENBQUMsT0FBQSxHQUFBLENBQXZCLElBQXVCLENBQXZCLEVBQXlDO0FBQ3ZDLG9CQUFBLGFBQUE7QUFDQSxtQkFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFGRixTQUFBLE1BR087QUFDTCxvQkFBUSxPQUFBLEdBQUEsQ0FBUixJQUFRLENBQVI7QUFDRDtBQUVELGVBQUEsS0FBQTtBQUNEO0FBRUQsYUFBQSxNQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBb0M7QUFDbEMsWUFBQSxVQUFBLEVBQVc7QUFDVCw2Q0FBc0Isa0JBQUEsSUFBQSxFQUF0QixHQUFzQixDQUF0QixFQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQTtBQUNEO0FBRUQsK0JBQUEsS0FBQTtBQUNBLCtCQUFBLElBQUEsRUFBQSxHQUFBO0FBQ0EsZUFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFDRDtBQUVELFdBQU8sRUFBQSxRQUFBLE1BQUEsRUFBUCxRQUFBLE1BQU8sRUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVGFnLCBjb21iaW5lLCBjcmVhdGVUYWcsIGRpcnR5LCBDT05TVEFOVF9UQUcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgdGFnRm9yLCBkaXJ0eVRhZ0ZvciB9IGZyb20gJy4vbWV0YSc7XG5pbXBvcnQgeyBtYXJrVGFnQXNDb25zdW1lZCwgcnVuSW5BdXRvdHJhY2tpbmdUcmFuc2FjdGlvbiwgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxudHlwZSBPcHRpb248VD4gPSBUIHwgbnVsbDtcblxuLyoqXG4gKiBXaGVuZXZlciBhIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaXMgZW50ZXJlZCwgdGhlIGN1cnJlbnQgdHJhY2tlciBpc1xuICogc2F2ZWQgb2ZmIGFuZCBhIG5ldyB0cmFja2VyIGlzIHJlcGxhY2VkLlxuICpcbiAqIEFueSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgYXJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHRyYWNrZXIuXG4gKlxuICogV2hlbiBhIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaXMgZXhpdGVkLCB0aGUgdHJhY2tlcidzIHRhZ3MgYXJlXG4gKiBjb21iaW5lZCBhbmQgYWRkZWQgdG8gdGhlIHBhcmVudCB0cmFja2VyLlxuICpcbiAqIFRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0IGVhY2ggdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBoYXMgYSB0YWdcbiAqIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRyYWNrZWQgcHJvcGVydGllcyBjb25zdW1lZCBpbnNpZGUgb2ZcbiAqIGl0c2VsZiwgaW5jbHVkaW5nIGNoaWxkIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydGllcy5cbiAqL1xubGV0IENVUlJFTlRfVFJBQ0tFUjogT3B0aW9uPFRyYWNrZXI+ID0gbnVsbDtcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCB0aGF0IHRyYWNrcyBAdHJhY2tlZCBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBjb25zdW1lZC5cbiAqL1xuY2xhc3MgVHJhY2tlciB7XG4gIHByaXZhdGUgdGFncyA9IG5ldyBTZXQ8VGFnPigpO1xuICBwcml2YXRlIGxhc3Q6IE9wdGlvbjxUYWc+ID0gbnVsbDtcblxuICBhZGQodGFnOiBUYWcpIHtcbiAgICB0aGlzLnRhZ3MuYWRkKHRhZyk7XG5cbiAgICBpZiAoREVCVUcpIHtcbiAgICAgIG1hcmtUYWdBc0NvbnN1bWVkISh0YWcsIG5ldyBFcnJvcigpKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSB0YWc7XG4gIH1cblxuICBjb21iaW5lKCk6IFRhZyB7XG4gICAgbGV0IHsgdGFncyB9ID0gdGhpcztcblxuICAgIGlmICh0YWdzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgfSBlbHNlIGlmICh0YWdzLnNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhc3QgYXMgVGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdGFnc0FycjogVGFnW10gPSBbXTtcbiAgICAgIHRhZ3MuZm9yRWFjaCh0YWcgPT4gdGFnc0Fyci5wdXNoKHRhZykpO1xuICAgICAgcmV0dXJuIGNvbWJpbmUodGFnc0Fycik7XG4gICAgfVxuICB9XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBkZWJ1Z2dpbmdDb250ZXh0Pzogc3RyaW5nIHwgZmFsc2UpOiBUYWcge1xuICBsZXQgcGFyZW50ID0gQ1VSUkVOVF9UUkFDS0VSO1xuICBsZXQgY3VycmVudCA9IG5ldyBUcmFja2VyKCk7XG5cbiAgQ1VSUkVOVF9UUkFDS0VSID0gY3VycmVudDtcblxuICB0cnkge1xuICAgIGlmIChERUJVRykge1xuICAgICAgcnVuSW5BdXRvdHJhY2tpbmdUcmFuc2FjdGlvbiEoY2FsbGJhY2ssIGRlYnVnZ2luZ0NvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBDVVJSRU5UX1RSQUNLRVIgPSBwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gY3VycmVudC5jb21iaW5lKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lKHRhZzogVGFnKSB7XG4gIGlmIChDVVJSRU5UX1RSQUNLRVIgIT09IG51bGwpIHtcbiAgICBDVVJSRU5UX1RSQUNLRVIuYWRkKHRhZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhY2tpbmcoKSB7XG4gIHJldHVybiBDVVJSRU5UX1RSQUNLRVIgIT09IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnRyYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gIGxldCBwYXJlbnQgPSBDVVJSRU5UX1RSQUNLRVI7XG4gIENVUlJFTlRfVFJBQ0tFUiA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIENVUlJFTlRfVFJBQ0tFUiA9IHBhcmVudDtcbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBFUE9DSCA9IGNyZWF0ZVRhZygpO1xuXG5leHBvcnQgdHlwZSBHZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQpID0+IFRbS10gfCB1bmRlZmluZWQ7XG5leHBvcnQgdHlwZSBTZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQsIHZhbHVlOiBUW0tdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tlZERhdGE8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBrZXk6IEssXG4gIGluaXRpYWxpemVyPzogKCkgPT4gVFtLXVxuKTogeyBnZXR0ZXI6IEdldHRlcjxULCBLPjsgc2V0dGVyOiBTZXR0ZXI8VCwgSz4gfSB7XG4gIGxldCB2YWx1ZXMgPSBuZXcgV2Vha01hcDxULCBUW0tdPigpO1xuICBsZXQgaGFzSW5pdGlhbGl6ZXIgPSB0eXBlb2YgaW5pdGlhbGl6ZXIgPT09ICdmdW5jdGlvbic7XG5cbiAgZnVuY3Rpb24gZ2V0dGVyKHNlbGY6IFQpIHtcbiAgICBjb25zdW1lKHRhZ0ZvcihzZWxmLCBrZXkpKTtcblxuICAgIGxldCB2YWx1ZTtcblxuICAgIC8vIElmIHRoZSBmaWVsZCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCwgd2Ugc2hvdWxkIGluaXRpYWxpemUgaXRcbiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIgJiYgIXZhbHVlcy5oYXMoc2VsZikpIHtcbiAgICAgIHZhbHVlID0gaW5pdGlhbGl6ZXIhKCk7XG4gICAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZXMuZ2V0KHNlbGYpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRlcihzZWxmOiBULCB2YWx1ZTogVFtLXSk6IHZvaWQge1xuICAgIGlmIChERUJVRykge1xuICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHRhZ0ZvcihzZWxmLCBrZXkpLCBzZWxmLCBrZXksIHRydWUpO1xuICAgIH1cblxuICAgIGRpcnR5KEVQT0NIKTtcbiAgICBkaXJ0eVRhZ0ZvcihzZWxmLCBrZXkpO1xuICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgZ2V0dGVyLCBzZXR0ZXIgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -6,2 +6,3 @@ 'use strict';

});
exports.CURRENT_TAG = exports.VOLATILE_TAG = exports.CONSTANT_TAG = exports.update = exports.dirty = exports.ALLOW_CYCLES = exports.COMPUTE = exports.VOLATILE = exports.INITIAL = exports.CONSTANT = undefined;
exports.bump = bump;

@@ -16,2 +17,9 @@ exports.value = value;

exports.createCombinatorTag = createCombinatorTag;
var _env = require('@glimmer/env');
var _utils = require('./utils');
var _debug = require('./debug');
function _classCallCheck(instance, Constructor) {

@@ -23,5 +31,2 @@ if (!(instance instanceof Constructor)) {

var symbol = typeof Symbol !== 'undefined' ? Symbol : function (key) {
return '__' + key + Math.floor(Math.random() * Date.now()) + '__';
};
var CONSTANT = exports.CONSTANT = 0;

@@ -35,3 +40,3 @@ var INITIAL = exports.INITIAL = 1;

//////////
var COMPUTE = exports.COMPUTE = symbol('TAG_COMPUTE');
var COMPUTE = exports.COMPUTE = (0, _utils.symbol)('TAG_COMPUTE');
//////////

@@ -52,3 +57,8 @@ /**

*/
function value(_tag) {
function value(tag) {
if (_env.DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
return $REVISION;

@@ -67,8 +77,21 @@ }

function validate(tag, snapshot) {
return snapshot >= tag[COMPUTE]();
if (_env.DEBUG) {
IS_VALIDATING = true;
}
var isValid = snapshot >= tag[COMPUTE]();
if (_env.DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
}
var TYPE = symbol('TAG_TYPE');
var IS_VALIDATING = void 0;
var TYPE = (0, _utils.symbol)('TAG_TYPE');
var ALLOW_CYCLES = exports.ALLOW_CYCLES = void 0;
if (false) {
exports.ALLOW_CYCLES = ALLOW_CYCLES = new WeakSet();
if (_env.DEBUG) {
exports.ALLOW_CYCLES = ALLOW_CYCLES = new WeakMap();
}

@@ -92,5 +115,22 @@

if (lastChecked !== $REVISION) {
if (this.isUpdating === true) {
if (_env.DEBUG && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
} else if (lastChecked !== $REVISION) {
this.isUpdating = true;
this.lastChecked = $REVISION;
if (_env.DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
try {

@@ -115,8 +155,2 @@ var subtags = this.subtags,

}
if (this.isUpdating === true) {
if (false && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
}
return this.lastValue;

@@ -126,3 +160,3 @@ };

MonomorphicTagImpl.update = function update(_tag, subtag) {
if (false && _tag[TYPE] !== 1 /* Updatable */) {
if (_env.DEBUG && _tag[TYPE] !== 1 /* Updatable */) {
throw new Error('Attempted to update a tag that was not updatable');

@@ -135,8 +169,6 @@ }

} else {
if (_env.DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
tag.subtag = subtag;
// subtag could be another type of tag, e.g. CURRENT_TAG or VOLATILE_TAG.
// If so, lastChecked/lastValue will be undefined, result in these being
// NaN. This is fine, it will force the system to recompute.
tag.lastChecked = Math.min(tag.lastChecked, subtag.lastChecked);
tag.lastValue = Math.max(tag.lastValue, subtag.lastValue);
}

@@ -146,5 +178,10 @@ };

MonomorphicTagImpl.dirty = function dirty(tag) {
if (false && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
if (_env.DEBUG && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
throw new Error('Attempted to dirty a tag that was not dirtyable');
}
if (_env.DEBUG) {
// Usually by this point, we've already asserted with better error information,
// but this is our last line of defense.
(0, _debug.assertTagNotConsumed)(tag);
}
tag.revision = ++$REVISION;

@@ -227,2 +264,2 @@ };

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztRQTBCTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQWNBLFEsR0FBQSxRO1FBeUlBLFMsR0FBQSxTO1FBSUEsa0IsR0FBQSxrQjtRQVFBLE8sR0FBQSxPO1FBSUEsVSxHQUFBLFU7UUEwQkEsTyxHQUFBLE87UUFZQSxtQixHQUFBLG1COzs7Ozs7O0FBbFFOLElBQU0sU0FDSixPQUFBLE1BQUEsS0FBQSxXQUFBLEdBQUEsTUFBQSxHQUVJLFVBQUEsR0FBQSxFQUFBO0FBQUEsV0FBQSxPQUFBLEdBQUEsR0FBNEIsS0FBQSxLQUFBLENBQVcsS0FBQSxNQUFBLEtBQWdCLEtBSDdELEdBRzZELEVBQTNCLENBQTVCLEdBQUEsSUFBQTtBQUhOLENBQUE7QUFTTyxJQUFNLDhCQUFOLENBQUE7QUFDQSxJQUFNLDRCQUFOLENBQUE7QUFDQSxJQUFNLDhCQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFTSxTQUFBLElBQUEsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFTyxJQUFNLDRCQUF5QixPQUEvQixhQUErQixDQUEvQjtBQWdCUDtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNNLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBeUI7QUFDN0IsV0FBQSxTQUFBO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxRQUFBLEVBQStDO0FBQ25ELFdBQU8sWUFBWSxJQUFuQixPQUFtQixHQUFuQjtBQUNEO0FBaUJELElBQU0sT0FBc0IsT0FBNUIsVUFBNEIsQ0FBNUI7QUFFTyxJQUFBLHNDQUFBLEtBQUEsQ0FBQTtBQUVQLElBQUEsS0FBQSxFQUFXO0FBQ1QsWUFISyxZQUdMLGtCQUFlLElBQWYsT0FBZSxFQUFmO0FBQ0Q7O0lBcUJELHFCO0FBV0UsYUFBQSxrQkFB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RyB9IGZyb20gJ0BnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzJztcblxuLy8vLy8vLy8vL1xuXG4vLyB1dGlsc1xudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzICgoXG4gIGs6IGluZmVyIElcbikgPT4gdm9pZClcbiAgPyBJXG4gIDogbmV2ZXI7XG5cbmNvbnN0IHN5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnXG4gICAgPyBTeW1ib2xcbiAgICA6IChrZXk6IHN0cmluZykgPT4gYF9fJHtrZXl9JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBEYXRlLm5vdygpKX1fX2AgYXMgYW55O1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUoX3RhZzogVGFnKTogUmV2aXNpb24ge1xuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIHJldHVybiBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha1NldDxVcGRhdGFibGVUYWc+O1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtTZXQoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heChyZXZpc2lvbiwgc3VidGFnW0NPTVBVVEVdKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMuaGFzKHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3ljbGVzIGluIHRhZ3MgYXJlIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSArKyRSRVZJU0lPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuc3VidGFnID0gc3VidGFnO1xuXG4gICAgICAvLyBzdWJ0YWcgY291bGQgYmUgYW5vdGhlciB0eXBlIG9mIHRhZywgZS5nLiBDVVJSRU5UX1RBRyBvciBWT0xBVElMRV9UQUcuXG4gICAgICAvLyBJZiBzbywgbGFzdENoZWNrZWQvbGFzdFZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkLCByZXN1bHQgaW4gdGhlc2UgYmVpbmdcbiAgICAgIC8vIE5hTi4gVGhpcyBpcyBmaW5lLCBpdCB3aWxsIGZvcmNlIHRoZSBzeXN0ZW0gdG8gcmVjb21wdXRlLlxuICAgICAgdGFnLmxhc3RDaGVja2VkID0gTWF0aC5taW4odGFnLmxhc3RDaGVja2VkLCAoc3VidGFnIGFzIGFueSkubGFzdENoZWNrZWQpO1xuICAgICAgdGFnLmxhc3RWYWx1ZSA9IE1hdGgubWF4KHRhZy5sYXN0VmFsdWUsIChzdWJ0YWcgYXMgYW55KS5sYXN0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaXJ0eSh0YWc6IERpcnR5YWJsZVRhZyB8IFVwZGF0YWJsZVRhZykge1xuICAgIGlmIChcbiAgICAgIERFQlVHICYmXG4gICAgICAhKHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUgfHwgdGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIGRpcnR5IGEgdGFnIHRoYXQgd2FzIG5vdCBkaXJ0eWFibGUnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFjTSxJLEdBQUEsSTtRQXNDQSxLLEdBQUEsSztRQW9CQSxRLEdBQUEsUTtRQWdMQSxTLEdBQUEsUztRQUlBLGtCLEdBQUEsa0I7UUFRQSxPLEdBQUEsTztRQUlBLFUsR0FBQSxVO1FBMEJBLE8sR0FBQSxPO1FBWUEsbUIsR0FBQSxtQjs7QUE5U047O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBTU8sSUFBTSw4QkFBTixDQUFBO0FBQ0EsSUFBTSw0QkFBTixDQUFBO0FBQ0EsSUFBTSw4QkFBTixnQkFBQSxDLENBQTZDO0FBRXBELElBQUksWUFBSixPQUFBO0FBRU0sU0FBQSxJQUFBLEdBQWM7QUFDbEI7QUFDRDtBQUVEO0FBRU8sSUFBTSw0QkFBeUIsbUJBQS9CLGFBQStCLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY00sU0FBQSxLQUFBLENBQUEsR0FBQSxFQUF3QjtBQUM1QixRQUFBLFVBQUEsRUFBVztBQUNUO0FBQ0E7QUFDQSxZQUFBLE9BQUE7QUFDRDtBQUVELFdBQUEsU0FBQTtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7QUFVTSxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsUUFBQSxFQUErQztBQUNuRCxRQUFBLFVBQUEsRUFBVztBQUNULHdCQUFBLElBQUE7QUFDRDtBQUVELFFBQUksVUFBVSxZQUFZLElBQTFCLE9BQTBCLEdBQTFCO0FBRUEsUUFBQSxVQUFBLEVBQVc7QUFDVCx3QkFBQSxLQUFBO0FBRUEsWUFBQSxPQUFBLEVBQWE7QUFDWDtBQUNBO0FBQ0EsZ0JBQUEsT0FBQTtBQUNEO0FBQ0Y7QUFFRCxXQUFBLE9BQUE7QUFDRDtBQUVELElBQUEsZ0JBQUEsS0FBQSxDQUFBO0FBaUJBLElBQU0sT0FBc0IsbUJBQTVCLFVBQTRCLENBQTVCO0FBRU8sSUFBQSxzQ0FBQSxLQUFBLENBQUE7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QUFRLEtBQVIsTUFBQTtBQUNFLGFBQUEsQ0FBQTtBQUNFLG1CQUFBLFlBQUE7QUFDRixhQUFBLENBQUE7QUFDRSxtQkFBTyxLQUFQLENBQU8sQ0FBUDtBQUNGO0FBQ0UsZ0JBQUksTUFBTSxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUodGFnOiBUYWcpOiBSZXZpc2lvbiB7XG4gIGlmIChERUJVRykge1xuICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAvLyBpbnZhbGlkIHVwZGF0ZXMgbGF0ZXIgb24uXG4gICAgdGFnW0NPTVBVVEVdKCk7XG4gIH1cblxuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIGlmIChERUJVRykge1xuICAgIElTX1ZBTElEQVRJTkcgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGlzVmFsaWQgPSBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcblxuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gZmFsc2U7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gY29tcHV0ZSB0byBjYWNoZSB0aGUgbGF0ZXN0IHZhbHVlLCB3aGljaCB3aWxsIHByZXZlbnQgdXMgZnJvbSBkb2luZ1xuICAgICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgICAgdGFnW0NPTVBVVEVdKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzVmFsaWQ7XG59XG5cbmxldCBJU19WQUxJREFUSU5HOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4vLy8vLy8vLy8vXG5cbi8qKlxuICogVGhpcyBlbnVtIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwb3NzaWJsZSB0YWcgdHlwZXMgZm9yIHRoZSBtb25vbW9ycGhpYyB0YWcgY2xhc3MuXG4gKiBPdGhlciBjdXN0b20gdGFnIGNsYXNzZXMgY2FuIGV4aXN0LCBzdWNoIGFzIEN1cnJlbnRUYWcgYW5kIFZvbGF0aWxlVGFnLCBidXQgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLCBhbnkgdHlwZSBvZiB0YWcgdGhhdCBpcyBtZWFudCB0byBiZSB1c2VkIGZyZXF1ZW50bHkgc2hvdWxkXG4gKiBiZSBhZGRlZCB0byB0aGUgbW9ub21vcnBoaWMgdGFnLlxuICovXG5jb25zdCBlbnVtIE1vbm9tb3JwaGljVGFnVHlwZXMge1xuICBEaXJ0eWFibGUsXG4gIFVwZGF0YWJsZSxcbiAgQ29tYmluYXRvcixcbiAgQ29uc3RhbnQsXG59XG5cbmNvbnN0IFRZUEU6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ1RBR19UWVBFJyk7XG5cbmV4cG9ydCBsZXQgQUxMT1dfQ1lDTEVTOiBXZWFrTWFwPFRhZywgYm9vbGVhbj4gfCB1bmRlZmluZWQ7XG5cbmlmIChERUJVRykge1xuICBBTExPV19DWUNMRVMgPSBuZXcgV2Vha01hcCgpO1xufVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdCYXNlPFQgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ1R5cGVzPiBleHRlbmRzIFRhZyB7XG4gIFtUWVBFXTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJ0eWFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluYXRvclRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3I+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50VGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQ+IHt9XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ01hcHBpbmcge1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGVdOiBEaXJ0eWFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZV06IFVwZGF0YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcl06IENvbWJpbmF0b3JUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50XTogQ29uc3RhbnRUYWc7XG59XG5cbnR5cGUgTW9ub21vcnBoaWNUYWcgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnTWFwcGluZ1tNb25vbW9ycGhpY1RhZ1R5cGVzXT47XG50eXBlIE1vbm9tb3JwaGljVGFnVHlwZSA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdUeXBlcz47XG5cbmNsYXNzIE1vbm9tb3JwaGljVGFnSW1wbCBpbXBsZW1lbnRzIE1vbm9tb3JwaGljVGFnIHtcbiAgcHJpdmF0ZSByZXZpc2lvbiA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdENoZWNrZWQgPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RWYWx1ZSA9IElOSVRJQUw7XG5cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3VidGFnOiBUYWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJ0YWdzOiBUYWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoREVCVUcpIHtcbiAgICAgICAgLy8gSW4gREVCVUcsIHdlIGRvbid0IGNhY2hlIHdoaWxlIHZhbGlkYXRpbmcgb25seSwgYmVjYXVzZSBpdCBpcyB2YWxpZFxuICAgICAgICAvLyB1cGRhdGUgYSB0YWcgYmV0d2VlbiBjYWxsaW5nIGB2YWxpZGF0ZSgpYCBhbmQgYHZhbHVlKClgLiBPbmNlIHlvdVxuICAgICAgICAvLyBjYWxsIGB2YWx1ZSgpYCBvbiBhIHRhZywgaXRzIHJldmlzaW9uIGlzIGVmZmVjdGl2ZWx5IGxvY2tlZCBpbiwgYW5kXG4gICAgICAgIC8vIGlmIHlvdSBhdHRlbXB0IHRvIHVwZGF0ZSBpdCB0byBhIHRhZyB0aGF0IGlzIG1vcmUgcmVjZW50IGl0IGNvdWxkXG4gICAgICAgIC8vIGJyZWFrIGFzc3VtcHRpb25zIGluIG91ciBzeXN0ZW0uIFRoaXMgaXMgd2h5IHRoZSBhc3NlcnRpb24gZXhpc3RzIGluXG4gICAgICAgIC8vIHRoZSBzdGF0aWMgYHVwZGF0ZSgpYCBtZXRob2QgYmVsb3cuXG4gICAgICAgIGlmICghSVNfVkFMSURBVElORykge1xuICAgICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgocmV2aXNpb24sIHN1YnRhZ1tDT01QVVRFXSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUoX3RhZzogVXBkYXRhYmxlVGFnLCBzdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcblxuICAgIGlmIChzdWJ0YWcgPT09IENPTlNUQU5UX1RBRykge1xuICAgICAgdGFnLnN1YnRhZyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgREVCVUcgJiZcbiAgICAgICAgdGFnLmxhc3RDaGVja2VkID09PSAkUkVWSVNJT04gJiZcbiAgICAgICAgKHN1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpW0NPTVBVVEVdKCkgPiB0YWcubGFzdFZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCVUc6IGF0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgd2l0aCBhIHRhZyB0aGF0IGhhcyBhIG1vcmUgcmVjZW50IHJldmlzaW9uIGFzIGl0cyB2YWx1ZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
export { ALLOW_CYCLES, bump, combine, COMPUTE, CONSTANT_TAG, CONSTANT, createCombinatorTag, createTag, createUpdatableTag, CURRENT_TAG, dirty, INITIAL, isConst, isConstTag, update, validate, value, VOLATILE_TAG, VOLATILE } from './lib/validators';
export { dirtyTag, tagFor, updateTag } from './lib/meta';
export { track, consume, EPOCH, trackedData } from './lib/tracking';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLFlBREYsRUFFRSxJQUZGLEVBSUUsT0FKRixFQUtFLE9BTEYsRUFNRSxZQU5GLEVBT0UsUUFQRixFQVNFLG1CQVRGLEVBVUUsU0FWRixFQVdFLGtCQVhGLEVBWUUsV0FaRixFQWFFLEtBYkYsRUFpQkUsT0FqQkYsRUFrQkUsT0FsQkYsRUFtQkUsVUFuQkYsRUF3QkUsTUF4QkYsRUF5QkUsUUF6QkYsRUEwQkUsS0ExQkYsRUEyQkUsWUEzQkYsRUE0QkUsUUE1QkYsUUE2Qk8sa0JBN0JQO0FBK0JBLFNBQVMsUUFBVCxFQUFtQixNQUFuQixFQUEyQixTQUEzQixRQUE0QyxZQUE1QztBQUVBLFNBQVMsS0FBVCxFQUFnQixPQUFoQixFQUF5QixLQUF6QixFQUFnQyxXQUFoQyxRQUFtRCxnQkFBbkQiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBBTExPV19DWUNMRVMsXG4gIGJ1bXAsXG4gIENvbWJpbmF0b3JUYWcsXG4gIGNvbWJpbmUsXG4gIENPTVBVVEUsXG4gIENPTlNUQU5UX1RBRyxcbiAgQ09OU1RBTlQsXG4gIENvbnN0YW50VGFnLFxuICBjcmVhdGVDb21iaW5hdG9yVGFnLFxuICBjcmVhdGVUYWcsXG4gIGNyZWF0ZVVwZGF0YWJsZVRhZyxcbiAgQ1VSUkVOVF9UQUcsXG4gIGRpcnR5LFxuICBEaXJ0eWFibGVUYWcsXG4gIEVudGl0eVRhZyxcbiAgRW50aXR5VGFnZ2VkLFxuICBJTklUSUFMLFxuICBpc0NvbnN0LFxuICBpc0NvbnN0VGFnLFxuICBSZXZpc2lvbixcbiAgVGFnLFxuICBUYWdnZWQsXG4gIFVwZGF0YWJsZVRhZyxcbiAgdXBkYXRlLFxuICB2YWxpZGF0ZSxcbiAgdmFsdWUsXG4gIFZPTEFUSUxFX1RBRyxcbiAgVk9MQVRJTEUsXG59IGZyb20gJy4vbGliL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgeyBkaXJ0eVRhZywgdGFnRm9yLCB1cGRhdGVUYWcgfSBmcm9tICcuL2xpYi9tZXRhJztcblxuZXhwb3J0IHsgdHJhY2ssIGNvbnN1bWUsIEVQT0NILCB0cmFja2VkRGF0YSB9IGZyb20gJy4vbGliL3RyYWNraW5nJztcbiJdLCJzb3VyY2VSb290IjoiIn0=
export { dirtyTagFor, tagFor, setPropertyDidChange } from './lib/meta';
export { consume, EPOCH, isTracking, track, trackedData, untrack } from './lib/tracking';
export { setAutotrackingTransactionEnv, runInAutotrackingTransaction, deprecateMutationsInAutotrackingTransaction } from './lib/debug';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLFlBREYsRUFFRSxJQUZGLEVBSUUsT0FKRixFQUtFLE9BTEYsRUFNRSxZQU5GLEVBT0UsUUFQRixFQVNFLG1CQVRGLEVBVUUsU0FWRixFQVdFLGtCQVhGLEVBWUUsV0FaRixFQWFFLEtBYkYsRUFpQkUsT0FqQkYsRUFrQkUsT0FsQkYsRUFtQkUsVUFuQkYsRUF3QkUsTUF4QkYsRUF5QkUsUUF6QkYsRUEwQkUsS0ExQkYsRUEyQkUsWUEzQkYsRUE0QkUsUUE1QkYsUUE2Qk8sa0JBN0JQO0FBK0JBLFNBQVMsV0FBVCxFQUFzQixNQUF0QixFQUE4QixvQkFBOUIsUUFBMEQsWUFBMUQ7QUFFQSxTQUFTLE9BQVQsRUFBa0IsS0FBbEIsRUFBeUIsVUFBekIsRUFBcUMsS0FBckMsRUFBNEMsV0FBNUMsRUFBeUQsT0FBekQsUUFBd0UsZ0JBQXhFO0FBRUEsU0FDRSw2QkFERixFQUVFLDRCQUZGLEVBR0UsMkNBSEYsUUFJTyxhQUpQIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWdGb3IsIHRhZ0Zvciwgc2V0UHJvcGVydHlEaWRDaGFuZ2UgfSBmcm9tICcuL2xpYi9tZXRhJztcblxuZXhwb3J0IHsgY29uc3VtZSwgRVBPQ0gsIGlzVHJhY2tpbmcsIHRyYWNrLCB0cmFja2VkRGF0YSwgdW50cmFjayB9IGZyb20gJy4vbGliL3RyYWNraW5nJztcblxuZXhwb3J0IHtcbiAgc2V0QXV0b3RyYWNraW5nVHJhbnNhY3Rpb25FbnYsXG4gIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG4gIGRlcHJlY2F0ZU11dGF0aW9uc0luQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG59IGZyb20gJy4vbGliL2RlYnVnJztcbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -1,15 +0,25 @@

import { dirty, update, createUpdatableTag, CONSTANT_TAG, isConstTag } from './validators';
const TRACKED_TAGS = new WeakMap();
import { DEBUG } from '@glimmer/env';
import { dirty, createUpdatableTag, CONSTANT_TAG } from './validators';
import { assertTagNotConsumed } from './debug';
export let propertyDidChange = function () {};
export function setPropertyDidChange(cb) {
propertyDidChange = cb;
}
function isObject(u) {
return typeof u === 'object' && u !== null;
return typeof u === 'object' && u !== null || typeof u === 'function';
}
export function dirtyTag(obj, key) {
const TRACKED_TAGS = new WeakMap();
export function dirtyTagFor(obj, key) {
if (isObject(obj)) {
let tag = tagFor(obj, key);
if (tag === undefined) {
updateTag(obj, key, createUpdatableTag());
} else if (isConstTag(tag)) {
throw new Error(`BUG: Can't update a constant tag`);
} else {
dirty(tag);
let tags = TRACKED_TAGS.get(obj);
// No tags have been setup for this object yet, return
if (tags === undefined) return;
// Dirty the tag for the specific property if it exists
let propertyTag = tags.get(key);
if (propertyTag !== undefined) {
if (DEBUG) {
assertTagNotConsumed(propertyTag, obj, key);
}
dirty(propertyTag);
propertyDidChange();
}

@@ -36,15 +46,2 @@ } else {

}
export function updateTag(obj, key, newTag) {
if (isObject(obj)) {
let tag = tagFor(obj, key);
if (isConstTag(tag)) {
throw new Error(`BUG: Can't update a constant tag`);
} else {
update(tag, newTag);
}
return tag;
} else {
throw new Error(`BUG: Can't update a tag for a primitive`);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUNFLEtBREYsRUFFRSxNQUZGLEVBR0Usa0JBSEYsRUFLRSxZQUxGLEVBTUUsVUFORixRQVFPLGNBUlA7QUFXQSxNQUFNLGVBQWUsSUFBSSxPQUFKLEVBQXJCO0FBRUEsU0FBUyxRQUFULENBQXFCLENBQXJCLEVBQXlCO0FBQ3ZCLFdBQU8sT0FBTyxDQUFQLEtBQWEsUUFBYixJQUF5QixNQUFNLElBQXRDO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsUUFBVixDQUFzQixHQUF0QixFQUE4QixHQUE5QixFQUEwQztBQUM5QyxRQUFJLFNBQVMsR0FBVCxDQUFKLEVBQW1CO0FBQ2pCLFlBQUksTUFBTSxPQUFPLEdBQVAsRUFBWSxHQUFaLENBQVY7QUFFQSxZQUFJLFFBQVEsU0FBWixFQUF1QjtBQUNyQixzQkFBVSxHQUFWLEVBQWUsR0FBZixFQUFvQixvQkFBcEI7QUFDRCxTQUZELE1BRU8sSUFBSSxXQUFXLEdBQVgsQ0FBSixFQUFxQjtBQUMxQixrQkFBTSxJQUFJLEtBQUosQ0FBVSxrQ0FBVixDQUFOO0FBQ0QsU0FGTSxNQUVBO0FBQ0wsa0JBQU0sR0FBTjtBQUNEO0FBQ0YsS0FWRCxNQVVPO0FBQ0wsY0FBTSxJQUFJLEtBQUosQ0FBVSx5Q0FBVixDQUFOO0FBQ0Q7QUFDRjtBQUlELE9BQU0sU0FBVSxNQUFWLENBQW9CLEdBQXBCLEVBQTRCLEdBQTVCLEVBQXdDO0FBQzVDLFFBQUksU0FBUyxHQUFULENBQUosRUFBbUI7QUFDakIsWUFBSSxPQUFPLGFBQWEsR0FBYixDQUFpQixHQUFqQixDQUFYO0FBRUEsWUFBSSxTQUFTLFNBQWIsRUFBd0I7QUFDdEIsbUJBQU8sSUFBSSxHQUFKLEVBQVA7QUFDQSx5QkFBYSxHQUFiLENBQWlCLEdBQWpCLEVBQXNCLElBQXRCO0FBQ0QsU0FIRCxNQUdPLElBQUksS0FBSyxHQUFMLENBQVMsR0FBVCxDQUFKLEVBQW1CO0FBQ3hCLG1CQUFPLEtBQUssR0FBTCxDQUFTLEdBQVQsQ0FBUDtBQUNEO0FBRUQsWUFBSSxNQUFNLG9CQUFWO0FBQ0EsYUFBSyxHQUFMLENBQVMsR0FBVCxFQUFjLEdBQWQ7QUFDQSxlQUFPLEdBQVA7QUFDRCxLQWJELE1BYU87QUFDTCxlQUFPLFlBQVA7QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFVLFNBQVYsQ0FBdUIsR0FBdkIsRUFBK0IsR0FBL0IsRUFBNkMsTUFBN0MsRUFBaUU7QUFDckUsUUFBSSxTQUFTLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFJLE1BQU0sT0FBTyxHQUFQLEVBQVksR0FBWixDQUFWO0FBRUEsWUFBSSxXQUFXLEdBQVgsQ0FBSixFQUFxQjtBQUNuQixrQkFBTSxJQUFJLEtBQUosQ0FBVSxrQ0FBVixDQUFOO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsbUJBQU8sR0FBUCxFQUFZLE1BQVo7QUFDRDtBQUVELGVBQU8sR0FBUDtBQUNELEtBVkQsTUFVTztBQUNMLGNBQU0sSUFBSSxLQUFKLENBQVUseUNBQVYsQ0FBTjtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBkaXJ0eSxcbiAgdXBkYXRlLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIFVwZGF0YWJsZVRhZyxcbiAgQ09OU1RBTlRfVEFHLFxuICBpc0NvbnN0VGFnLFxuICBDb25zdGFudFRhZyxcbn0gZnJvbSAnLi92YWxpZGF0b3JzJztcblxudHlwZSBUYWdzID0gTWFwPFByb3BlcnR5S2V5LCBVcGRhdGFibGVUYWc+O1xuY29uc3QgVFJBQ0tFRF9UQUdTID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWdzPigpO1xuXG5mdW5jdGlvbiBpc09iamVjdDxUPih1OiBUKTogdSBpcyBvYmplY3QgJiBUIHtcbiAgcmV0dXJuIHR5cGVvZiB1ID09PSAnb2JqZWN0JyAmJiB1ICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlydHlUYWc8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQpOiB2b2lkIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFnID0gdGFnRm9yKG9iaiwga2V5KTtcblxuICAgIGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlVGFnKG9iaiwga2V5LCBjcmVhdGVVcGRhdGFibGVUYWcoKSk7XG4gICAgfSBlbHNlIGlmIChpc0NvbnN0VGFnKHRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSBjb25zdGFudCB0YWdgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlydHkodGFnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIHRhZyBmb3IgYSBwcmltaXRpdmVgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCwga2V5OiBrZXlvZiBUKTogVXBkYXRhYmxlVGFnO1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ0ZvcjxUPihvYmo6IFQsIGtleTogc3RyaW5nKTogQ29uc3RhbnRUYWc7XG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUKTogVXBkYXRhYmxlVGFnIHwgQ29uc3RhbnRUYWcge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWdzID0gVFJBQ0tFRF9UQUdTLmdldChvYmopO1xuXG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFncyA9IG5ldyBNYXAoKTtcbiAgICAgIFRSQUNLRURfVEFHUy5zZXQob2JqLCB0YWdzKTtcbiAgICB9IGVsc2UgaWYgKHRhZ3MuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0YWdzLmdldChrZXkpITtcbiAgICB9XG5cbiAgICBsZXQgdGFnID0gY3JlYXRlVXBkYXRhYmxlVGFnKCk7XG4gICAgdGFncy5zZXQoa2V5LCB0YWcpO1xuICAgIHJldHVybiB0YWc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFnPFQ+KG9iajogVCwga2V5OiBrZXlvZiBULCBuZXdUYWc6IFVwZGF0YWJsZVRhZyk6IFVwZGF0YWJsZVRhZyB7XG4gIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgbGV0IHRhZyA9IHRhZ0ZvcihvYmosIGtleSk7XG5cbiAgICBpZiAoaXNDb25zdFRhZyh0YWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogQ2FuJ3QgdXBkYXRlIGEgY29uc3RhbnQgdGFnYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZSh0YWcsIG5ld1RhZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhZztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogQ2FuJ3QgdXBkYXRlIGEgdGFnIGZvciBhIHByaW1pdGl2ZWApO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQVQsUUFBc0IsY0FBdEI7QUFDQSxTQUFTLEtBQVQsRUFBZ0Isa0JBQWhCLEVBQWtELFlBQWxELFFBQW1GLGNBQW5GO0FBQ0EsU0FBUyxvQkFBVCxRQUFxQyxTQUFyQztBQUVBLE9BQU8sSUFBSSxvQkFBb0IsWUFBQSxDQUFhLENBQXJDO0FBRVAsT0FBTSxTQUFVLG9CQUFWLENBQStCLEVBQS9CLEVBQTZDO0FBQ2pELHdCQUFvQixFQUFwQjtBQUNEO0FBRUQsU0FBUyxRQUFULENBQXFCLENBQXJCLEVBQXlCO0FBQ3ZCLFdBQVEsT0FBTyxDQUFQLEtBQWEsUUFBYixJQUF5QixNQUFNLElBQWhDLElBQXlDLE9BQU8sQ0FBUCxLQUFhLFVBQTdEO0FBQ0Q7QUFNRCxNQUFNLGVBQWUsSUFBSSxPQUFKLEVBQXJCO0FBRUEsT0FBTSxTQUFVLFdBQVYsQ0FBeUIsR0FBekIsRUFBaUMsR0FBakMsRUFBK0Q7QUFDbkUsUUFBSSxTQUFTLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFJLE9BQU8sYUFBYSxHQUFiLENBQWlCLEdBQWpCLENBQVg7QUFFQTtBQUNBLFlBQUksU0FBUyxTQUFiLEVBQXdCO0FBRXhCO0FBQ0EsWUFBSSxjQUFjLEtBQUssR0FBTCxDQUFTLEdBQVQsQ0FBbEI7QUFFQSxZQUFJLGdCQUFnQixTQUFwQixFQUErQjtBQUM3QixnQkFBSSxLQUFKLEVBQVc7QUFDVCxxQ0FBc0IsV0FBdEIsRUFBbUMsR0FBbkMsRUFBd0MsR0FBeEM7QUFDRDtBQUVELGtCQUFNLFdBQU47QUFDQTtBQUNEO0FBQ0YsS0FqQkQsTUFpQk87QUFDTCxjQUFNLElBQUksS0FBSixDQUFVLHlDQUFWLENBQU47QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFVLE1BQVYsQ0FBb0IsR0FBcEIsRUFBNEIsR0FBNUIsRUFBMEQ7QUFDOUQsUUFBSSxTQUFTLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFJLE9BQU8sYUFBYSxHQUFiLENBQWlCLEdBQWpCLENBQVg7QUFFQSxZQUFJLFNBQVMsU0FBYixFQUF3QjtBQUN0QixtQkFBTyxJQUFJLEdBQUosRUFBUDtBQUVBLHlCQUFhLEdBQWIsQ0FBaUIsR0FBakIsRUFBc0IsSUFBdEI7QUFDRCxTQUpELE1BSU8sSUFBSSxLQUFLLEdBQUwsQ0FBUyxHQUFULENBQUosRUFBbUI7QUFDeEIsbUJBQU8sS0FBSyxHQUFMLENBQVMsR0FBVCxDQUFQO0FBQ0Q7QUFFRCxZQUFJLE1BQU0sb0JBQVY7QUFDQSxhQUFLLEdBQUwsQ0FBUyxHQUFULEVBQWMsR0FBZDtBQUVBLGVBQU8sR0FBUDtBQUNELEtBZkQsTUFlTztBQUNMLGVBQU8sWUFBUDtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBkaXJ0eSwgY3JlYXRlVXBkYXRhYmxlVGFnLCBVcGRhdGFibGVUYWcsIENPTlNUQU5UX1RBRywgQ29uc3RhbnRUYWcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuZXhwb3J0IGxldCBwcm9wZXJ0eURpZENoYW5nZSA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eURpZENoYW5nZShjYjogKCkgPT4gdm9pZCkge1xuICBwcm9wZXJ0eURpZENoYW5nZSA9IGNiO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdDxUPih1OiBUKTogdSBpcyBvYmplY3QgJiBUIHtcbiAgcmV0dXJuICh0eXBlb2YgdSA9PT0gJ29iamVjdCcgJiYgdSAhPT0gbnVsbCkgfHwgdHlwZW9mIHUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vLy8vLy8vLy8vXG5cbnR5cGUgVGFncyA9IE1hcDxQcm9wZXJ0eUtleSwgVXBkYXRhYmxlVGFnPjtcblxuY29uc3QgVFJBQ0tFRF9UQUdTID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWdzPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlydHlUYWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQgfCBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFncyA9IFRSQUNLRURfVEFHUy5nZXQob2JqKTtcblxuICAgIC8vIE5vIHRhZ3MgaGF2ZSBiZWVuIHNldHVwIGZvciB0aGlzIG9iamVjdCB5ZXQsIHJldHVyblxuICAgIGlmICh0YWdzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIERpcnR5IHRoZSB0YWcgZm9yIHRoZSBzcGVjaWZpYyBwcm9wZXJ0eSBpZiBpdCBleGlzdHNcbiAgICBsZXQgcHJvcGVydHlUYWcgPSB0YWdzLmdldChrZXkpO1xuXG4gICAgaWYgKHByb3BlcnR5VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChERUJVRykge1xuICAgICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEocHJvcGVydHlUYWcsIG9iaiwga2V5KTtcbiAgICAgIH1cblxuICAgICAgZGlydHkocHJvcGVydHlUYWcpO1xuICAgICAgcHJvcGVydHlEaWRDaGFuZ2UoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIHRhZyBmb3IgYSBwcmltaXRpdmVgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUIHwgc3RyaW5nIHwgc3ltYm9sKTogVXBkYXRhYmxlVGFnIHwgQ29uc3RhbnRUYWcge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWdzID0gVFJBQ0tFRF9UQUdTLmdldChvYmopO1xuXG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFncyA9IG5ldyBNYXAoKTtcblxuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -1,4 +0,5 @@

import { combine, CONSTANT_TAG } from './validators';
import { createTag, dirty } from './validators';
import { tagFor, dirtyTag } from './meta';
import { DEBUG } from '@glimmer/env';
import { combine, createTag, dirty, CONSTANT_TAG } from './validators';
import { tagFor, dirtyTagFor } from './meta';
import { markTagAsConsumed, runInAutotrackingTransaction, assertTagNotConsumed } from './debug';
/**

@@ -28,2 +29,5 @@ * Whenever a tracked computed property is entered, the current tracker is

this.tags.add(tag);
if (DEBUG) {
markTagAsConsumed(tag, new Error());
}
this.last = tag;

@@ -44,3 +48,4 @@ }

}
export function track(callback) {
//////////
export function track(callback, debuggingContext) {
let parent = CURRENT_TRACKER;

@@ -50,3 +55,7 @@ let current = new Tracker();

try {
callback();
if (DEBUG) {
runInAutotrackingTransaction(callback, debuggingContext);
} else {
callback();
}
} finally {

@@ -62,2 +71,14 @@ CURRENT_TRACKER = parent;

}
export function isTracking() {
return CURRENT_TRACKER !== null;
}
export function untrack(callback) {
let parent = CURRENT_TRACKER;
CURRENT_TRACKER = null;
try {
callback();
} finally {
CURRENT_TRACKER = parent;
}
}
//////////

@@ -81,4 +102,7 @@ export const EPOCH = createTag();

function setter(self, value) {
if (DEBUG) {
assertTagNotConsumed(tagFor(self, key), self, key, true);
}
dirty(EPOCH);
dirtyTag(self, key);
dirtyTagFor(self, key);
values.set(self, value);

@@ -88,2 +112,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBYyxPQUFkLEVBQXVCLFlBQXZCLFFBQTJDLGNBQTNDO0FBQ0EsU0FBUyxTQUFULEVBQW9CLEtBQXBCLFFBQWlDLGNBQWpDO0FBQ0EsU0FBUyxNQUFULEVBQWlCLFFBQWpCLFFBQWlDLFFBQWpDO0FBSUE7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFJLGtCQUFtQyxJQUF2QztBQUVBOzs7QUFHQSxNQUFNLE9BQU4sQ0FBYTtBQUFiLGtCQUFBO0FBQ1UsYUFBQSxJQUFBLEdBQU8sSUFBSSxHQUFKLEVBQVA7QUFDQSxhQUFBLElBQUEsR0FBb0IsSUFBcEI7QUFvQlQ7QUFsQkMsUUFBSSxHQUFKLEVBQVk7QUFDVixhQUFLLElBQUwsQ0FBVSxHQUFWLENBQWMsR0FBZDtBQUNBLGFBQUssSUFBTCxHQUFZLEdBQVo7QUFDRDtBQUVELGNBQU87QUFDTCxZQUFJLEVBQUUsSUFBRixLQUFXLElBQWY7QUFFQSxZQUFJLEtBQUssSUFBTCxLQUFjLENBQWxCLEVBQXFCO0FBQ25CLG1CQUFPLFlBQVA7QUFDRCxTQUZELE1BRU8sSUFBSSxLQUFLLElBQUwsS0FBYyxDQUFsQixFQUFxQjtBQUMxQixtQkFBTyxLQUFLLElBQVo7QUFDRCxTQUZNLE1BRUE7QUFDTCxnQkFBSSxVQUFpQixFQUFyQjtBQUNBLGlCQUFLLE9BQUwsQ0FBYSxPQUFPLFFBQVEsSUFBUixDQUFhLEdBQWIsQ0FBcEI7QUFDQSxtQkFBTyxRQUFRLE9BQVIsQ0FBUDtBQUNEO0FBQ0Y7QUFyQlU7QUF3QmIsT0FBTSxTQUFVLEtBQVYsQ0FBZ0IsUUFBaEIsRUFBb0M7QUFDeEMsUUFBSSxTQUFTLGVBQWI7QUFDQSxRQUFJLFVBQVUsSUFBSSxPQUFKLEVBQWQ7QUFFQSxzQkFBa0IsT0FBbEI7QUFFQSxRQUFJO0FBQ0Y7QUFDRCxLQUZELFNBRVU7QUFDUiwwQkFBa0IsTUFBbEI7QUFDRDtBQUVELFdBQU8sUUFBUSxPQUFSLEVBQVA7QUFDRDtBQUVELE9BQU0sU0FBVSxPQUFWLENBQWtCLEdBQWxCLEVBQTBCO0FBQzlCLFFBQUksb0JBQW9CLElBQXhCLEVBQThCO0FBQzVCLHdCQUFnQixHQUFoQixDQUFvQixHQUFwQjtBQUNEO0FBQ0Y7QUFFRDtBQUVBLE9BQU8sTUFBTSxRQUFRLFdBQWQ7QUFLUCxPQUFNLFNBQVUsV0FBVixDQUNKLEdBREksRUFFSixXQUZJLEVBRW9CO0FBRXhCLFFBQUksU0FBUyxJQUFJLE9BQUosRUFBYjtBQUNBLFFBQUksaUJBQWlCLE9BQU8sV0FBUCxLQUF1QixVQUE1QztBQUVBLGFBQVMsTUFBVCxDQUFnQixJQUFoQixFQUF1QjtBQUNyQixnQkFBUSxPQUFPLElBQVAsRUFBYSxHQUFiLENBQVI7QUFFQSxZQUFJLEtBQUo7QUFFQTtBQUNBLFlBQUksa0JBQWtCLENBQUMsT0FBTyxHQUFQLENBQVcsSUFBWCxDQUF2QixFQUF5QztBQUN2QyxvQkFBUSxhQUFSO0FBQ0EsbUJBQU8sR0FBUCxDQUFXLElBQVgsRUFBaUIsS0FBakI7QUFDRCxTQUhELE1BR087QUFDTCxvQkFBUSxPQUFPLEdBQVAsQ0FBVyxJQUFYLENBQVI7QUFDRDtBQUVELGVBQU8sS0FBUDtBQUNEO0FBRUQsYUFBUyxNQUFULENBQWdCLElBQWhCLEVBQXlCLEtBQXpCLEVBQW9DO0FBQ2xDLGNBQU0sS0FBTjtBQUNBLGlCQUFTLElBQVQsRUFBZSxHQUFmO0FBQ0EsZUFBTyxHQUFQLENBQVcsSUFBWCxFQUFpQixLQUFqQjtBQUNEO0FBRUQsV0FBTyxFQUFFLE1BQUYsRUFBVSxNQUFWLEVBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhZywgY29tYmluZSwgQ09OU1RBTlRfVEFHIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZVRhZywgZGlydHkgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgdGFnRm9yLCBkaXJ0eVRhZyB9IGZyb20gJy4vbWV0YSc7XG5cbnR5cGUgT3B0aW9uPFQ+ID0gVCB8IG51bGw7XG5cbi8qKlxuICogV2hlbmV2ZXIgYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGVudGVyZWQsIHRoZSBjdXJyZW50IHRyYWNrZXIgaXNcbiAqIHNhdmVkIG9mZiBhbmQgYSBuZXcgdHJhY2tlciBpcyByZXBsYWNlZC5cbiAqXG4gKiBBbnkgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCB0cmFja2VyLlxuICpcbiAqIFdoZW4gYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGV4aXRlZCwgdGhlIHRyYWNrZXIncyB0YWdzIGFyZVxuICogY29tYmluZWQgYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgdHJhY2tlci5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBlYWNoIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaGFzIGEgdGFnXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgaW5zaWRlIG9mXG4gKiBpdHNlbGYsIGluY2x1ZGluZyBjaGlsZCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnRpZXMuXG4gKi9cbmxldCBDVVJSRU5UX1RSQUNLRVI6IE9wdGlvbjxUcmFja2VyPiA9IG51bGw7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgdGhhdCB0cmFja3MgQHRyYWNrZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgY29uc3VtZWQuXG4gKi9cbmNsYXNzIFRyYWNrZXIge1xuICBwcml2YXRlIHRhZ3MgPSBuZXcgU2V0PFRhZz4oKTtcbiAgcHJpdmF0ZSBsYXN0OiBPcHRpb248VGFnPiA9IG51bGw7XG5cbiAgYWRkKHRhZzogVGFnKSB7XG4gICAgdGhpcy50YWdzLmFkZCh0YWcpO1xuICAgIHRoaXMubGFzdCA9IHRhZztcbiAgfVxuXG4gIGNvbWJpbmUoKTogVGFnIHtcbiAgICBsZXQgeyB0YWdzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRhZ3Muc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICB9IGVsc2UgaWYgKHRhZ3Muc2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdCBhcyBUYWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YWdzQXJyOiBUYWdbXSA9IFtdO1xuICAgICAgdGFncy5mb3JFYWNoKHRhZyA9PiB0YWdzQXJyLnB1c2godGFnKSk7XG4gICAgICByZXR1cm4gY29tYmluZSh0YWdzQXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogVGFnIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgbGV0IGN1cnJlbnQgPSBuZXcgVHJhY2tlcigpO1xuXG4gIENVUlJFTlRfVFJBQ0tFUiA9IGN1cnJlbnQ7XG5cbiAgdHJ5IHtcbiAgICBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIENVUlJFTlRfVFJBQ0tFUiA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmNvbWJpbmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWUodGFnOiBUYWcpIHtcbiAgaWYgKENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbCkge1xuICAgIENVUlJFTlRfVFJBQ0tFUi5hZGQodGFnKTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBFUE9DSCA9IGNyZWF0ZVRhZygpO1xuXG5leHBvcnQgdHlwZSBHZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQpID0+IFRbS10gfCB1bmRlZmluZWQ7XG5leHBvcnQgdHlwZSBTZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQsIHZhbHVlOiBUW0tdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tlZERhdGE8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBrZXk6IEssXG4gIGluaXRpYWxpemVyPzogKCkgPT4gVFtLXVxuKTogeyBnZXR0ZXI6IEdldHRlcjxULCBLPjsgc2V0dGVyOiBTZXR0ZXI8VCwgSz4gfSB7XG4gIGxldCB2YWx1ZXMgPSBuZXcgV2Vha01hcDxULCBUW0tdPigpO1xuICBsZXQgaGFzSW5pdGlhbGl6ZXIgPSB0eXBlb2YgaW5pdGlhbGl6ZXIgPT09ICdmdW5jdGlvbic7XG5cbiAgZnVuY3Rpb24gZ2V0dGVyKHNlbGY6IFQpIHtcbiAgICBjb25zdW1lKHRhZ0ZvcihzZWxmLCBrZXkpKTtcblxuICAgIGxldCB2YWx1ZTtcblxuICAgIC8vIElmIHRoZSBmaWVsZCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCwgd2Ugc2hvdWxkIGluaXRpYWxpemUgaXRcbiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIgJiYgIXZhbHVlcy5oYXMoc2VsZikpIHtcbiAgICAgIHZhbHVlID0gaW5pdGlhbGl6ZXIhKCk7XG4gICAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZXMuZ2V0KHNlbGYpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRlcihzZWxmOiBULCB2YWx1ZTogVFtLXSk6IHZvaWQge1xuICAgIGRpcnR5KEVQT0NIKTtcbiAgICBkaXJ0eVRhZyhzZWxmLCBrZXkpO1xuICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgZ2V0dGVyLCBzZXR0ZXIgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxLQUFULFFBQXNCLGNBQXRCO0FBQ0EsU0FBYyxPQUFkLEVBQXVCLFNBQXZCLEVBQWtDLEtBQWxDLEVBQXlDLFlBQXpDLFFBQTZELGNBQTdEO0FBQ0EsU0FBUyxNQUFULEVBQWlCLFdBQWpCLFFBQW9DLFFBQXBDO0FBQ0EsU0FBUyxpQkFBVCxFQUE0Qiw0QkFBNUIsRUFBMEQsb0JBQTFELFFBQXNGLFNBQXRGO0FBSUE7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFJLGtCQUFtQyxJQUF2QztBQUVBOzs7QUFHQSxNQUFNLE9BQU4sQ0FBYTtBQUFiLGtCQUFBO0FBQ1UsYUFBQSxJQUFBLEdBQU8sSUFBSSxHQUFKLEVBQVA7QUFDQSxhQUFBLElBQUEsR0FBb0IsSUFBcEI7QUF5QlQ7QUF2QkMsUUFBSSxHQUFKLEVBQVk7QUFDVixhQUFLLElBQUwsQ0FBVSxHQUFWLENBQWMsR0FBZDtBQUVBLFlBQUksS0FBSixFQUFXO0FBQ1QsOEJBQW1CLEdBQW5CLEVBQXdCLElBQUksS0FBSixFQUF4QjtBQUNEO0FBRUQsYUFBSyxJQUFMLEdBQVksR0FBWjtBQUNEO0FBRUQsY0FBTztBQUNMLFlBQUksRUFBRSxJQUFGLEtBQVcsSUFBZjtBQUVBLFlBQUksS0FBSyxJQUFMLEtBQWMsQ0FBbEIsRUFBcUI7QUFDbkIsbUJBQU8sWUFBUDtBQUNELFNBRkQsTUFFTyxJQUFJLEtBQUssSUFBTCxLQUFjLENBQWxCLEVBQXFCO0FBQzFCLG1CQUFPLEtBQUssSUFBWjtBQUNELFNBRk0sTUFFQTtBQUNMLGdCQUFJLFVBQWlCLEVBQXJCO0FBQ0EsaUJBQUssT0FBTCxDQUFhLE9BQU8sUUFBUSxJQUFSLENBQWEsR0FBYixDQUFwQjtBQUNBLG1CQUFPLFFBQVEsT0FBUixDQUFQO0FBQ0Q7QUFDRjtBQTFCVTtBQTZCYjtBQUVBLE9BQU0sU0FBVSxLQUFWLENBQWdCLFFBQWhCLEVBQXNDLGdCQUF0QyxFQUF1RTtBQUMzRSxRQUFJLFNBQVMsZUFBYjtBQUNBLFFBQUksVUFBVSxJQUFJLE9BQUosRUFBZDtBQUVBLHNCQUFrQixPQUFsQjtBQUVBLFFBQUk7QUFDRixZQUFJLEtBQUosRUFBVztBQUNULHlDQUE4QixRQUE5QixFQUF3QyxnQkFBeEM7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNEO0FBQ0YsS0FORCxTQU1VO0FBQ1IsMEJBQWtCLE1BQWxCO0FBQ0Q7QUFFRCxXQUFPLFFBQVEsT0FBUixFQUFQO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsT0FBVixDQUFrQixHQUFsQixFQUEwQjtBQUM5QixRQUFJLG9CQUFvQixJQUF4QixFQUE4QjtBQUM1Qix3QkFBZ0IsR0FBaEIsQ0FBb0IsR0FBcEI7QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFVLFVBQVYsR0FBb0I7QUFDeEIsV0FBTyxvQkFBb0IsSUFBM0I7QUFDRDtBQUVELE9BQU0sU0FBVSxPQUFWLENBQWtCLFFBQWxCLEVBQXNDO0FBQzFDLFFBQUksU0FBUyxlQUFiO0FBQ0Esc0JBQWtCLElBQWxCO0FBRUEsUUFBSTtBQUNGO0FBQ0QsS0FGRCxTQUVVO0FBQ1IsMEJBQWtCLE1BQWxCO0FBQ0Q7QUFDRjtBQUVEO0FBRUEsT0FBTyxNQUFNLFFBQVEsV0FBZDtBQUtQLE9BQU0sU0FBVSxXQUFWLENBQ0osR0FESSxFQUVKLFdBRkksRUFFb0I7QUFFeEIsUUFBSSxTQUFTLElBQUksT0FBSixFQUFiO0FBQ0EsUUFBSSxpQkFBaUIsT0FBTyxXQUFQLEtBQXVCLFVBQTVDO0FBRUEsYUFBUyxNQUFULENBQWdCLElBQWhCLEVBQXVCO0FBQ3JCLGdCQUFRLE9BQU8sSUFBUCxFQUFhLEdBQWIsQ0FBUjtBQUVBLFlBQUksS0FBSjtBQUVBO0FBQ0EsWUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEdBQVAsQ0FBVyxJQUFYLENBQXZCLEVBQXlDO0FBQ3ZDLG9CQUFRLGFBQVI7QUFDQSxtQkFBTyxHQUFQLENBQVcsSUFBWCxFQUFpQixLQUFqQjtBQUNELFNBSEQsTUFHTztBQUNMLG9CQUFRLE9BQU8sR0FBUCxDQUFXLElBQVgsQ0FBUjtBQUNEO0FBRUQsZUFBTyxLQUFQO0FBQ0Q7QUFFRCxhQUFTLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBeUIsS0FBekIsRUFBb0M7QUFDbEMsWUFBSSxLQUFKLEVBQVc7QUFDVCxpQ0FBc0IsT0FBTyxJQUFQLEVBQWEsR0FBYixDQUF0QixFQUF5QyxJQUF6QyxFQUErQyxHQUEvQyxFQUFvRCxJQUFwRDtBQUNEO0FBRUQsY0FBTSxLQUFOO0FBQ0Esb0JBQVksSUFBWixFQUFrQixHQUFsQjtBQUNBLGVBQU8sR0FBUCxDQUFXLElBQVgsRUFBaUIsS0FBakI7QUFDRDtBQUVELFdBQU8sRUFBRSxNQUFGLEVBQVUsTUFBVixFQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBUYWcsIGNvbWJpbmUsIGNyZWF0ZVRhZywgZGlydHksIENPTlNUQU5UX1RBRyB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB0YWdGb3IsIGRpcnR5VGFnRm9yIH0gZnJvbSAnLi9tZXRhJztcbmltcG9ydCB7IG1hcmtUYWdBc0NvbnN1bWVkLCBydW5JbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uLCBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG50eXBlIE9wdGlvbjxUPiA9IFQgfCBudWxsO1xuXG4vKipcbiAqIFdoZW5ldmVyIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBlbnRlcmVkLCB0aGUgY3VycmVudCB0cmFja2VyIGlzXG4gKiBzYXZlZCBvZmYgYW5kIGEgbmV3IHRyYWNrZXIgaXMgcmVwbGFjZWQuXG4gKlxuICogQW55IHRyYWNrZWQgcHJvcGVydGllcyBjb25zdW1lZCBhcmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdHJhY2tlci5cbiAqXG4gKiBXaGVuIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBleGl0ZWQsIHRoZSB0cmFja2VyJ3MgdGFncyBhcmVcbiAqIGNvbWJpbmVkIGFuZCBhZGRlZCB0byB0aGUgcGFyZW50IHRyYWNrZXIuXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHRoYXQgZWFjaCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGhhcyBhIHRhZ1xuICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGluc2lkZSBvZlxuICogaXRzZWxmLCBpbmNsdWRpbmcgY2hpbGQgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0aWVzLlxuICovXG5sZXQgQ1VSUkVOVF9UUkFDS0VSOiBPcHRpb248VHJhY2tlcj4gPSBudWxsO1xuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IHRoYXQgdHJhY2tzIEB0cmFja2VkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGNvbnN1bWVkLlxuICovXG5jbGFzcyBUcmFja2VyIHtcbiAgcHJpdmF0ZSB0YWdzID0gbmV3IFNldDxUYWc+KCk7XG4gIHByaXZhdGUgbGFzdDogT3B0aW9uPFRhZz4gPSBudWxsO1xuXG4gIGFkZCh0YWc6IFRhZykge1xuICAgIHRoaXMudGFncy5hZGQodGFnKTtcblxuICAgIGlmIChERUJVRykge1xuICAgICAgbWFya1RhZ0FzQ29uc3VtZWQhKHRhZywgbmV3IEVycm9yKCkpO1xuICAgIH1cblxuICAgIHRoaXMubGFzdCA9IHRhZztcbiAgfVxuXG4gIGNvbWJpbmUoKTogVGFnIHtcbiAgICBsZXQgeyB0YWdzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRhZ3Muc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICB9IGVsc2UgaWYgKHRhZ3Muc2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdCBhcyBUYWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YWdzQXJyOiBUYWdbXSA9IFtdO1xuICAgICAgdGFncy5mb3JFYWNoKHRhZyA9PiB0YWdzQXJyLnB1c2godGFnKSk7XG4gICAgICByZXR1cm4gY29tYmluZSh0YWdzQXJyKTtcbiAgICB9XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQsIGRlYnVnZ2luZ0NvbnRleHQ/OiBzdHJpbmcgfCBmYWxzZSk6IFRhZyB7XG4gIGxldCBwYXJlbnQgPSBDVVJSRU5UX1RSQUNLRVI7XG4gIGxldCBjdXJyZW50ID0gbmV3IFRyYWNrZXIoKTtcblxuICBDVVJSRU5UX1RSQUNLRVIgPSBjdXJyZW50O1xuXG4gIHRyeSB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBydW5JbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uIShjYWxsYmFjaywgZGVidWdnaW5nQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIENVUlJFTlRfVFJBQ0tFUiA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmNvbWJpbmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWUodGFnOiBUYWcpIHtcbiAgaWYgKENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbCkge1xuICAgIENVUlJFTlRfVFJBQ0tFUi5hZGQodGFnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUcmFja2luZygpIHtcbiAgcmV0dXJuIENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVudHJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgQ1VSUkVOVF9UUkFDS0VSID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSID0gcGFyZW50O1xuICB9XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IEVQT0NIID0gY3JlYXRlVGFnKCk7XG5cbmV4cG9ydCB0eXBlIEdldHRlcjxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSAoc2VsZjogVCkgPT4gVFtLXSB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIFNldHRlcjxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSAoc2VsZjogVCwgdmFsdWU6IFRbS10pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFja2VkRGF0YTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIGtleTogSyxcbiAgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUW0tdXG4pOiB7IGdldHRlcjogR2V0dGVyPFQsIEs+OyBzZXR0ZXI6IFNldHRlcjxULCBLPiB9IHtcbiAgbGV0IHZhbHVlcyA9IG5ldyBXZWFrTWFwPFQsIFRbS10+KCk7XG4gIGxldCBoYXNJbml0aWFsaXplciA9IHR5cGVvZiBpbml0aWFsaXplciA9PT0gJ2Z1bmN0aW9uJztcblxuICBmdW5jdGlvbiBnZXR0ZXIoc2VsZjogVCkge1xuICAgIGNvbnN1bWUodGFnRm9yKHNlbGYsIGtleSkpO1xuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgLy8gSWYgdGhlIGZpZWxkIGhhcyBuZXZlciBiZWVuIGluaXRpYWxpemVkLCB3ZSBzaG91bGQgaW5pdGlhbGl6ZSBpdFxuICAgIGlmIChoYXNJbml0aWFsaXplciAmJiAhdmFsdWVzLmhhcyhzZWxmKSkge1xuICAgICAgdmFsdWUgPSBpbml0aWFsaXplciEoKTtcbiAgICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlcy5nZXQoc2VsZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGVyKHNlbGY6IFQsIHZhbHVlOiBUW0tdKTogdm9pZCB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnRm9yKHNlbGYsIGtleSksIHNlbGYsIGtleSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZGlydHkoRVBPQ0gpO1xuICAgIGRpcnR5VGFnRm9yKHNlbGYsIGtleSk7XG4gICAgdmFsdWVzLnNldChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4geyBnZXR0ZXIsIHNldHRlciB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,3 +0,4 @@

const symbol = typeof Symbol !== 'undefined' ? Symbol : key => `__${key}${Math.floor(Math.random() * Date.now())}__`;
import { DEBUG } from '@glimmer/env';
import { symbol } from './utils';
import { assertTagNotConsumed } from './debug';
export const CONSTANT = 0;

@@ -27,3 +28,8 @@ export const INITIAL = 1;

*/
export function value(_tag) {
export function value(tag) {
if (DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
return $REVISION;

@@ -42,8 +48,21 @@ }

export function validate(tag, snapshot) {
return snapshot >= tag[COMPUTE]();
if (DEBUG) {
IS_VALIDATING = true;
}
let isValid = snapshot >= tag[COMPUTE]();
if (DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
}
let IS_VALIDATING;
const TYPE = symbol('TAG_TYPE');
export let ALLOW_CYCLES;
if (false) {
ALLOW_CYCLES = new WeakSet();
if (DEBUG) {
ALLOW_CYCLES = new WeakMap();
}

@@ -62,5 +81,22 @@ class MonomorphicTagImpl {

let { lastChecked } = this;
if (lastChecked !== $REVISION) {
if (this.isUpdating === true) {
if (DEBUG && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
} else if (lastChecked !== $REVISION) {
this.isUpdating = true;
this.lastChecked = $REVISION;
if (DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
try {

@@ -82,12 +118,6 @@ let { subtags, subtag, revision } = this;

}
if (this.isUpdating === true) {
if (false && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
}
return this.lastValue;
}
static update(_tag, subtag) {
if (false && _tag[TYPE] !== 1 /* Updatable */) {
if (DEBUG && _tag[TYPE] !== 1 /* Updatable */) {
throw new Error('Attempted to update a tag that was not updatable');

@@ -100,14 +130,17 @@ }

} else {
if (DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
tag.subtag = subtag;
// subtag could be another type of tag, e.g. CURRENT_TAG or VOLATILE_TAG.
// If so, lastChecked/lastValue will be undefined, result in these being
// NaN. This is fine, it will force the system to recompute.
tag.lastChecked = Math.min(tag.lastChecked, subtag.lastChecked);
tag.lastValue = Math.max(tag.lastValue, subtag.lastValue);
}
}
static dirty(tag) {
if (false && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
if (DEBUG && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
throw new Error('Attempted to dirty a tag that was not dirtyable');
}
if (DEBUG) {
// Usually by this point, we've already asserted with better error information,
// but this is our last line of defense.
assertTagNotConsumed(tag);
}
tag.revision = ++$REVISION;

@@ -169,2 +202,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBV0EsTUFBTSxTQUNKLE9BQU8sTUFBUCxLQUFrQixXQUFsQixHQUNJLE1BREosR0FFSyxHQUFELElBQWlCLEtBQUssR0FBRyxHQUFHLEtBQUssS0FBTCxDQUFXLEtBQUssTUFBTCxLQUFnQixLQUFLLEdBQUwsRUFBM0IsQ0FBc0MsSUFIeEU7QUFTQSxPQUFPLE1BQU0sV0FBcUIsQ0FBM0I7QUFDUCxPQUFPLE1BQU0sVUFBb0IsQ0FBMUI7QUFDUCxPQUFPLE1BQU0sV0FBcUIsZ0JBQTNCLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFZLE9BQWhCO0FBRUEsT0FBTSxTQUFVLElBQVYsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFQSxPQUFPLE1BQU0sVUFBeUIsT0FBTyxhQUFQLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY0EsT0FBTSxTQUFVLEtBQVYsQ0FBZ0IsSUFBaEIsRUFBeUI7QUFDN0IsV0FBTyxTQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztBQVVBLE9BQU0sU0FBVSxRQUFWLENBQW1CLEdBQW5CLEVBQTZCLFFBQTdCLEVBQStDO0FBQ25ELFdBQU8sWUFBWSxJQUFJLE9BQUosR0FBbkI7QUFDRDtBQWlCRCxNQUFNLE9BQXNCLE9BQU8sVUFBUCxDQUE1QjtBQUVBLE9BQU8sSUFBSSxZQUFKO0FBRVAsV0FBVztBQUNULG1CQUFlLElBQUksT0FBSixFQUFmO0FBQ0Q7QUFxQkQsTUFBTSxrQkFBTixDQUF3QjtBQVd0QixnQkFBWSxJQUFaLEVBQXFDO0FBVjdCLGFBQUEsUUFBQSxHQUFXLE9BQVg7QUFDQSxhQUFBLFdBQUEsR0FBYyxPQUFkO0FBQ0EsYUFBQSxTQUFBLEdBQVksT0FBWjtBQUVBLGFBQUEsVUFBQSxHQUFhLEtBQWI7QUFDQSxhQUFBLE1BQUEsR0FBcUIsSUFBckI7QUFDQSxhQUFBLE9B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YWdzJztcblxuLy8vLy8vLy8vL1xuXG4vLyB1dGlsc1xudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzICgoXG4gIGs6IGluZmVyIElcbikgPT4gdm9pZClcbiAgPyBJXG4gIDogbmV2ZXI7XG5cbmNvbnN0IHN5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnXG4gICAgPyBTeW1ib2xcbiAgICA6IChrZXk6IHN0cmluZykgPT4gYF9fJHtrZXl9JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBEYXRlLm5vdygpKX1fX2AgYXMgYW55O1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUoX3RhZzogVGFnKTogUmV2aXNpb24ge1xuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIHJldHVybiBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha1NldDxVcGRhdGFibGVUYWc+O1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtTZXQoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICRSRVZJU0lPTjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgc3VidGFncywgc3VidGFnLCByZXZpc2lvbiB9ID0gdGhpcztcblxuICAgICAgICBpZiAoc3VidGFnICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heChyZXZpc2lvbiwgc3VidGFnW0NPTVBVVEVdKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnRhZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1YnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHN1YnRhZ3NbaV1bQ09NUFVURV0oKTtcbiAgICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgodmFsdWUsIHJldmlzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHJldmlzaW9uO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMuaGFzKHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3ljbGVzIGluIHRhZ3MgYXJlIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSArKyRSRVZJU0lPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuc3VidGFnID0gc3VidGFnO1xuXG4gICAgICAvLyBzdWJ0YWcgY291bGQgYmUgYW5vdGhlciB0eXBlIG9mIHRhZywgZS5nLiBDVVJSRU5UX1RBRyBvciBWT0xBVElMRV9UQUcuXG4gICAgICAvLyBJZiBzbywgbGFzdENoZWNrZWQvbGFzdFZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkLCByZXN1bHQgaW4gdGhlc2UgYmVpbmdcbiAgICAgIC8vIE5hTi4gVGhpcyBpcyBmaW5lLCBpdCB3aWxsIGZvcmNlIHRoZSBzeXN0ZW0gdG8gcmVjb21wdXRlLlxuICAgICAgdGFnLmxhc3RDaGVja2VkID0gTWF0aC5taW4odGFnLmxhc3RDaGVja2VkLCAoc3VidGFnIGFzIGFueSkubGFzdENoZWNrZWQpO1xuICAgICAgdGFnLmxhc3RWYWx1ZSA9IE1hdGgubWF4KHRhZy5sYXN0VmFsdWUsIChzdWJ0YWcgYXMgYW55KS5sYXN0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaXJ0eSh0YWc6IERpcnR5YWJsZVRhZyB8IFVwZGF0YWJsZVRhZykge1xuICAgIGlmIChcbiAgICAgIERFQlVHICYmXG4gICAgICAhKHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUgfHwgdGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIGRpcnR5IGEgdGFnIHRoYXQgd2FzIG5vdCBkaXJ0eWFibGUnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQVQsUUFBc0IsY0FBdEI7QUFDQSxTQUE4QixNQUE5QixRQUE0QyxTQUE1QztBQUNBLFNBQVMsb0JBQVQsUUFBcUMsU0FBckM7QUFNQSxPQUFPLE1BQU0sV0FBcUIsQ0FBM0I7QUFDUCxPQUFPLE1BQU0sVUFBb0IsQ0FBMUI7QUFDUCxPQUFPLE1BQU0sV0FBcUIsZ0JBQTNCLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFZLE9BQWhCO0FBRUEsT0FBTSxTQUFVLElBQVYsR0FBYztBQUNsQjtBQUNEO0FBRUQ7QUFFQSxPQUFPLE1BQU0sVUFBeUIsT0FBTyxhQUFQLENBQS9CO0FBZ0JQO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY0EsT0FBTSxTQUFVLEtBQVYsQ0FBZ0IsR0FBaEIsRUFBd0I7QUFDNUIsUUFBSSxLQUFKLEVBQVc7QUFDVDtBQUNBO0FBQ0EsWUFBSSxPQUFKO0FBQ0Q7QUFFRCxXQUFPLFNBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVUEsT0FBTSxTQUFVLFFBQVYsQ0FBbUIsR0FBbkIsRUFBNkIsUUFBN0IsRUFBK0M7QUFDbkQsUUFBSSxLQUFKLEVBQVc7QUFDVCx3QkFBZ0IsSUFBaEI7QUFDRDtBQUVELFFBQUksVUFBVSxZQUFZLElBQUksT0FBSixHQUExQjtBQUVBLFFBQUksS0FBSixFQUFXO0FBQ1Qsd0JBQWdCLEtBQWhCO0FBRUEsWUFBSSxPQUFKLEVBQWE7QUFDWDtBQUNBO0FBQ0EsZ0JBQUksT0FBSjtBQUNEO0FBQ0Y7QUFFRCxXQUFPLE9BQVA7QUFDRDtBQUVELElBQUksYUFBSjtBQWlCQSxNQUFNLE9BQXNCLE9BQU8sVUFBUCxDQUE1QjtBQUVBLE9BQU8sSUFBSSxZQUFKO0FBRVAsSUFBSSxLQUFKLEVBQVc7QUFDVCxtQkFBZSxJQUFJLE9BQUosRUFBZjtBQUNEO0FBcUJELE1B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QixTQUFwQixDQUFQO0FBQ0Q7QUFFRCxPQUFNLFNBQVUsbUJBQVYsQ0FBOEIsSUFBOUIsRUFBeUM7QUFDN0MsWUFBUSxLQUFLLE1BQWI7QUFDRSxhQUFLLENBQUw7QUFDRSxtQkFBTyxZQUFQO0FBQ0YsYUFBSyxDQUFMO0FBQ0UsbUJBQU8sS0FBSyxDQUFMLENBQVA7QUFDRjtBQUNFLGdCQUFJLE1BQU0sSUFBSSxrQkFBSixDQUFzQixDQUF0QixDQUFzQixnQkFBdEIsQ0FBVjtBQUNDLGdCQUFZLE9BQVosR0FBc0IsSUFBdEI7QUFDRCxtQkFBTyxHQUFQO0FBUko7QUFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHIH0gZnJvbSAnQGdsaW1tZXIvZW52JztcbmltcG9ydCB7IFVuaW9uVG9JbnRlcnNlY3Rpb24sIHN5bWJvbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKHRhZzogVGFnKTogUmV2aXNpb24ge1xuICBpZiAoREVCVUcpIHtcbiAgICAvLyBjb21wdXRlIHRvIGNhY2hlIHRoZSBsYXRlc3QgdmFsdWUsIHdoaWNoIHdpbGwgcHJldmVudCB1cyBmcm9tIGRvaW5nXG4gICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgIHRhZ1tDT01QVVRFXSgpO1xuICB9XG5cbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBpc1ZhbGlkID0gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG5cbiAgaWYgKERFQlVHKSB7XG4gICAgSVNfVkFMSURBVElORyA9IGZhbHNlO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAgIC8vIGludmFsaWQgdXBkYXRlcyBsYXRlciBvbi5cbiAgICAgIHRhZ1tDT01QVVRFXSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc1ZhbGlkO1xufVxuXG5sZXQgSVNfVkFMSURBVElORzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIFRoaXMgZW51bSByZXByZXNlbnRzIGFsbCBvZiB0aGUgcG9zc2libGUgdGFnIHR5cGVzIGZvciB0aGUgbW9ub21vcnBoaWMgdGFnIGNsYXNzLlxuICogT3RoZXIgY3VzdG9tIHRhZyBjbGFzc2VzIGNhbiBleGlzdCwgc3VjaCBhcyBDdXJyZW50VGFnIGFuZCBWb2xhdGlsZVRhZywgYnV0IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucywgYW55IHR5cGUgb2YgdGFnIHRoYXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IHNob3VsZFxuICogYmUgYWRkZWQgdG8gdGhlIG1vbm9tb3JwaGljIHRhZy5cbiAqL1xuY29uc3QgZW51bSBNb25vbW9ycGhpY1RhZ1R5cGVzIHtcbiAgRGlydHlhYmxlLFxuICBVcGRhdGFibGUsXG4gIENvbWJpbmF0b3IsXG4gIENvbnN0YW50LFxufVxuXG5jb25zdCBUWVBFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfVFlQRScpO1xuXG5leHBvcnQgbGV0IEFMTE9XX0NZQ0xFUzogV2Vha01hcDxUYWcsIGJvb2xlYW4+IHwgdW5kZWZpbmVkO1xuXG5pZiAoREVCVUcpIHtcbiAgQUxMT1dfQ1lDTEVTID0gbmV3IFdlYWtNYXAoKTtcbn1cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnQmFzZTxUIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdUeXBlcz4gZXh0ZW5kcyBUYWcge1xuICBbVFlQRV06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlydHlhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmF0b3JUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb25zdGFudFRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50PiB7fVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdNYXBwaW5nIHtcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlXTogRGlydHlhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGVdOiBVcGRhdGFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3JdOiBDb21iaW5hdG9yVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudF06IENvbnN0YW50VGFnO1xufVxuXG50eXBlIE1vbm9tb3JwaGljVGFnID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ01hcHBpbmdbTW9ub21vcnBoaWNUYWdUeXBlc10+O1xudHlwZSBNb25vbW9ycGhpY1RhZ1R5cGUgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnVHlwZXM+O1xuXG5jbGFzcyBNb25vbW9ycGhpY1RhZ0ltcGwgaW1wbGVtZW50cyBNb25vbW9ycGhpY1RhZyB7XG4gIHByaXZhdGUgcmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RDaGVja2VkID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSBJTklUSUFMO1xuXG4gIHByaXZhdGUgaXNVcGRhdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnRhZzogVGFnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VidGFnczogVGFnW10gfCBudWxsID0gbnVsbDtcblxuICBbVFlQRV06IE1vbm9tb3JwaGljVGFnVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNb25vbW9ycGhpY1RhZ1R5cGVzKSB7XG4gICAgdGhpc1tUWVBFXSA9IHR5cGUgYXMgTW9ub21vcnBoaWNUYWdUeXBlO1xuICB9XG5cbiAgW0NPTVBVVEVdKCk6IFJldmlzaW9uIHtcbiAgICBsZXQgeyBsYXN0Q2hlY2tlZCB9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTIS5oYXModGhpcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsZXMgaW4gdGFncyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0Q2hlY2tlZCA9ICsrJFJFVklTSU9OO1xuICAgIH0gZWxzZSBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKERFQlVHKSB7XG4gICAgICAgIC8vIEluIERFQlVHLCB3ZSBkb24ndCBjYWNoZSB3aGlsZSB2YWxpZGF0aW5nIG9ubHksIGJlY2F1c2UgaXQgaXMgdmFsaWRcbiAgICAgICAgLy8gdXBkYXRlIGEgdGFnIGJldHdlZW4gY2FsbGluZyBgdmFsaWRhdGUoKWAgYW5kIGB2YWx1ZSgpYC4gT25jZSB5b3VcbiAgICAgICAgLy8gY2FsbCBgdmFsdWUoKWAgb24gYSB0YWcsIGl0cyByZXZpc2lvbiBpcyBlZmZlY3RpdmVseSBsb2NrZWQgaW4sIGFuZFxuICAgICAgICAvLyBpZiB5b3UgYXR0ZW1wdCB0byB1cGRhdGUgaXQgdG8gYSB0YWcgdGhhdCBpcyBtb3JlIHJlY2VudCBpdCBjb3VsZFxuICAgICAgICAvLyBicmVhayBhc3N1bXB0aW9ucyBpbiBvdXIgc3lzdGVtLiBUaGlzIGlzIHdoeSB0aGUgYXNzZXJ0aW9uIGV4aXN0cyBpblxuICAgICAgICAvLyB0aGUgc3RhdGljIGB1cGRhdGUoKWAgbWV0aG9kIGJlbG93LlxuICAgICAgICBpZiAoIUlTX1ZBTElEQVRJTkcpIHtcbiAgICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDaGVja2VkID0gJFJFVklTSU9OO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgeyBzdWJ0YWdzLCBzdWJ0YWcsIHJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChzdWJ0YWcgIT09IG51bGwpIHtcbiAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHJldmlzaW9uLCBzdWJ0YWdbQ09NUFVURV0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VidGFncyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VidGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gc3VidGFnc1tpXVtDT01QVVRFXSgpO1xuICAgICAgICAgICAgcmV2aXNpb24gPSBNYXRoLm1heCh2YWx1ZSwgcmV2aXNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gcmV2aXNpb247XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKF90YWc6IFVwZGF0YWJsZVRhZywgc3VidGFnOiBUYWcpIHtcbiAgICBpZiAoREVCVUcgJiYgX3RhZ1tUWVBFXSAhPT0gTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhIHRhZyB0aGF0IHdhcyBub3QgdXBkYXRhYmxlJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVFMgMy43IHNob3VsZCBhbGxvdyB1cyB0byBkbyB0aGlzIHZpYSBhc3NlcnRpb25cbiAgICBsZXQgdGFnID0gX3RhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGw7XG5cbiAgICBpZiAoc3VidGFnID09PSBDT05TVEFOVF9UQUcpIHtcbiAgICAgIHRhZy5zdWJ0YWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIERFQlVHICYmXG4gICAgICAgIHRhZy5sYXN0Q2hlY2tlZCA9PT0gJFJFVklTSU9OICYmXG4gICAgICAgIChzdWJ0YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsKVtDT01QVVRFXSgpID4gdGFnLmxhc3RWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQlVHOiBhdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHdpdGggYSB0YWcgdGhhdCBoYXMgYSBtb3JlIHJlY2VudCByZXZpc2lvbiBhcyBpdHMgdmFsdWUnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRhZy5zdWJ0YWcgPSBzdWJ0YWc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpcnR5KHRhZzogRGlydHlhYmxlVGFnIHwgVXBkYXRhYmxlVGFnKSB7XG4gICAgaWYgKFxuICAgICAgREVCVUcgJiZcbiAgICAgICEodGFnW1RZUEVdID09PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSB8fCB0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gZGlydHkgYSB0YWcgdGhhdCB3YXMgbm90IGRpcnR5YWJsZScpO1xuICAgIH1cblxuICAgIGlmIChERUJVRykge1xuICAgICAgLy8gVXN1YWxseSBieSB0aGlzIHBvaW50LCB3ZSd2ZSBhbHJlYWR5IGFzc2VydGVkIHdpdGggYmV0dGVyIGVycm9yIGluZm9ybWF0aW9uLFxuICAgICAgLy8gYnV0IHRoaXMgaXMgb3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlLlxuICAgICAgYXNzZXJ0VGFnTm90Q29uc3VtZWQhKHRhZyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
export { ALLOW_CYCLES, bump, combine, COMPUTE, CONSTANT_TAG, CONSTANT, createCombinatorTag, createTag, createUpdatableTag, CURRENT_TAG, dirty, INITIAL, isConst, isConstTag, update, validate, value, VOLATILE_TAG, VOLATILE } from './lib/validators';
export { dirtyTag, tagFor, updateTag } from './lib/meta';
export { track, consume, EPOCH, trackedData } from './lib/tracking';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFBLFlBQUEsRUFBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxFQUFBLG1CQUFBLEVBQUEsU0FBQSxFQUFBLGtCQUFBLEVBQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxRQUFBLGtCQUFBO0FBK0JBLFNBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQSxTQUFBLFFBQUEsWUFBQTtBQUVBLFNBQUEsS0FBQSxFQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsV0FBQSxRQUFBLGdCQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWcsIHRhZ0ZvciwgdXBkYXRlVGFnIH0gZnJvbSAnLi9saWIvbWV0YSc7XG5cbmV4cG9ydCB7IHRyYWNrLCBjb25zdW1lLCBFUE9DSCwgdHJhY2tlZERhdGEgfSBmcm9tICcuL2xpYi90cmFja2luZyc7XG4iXSwic291cmNlUm9vdCI6IiJ9
export { dirtyTagFor, tagFor, setPropertyDidChange } from './lib/meta';
export { consume, EPOCH, isTracking, track, trackedData, untrack } from './lib/tracking';
export { setAutotrackingTransactionEnv, runInAutotrackingTransaction, deprecateMutationsInAutotrackingTransaction } from './lib/debug';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFBLFlBQUEsRUFBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxFQUFBLG1CQUFBLEVBQUEsU0FBQSxFQUFBLGtCQUFBLEVBQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxRQUFBLGtCQUFBO0FBK0JBLFNBQUEsV0FBQSxFQUFBLE1BQUEsRUFBQSxvQkFBQSxRQUFBLFlBQUE7QUFFQSxTQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUFBLGdCQUFBO0FBRUEsU0FBQSw2QkFBQSxFQUFBLDRCQUFBLEVBQUEsMkNBQUEsUUFBQSxhQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQUxMT1dfQ1lDTEVTLFxuICBidW1wLFxuICBDb21iaW5hdG9yVGFnLFxuICBjb21iaW5lLFxuICBDT01QVVRFLFxuICBDT05TVEFOVF9UQUcsXG4gIENPTlNUQU5ULFxuICBDb25zdGFudFRhZyxcbiAgY3JlYXRlQ29tYmluYXRvclRhZyxcbiAgY3JlYXRlVGFnLFxuICBjcmVhdGVVcGRhdGFibGVUYWcsXG4gIENVUlJFTlRfVEFHLFxuICBkaXJ0eSxcbiAgRGlydHlhYmxlVGFnLFxuICBFbnRpdHlUYWcsXG4gIEVudGl0eVRhZ2dlZCxcbiAgSU5JVElBTCxcbiAgaXNDb25zdCxcbiAgaXNDb25zdFRhZyxcbiAgUmV2aXNpb24sXG4gIFRhZyxcbiAgVGFnZ2VkLFxuICBVcGRhdGFibGVUYWcsXG4gIHVwZGF0ZSxcbiAgdmFsaWRhdGUsXG4gIHZhbHVlLFxuICBWT0xBVElMRV9UQUcsXG4gIFZPTEFUSUxFLFxufSBmcm9tICcuL2xpYi92YWxpZGF0b3JzJztcblxuZXhwb3J0IHsgZGlydHlUYWdGb3IsIHRhZ0Zvciwgc2V0UHJvcGVydHlEaWRDaGFuZ2UgfSBmcm9tICcuL2xpYi9tZXRhJztcblxuZXhwb3J0IHsgY29uc3VtZSwgRVBPQ0gsIGlzVHJhY2tpbmcsIHRyYWNrLCB0cmFja2VkRGF0YSwgdW50cmFjayB9IGZyb20gJy4vbGliL3RyYWNraW5nJztcblxuZXhwb3J0IHtcbiAgc2V0QXV0b3RyYWNraW5nVHJhbnNhY3Rpb25FbnYsXG4gIHJ1bkluQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG4gIGRlcHJlY2F0ZU11dGF0aW9uc0luQXV0b3RyYWNraW5nVHJhbnNhY3Rpb24sXG59IGZyb20gJy4vbGliL2RlYnVnJztcbiJdLCJzb3VyY2VSb290IjoiIn0=

@@ -1,15 +0,25 @@

import { dirty, update, createUpdatableTag, CONSTANT_TAG, isConstTag } from './validators';
var TRACKED_TAGS = new WeakMap();
import { DEBUG } from '@glimmer/env';
import { dirty, createUpdatableTag, CONSTANT_TAG } from './validators';
import { assertTagNotConsumed } from './debug';
export var propertyDidChange = function propertyDidChange() {};
export function setPropertyDidChange(cb) {
propertyDidChange = cb;
}
function isObject(u) {
return typeof u === 'object' && u !== null;
return typeof u === 'object' && u !== null || typeof u === 'function';
}
export function dirtyTag(obj, key) {
var TRACKED_TAGS = new WeakMap();
export function dirtyTagFor(obj, key) {
if (isObject(obj)) {
var tag = tagFor(obj, key);
if (tag === undefined) {
updateTag(obj, key, createUpdatableTag());
} else if (isConstTag(tag)) {
throw new Error('BUG: Can\'t update a constant tag');
} else {
dirty(tag);
var tags = TRACKED_TAGS.get(obj);
// No tags have been setup for this object yet, return
if (tags === undefined) return;
// Dirty the tag for the specific property if it exists
var propertyTag = tags.get(key);
if (propertyTag !== undefined) {
if (DEBUG) {
assertTagNotConsumed(propertyTag, obj, key);
}
dirty(propertyTag);
propertyDidChange();
}

@@ -36,15 +46,2 @@ } else {

}
export function updateTag(obj, key, newTag) {
if (isObject(obj)) {
var tag = tagFor(obj, key);
if (isConstTag(tag)) {
throw new Error('BUG: Can\'t update a constant tag');
} else {
update(tag, newTag);
}
return tag;
} else {
throw new Error('BUG: Can\'t update a tag for a primitive');
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsa0JBQUEsRUFBQSxZQUFBLEVBQUEsVUFBQSxRQUFBLGNBQUE7QUFXQSxJQUFNLGVBQWUsSUFBckIsT0FBcUIsRUFBckI7QUFFQSxTQUFBLFFBQUEsQ0FBQSxDQUFBLEVBQXlCO0FBQ3ZCLFdBQU8sT0FBQSxDQUFBLEtBQUEsUUFBQSxJQUF5QixNQUFoQyxJQUFBO0FBQ0Q7QUFFRCxPQUFNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxHQUFBLEVBQTBDO0FBQzlDLFFBQUksU0FBSixHQUFJLENBQUosRUFBbUI7QUFDakIsWUFBSSxNQUFNLE9BQUEsR0FBQSxFQUFWLEdBQVUsQ0FBVjtBQUVBLFlBQUksUUFBSixTQUFBLEVBQXVCO0FBQ3JCLHNCQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsb0JBQUE7QUFERixTQUFBLE1BRU8sSUFBSSxXQUFKLEdBQUksQ0FBSixFQUFxQjtBQUMxQixrQkFBTSxJQUFOLEtBQU0scUNBQU47QUFESyxTQUFBLE1BRUE7QUFDTCxrQkFBQSxHQUFBO0FBQ0Q7QUFUSCxLQUFBLE1BVU87QUFDTCxjQUFNLElBQU4sS0FBTSw0Q0FBTjtBQUNEO0FBQ0Y7QUFJRCxPQUFNLFNBQUEsTUFBQSxDQUFBLEdBQUEsRUFBQSxHQUFBLEVBQXdDO0FBQzVDLFFBQUksU0FBSixHQUFJLENBQUosRUFBbUI7QUFDakIsWUFBSSxPQUFPLGFBQUEsR0FBQSxDQUFYLEdBQVcsQ0FBWDtBQUVBLFlBQUksU0FBSixTQUFBLEVBQXdCO0FBQ3RCLG1CQUFPLElBQVAsR0FBTyxFQUFQO0FBQ0EseUJBQUEsR0FBQSxDQUFBLEdBQUEsRUFBQSxJQUFBO0FBRkYsU0FBQSxNQUdPLElBQUksS0FBQSxHQUFBLENBQUosR0FBSSxDQUFKLEVBQW1CO0FBQ3hCLG1CQUFPLEtBQUEsR0FBQSxDQUFQLEdBQU8sQ0FBUDtBQUNEO0FBRUQsWUFBSSxNQUFKLG9CQUFBO0FBQ0EsYUFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLEdBQUE7QUFDQSxlQUFBLEdBQUE7QUFaRixLQUFBLE1BYU87QUFDTCxlQUFBLFlBQUE7QUFDRDtBQUNGO0FBRUQsT0FBTSxTQUFBLFNBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLE1BQUEsRUFBaUU7QUFDckUsUUFBSSxTQUFKLEdBQUksQ0FBSixFQUFtQjtBQUNqQixZQUFJLE1BQU0sT0FBQSxHQUFBLEVBQVYsR0FBVSxDQUFWO0FBRUEsWUFBSSxXQUFKLEdBQUksQ0FBSixFQUFxQjtBQUNuQixrQkFBTSxJQUFOLEtBQU0scUNBQU47QUFERixTQUFBLE1BRU87QUFDTCxtQkFBQSxHQUFBLEVBQUEsTUFBQTtBQUNEO0FBRUQsZUFBQSxHQUFBO0FBVEYsS0FBQSxNQVVPO0FBQ0wsY0FBTSxJQUFOLEtBQU0sNENBQU47QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZGlydHksXG4gIHVwZGF0ZSxcbiAgY3JlYXRlVXBkYXRhYmxlVGFnLFxuICBVcGRhdGFibGVUYWcsXG4gIENPTlNUQU5UX1RBRyxcbiAgaXNDb25zdFRhZyxcbiAgQ29uc3RhbnRUYWcsXG59IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5cbnR5cGUgVGFncyA9IE1hcDxQcm9wZXJ0eUtleSwgVXBkYXRhYmxlVGFnPjtcbmNvbnN0IFRSQUNLRURfVEFHUyA9IG5ldyBXZWFrTWFwPG9iamVjdCwgVGFncz4oKTtcblxuZnVuY3Rpb24gaXNPYmplY3Q8VD4odTogVCk6IHUgaXMgb2JqZWN0ICYgVCB7XG4gIHJldHVybiB0eXBlb2YgdSA9PT0gJ29iamVjdCcgJiYgdSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpcnR5VGFnPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUKTogdm9pZCB7XG4gIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgbGV0IHRhZyA9IHRhZ0ZvcihvYmosIGtleSk7XG5cbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZVRhZyhvYmosIGtleSwgY3JlYXRlVXBkYXRhYmxlVGFnKCkpO1xuICAgIH0gZWxzZSBpZiAoaXNDb25zdFRhZyh0YWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogQ2FuJ3QgdXBkYXRlIGEgY29uc3RhbnQgdGFnYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcnR5KHRhZyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBDYW4ndCB1cGRhdGUgYSB0YWcgZm9yIGEgcHJpbWl0aXZlYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ0ZvcjxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQsIGtleToga2V5b2YgVCk6IFVwZGF0YWJsZVRhZztcbmV4cG9ydCBmdW5jdGlvbiB0YWdGb3I8VD4ob2JqOiBULCBrZXk6IHN0cmluZyk6IENvbnN0YW50VGFnO1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ0ZvcjxUPihvYmo6IFQsIGtleToga2V5b2YgVCk6IFVwZGF0YWJsZVRhZyB8IENvbnN0YW50VGFnIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFncyA9IFRSQUNLRURfVEFHUy5nZXQob2JqKTtcblxuICAgIGlmICh0YWdzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhZ3MgPSBuZXcgTWFwKCk7XG4gICAgICBUUkFDS0VEX1RBR1Muc2V0KG9iaiwgdGFncyk7XG4gICAgfSBlbHNlIGlmICh0YWdzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdGFncy5nZXQoa2V5KSE7XG4gICAgfVxuXG4gICAgbGV0IHRhZyA9IGNyZWF0ZVVwZGF0YWJsZVRhZygpO1xuICAgIHRhZ3Muc2V0KGtleSwgdGFnKTtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVRhZzxUPihvYmo6IFQsIGtleToga2V5b2YgVCwgbmV3VGFnOiBVcGRhdGFibGVUYWcpOiBVcGRhdGFibGVUYWcge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWcgPSB0YWdGb3Iob2JqLCBrZXkpO1xuXG4gICAgaWYgKGlzQ29uc3RUYWcodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIGNvbnN0YW50IHRhZ2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGUodGFnLCBuZXdUYWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0YWc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIHRhZyBmb3IgYSBwcmltaXRpdmVgKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvbWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFBLEtBQUEsUUFBQSxjQUFBO0FBQ0EsU0FBQSxLQUFBLEVBQUEsa0JBQUEsRUFBQSxZQUFBLFFBQUEsY0FBQTtBQUNBLFNBQUEsb0JBQUEsUUFBQSxTQUFBO0FBRUEsT0FBTyxJQUFJLG9CQUFvQiw2QkFBQSxDQUF4QixDQUFBO0FBRVAsT0FBTSxTQUFBLG9CQUFBLENBQUEsRUFBQSxFQUE2QztBQUNqRCx3QkFBQSxFQUFBO0FBQ0Q7QUFFRCxTQUFBLFFBQUEsQ0FBQSxDQUFBLEVBQXlCO0FBQ3ZCLFdBQVEsT0FBQSxDQUFBLEtBQUEsUUFBQSxJQUF5QixNQUExQixJQUFDLElBQXdDLE9BQUEsQ0FBQSxLQUFoRCxVQUFBO0FBQ0Q7QUFNRCxJQUFNLGVBQWUsSUFBckIsT0FBcUIsRUFBckI7QUFFQSxPQUFNLFNBQUEsV0FBQSxDQUFBLEdBQUEsRUFBQSxHQUFBLEVBQStEO0FBQ25FLFFBQUksU0FBSixHQUFJLENBQUosRUFBbUI7QUFDakIsWUFBSSxPQUFPLGFBQUEsR0FBQSxDQUFYLEdBQVcsQ0FBWDtBQUVBO0FBQ0EsWUFBSSxTQUFKLFNBQUEsRUFBd0I7QUFFeEI7QUFDQSxZQUFJLGNBQWMsS0FBQSxHQUFBLENBQWxCLEdBQWtCLENBQWxCO0FBRUEsWUFBSSxnQkFBSixTQUFBLEVBQStCO0FBQzdCLGdCQUFBLEtBQUEsRUFBVztBQUNULHFDQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQTtBQUNEO0FBRUQsa0JBQUEsV0FBQTtBQUNBO0FBQ0Q7QUFoQkgsS0FBQSxNQWlCTztBQUNMLGNBQU0sSUFBTixLQUFNLDRDQUFOO0FBQ0Q7QUFDRjtBQUVELE9BQU0sU0FBQSxNQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsRUFBMEQ7QUFDOUQsUUFBSSxTQUFKLEdBQUksQ0FBSixFQUFtQjtBQUNqQixZQUFJLE9BQU8sYUFBQSxHQUFBLENBQVgsR0FBVyxDQUFYO0FBRUEsWUFBSSxTQUFKLFNBQUEsRUFBd0I7QUFDdEIsbUJBQU8sSUFBUCxHQUFPLEVBQVA7QUFFQSx5QkFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLElBQUE7QUFIRixTQUFBLE1BSU8sSUFBSSxLQUFBLEdBQUEsQ0FBSixHQUFJLENBQUosRUFBbUI7QUFDeEIsbUJBQU8sS0FBQSxHQUFBLENBQVAsR0FBTyxDQUFQO0FBQ0Q7QUFFRCxZQUFJLE1BQUosb0JBQUE7QUFDQSxhQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQTtBQUVBLGVBQUEsR0FBQTtBQWRGLEtBQUEsTUFlTztBQUNMLGVBQUEsWUFBQTtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBkaXJ0eSwgY3JlYXRlVXBkYXRhYmxlVGFnLCBVcGRhdGFibGVUYWcsIENPTlNUQU5UX1RBRywgQ29uc3RhbnRUYWcgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0VGFnTm90Q29uc3VtZWQgfSBmcm9tICcuL2RlYnVnJztcblxuZXhwb3J0IGxldCBwcm9wZXJ0eURpZENoYW5nZSA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eURpZENoYW5nZShjYjogKCkgPT4gdm9pZCkge1xuICBwcm9wZXJ0eURpZENoYW5nZSA9IGNiO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdDxUPih1OiBUKTogdSBpcyBvYmplY3QgJiBUIHtcbiAgcmV0dXJuICh0eXBlb2YgdSA9PT0gJ29iamVjdCcgJiYgdSAhPT0gbnVsbCkgfHwgdHlwZW9mIHUgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vLy8vLy8vLy8vXG5cbnR5cGUgVGFncyA9IE1hcDxQcm9wZXJ0eUtleSwgVXBkYXRhYmxlVGFnPjtcblxuY29uc3QgVFJBQ0tFRF9UQUdTID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWdzPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlydHlUYWdGb3I8VD4ob2JqOiBULCBrZXk6IGtleW9mIFQgfCBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICBsZXQgdGFncyA9IFRSQUNLRURfVEFHUy5nZXQob2JqKTtcblxuICAgIC8vIE5vIHRhZ3MgaGF2ZSBiZWVuIHNldHVwIGZvciB0aGlzIG9iamVjdCB5ZXQsIHJldHVyblxuICAgIGlmICh0YWdzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIERpcnR5IHRoZSB0YWcgZm9yIHRoZSBzcGVjaWZpYyBwcm9wZXJ0eSBpZiBpdCBleGlzdHNcbiAgICBsZXQgcHJvcGVydHlUYWcgPSB0YWdzLmdldChrZXkpO1xuXG4gICAgaWYgKHByb3BlcnR5VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChERUJVRykge1xuICAgICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEocHJvcGVydHlUYWcsIG9iaiwga2V5KTtcbiAgICAgIH1cblxuICAgICAgZGlydHkocHJvcGVydHlUYWcpO1xuICAgICAgcHJvcGVydHlEaWRDaGFuZ2UoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IENhbid0IHVwZGF0ZSBhIHRhZyBmb3IgYSBwcmltaXRpdmVgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnRm9yPFQ+KG9iajogVCwga2V5OiBrZXlvZiBUIHwgc3RyaW5nIHwgc3ltYm9sKTogVXBkYXRhYmxlVGFnIHwgQ29uc3RhbnRUYWcge1xuICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgIGxldCB0YWdzID0gVFJBQ0tFRF9UQUdTLmdldChvYmopO1xuXG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFncyA9IG5ldyBNYXAoKTtcblxuICAgICAgVFJBQ0tFRF9UQUdTLnNldChvYmosIHRhZ3MpO1xuICAgIH0gZWxzZSBpZiAodGFncy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZ2V0KGtleSkhO1xuICAgIH1cblxuICAgIGxldCB0YWcgPSBjcmVhdGVVcGRhdGFibGVUYWcoKTtcbiAgICB0YWdzLnNldChrZXksIHRhZyk7XG5cbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
import { combine as _combine, CONSTANT_TAG } from './validators';
import { createTag, dirty } from './validators';
import { tagFor, dirtyTag } from './meta';
import { DEBUG } from '@glimmer/env';
import { combine as _combine, createTag, dirty, CONSTANT_TAG } from './validators';
import { tagFor, dirtyTagFor } from './meta';
import { markTagAsConsumed, runInAutotrackingTransaction, assertTagNotConsumed } from './debug';
/**

@@ -34,2 +35,5 @@ * Whenever a tracked computed property is entered, the current tracker is

this.tags.add(tag);
if (DEBUG) {
markTagAsConsumed(tag, new Error());
}
this.last = tag;

@@ -56,4 +60,6 @@ };

}();
//////////
export function track(callback) {
export function track(callback, debuggingContext) {
var parent = CURRENT_TRACKER;

@@ -63,3 +69,7 @@ var current = new Tracker();

try {
callback();
if (DEBUG) {
runInAutotrackingTransaction(callback, debuggingContext);
} else {
callback();
}
} finally {

@@ -75,2 +85,14 @@ CURRENT_TRACKER = parent;

}
export function isTracking() {
return CURRENT_TRACKER !== null;
}
export function untrack(callback) {
var parent = CURRENT_TRACKER;
CURRENT_TRACKER = null;
try {
callback();
} finally {
CURRENT_TRACKER = parent;
}
}
//////////

@@ -94,4 +116,7 @@ export var EPOCH = createTag();

function setter(self, value) {
if (DEBUG) {
assertTagNotConsumed(tagFor(self, key), self, key, true);
}
dirty(EPOCH);
dirtyTag(self, key);
dirtyTagFor(self, key);
values.set(self, value);

@@ -101,2 +126,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFBLG1CQUFBLEVBQUEsWUFBQSxRQUFBLGNBQUE7QUFDQSxTQUFBLFNBQUEsRUFBQSxLQUFBLFFBQUEsY0FBQTtBQUNBLFNBQUEsTUFBQSxFQUFBLFFBQUEsUUFBQSxRQUFBO0FBSUE7Ozs7Ozs7Ozs7Ozs7QUFhQSxJQUFJLGtCQUFKLElBQUE7QUFFQTs7OztJQUdBLE87QUFBQSx1QkFBQTtBQUFBOztBQUNVLGFBQUEsSUFBQSxHQUFPLElBQVAsR0FBTyxFQUFQO0FBQ0EsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQW9CVDs7c0JBbEJDLEcsZ0JBQUEsRyxFQUFZO0FBQ1YsYUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLEdBQUE7QUFDQSxhQUFBLElBQUEsR0FBQSxHQUFBO0FBQ0QsSzs7c0JBRUQsTyxzQkFBTztBQUFBLFlBQ0QsSUFEQyxHQUNMLElBREssQ0FDRCxJQURDOztBQUdMLFlBQUksS0FBQSxJQUFBLEtBQUosQ0FBQSxFQUFxQjtBQUNuQixtQkFBQSxZQUFBO0FBREYsU0FBQSxNQUVPLElBQUksS0FBQSxJQUFBLEtBQUosQ0FBQSxFQUFxQjtBQUMxQixtQkFBTyxLQUFQLElBQUE7QUFESyxTQUFBLE1BRUE7QUFDTCxnQkFBSSxVQUFKLEVBQUE7QUFDQSxpQkFBQSxPQUFBLENBQWE7QUFBQSx1QkFBTyxRQUFBLElBQUEsQ0FBcEIsR0FBb0IsQ0FBUDtBQUFBLGFBQWI7QUFDQSxtQkFBTyxTQUFQLE9BQU8sQ0FBUDtBQUNEO0FBQ0YsSzs7Ozs7QUFHSCxPQUFNLFNBQUEsS0FBQSxDQUFBLFFBQUEsRUFBb0M7QUFDeEMsUUFBSSxTQUFKLGVBQUE7QUFDQSxRQUFJLFVBQVUsSUFBZCxPQUFjLEVBQWQ7QUFFQSxzQkFBQSxPQUFBO0FBRUEsUUFBSTtBQUNGO0FBREYsS0FBQSxTQUVVO0FBQ1IsMEJBQUEsTUFBQTtBQUNEO0FBRUQsV0FBTyxRQUFQLE9BQU8sRUFBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLE9BQUEsQ0FBQSxHQUFBLEVBQTBCO0FBQzlCLFFBQUksb0JBQUosSUFBQSxFQUE4QjtBQUM1Qix3QkFBQSxHQUFBLENBQUEsR0FBQTtBQUNEO0FBQ0Y7QUFFRDtBQUVBLE9BQU8sSUFBTSxRQUFOLFdBQUE7QUFLUCxPQUFNLFNBQUEsV0FBQSxDQUFBLEdBQUEsRUFBQSxXQUFBLEVBRW9CO0FBRXhCLFFBQUksU0FBUyxJQUFiLE9BQWEsRUFBYjtBQUNBLFFBQUksaUJBQWlCLE9BQUEsV0FBQSxLQUFyQixVQUFBO0FBRUEsYUFBQSxNQUFBLENBQUEsSUFBQSxFQUF1QjtBQUNyQixnQkFBUSxPQUFBLElBQUEsRUFBUixHQUFRLENBQVI7QUFFQSxZQUFBLGNBQUE7QUFFQTtBQUNBLFlBQUksa0JBQWtCLENBQUMsT0FBQSxHQUFBLENBQXZCLElBQXVCLENBQXZCLEVBQXlDO0FBQ3ZDLG9CQUFBLGFBQUE7QUFDQSxtQkFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFGRixTQUFBLE1BR087QUFDTCxvQkFBUSxPQUFBLEdBQUEsQ0FBUixJQUFRLENBQVI7QUFDRDtBQUVELGVBQUEsS0FBQTtBQUNEO0FBRUQsYUFBQSxNQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBb0M7QUFDbEMsY0FBQSxLQUFBO0FBQ0EsaUJBQUEsSUFBQSxFQUFBLEdBQUE7QUFDQSxlQUFBLEdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQTtBQUNEO0FBRUQsV0FBTyxFQUFBLGNBQUEsRUFBUCxjQUFPLEVBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhZywgY29tYmluZSwgQ09OU1RBTlRfVEFHIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IGNyZWF0ZVRhZywgZGlydHkgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgdGFnRm9yLCBkaXJ0eVRhZyB9IGZyb20gJy4vbWV0YSc7XG5cbnR5cGUgT3B0aW9uPFQ+ID0gVCB8IG51bGw7XG5cbi8qKlxuICogV2hlbmV2ZXIgYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGVudGVyZWQsIHRoZSBjdXJyZW50IHRyYWNrZXIgaXNcbiAqIHNhdmVkIG9mZiBhbmQgYSBuZXcgdHJhY2tlciBpcyByZXBsYWNlZC5cbiAqXG4gKiBBbnkgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCB0cmFja2VyLlxuICpcbiAqIFdoZW4gYSB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGlzIGV4aXRlZCwgdGhlIHRyYWNrZXIncyB0YWdzIGFyZVxuICogY29tYmluZWQgYW5kIGFkZGVkIHRvIHRoZSBwYXJlbnQgdHJhY2tlci5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBlYWNoIHRyYWNrZWQgY29tcHV0ZWQgcHJvcGVydHkgaGFzIGEgdGFnXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFja2VkIHByb3BlcnRpZXMgY29uc3VtZWQgaW5zaWRlIG9mXG4gKiBpdHNlbGYsIGluY2x1ZGluZyBjaGlsZCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnRpZXMuXG4gKi9cbmxldCBDVVJSRU5UX1RSQUNLRVI6IE9wdGlvbjxUcmFja2VyPiA9IG51bGw7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgdGhhdCB0cmFja3MgQHRyYWNrZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgY29uc3VtZWQuXG4gKi9cbmNsYXNzIFRyYWNrZXIge1xuICBwcml2YXRlIHRhZ3MgPSBuZXcgU2V0PFRhZz4oKTtcbiAgcHJpdmF0ZSBsYXN0OiBPcHRpb248VGFnPiA9IG51bGw7XG5cbiAgYWRkKHRhZzogVGFnKSB7XG4gICAgdGhpcy50YWdzLmFkZCh0YWcpO1xuICAgIHRoaXMubGFzdCA9IHRhZztcbiAgfVxuXG4gIGNvbWJpbmUoKTogVGFnIHtcbiAgICBsZXQgeyB0YWdzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRhZ3Muc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICB9IGVsc2UgaWYgKHRhZ3Muc2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdCBhcyBUYWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YWdzQXJyOiBUYWdbXSA9IFtdO1xuICAgICAgdGFncy5mb3JFYWNoKHRhZyA9PiB0YWdzQXJyLnB1c2godGFnKSk7XG4gICAgICByZXR1cm4gY29tYmluZSh0YWdzQXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogVGFnIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgbGV0IGN1cnJlbnQgPSBuZXcgVHJhY2tlcigpO1xuXG4gIENVUlJFTlRfVFJBQ0tFUiA9IGN1cnJlbnQ7XG5cbiAgdHJ5IHtcbiAgICBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIENVUlJFTlRfVFJBQ0tFUiA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmNvbWJpbmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWUodGFnOiBUYWcpIHtcbiAgaWYgKENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbCkge1xuICAgIENVUlJFTlRfVFJBQ0tFUi5hZGQodGFnKTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBFUE9DSCA9IGNyZWF0ZVRhZygpO1xuXG5leHBvcnQgdHlwZSBHZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQpID0+IFRbS10gfCB1bmRlZmluZWQ7XG5leHBvcnQgdHlwZSBTZXR0ZXI8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gKHNlbGY6IFQsIHZhbHVlOiBUW0tdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tlZERhdGE8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBrZXk6IEssXG4gIGluaXRpYWxpemVyPzogKCkgPT4gVFtLXVxuKTogeyBnZXR0ZXI6IEdldHRlcjxULCBLPjsgc2V0dGVyOiBTZXR0ZXI8VCwgSz4gfSB7XG4gIGxldCB2YWx1ZXMgPSBuZXcgV2Vha01hcDxULCBUW0tdPigpO1xuICBsZXQgaGFzSW5pdGlhbGl6ZXIgPSB0eXBlb2YgaW5pdGlhbGl6ZXIgPT09ICdmdW5jdGlvbic7XG5cbiAgZnVuY3Rpb24gZ2V0dGVyKHNlbGY6IFQpIHtcbiAgICBjb25zdW1lKHRhZ0ZvcihzZWxmLCBrZXkpKTtcblxuICAgIGxldCB2YWx1ZTtcblxuICAgIC8vIElmIHRoZSBmaWVsZCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCwgd2Ugc2hvdWxkIGluaXRpYWxpemUgaXRcbiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIgJiYgIXZhbHVlcy5oYXMoc2VsZikpIHtcbiAgICAgIHZhbHVlID0gaW5pdGlhbGl6ZXIhKCk7XG4gICAgICB2YWx1ZXMuc2V0KHNlbGYsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB2YWx1ZXMuZ2V0KHNlbGYpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRlcihzZWxmOiBULCB2YWx1ZTogVFtLXSk6IHZvaWQge1xuICAgIGRpcnR5KEVQT0NIKTtcbiAgICBkaXJ0eVRhZyhzZWxmLCBrZXkpO1xuICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgZ2V0dGVyLCBzZXR0ZXIgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFBLEtBQUEsUUFBQSxjQUFBO0FBQ0EsU0FBQSxtQkFBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQUEsWUFBQSxRQUFBLGNBQUE7QUFDQSxTQUFBLE1BQUEsRUFBQSxXQUFBLFFBQUEsUUFBQTtBQUNBLFNBQUEsaUJBQUEsRUFBQSw0QkFBQSxFQUFBLG9CQUFBLFFBQUEsU0FBQTtBQUlBOzs7Ozs7Ozs7Ozs7O0FBYUEsSUFBSSxrQkFBSixJQUFBO0FBRUE7Ozs7SUFHQSxPO0FBQUEsdUJBQUE7QUFBQTs7QUFDVSxhQUFBLElBQUEsR0FBTyxJQUFQLEdBQU8sRUFBUDtBQUNBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUF5QlQ7O3NCQXZCQyxHLGdCQUFBLEcsRUFBWTtBQUNWLGFBQUEsSUFBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBO0FBRUEsWUFBQSxLQUFBLEVBQVc7QUFDVCw4QkFBQSxHQUFBLEVBQXdCLElBQXhCLEtBQXdCLEVBQXhCO0FBQ0Q7QUFFRCxhQUFBLElBQUEsR0FBQSxHQUFBO0FBQ0QsSzs7c0JBRUQsTyxzQkFBTztBQUFBLFlBQ0QsSUFEQyxHQUNMLElBREssQ0FDRCxJQURDOztBQUdMLFlBQUksS0FBQSxJQUFBLEtBQUosQ0FBQSxFQUFxQjtBQUNuQixtQkFBQSxZQUFBO0FBREYsU0FBQSxNQUVPLElBQUksS0FBQSxJQUFBLEtBQUosQ0FBQSxFQUFxQjtBQUMxQixtQkFBTyxLQUFQLElBQUE7QUFESyxTQUFBLE1BRUE7QUFDTCxnQkFBSSxVQUFKLEVBQUE7QUFDQSxpQkFBQSxPQUFBLENBQWE7QUFBQSx1QkFBTyxRQUFBLElBQUEsQ0FBcEIsR0FBb0IsQ0FBUDtBQUFBLGFBQWI7QUFDQSxtQkFBTyxTQUFQLE9BQU8sQ0FBUDtBQUNEO0FBQ0YsSzs7OztBQUdIOzs7QUFFQSxPQUFNLFNBQUEsS0FBQSxDQUFBLFFBQUEsRUFBQSxnQkFBQSxFQUF1RTtBQUMzRSxRQUFJLFNBQUosZUFBQTtBQUNBLFFBQUksVUFBVSxJQUFkLE9BQWMsRUFBZDtBQUVBLHNCQUFBLE9BQUE7QUFFQSxRQUFJO0FBQ0YsWUFBQSxLQUFBLEVBQVc7QUFDVCx5Q0FBQSxRQUFBLEVBQUEsZ0JBQUE7QUFERixTQUFBLE1BRU87QUFDTDtBQUNEO0FBTEgsS0FBQSxTQU1VO0FBQ1IsMEJBQUEsTUFBQTtBQUNEO0FBRUQsV0FBTyxRQUFQLE9BQU8sRUFBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLE9BQUEsQ0FBQSxHQUFBLEVBQTBCO0FBQzlCLFFBQUksb0JBQUosSUFBQSxFQUE4QjtBQUM1Qix3QkFBQSxHQUFBLENBQUEsR0FBQTtBQUNEO0FBQ0Y7QUFFRCxPQUFNLFNBQUEsVUFBQSxHQUFvQjtBQUN4QixXQUFPLG9CQUFQLElBQUE7QUFDRDtBQUVELE9BQU0sU0FBQSxPQUFBLENBQUEsUUFBQSxFQUFzQztBQUMxQyxRQUFJLFNBQUosZUFBQTtBQUNBLHNCQUFBLElBQUE7QUFFQSxRQUFJO0FBQ0Y7QUFERixLQUFBLFNBRVU7QUFDUiwwQkFBQSxNQUFBO0FBQ0Q7QUFDRjtBQUVEO0FBRUEsT0FBTyxJQUFNLFFBQU4sV0FBQTtBQUtQLE9BQU0sU0FBQSxXQUFBLENBQUEsR0FBQSxFQUFBLFdBQUEsRUFFb0I7QUFFeEIsUUFBSSxTQUFTLElBQWIsT0FBYSxFQUFiO0FBQ0EsUUFBSSxpQkFBaUIsT0FBQSxXQUFBLEtBQXJCLFVBQUE7QUFFQSxhQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQXVCO0FBQ3JCLGdCQUFRLE9BQUEsSUFBQSxFQUFSLEdBQVEsQ0FBUjtBQUVBLFlBQUEsY0FBQTtBQUVBO0FBQ0EsWUFBSSxrQkFBa0IsQ0FBQyxPQUFBLEdBQUEsQ0FBdkIsSUFBdUIsQ0FBdkIsRUFBeUM7QUFDdkMsb0JBQUEsYUFBQTtBQUNBLG1CQUFBLEdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQTtBQUZGLFNBQUEsTUFHTztBQUNMLG9CQUFRLE9BQUEsR0FBQSxDQUFSLElBQVEsQ0FBUjtBQUNEO0FBRUQsZUFBQSxLQUFBO0FBQ0Q7QUFFRCxhQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFvQztBQUNsQyxZQUFBLEtBQUEsRUFBVztBQUNULGlDQUFzQixPQUFBLElBQUEsRUFBdEIsR0FBc0IsQ0FBdEIsRUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLElBQUE7QUFDRDtBQUVELGNBQUEsS0FBQTtBQUNBLG9CQUFBLElBQUEsRUFBQSxHQUFBO0FBQ0EsZUFBQSxHQUFBLENBQUEsSUFBQSxFQUFBLEtBQUE7QUFDRDtBQUVELFdBQU8sRUFBQSxjQUFBLEVBQVAsY0FBTyxFQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5pbXBvcnQgeyBUYWcsIGNvbWJpbmUsIGNyZWF0ZVRhZywgZGlydHksIENPTlNUQU5UX1RBRyB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB0YWdGb3IsIGRpcnR5VGFnRm9yIH0gZnJvbSAnLi9tZXRhJztcbmltcG9ydCB7IG1hcmtUYWdBc0NvbnN1bWVkLCBydW5JbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uLCBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG50eXBlIE9wdGlvbjxUPiA9IFQgfCBudWxsO1xuXG4vKipcbiAqIFdoZW5ldmVyIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBlbnRlcmVkLCB0aGUgY3VycmVudCB0cmFja2VyIGlzXG4gKiBzYXZlZCBvZmYgYW5kIGEgbmV3IHRyYWNrZXIgaXMgcmVwbGFjZWQuXG4gKlxuICogQW55IHRyYWNrZWQgcHJvcGVydGllcyBjb25zdW1lZCBhcmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdHJhY2tlci5cbiAqXG4gKiBXaGVuIGEgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0eSBpcyBleGl0ZWQsIHRoZSB0cmFja2VyJ3MgdGFncyBhcmVcbiAqIGNvbWJpbmVkIGFuZCBhZGRlZCB0byB0aGUgcGFyZW50IHRyYWNrZXIuXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHRoYXQgZWFjaCB0cmFja2VkIGNvbXB1dGVkIHByb3BlcnR5IGhhcyBhIHRhZ1xuICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhY2tlZCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGluc2lkZSBvZlxuICogaXRzZWxmLCBpbmNsdWRpbmcgY2hpbGQgdHJhY2tlZCBjb21wdXRlZCBwcm9wZXJ0aWVzLlxuICovXG5sZXQgQ1VSUkVOVF9UUkFDS0VSOiBPcHRpb248VHJhY2tlcj4gPSBudWxsO1xuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IHRoYXQgdHJhY2tzIEB0cmFja2VkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGNvbnN1bWVkLlxuICovXG5jbGFzcyBUcmFja2VyIHtcbiAgcHJpdmF0ZSB0YWdzID0gbmV3IFNldDxUYWc+KCk7XG4gIHByaXZhdGUgbGFzdDogT3B0aW9uPFRhZz4gPSBudWxsO1xuXG4gIGFkZCh0YWc6IFRhZykge1xuICAgIHRoaXMudGFncy5hZGQodGFnKTtcblxuICAgIGlmIChERUJVRykge1xuICAgICAgbWFya1RhZ0FzQ29uc3VtZWQhKHRhZywgbmV3IEVycm9yKCkpO1xuICAgIH1cblxuICAgIHRoaXMubGFzdCA9IHRhZztcbiAgfVxuXG4gIGNvbWJpbmUoKTogVGFnIHtcbiAgICBsZXQgeyB0YWdzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRhZ3Muc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICB9IGVsc2UgaWYgKHRhZ3Muc2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdCBhcyBUYWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YWdzQXJyOiBUYWdbXSA9IFtdO1xuICAgICAgdGFncy5mb3JFYWNoKHRhZyA9PiB0YWdzQXJyLnB1c2godGFnKSk7XG4gICAgICByZXR1cm4gY29tYmluZSh0YWdzQXJyKTtcbiAgICB9XG4gIH1cbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQsIGRlYnVnZ2luZ0NvbnRleHQ/OiBzdHJpbmcgfCBmYWxzZSk6IFRhZyB7XG4gIGxldCBwYXJlbnQgPSBDVVJSRU5UX1RSQUNLRVI7XG4gIGxldCBjdXJyZW50ID0gbmV3IFRyYWNrZXIoKTtcblxuICBDVVJSRU5UX1RSQUNLRVIgPSBjdXJyZW50O1xuXG4gIHRyeSB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBydW5JbkF1dG90cmFja2luZ1RyYW5zYWN0aW9uIShjYWxsYmFjaywgZGVidWdnaW5nQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIENVUlJFTlRfVFJBQ0tFUiA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmNvbWJpbmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWUodGFnOiBUYWcpIHtcbiAgaWYgKENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbCkge1xuICAgIENVUlJFTlRfVFJBQ0tFUi5hZGQodGFnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUcmFja2luZygpIHtcbiAgcmV0dXJuIENVUlJFTlRfVFJBQ0tFUiAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVudHJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgbGV0IHBhcmVudCA9IENVUlJFTlRfVFJBQ0tFUjtcbiAgQ1VSUkVOVF9UUkFDS0VSID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgQ1VSUkVOVF9UUkFDS0VSID0gcGFyZW50O1xuICB9XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IEVQT0NIID0gY3JlYXRlVGFnKCk7XG5cbmV4cG9ydCB0eXBlIEdldHRlcjxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSAoc2VsZjogVCkgPT4gVFtLXSB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIFNldHRlcjxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSAoc2VsZjogVCwgdmFsdWU6IFRbS10pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFja2VkRGF0YTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIGtleTogSyxcbiAgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUW0tdXG4pOiB7IGdldHRlcjogR2V0dGVyPFQsIEs+OyBzZXR0ZXI6IFNldHRlcjxULCBLPiB9IHtcbiAgbGV0IHZhbHVlcyA9IG5ldyBXZWFrTWFwPFQsIFRbS10+KCk7XG4gIGxldCBoYXNJbml0aWFsaXplciA9IHR5cGVvZiBpbml0aWFsaXplciA9PT0gJ2Z1bmN0aW9uJztcblxuICBmdW5jdGlvbiBnZXR0ZXIoc2VsZjogVCkge1xuICAgIGNvbnN1bWUodGFnRm9yKHNlbGYsIGtleSkpO1xuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgLy8gSWYgdGhlIGZpZWxkIGhhcyBuZXZlciBiZWVuIGluaXRpYWxpemVkLCB3ZSBzaG91bGQgaW5pdGlhbGl6ZSBpdFxuICAgIGlmIChoYXNJbml0aWFsaXplciAmJiAhdmFsdWVzLmhhcyhzZWxmKSkge1xuICAgICAgdmFsdWUgPSBpbml0aWFsaXplciEoKTtcbiAgICAgIHZhbHVlcy5zZXQoc2VsZiwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlcy5nZXQoc2VsZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGVyKHNlbGY6IFQsIHZhbHVlOiBUW0tdKTogdm9pZCB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnRm9yKHNlbGYsIGtleSksIHNlbGYsIGtleSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZGlydHkoRVBPQ0gpO1xuICAgIGRpcnR5VGFnRm9yKHNlbGYsIGtleSk7XG4gICAgdmFsdWVzLnNldChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4geyBnZXR0ZXIsIHNldHRlciB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var symbol = typeof Symbol !== 'undefined' ? Symbol : function (key) {
return '__' + key + Math.floor(Math.random() * Date.now()) + '__';
};
import { DEBUG } from '@glimmer/env';
import { symbol } from './utils';
import { assertTagNotConsumed } from './debug';
export var CONSTANT = 0;

@@ -30,3 +30,8 @@ export var INITIAL = 1;

*/
export function value(_tag) {
export function value(tag) {
if (DEBUG) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
return $REVISION;

@@ -45,8 +50,21 @@ }

export function validate(tag, snapshot) {
return snapshot >= tag[COMPUTE]();
if (DEBUG) {
IS_VALIDATING = true;
}
var isValid = snapshot >= tag[COMPUTE]();
if (DEBUG) {
IS_VALIDATING = false;
if (isValid) {
// compute to cache the latest value, which will prevent us from doing
// invalid updates later on.
tag[COMPUTE]();
}
}
return isValid;
}
var IS_VALIDATING = void 0;
var TYPE = symbol('TAG_TYPE');
export var ALLOW_CYCLES = void 0;
if (false) {
ALLOW_CYCLES = new WeakSet();
if (DEBUG) {
ALLOW_CYCLES = new WeakMap();
}

@@ -70,5 +88,22 @@

if (lastChecked !== $REVISION) {
if (this.isUpdating === true) {
if (DEBUG && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
} else if (lastChecked !== $REVISION) {
this.isUpdating = true;
this.lastChecked = $REVISION;
if (DEBUG) {
// In DEBUG, we don't cache while validating only, because it is valid
// update a tag between calling `validate()` and `value()`. Once you
// call `value()` on a tag, its revision is effectively locked in, and
// if you attempt to update it to a tag that is more recent it could
// break assumptions in our system. This is why the assertion exists in
// the static `update()` method below.
if (!IS_VALIDATING) {
this.lastChecked = $REVISION;
}
} else {
this.lastChecked = $REVISION;
}
try {

@@ -93,8 +128,2 @@ var subtags = this.subtags,

}
if (this.isUpdating === true) {
if (false && !ALLOW_CYCLES.has(this)) {
throw new Error('Cycles in tags are not allowed');
}
this.lastChecked = ++$REVISION;
}
return this.lastValue;

@@ -104,3 +133,3 @@ };

MonomorphicTagImpl.update = function update(_tag, subtag) {
if (false && _tag[TYPE] !== 1 /* Updatable */) {
if (DEBUG && _tag[TYPE] !== 1 /* Updatable */) {
throw new Error('Attempted to update a tag that was not updatable');

@@ -113,8 +142,6 @@ }

} else {
if (DEBUG && tag.lastChecked === $REVISION && subtag[COMPUTE]() > tag.lastValue) {
throw new Error('BUG: attempted to update a tag with a tag that has a more recent revision as its value');
}
tag.subtag = subtag;
// subtag could be another type of tag, e.g. CURRENT_TAG or VOLATILE_TAG.
// If so, lastChecked/lastValue will be undefined, result in these being
// NaN. This is fine, it will force the system to recompute.
tag.lastChecked = Math.min(tag.lastChecked, subtag.lastChecked);
tag.lastValue = Math.max(tag.lastValue, subtag.lastValue);
}

@@ -124,5 +151,10 @@ };

MonomorphicTagImpl.dirty = function dirty(tag) {
if (false && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
if (DEBUG && !(tag[TYPE] === 1 /* Updatable */ || tag[TYPE] === 0 /* Dirtyable */)) {
throw new Error('Attempted to dirty a tag that was not dirtyable');
}
if (DEBUG) {
// Usually by this point, we've already asserted with better error information,
// but this is our last line of defense.
assertTagNotConsumed(tag);
}
tag.revision = ++$REVISION;

@@ -205,2 +237,2 @@ };

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLElBQU0sU0FDSixPQUFBLE1BQUEsS0FBQSxXQUFBLEdBQUEsTUFBQSxHQUVJO0FBQUEsa0JBQXNCLEdBQXRCLEdBQTRCLEtBQUEsS0FBQSxDQUFXLEtBQUEsTUFBQSxLQUFnQixLQUg3RCxHQUc2RCxFQUEzQixDQUE1QjtBQUFBLENBSE47QUFTQSxPQUFPLElBQU0sV0FBTixDQUFBO0FBQ1AsT0FBTyxJQUFNLFVBQU4sQ0FBQTtBQUNQLE9BQU8sSUFBTSxXQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFQSxPQUFNLFNBQUEsSUFBQSxHQUFjO0FBQ2xCO0FBQ0Q7QUFFRDtBQUVBLE9BQU8sSUFBTSxVQUF5QixPQUEvQixhQUErQixDQUEvQjtBQWdCUDtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNBLE9BQU0sU0FBQSxLQUFBLENBQUEsSUFBQSxFQUF5QjtBQUM3QixXQUFBLFNBQUE7QUFDRDtBQUVEOzs7Ozs7Ozs7O0FBVUEsT0FBTSxTQUFBLFFBQUEsQ0FBQSxHQUFBLEVBQUEsUUFBQSxFQUErQztBQUNuRCxXQUFPLFlBQVksSUFBbkIsT0FBbUIsR0FBbkI7QUFDRDtBQWlCRCxJQUFNLE9BQXNCLE9BQTVCLFVBQTRCLENBQTVCO0FBRUEsT0FBTyxJQUFBLHFCQUFBO0FBRVAsSUFBQSxLQUFBLEVBQVc7QUFDVCxtQkFBZSxJQUFmLE9BQWUsRUFBZjtBQUNEOztJQXFCRCxrQjtBQVdFLGdDQUFBLElBQUEsRUFBcUM7QUFBQTs7QUFWN0IsYUFBQSxRQUFBLEdBQUEsT0FBQTtBQUNBLGFBQUEsV0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxPQUFBO0FBRUEsYUFBQSxVQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLElBQUE7QUFDQSxhQUFBLE9BQUEs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QWpDLEdBQWlDOztBQUNyQyxXQUFPLFFBQVAsWUFBQTtBQUNEO0FBRUQsT0FBTSxTQUFBLFVBQUEsQ0FBQSxHQUFBLEVBQTZCO0FBQ2pDLFdBQU8sUUFBUCxZQUFBO0FBQ0Q7QUFFRDs7SUFFQSxXOzs7OzswQkFDRSxPLGdCQUFTO0FBQ1AsZUFBQSxRQUFBO0FBQ0QsSzs7Ozs7QUFHSCxPQUFPLElBQU0sZUFBZSxJQUFyQixXQUFxQixFQUFyQjtBQUVQOztJQUVBLFU7Ozs7O3lCQUNFLE8sZ0JBQVM7QUFDUCxlQUFBLFNBQUE7QUFDRCxLOzs7OztBQUdILE9BQU8sSUFBTSxjQUFjLElBQXBCLFVBQW9CLEVBQXBCO0FBRVA7QUFFQSxPQUFNLFNBQUEsT0FBQSxDQUFBLElBQUEsRUFBNkI7QUFDakMsUUFBSSxZQUFKLEVBQUE7QUFFQSxTQUFLLElBQUksSUFBSixDQUFBLEVBQVcsSUFBSSxLQUFwQixNQUFBLEVBQWlDLElBQWpDLENBQUEsRUFBQSxHQUFBLEVBQTZDO0FBQzNDLFlBQUksTUFBTSxLQUFWLENBQVUsQ0FBVjtBQUNBLFlBQUksUUFBSixZQUFBLEVBQTBCO0FBQzFCLGtCQUFBLElBQUEsQ0FBQSxHQUFBO0FBQ0Q7QUFFRCxXQUFPLG9CQUFQLFNBQU8sQ0FBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLG1CQUFBLENBQUEsSUFBQSxFQUF5QztBQUM3QyxZQUFRLEtBQVIsTUFBQTtBQUNFLGFBQUEsQ0FBQTtBQUNFLG1CQUFBLFlBQUE7QUFDRixhQUFBLENBQUE7QUFDRSxtQkFBTyxLQUFQLENBQU8sQ0FBUDtBQUNGO0FBQ0UsZ0JBQUksTUFBTSxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFncyc7XG5cbi8vLy8vLy8vLy9cblxuLy8gdXRpbHNcbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoKFxuICBrOiBpbmZlciBJXG4pID0+IHZvaWQpXG4gID8gSVxuICA6IG5ldmVyO1xuXG5jb25zdCBzeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJ1xuICAgID8gU3ltYm9sXG4gICAgOiAoa2V5OiBzdHJpbmcpID0+IGBfXyR7a2V5fSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogRGF0ZS5ub3coKSl9X19gIGFzIGFueTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBSZXZpc2lvbiA9IG51bWJlcjtcblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UOiBSZXZpc2lvbiA9IDA7XG5leHBvcnQgY29uc3QgSU5JVElBTDogUmV2aXNpb24gPSAxO1xuZXhwb3J0IGNvbnN0IFZPTEFUSUxFOiBSZXZpc2lvbiA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIE1BWF9JTlRcblxubGV0ICRSRVZJU0lPTiA9IElOSVRJQUw7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wKCkge1xuICAkUkVWSVNJT04rKztcbn1cblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3QgQ09NUFVURTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX0NPTVBVVEUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWc8VD4ge1xuICBbQ09NUFVURV0oKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWcgZXh0ZW5kcyBFbnRpdHlUYWc8UmV2aXNpb24+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VGFnZ2VkPFQ+IHtcbiAgdGFnOiBFbnRpdHlUYWc8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnZ2VkIHtcbiAgdGFnOiBUYWc7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBgdmFsdWVgIHJlY2VpdmVzIGEgdGFnIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBSZXZpc2lvbiBiYXNlZCBvbiB0aGF0IHRhZy4gVGhpc1xuICogc25hcHNob3QgY2FuIHRoZW4gbGF0ZXIgYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgd2l0aCB0aGUgc2FtZSB0YWcgdG9cbiAqIGRldGVybWluZSBpZiB0aGUgdGFnIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgdGltZSB0aGF0IGB2YWx1ZWAgd2FzXG4gKiBjYWxsZWQuXG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZ2xvYmFsIHJldmlzaW9uIGNvdW50IGRpcmVjdGx5IGZvclxuICogcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBzaG91bGQgbm90IGJlXG4gKiByZWxpZWQgb24gZGlyZWN0bHkgYnkgdXNlcnMgb2YgdGhlc2UgQVBJcy4gSW5zdGVhZCwgUmV2aXNpb25zIHNob3VsZCBiZVxuICogdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBvcGFxdWUvdW5rbm93biwgYW5kIHNob3VsZCBvbmx5IGJlIGludGVyYWN0ZWQgd2l0aCB2aWFcbiAqIHRoZSBgdmFsdWVgL2B2YWxpZGF0ZWAgQVBJLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKF90YWc6IFRhZyk6IFJldmlzaW9uIHtcbiAgcmV0dXJuICRSRVZJU0lPTjtcbn1cblxuLyoqXG4gKiBgdmFsaWRhdGVgIHJlY2VpdmVzIGEgdGFnIGFuZCBhIHNuYXBzaG90IGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGB2YWx1ZWAgd2l0aFxuICogdGhlIHNhbWUgdGFnLCBhbmQgZGV0ZXJtaW5lcyBpZiB0aGUgdGFnIGlzIHN0aWxsIHZhbGlkIGNvbXBhcmVkIHRvIHRoZVxuICogc25hcHNob3QuIElmIHRoZSB0YWcncyBzdGF0ZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlbiwgYHZhbGlkYXRlYCB3aWxsXG4gKiByZXR1cm4gZmFsc2UsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0cnVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFcbiAqIGNhbGN1bGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHRhZ3Mgc2hvdWxkIGJlIHJlcnVuLlxuICpcbiAqIEBwYXJhbSB0YWdcbiAqIEBwYXJhbSBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodGFnOiBUYWcsIHNuYXBzaG90OiBSZXZpc2lvbikge1xuICByZXR1cm4gc25hcHNob3QgPj0gdGFnW0NPTVBVVEVdKCk7XG59XG5cbi8vLy8vLy8vLy9cblxuLyoqXG4gKiBUaGlzIGVudW0gcmVwcmVzZW50cyBhbGwgb2YgdGhlIHBvc3NpYmxlIHRhZyB0eXBlcyBmb3IgdGhlIG1vbm9tb3JwaGljIHRhZyBjbGFzcy5cbiAqIE90aGVyIGN1c3RvbSB0YWcgY2xhc3NlcyBjYW4gZXhpc3QsIHN1Y2ggYXMgQ3VycmVudFRhZyBhbmQgVm9sYXRpbGVUYWcsIGJ1dCBmb3JcbiAqIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGFueSB0eXBlIG9mIHRhZyB0aGF0IGlzIG1lYW50IHRvIGJlIHVzZWQgZnJlcXVlbnRseSBzaG91bGRcbiAqIGJlIGFkZGVkIHRvIHRoZSBtb25vbW9ycGhpYyB0YWcuXG4gKi9cbmNvbnN0IGVudW0gTW9ub21vcnBoaWNUYWdUeXBlcyB7XG4gIERpcnR5YWJsZSxcbiAgVXBkYXRhYmxlLFxuICBDb21iaW5hdG9yLFxuICBDb25zdGFudCxcbn1cblxuY29uc3QgVFlQRTogdW5pcXVlIHN5bWJvbCA9IHN5bWJvbCgnVEFHX1RZUEUnKTtcblxuZXhwb3J0IGxldCBBTExPV19DWUNMRVM6IFdlYWtTZXQ8VXBkYXRhYmxlVGFnPjtcblxuaWYgKERFQlVHKSB7XG4gIEFMTE9XX0NZQ0xFUyA9IG5ldyBXZWFrU2V0KCk7XG59XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ0Jhc2U8VCBleHRlbmRzIE1vbm9tb3JwaGljVGFnVHlwZXM+IGV4dGVuZHMgVGFnIHtcbiAgW1RZUEVdOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcnR5YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlPiB7fVxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5hdG9yVGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcj4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudD4ge31cblxuaW50ZXJmYWNlIE1vbm9tb3JwaGljVGFnTWFwcGluZyB7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZV06IERpcnR5YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlXTogVXBkYXRhYmxlVGFnO1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yXTogQ29tYmluYXRvclRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnRdOiBDb25zdGFudFRhZztcbn1cblxudHlwZSBNb25vbW9ycGhpY1RhZyA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdNYXBwaW5nW01vbm9tb3JwaGljVGFnVHlwZXNdPjtcbnR5cGUgTW9ub21vcnBoaWNUYWdUeXBlID0gVW5pb25Ub0ludGVyc2VjdGlvbjxNb25vbW9ycGhpY1RhZ1R5cGVzPjtcblxuY2xhc3MgTW9ub21vcnBoaWNUYWdJbXBsIGltcGxlbWVudHMgTW9ub21vcnBoaWNUYWcge1xuICBwcml2YXRlIHJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBsYXN0Q2hlY2tlZCA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdFZhbHVlID0gSU5JVElBTDtcblxuICBwcml2YXRlIGlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJ0YWc6IFRhZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnRhZ3M6IFRhZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgW1RZUEVdOiBNb25vbW9ycGhpY1RhZ1R5cGU7XG5cbiAgY29uc3RydWN0b3IodHlwZTogTW9ub21vcnBoaWNUYWdUeXBlcykge1xuICAgIHRoaXNbVFlQRV0gPSB0eXBlIGFzIE1vbm9tb3JwaGljVGFnVHlwZTtcbiAgfVxuXG4gIFtDT01QVVRFXSgpOiBSZXZpc2lvbiB7XG4gICAgbGV0IHsgbGFzdENoZWNrZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAobGFzdENoZWNrZWQgIT09ICRSRVZJU0lPTikge1xuICAgICAgdGhpcy5pc1VwZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgocmV2aXNpb24sIHN1YnRhZ1tDT01QVVRFXSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcgPT09IHRydWUpIHtcbiAgICAgIGlmIChERUJVRyAmJiAhQUxMT1dfQ1lDTEVTLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZShfdGFnOiBVcGRhdGFibGVUYWcsIHN1YnRhZzogVGFnKSB7XG4gICAgaWYgKERFQlVHICYmIF90YWdbVFlQRV0gIT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgdGhhdCB3YXMgbm90IHVwZGF0YWJsZScpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFRTIDMuNyBzaG91bGQgYWxsb3cgdXMgdG8gZG8gdGhpcyB2aWEgYXNzZXJ0aW9uXG4gICAgbGV0IHRhZyA9IF90YWcgYXMgTW9ub21vcnBoaWNUYWdJbXBsO1xuXG4gICAgaWYgKHN1YnRhZyA9PT0gQ09OU1RBTlRfVEFHKSB7XG4gICAgICB0YWcuc3VidGFnID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcblxuICAgICAgLy8gc3VidGFnIGNvdWxkIGJlIGFub3RoZXIgdHlwZSBvZiB0YWcsIGUuZy4gQ1VSUkVOVF9UQUcgb3IgVk9MQVRJTEVfVEFHLlxuICAgICAgLy8gSWYgc28sIGxhc3RDaGVja2VkL2xhc3RWYWx1ZSB3aWxsIGJlIHVuZGVmaW5lZCwgcmVzdWx0IGluIHRoZXNlIGJlaW5nXG4gICAgICAvLyBOYU4uIFRoaXMgaXMgZmluZSwgaXQgd2lsbCBmb3JjZSB0aGUgc3lzdGVtIHRvIHJlY29tcHV0ZS5cbiAgICAgIHRhZy5sYXN0Q2hlY2tlZCA9IE1hdGgubWluKHRhZy5sYXN0Q2hlY2tlZCwgKHN1YnRhZyBhcyBhbnkpLmxhc3RDaGVja2VkKTtcbiAgICAgIHRhZy5sYXN0VmFsdWUgPSBNYXRoLm1heCh0YWcubGFzdFZhbHVlLCAoc3VidGFnIGFzIGFueSkubGFzdFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgKHRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRpcnR5ID0gTW9ub21vcnBoaWNUYWdJbXBsLmRpcnR5O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZSA9IE1vbm9tb3JwaGljVGFnSW1wbC51cGRhdGU7XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhZygpOiBEaXJ0eWFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLkRpcnR5YWJsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVcGRhdGFibGVUYWcoKTogVXBkYXRhYmxlVGFnIHtcbiAgcmV0dXJuIG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5VcGRhdGFibGUpO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVF9UQUcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQpIGFzIENvbnN0YW50VGFnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdCh7IHRhZyB9OiBUYWdnZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdFRhZyh0YWc6IFRhZyk6IHRhZyBpcyBDb25zdGFudFRhZyB7XG4gIHJldHVybiB0YWcgPT09IENPTlNUQU5UX1RBRztcbn1cblxuLy8vLy8vLy8vL1xuXG5jbGFzcyBWb2xhdGlsZVRhZyBpbXBsZW1lbnRzIFRhZyB7XG4gIFtDT01QVVRFXSgpIHtcbiAgICByZXR1cm4gVk9MQVRJTEU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZPTEFUSUxFX1RBRyA9IG5ldyBWb2xhdGlsZVRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIEN1cnJlbnRUYWcgaW1wbGVtZW50cyBDdXJyZW50VGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiAkUkVWSVNJT047XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVEFHID0gbmV3IEN1cnJlbnRUYWcoKTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGxldCBvcHRpbWl6ZWQ6IFRhZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCB0YWcgPSB0YWdzW2ldO1xuICAgIGlmICh0YWcgPT09IENPTlNUQU5UX1RBRykgY29udGludWU7XG4gICAgb3B0aW1pemVkLnB1c2godGFnKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb21iaW5hdG9yVGFnKG9wdGltaXplZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21iaW5hdG9yVGFnKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgc3dpdGNoICh0YWdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHRhZ3NbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxldCB0YWcgPSBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcikgYXMgQ29tYmluYXRvclRhZztcbiAgICAgICh0YWcgYXMgYW55KS5zdWJ0YWdzID0gdGFncztcbiAgICAgIHJldHVybiB0YWc7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3ZhbGlkYXRvci9saWIvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLFNBQUEsS0FBQSxRQUFBLGNBQUE7QUFDQSxTQUFBLE1BQUEsUUFBQSxTQUFBO0FBQ0EsU0FBQSxvQkFBQSxRQUFBLFNBQUE7QUFNQSxPQUFPLElBQU0sV0FBTixDQUFBO0FBQ1AsT0FBTyxJQUFNLFVBQU4sQ0FBQTtBQUNQLE9BQU8sSUFBTSxXQUFOLGdCQUFBLEMsQ0FBNkM7QUFFcEQsSUFBSSxZQUFKLE9BQUE7QUFFQSxPQUFNLFNBQUEsSUFBQSxHQUFjO0FBQ2xCO0FBQ0Q7QUFFRDtBQUVBLE9BQU8sSUFBTSxVQUF5QixPQUEvQixhQUErQixDQUEvQjtBQWdCUDtBQUVBOzs7Ozs7Ozs7Ozs7OztBQWNBLE9BQU0sU0FBQSxLQUFBLENBQUEsR0FBQSxFQUF3QjtBQUM1QixRQUFBLEtBQUEsRUFBVztBQUNUO0FBQ0E7QUFDQSxZQUFBLE9BQUE7QUFDRDtBQUVELFdBQUEsU0FBQTtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7QUFVQSxPQUFNLFNBQUEsUUFBQSxDQUFBLEdBQUEsRUFBQSxRQUFBLEVBQStDO0FBQ25ELFFBQUEsS0FBQSxFQUFXO0FBQ1Qsd0JBQUEsSUFBQTtBQUNEO0FBRUQsUUFBSSxVQUFVLFlBQVksSUFBMUIsT0FBMEIsR0FBMUI7QUFFQSxRQUFBLEtBQUEsRUFBVztBQUNULHdCQUFBLEtBQUE7QUFFQSxZQUFBLE9BQUEsRUFBYTtBQUNYO0FBQ0E7QUFDQSxnQkFBQSxPQUFBO0FBQ0Q7QUFDRjtBQUVELFdBQUEsT0FBQTtBQUNEO0FBRUQsSUFBQSxzQkFBQTtBQWlCQSxJQUFNLE9BQXNCLE9BQTVCLFVBQTRCLENBQTVCO0FBRUEsT0FBTyxJQUFBLHFCQUFBO0FBRVAsSUFBQSxLQUFBLEVBQVc7QUFDVCxtQkFBZSxJQUFmLE9BQWUsRUFBZjtBQUNEOztJQXFCRCxrQjtBQVdFLGdDQUFBLElBQUEsRUFBcUM7QUFBQTs7QUFWN0IsYUFBQSxRQUFBLEdBQUEsT0FBQTtBQUNBLGFBQUEsV0FBQSxHQUFBLE9BQUE7QUFDQSxhQUFBLFNBQUEsR0FBQSxPQUFBO0FBRUEsYUFBQSxVQUFBLEdBQUEsS0FBQTtBQUNBLGFBQUEsTUFBQSxHQUFBLElBQUE7QUFDQSxhQUFBLE9BQUEsR0FBQSxJQUFBO0FBS04sYUFBQSxJQUFBLElBQUEsSUFBQTtBQUNEOztpQ0FFRCxPLGdCQUFTO0FBQUEsWUFDSCxXQURHLEdBQ1AsSUFETyxDQUNILFdBREc7O0FBR1AsWUFBSSxLQUFBLFVBQUEsS0FBSixJQUFBLEVBQThCO0FBQzVCLGdCQUFJLFNBQVMsQ0FBQyxhQUFBLEdBQUEsQ0FBZCxJQUFjLENBQWQsRUFBdUM7QUFDckMsc0JBQU0sSUFBQSxLQUFBLENBQU4sZ0NBQU0sQ0FBTjtBQUNEO0FBRUQsaUJBQUEsV0FBQSxHQUFtQixFQUFuQixTQUFBO0FBTEYsU0FBQSxNQU1PLElBQUksZ0JBQUosU0FBQSxFQUErQjtBQUNwQyxpQkFBQSxVQUFBLEdBQUEsSUFBQTtBQUVBLGdCQUFBLEtBQUEsRUFBVztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFJLENBQUosYUFBQSxFQUFvQjtBQUNsQix5QkFBQSxXQUFBLEdBQUEsU0FBQTtBQUNEO0FBVEgsYUFBQSxNQVVPO0FBQ0wscUJBQUEsV0FBQSxHQUFBLFNBQUE7QUFDRDtBQUVELGdCQUFJO0FBQUEsb0JBQ0UsT0FERixHQUNGLElBREUsQ0FDRSxPQURGO0FBQUEsb0JBQ0UsTUFERixHQUNGLElBREUsQ0FDRSxNQURGO0FBQUEsb0JBQ0UsUUFERixHQUNGLElBREUsQ0FDRSxRQURGOztBQUdGLG9CQUFJLFdBQUosSUFBQSxFQUFxQjtBQUNuQiwrQkFBVyxLQUFBLEdBQUEsQ0FBQSxRQUFBLEVBQW1CLE9BQTlCLE9BQThCLEdBQW5CLENBQVg7QUFDRDtBQUVELG9CQUFJLFlBQUosSUFBQSxFQUFzQjtBQUNwQix5QkFBSyxJQUFJLElBQVQsQ0FBQSxFQUFnQixJQUFJLFFBQXBCLE1BQUEsRUFBQSxHQUFBLEVBQXlDO0FBQ3ZDLDRCQUFJLFNBQVEsUUFBQSxDQUFBLEVBQVosT0FBWSxHQUFaO0FBQ0EsbUNBQVcsS0FBQSxHQUFBLENBQUEsTUFBQSxFQUFYLFFBQVcsQ0FBWDtBQUNEO0FBQ0Y7QUFFRCxxQkFBQSxTQUFBLEdBQUEsUUFBQTtBQWRGLGFBQUEsU0FlVTtBQUNSLHFCQUFBLFVBQUEsR0FBQSxLQUFBO0FBQ0Q7QUFDRjtBQUVELGVBQU8sS0FBUCxTQUFBO0FBQ0QsSzs7dUJBRUQsTSxtQkFBQSxJLEVBQUEsTSxFQUE2QztBQUMzQyxZQUFJLFNBQVMsS0FBQSxJQUFBLE1BQWIsQ0FBQSxDQUFBLGVBQUEsRUFBMkQ7QUFDekQsc0JBQU0sSUFBQSxLQUFBLENBQU4sa0RBQU0sQ0FBTjtBQUNEO0FBRUQ7QUFDQSxZQUFJLE1BQUosSUFBQTtBQUVBLFlBQUksV0FBSixZQUFBLEVBQTZCO0FBQzNCLGdCQUFBLE1BQUEsR0FBQSxJQUFBO0FBREYsU0FBQSxNQUVPO0FBQ0wsZ0JBQ0UsU0FDQSxJQUFBLFdBQUEsS0FEQSxTQUFBLElBRUMsT0FBQSxPQUFBLE1BQTJDLElBSDlDLFNBQUEsRUFJRTtBQUNBLHNCQUFNLElBQUEsS0FBQSxDQUFOLHdGQUFNLENBQU47QUFHRDtBQUVELGdCQUFBLE1BQUEsR0FBQSxNQUFBO0FBQ0Q7QUFDRixLOzt1QkFFRCxLLGtCQUFBLEcsRUFBNkM7QUFDM0MsWUFDRSxTQUNBLEVBQUUsSUFBQSxJQUFBLE1BQUEsQ0FBQSxDQUFBLGVBQUEsSUFBK0MsSUFBQSxJQUFBLE1BQWpELENBQUEsQ0FGRixlQUVFLENBRkYsRUFHRTtBQUNBLGtCQUFNLElBQUEsS0FBQSxDQUFOLGlEQUFNLENBQU47QUFDRDtBQUVELFlBQUEsS0FBQSxFQUFXO0FBQ1Q7QUFDQTtBQUNBLGlDQUFBLEdBQUE7QUFDRDtBQUVBLFlBQUEsUUFBQSxHQUFzQyxFQUF0QyxTQUFBO0FBQ0YsSzs7Ozs7QUFHSCxPQUFPLElBQU0sUUFBUSxtQkFBZCxLQUFBO0FBQ1AsT0FBTyxJQUFNLFNBQVMsbUJBQWYsTUFBQTtBQUVQO0FBRUEsT0FBTSxTQUFBLFNBQUEsR0FBbUI7QUFDdkIsV0FBTyxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFQLGVBQU8sQ0FBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLGtCQUFBLEdBQTRCO0FBQ2hDLFdBQU8sSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBUCxlQUFPLENBQVA7QUFDRDtBQUVEO0FBRUEsT0FBTyxJQUFNLGVBQWUsSUFBQSxrQkFBQSxDQUFBLENBQUEsQ0FBckIsY0FBcUIsQ0FBckI7QUFFUCxPQUFNLFNBQUEsT0FBQSxPQUFpQztBQUFBLFFBQWpDLEdBQWlDLFFBQWpDLEdBQWlDOztBQUNyQyxXQUFPLFFBQVAsWUFBQTtBQUNEO0FBRUQsT0FBTSxTQUFBLFVBQUEsQ0FBQSxHQUFBLEVBQTZCO0FBQ2pDLFdBQU8sUUFBUCxZQUFBO0FBQ0Q7QUFFRDs7SUFFQSxXOzs7OzswQkFDRSxPLGdCQUFTO0FBQ1AsZUFBQSxRQUFBO0FBQ0QsSzs7Ozs7QUFHSCxPQUFPLElBQU0sZUFBZSxJQUFyQixXQUFxQixFQUFyQjtBQUVQOztJQUVBLFU7Ozs7O3lCQUNFLE8sZ0JBQVM7QUFDUCxlQUFBLFNBQUE7QUFDRCxLOzs7OztBQUdILE9BQU8sSUFBTSxjQUFjLElBQXBCLFVBQW9CLEVBQXBCO0FBRVA7QUFFQSxPQUFNLFNBQUEsT0FBQSxDQUFBLElBQUEsRUFBNkI7QUFDakMsUUFBSSxZQUFKLEVBQUE7QUFFQSxTQUFLLElBQUksSUFBSixDQUFBLEVBQVcsSUFBSSxLQUFwQixNQUFBLEVBQWlDLElBQWpDLENBQUEsRUFBQSxHQUFBLEVBQTZDO0FBQzNDLFlBQUksTUFBTSxLQUFWLENBQVUsQ0FBVjtBQUNBLFlBQUksUUFBSixZQUFBLEVBQTBCO0FBQzFCLGtCQUFBLElBQUEsQ0FBQSxHQUFBO0FBQ0Q7QUFFRCxXQUFPLG9CQUFQLFNBQU8sQ0FBUDtBQUNEO0FBRUQsT0FBTSxTQUFBLG1CQUFBLENBQUEsSUFBQSxFQUF5QztBQUM3QyxZQUFRLEtBQVIsTUFBQTtBQUNFLGFBQUEsQ0FBQTtBQUNFLG1CQUFBLFlBQUE7QUFDRixhQUFBLENBQUE7QUFDRSxtQkFBTyxLQUFQLENBQU8sQ0FBUDtBQUNGO0FBQ0UsZ0JBQUksTUFBTSxJQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUFWLGdCQUFVLENBQVY7QUFDQyxnQkFBQSxPQUFBLEdBQUEsSUFBQTtBQUNELG1CQUFBLEdBQUE7QUFSSjtBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuaW1wb3J0IHsgVW5pb25Ub0ludGVyc2VjdGlvbiwgc3ltYm9sIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBhc3NlcnRUYWdOb3RDb25zdW1lZCB9IGZyb20gJy4vZGVidWcnO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFJldmlzaW9uID0gbnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQ09OU1RBTlQ6IFJldmlzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMOiBSZXZpc2lvbiA9IDE7XG5leHBvcnQgY29uc3QgVk9MQVRJTEU6IFJldmlzaW9uID0gOTAwNzE5OTI1NDc0MDk5MTsgLy8gTUFYX0lOVFxuXG5sZXQgJFJFVklTSU9OID0gSU5JVElBTDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXAoKSB7XG4gICRSRVZJU0lPTisrO1xufVxuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCBDT01QVVRFOiB1bmlxdWUgc3ltYm9sID0gc3ltYm9sKCdUQUdfQ09NUFVURScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRhZzxUPiB7XG4gIFtDT01QVVRFXSgpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZyBleHRlbmRzIEVudGl0eVRhZzxSZXZpc2lvbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUYWdnZWQ8VD4ge1xuICB0YWc6IEVudGl0eVRhZzxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdnZWQge1xuICB0YWc6IFRhZztcbn1cblxuLy8vLy8vLy8vL1xuXG4vKipcbiAqIGB2YWx1ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIHJldHVybnMgYW4gb3BhcXVlIFJldmlzaW9uIGJhc2VkIG9uIHRoYXQgdGFnLiBUaGlzXG4gKiBzbmFwc2hvdCBjYW4gdGhlbiBsYXRlciBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCB3aXRoIHRoZSBzYW1lIHRhZyB0b1xuICogZGV0ZXJtaW5lIGlmIHRoZSB0YWcgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSB0aW1lIHRoYXQgYHZhbHVlYCB3YXNcbiAqIGNhbGxlZC5cbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBnbG9iYWwgcmV2aXNpb24gY291bnQgZGlyZWN0bHkgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIHNob3VsZCBub3QgYmVcbiAqIHJlbGllZCBvbiBkaXJlY3RseSBieSB1c2VycyBvZiB0aGVzZSBBUElzLiBJbnN0ZWFkLCBSZXZpc2lvbnMgc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIG9wYXF1ZS91bmtub3duLCBhbmQgc2hvdWxkIG9ubHkgYmUgaW50ZXJhY3RlZCB3aXRoIHZpYVxuICogdGhlIGB2YWx1ZWAvYHZhbGlkYXRlYCBBUEkuXG4gKlxuICogQHBhcmFtIHRhZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWUodGFnOiBUYWcpOiBSZXZpc2lvbiB7XG4gIGlmIChERUJVRykge1xuICAgIC8vIGNvbXB1dGUgdG8gY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgd2hpY2ggd2lsbCBwcmV2ZW50IHVzIGZyb20gZG9pbmdcbiAgICAvLyBpbnZhbGlkIHVwZGF0ZXMgbGF0ZXIgb24uXG4gICAgdGFnW0NPTVBVVEVdKCk7XG4gIH1cblxuICByZXR1cm4gJFJFVklTSU9OO1xufVxuXG4vKipcbiAqIGB2YWxpZGF0ZWAgcmVjZWl2ZXMgYSB0YWcgYW5kIGEgc25hcHNob3QgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gYHZhbHVlYCB3aXRoXG4gKiB0aGUgc2FtZSB0YWcsIGFuZCBkZXRlcm1pbmVzIGlmIHRoZSB0YWcgaXMgc3RpbGwgdmFsaWQgY29tcGFyZWQgdG8gdGhlXG4gKiBzbmFwc2hvdC4gSWYgdGhlIHRhZydzIHN0YXRlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGVuLCBgdmFsaWRhdGVgIHdpbGxcbiAqIHJldHVybiBmYWxzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHRydWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYVxuICogY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0aGUgdGFncyBzaG91bGQgYmUgcmVydW4uXG4gKlxuICogQHBhcmFtIHRhZ1xuICogQHBhcmFtIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh0YWc6IFRhZywgc25hcHNob3Q6IFJldmlzaW9uKSB7XG4gIGlmIChERUJVRykge1xuICAgIElTX1ZBTElEQVRJTkcgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGlzVmFsaWQgPSBzbmFwc2hvdCA+PSB0YWdbQ09NUFVURV0oKTtcblxuICBpZiAoREVCVUcpIHtcbiAgICBJU19WQUxJREFUSU5HID0gZmFsc2U7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gY29tcHV0ZSB0byBjYWNoZSB0aGUgbGF0ZXN0IHZhbHVlLCB3aGljaCB3aWxsIHByZXZlbnQgdXMgZnJvbSBkb2luZ1xuICAgICAgLy8gaW52YWxpZCB1cGRhdGVzIGxhdGVyIG9uLlxuICAgICAgdGFnW0NPTVBVVEVdKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzVmFsaWQ7XG59XG5cbmxldCBJU19WQUxJREFUSU5HOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4vLy8vLy8vLy8vXG5cbi8qKlxuICogVGhpcyBlbnVtIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwb3NzaWJsZSB0YWcgdHlwZXMgZm9yIHRoZSBtb25vbW9ycGhpYyB0YWcgY2xhc3MuXG4gKiBPdGhlciBjdXN0b20gdGFnIGNsYXNzZXMgY2FuIGV4aXN0LCBzdWNoIGFzIEN1cnJlbnRUYWcgYW5kIFZvbGF0aWxlVGFnLCBidXQgZm9yXG4gKiBwZXJmb3JtYW5jZSByZWFzb25zLCBhbnkgdHlwZSBvZiB0YWcgdGhhdCBpcyBtZWFudCB0byBiZSB1c2VkIGZyZXF1ZW50bHkgc2hvdWxkXG4gKiBiZSBhZGRlZCB0byB0aGUgbW9ub21vcnBoaWMgdGFnLlxuICovXG5jb25zdCBlbnVtIE1vbm9tb3JwaGljVGFnVHlwZXMge1xuICBEaXJ0eWFibGUsXG4gIFVwZGF0YWJsZSxcbiAgQ29tYmluYXRvcixcbiAgQ29uc3RhbnQsXG59XG5cbmNvbnN0IFRZUEU6IHVuaXF1ZSBzeW1ib2wgPSBzeW1ib2woJ1RBR19UWVBFJyk7XG5cbmV4cG9ydCBsZXQgQUxMT1dfQ1lDTEVTOiBXZWFrTWFwPFRhZywgYm9vbGVhbj4gfCB1bmRlZmluZWQ7XG5cbmlmIChERUJVRykge1xuICBBTExPV19DWUNMRVMgPSBuZXcgV2Vha01hcCgpO1xufVxuXG5pbnRlcmZhY2UgTW9ub21vcnBoaWNUYWdCYXNlPFQgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ1R5cGVzPiBleHRlbmRzIFRhZyB7XG4gIFtUWVBFXTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJ0eWFibGVUYWcgZXh0ZW5kcyBNb25vbW9ycGhpY1RhZ0Jhc2U8TW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGU+IHt9XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZT4ge31cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluYXRvclRhZyBleHRlbmRzIE1vbm9tb3JwaGljVGFnQmFzZTxNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbWJpbmF0b3I+IHt9XG5leHBvcnQgaW50ZXJmYWNlIENvbnN0YW50VGFnIGV4dGVuZHMgTW9ub21vcnBoaWNUYWdCYXNlPE1vbm9tb3JwaGljVGFnVHlwZXMuQ29uc3RhbnQ+IHt9XG5cbmludGVyZmFjZSBNb25vbW9ycGhpY1RhZ01hcHBpbmcge1xuICBbTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGVdOiBEaXJ0eWFibGVUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZV06IFVwZGF0YWJsZVRhZztcbiAgW01vbm9tb3JwaGljVGFnVHlwZXMuQ29tYmluYXRvcl06IENvbWJpbmF0b3JUYWc7XG4gIFtNb25vbW9ycGhpY1RhZ1R5cGVzLkNvbnN0YW50XTogQ29uc3RhbnRUYWc7XG59XG5cbnR5cGUgTW9ub21vcnBoaWNUYWcgPSBVbmlvblRvSW50ZXJzZWN0aW9uPE1vbm9tb3JwaGljVGFnTWFwcGluZ1tNb25vbW9ycGhpY1RhZ1R5cGVzXT47XG50eXBlIE1vbm9tb3JwaGljVGFnVHlwZSA9IFVuaW9uVG9JbnRlcnNlY3Rpb248TW9ub21vcnBoaWNUYWdUeXBlcz47XG5cbmNsYXNzIE1vbm9tb3JwaGljVGFnSW1wbCBpbXBsZW1lbnRzIE1vbm9tb3JwaGljVGFnIHtcbiAgcHJpdmF0ZSByZXZpc2lvbiA9IElOSVRJQUw7XG4gIHByaXZhdGUgbGFzdENoZWNrZWQgPSBJTklUSUFMO1xuICBwcml2YXRlIGxhc3RWYWx1ZSA9IElOSVRJQUw7XG5cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3VidGFnOiBUYWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJ0YWdzOiBUYWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIFtUWVBFXTogTW9ub21vcnBoaWNUYWdUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1vbm9tb3JwaGljVGFnVHlwZXMpIHtcbiAgICB0aGlzW1RZUEVdID0gdHlwZSBhcyBNb25vbW9ycGhpY1RhZ1R5cGU7XG4gIH1cblxuICBbQ09NUFVURV0oKTogUmV2aXNpb24ge1xuICAgIGxldCB7IGxhc3RDaGVja2VkIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKERFQlVHICYmICFBTExPV19DWUNMRVMhLmhhcyh0aGlzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlcyBpbiB0YWdzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RDaGVja2VkID0gKyskUkVWSVNJT047XG4gICAgfSBlbHNlIGlmIChsYXN0Q2hlY2tlZCAhPT0gJFJFVklTSU9OKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoREVCVUcpIHtcbiAgICAgICAgLy8gSW4gREVCVUcsIHdlIGRvbid0IGNhY2hlIHdoaWxlIHZhbGlkYXRpbmcgb25seSwgYmVjYXVzZSBpdCBpcyB2YWxpZFxuICAgICAgICAvLyB1cGRhdGUgYSB0YWcgYmV0d2VlbiBjYWxsaW5nIGB2YWxpZGF0ZSgpYCBhbmQgYHZhbHVlKClgLiBPbmNlIHlvdVxuICAgICAgICAvLyBjYWxsIGB2YWx1ZSgpYCBvbiBhIHRhZywgaXRzIHJldmlzaW9uIGlzIGVmZmVjdGl2ZWx5IGxvY2tlZCBpbiwgYW5kXG4gICAgICAgIC8vIGlmIHlvdSBhdHRlbXB0IHRvIHVwZGF0ZSBpdCB0byBhIHRhZyB0aGF0IGlzIG1vcmUgcmVjZW50IGl0IGNvdWxkXG4gICAgICAgIC8vIGJyZWFrIGFzc3VtcHRpb25zIGluIG91ciBzeXN0ZW0uIFRoaXMgaXMgd2h5IHRoZSBhc3NlcnRpb24gZXhpc3RzIGluXG4gICAgICAgIC8vIHRoZSBzdGF0aWMgYHVwZGF0ZSgpYCBtZXRob2QgYmVsb3cuXG4gICAgICAgIGlmICghSVNfVkFMSURBVElORykge1xuICAgICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENoZWNrZWQgPSAkUkVWSVNJT047XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCB7IHN1YnRhZ3MsIHN1YnRhZywgcmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHN1YnRhZyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldmlzaW9uID0gTWF0aC5tYXgocmV2aXNpb24sIHN1YnRhZ1tDT01QVVRFXSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJ0YWdzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJ0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzdWJ0YWdzW2ldW0NPTVBVVEVdKCk7XG4gICAgICAgICAgICByZXZpc2lvbiA9IE1hdGgubWF4KHZhbHVlLCByZXZpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXZpc2lvbjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUoX3RhZzogVXBkYXRhYmxlVGFnLCBzdWJ0YWc6IFRhZykge1xuICAgIGlmIChERUJVRyAmJiBfdGFnW1RZUEVdICE9PSBNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gdXBkYXRlIGEgdGFnIHRoYXQgd2FzIG5vdCB1cGRhdGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUUyAzLjcgc2hvdWxkIGFsbG93IHVzIHRvIGRvIHRoaXMgdmlhIGFzc2VydGlvblxuICAgIGxldCB0YWcgPSBfdGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbDtcblxuICAgIGlmIChzdWJ0YWcgPT09IENPTlNUQU5UX1RBRykge1xuICAgICAgdGFnLnN1YnRhZyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgREVCVUcgJiZcbiAgICAgICAgdGFnLmxhc3RDaGVja2VkID09PSAkUkVWSVNJT04gJiZcbiAgICAgICAgKHN1YnRhZyBhcyBNb25vbW9ycGhpY1RhZ0ltcGwpW0NPTVBVVEVdKCkgPiB0YWcubGFzdFZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCVUc6IGF0dGVtcHRlZCB0byB1cGRhdGUgYSB0YWcgd2l0aCBhIHRhZyB0aGF0IGhhcyBhIG1vcmUgcmVjZW50IHJldmlzaW9uIGFzIGl0cyB2YWx1ZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGFnLnN1YnRhZyA9IHN1YnRhZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGlydHkodGFnOiBEaXJ0eWFibGVUYWcgfCBVcGRhdGFibGVUYWcpIHtcbiAgICBpZiAoXG4gICAgICBERUJVRyAmJlxuICAgICAgISh0YWdbVFlQRV0gPT09IE1vbm9tb3JwaGljVGFnVHlwZXMuVXBkYXRhYmxlIHx8IHRhZ1tUWVBFXSA9PT0gTW9ub21vcnBoaWNUYWdUeXBlcy5EaXJ0eWFibGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBkaXJ0eSBhIHRhZyB0aGF0IHdhcyBub3QgZGlydHlhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAvLyBVc3VhbGx5IGJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgYXNzZXJ0ZWQgd2l0aCBiZXR0ZXIgZXJyb3IgaW5mb3JtYXRpb24sXG4gICAgICAvLyBidXQgdGhpcyBpcyBvdXIgbGFzdCBsaW5lIG9mIGRlZmVuc2UuXG4gICAgICBhc3NlcnRUYWdOb3RDb25zdW1lZCEodGFnKTtcbiAgICB9XG5cbiAgICAodGFnIGFzIE1vbm9tb3JwaGljVGFnSW1wbCkucmV2aXNpb24gPSArKyRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGlydHkgPSBNb25vbW9ycGhpY1RhZ0ltcGwuZGlydHk7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gTW9ub21vcnBoaWNUYWdJbXBsLnVwZGF0ZTtcblxuLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFnKCk6IERpcnR5YWJsZVRhZyB7XG4gIHJldHVybiBuZXcgTW9ub21vcnBoaWNUYWdJbXBsKE1vbm9tb3JwaGljVGFnVHlwZXMuRGlydHlhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZGF0YWJsZVRhZygpOiBVcGRhdGFibGVUYWcge1xuICByZXR1cm4gbmV3IE1vbm9tb3JwaGljVGFnSW1wbChNb25vbW9ycGhpY1RhZ1R5cGVzLlVwZGF0YWJsZSk7XG59XG5cbi8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IENPTlNUQU5UX1RBRyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db25zdGFudCkgYXMgQ29uc3RhbnRUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0KHsgdGFnIH06IFRhZ2dlZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFnID09PSBDT05TVEFOVF9UQUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0VGFnKHRhZzogVGFnKTogdGFnIGlzIENvbnN0YW50VGFnIHtcbiAgcmV0dXJuIHRhZyA9PT0gQ09OU1RBTlRfVEFHO1xufVxuXG4vLy8vLy8vLy8vXG5cbmNsYXNzIFZvbGF0aWxlVGFnIGltcGxlbWVudHMgVGFnIHtcbiAgW0NPTVBVVEVdKCkge1xuICAgIHJldHVybiBWT0xBVElMRTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVk9MQVRJTEVfVEFHID0gbmV3IFZvbGF0aWxlVGFnKCk7XG5cbi8vLy8vLy8vLy9cblxuY2xhc3MgQ3VycmVudFRhZyBpbXBsZW1lbnRzIEN1cnJlbnRUYWcge1xuICBbQ09NUFVURV0oKSB7XG4gICAgcmV0dXJuICRSRVZJU0lPTjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ1VSUkVOVF9UQUcgPSBuZXcgQ3VycmVudFRhZygpO1xuXG4vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgbGV0IG9wdGltaXplZDogVGFnW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHRhZyA9IHRhZ3NbaV07XG4gICAgaWYgKHRhZyA9PT0gQ09OU1RBTlRfVEFHKSBjb250aW51ZTtcbiAgICBvcHRpbWl6ZWQucHVzaCh0YWcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0b3JUYWcob3B0aW1pemVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmF0b3JUYWcodGFnczogVGFnW10pOiBUYWcge1xuICBzd2l0Y2ggKHRhZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIENPTlNUQU5UX1RBRztcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gdGFnc1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgbGV0IHRhZyA9IG5ldyBNb25vbW9ycGhpY1RhZ0ltcGwoTW9ub21vcnBoaWNUYWdUeXBlcy5Db21iaW5hdG9yKSBhcyBDb21iaW5hdG9yVGFnO1xuICAgICAgKHRhZyBhcyBhbnkpLnN1YnRhZ3MgPSB0YWdzO1xuICAgICAgcmV0dXJuIHRhZztcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
export { ALLOW_CYCLES, bump, CombinatorTag, combine, COMPUTE, CONSTANT_TAG, CONSTANT, ConstantTag, createCombinatorTag, createTag, createUpdatableTag, CURRENT_TAG, dirty, DirtyableTag, EntityTag, EntityTagged, INITIAL, isConst, isConstTag, Revision, Tag, Tagged, UpdatableTag, update, validate, value, VOLATILE_TAG, VOLATILE, } from './lib/validators';
export { dirtyTag, tagFor, updateTag } from './lib/meta';
export { track, consume, EPOCH, trackedData } from './lib/tracking';
export { dirtyTagFor, tagFor, setPropertyDidChange } from './lib/meta';
export { consume, EPOCH, isTracking, track, trackedData, untrack } from './lib/tracking';
export { setAutotrackingTransactionEnv, runInAutotrackingTransaction, deprecateMutationsInAutotrackingTransaction, } from './lib/debug';
//# sourceMappingURL=index.d.ts.map
import { UpdatableTag, ConstantTag } from './validators';
export declare function dirtyTag<T>(obj: T, key: keyof T): void;
export declare function tagFor<T extends object>(obj: T, key: keyof T): UpdatableTag;
export declare function tagFor<T>(obj: T, key: string): ConstantTag;
export declare function updateTag<T>(obj: T, key: keyof T, newTag: UpdatableTag): UpdatableTag;
export declare let propertyDidChange: () => void;
export declare function setPropertyDidChange(cb: () => void): void;
export declare function dirtyTagFor<T>(obj: T, key: keyof T | string | symbol): void;
export declare function tagFor<T>(obj: T, key: keyof T | string | symbol): UpdatableTag | ConstantTag;
//# sourceMappingURL=meta.d.ts.map
import { Tag } from './validators';
export declare function track(callback: () => void): Tag;
export declare function track(callback: () => void, debuggingContext?: string | false): Tag;
export declare function consume(tag: Tag): void;
export declare function isTracking(): boolean;
export declare function untrack(callback: () => void): void;
export declare const EPOCH: import("./validators").DirtyableTag;

@@ -5,0 +7,0 @@ export declare type Getter<T, K extends keyof T> = (self: T) => T[K] | undefined;

@@ -1,2 +0,2 @@

declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
import { UnionToIntersection } from './utils';
export declare type Revision = number;

@@ -33,3 +33,3 @@ export declare const CONSTANT: Revision;

*/
export declare function value(_tag: Tag): Revision;
export declare function value(tag: Tag): Revision;
/**

@@ -59,3 +59,3 @@ * `validate` receives a tag and a snapshot from a previous call to `value` with

declare const TYPE: unique symbol;
export declare let ALLOW_CYCLES: WeakSet<UpdatableTag>;
export declare let ALLOW_CYCLES: WeakMap<Tag, boolean> | undefined;
interface MonomorphicTagBase<T extends MonomorphicTagTypes> extends Tag {

@@ -62,0 +62,0 @@ [TYPE]: T;

{
"name": "@glimmer/validator",
"version": "0.44.0",
"version": "0.45.0",
"description": "Objects used to track values and their dirtiness in Glimmer",
"license": "MIT",
"dependencies": {
"@glimmer/env": "^0.1.7"
},
"devDependencies": {

@@ -7,0 +10,0 @@ "typescript": "^2.8.3"

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc