formsy-react/build/formsy-react.js

641 lines
134 KiB
JavaScript
Executable File

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"./src/main.js":[function(require,module,exports){
(function (global){
var React = global.React || require('react');
var Formsy = {};
var validationRules = require('./validationRules.js');
var utils = require('./utils.js');
var Mixin = require('./Mixin.js');
var options = {};
Formsy.Mixin = Mixin;
Formsy.defaults = function (passedOptions) {
options = passedOptions;
};
Formsy.addValidationRule = function (name, func) {
validationRules[name] = func;
};
Formsy.Form = React.createClass({displayName: "Form",
getInitialState: function () {
return {
isValid: true,
isSubmitting: false,
canChange: false
};
},
getDefaultProps: function () {
return {
headers: {},
onSuccess: function () {},
onError: function () {},
onSubmit: function () {},
onValidSubmit: function () {},
onInvalidSubmit: function () {},
onSubmitted: function () {},
onValid: function () {},
onInvalid: function () {},
onChange: function () {}
};
},
// Add a map to store the inputs of the form, a model to store
// the values of the form and register child inputs
componentWillMount: function () {
this.inputs = {};
this.model = {};
this.registerInputs(this.props.children);
},
componentDidMount: function () {
this.validateForm();
},
componentWillUpdate: function () {
var inputKeys = Object.keys(this.inputs);
// The updated children array is not available here for some reason,
// we need to wait for next event loop
setTimeout(function () {
// The component might have been unmounted on an
// update
if (this.isMounted()) {
this.registerInputs(this.props.children);
if (this.props.validationErrors) {
this.setInputValidationErrors(this.props.validationErrors);
}
var newInputKeys = Object.keys(this.inputs);
if (utils.arraysDiffer(inputKeys, newInputKeys)) {
this.validateForm();
}
}
}.bind(this), 0);
},
// Update model, submit to url prop and send the model
submit: function (event) {
event.preventDefault();
// Trigger form as not pristine.
// If any inputs have not been touched yet this will make them dirty
// so validation becomes visible (if based on isPristine)
this.setFormPristine(false);
// To support use cases where no async or request operation is needed.
// The "onSubmit" callback is called with the model e.g. {fieldName: "myValue"},
// if wanting to reset the entire form to original state, the second param is a callback for this.
if (!this.props.url) {
this.updateModel();
var model = this.mapModel();
this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);
this.state.isValid ? this.props.onValidSubmit(model, this.resetModel) : this.props.onInvalidSubmit(model, this.resetModel);
return;
}
this.updateModel();
this.setState({
isSubmitting: true
});
this.props.onSubmit(this.mapModel(), this.resetModel, this.updateInputsWithError);
var headers = (Object.keys(this.props.headers).length && this.props.headers) || options.headers || {};
var method = this.props.method && utils.ajax[this.props.method.toLowerCase()] ? this.props.method.toLowerCase() : 'post';
utils.ajax[method](this.props.url, this.mapModel(), this.props.contentType || options.contentType || 'json', headers)
.then(function (response) {
this.props.onSuccess(response);
this.props.onSubmitted();
}.bind(this))
.catch(this.failSubmit);
},
mapModel: function () {
return this.props.mapping ? this.props.mapping(this.model) : this.model;
},
// Goes through all registered components and
// updates the model values
updateModel: function () {
Object.keys(this.inputs).forEach(function (name) {
var component = this.inputs[name];
this.model[name] = component.state._value;
}.bind(this));
},
// Reset each key in the model to the original / initial value
resetModel: function () {
Object.keys(this.inputs).forEach(function (name) {
this.inputs[name].resetValue();
}.bind(this));
this.validateForm();
},
setInputValidationErrors: function (errors) {
Object.keys(this.inputs).forEach(function (name, index) {
var component = this.inputs[name];
var args = [{
_isValid: !(name in errors),
_serverError: errors[name]
}];
component.setState.apply(component, args);
}.bind(this));
},
// Go through errors from server and grab the components
// stored in the inputs map. Change their state to invalid
// and set the serverError message
updateInputsWithError: function (errors) {
Object.keys(errors).forEach(function (name, index) {
var component = this.inputs[name];
if (!component) {
throw new Error('You are trying to update an input that does not exists. Verify errors object with input names. ' + JSON.stringify(errors));
}
var args = [{
_isValid: false,
_serverError: errors[name]
}];
component.setState.apply(component, args);
}.bind(this));
},
failSubmit: function (errors) {
this.updateInputsWithError(errors);
this.setState({
isSubmitting: false
});
this.props.onError(errors);
this.props.onSubmitted();
},
// Traverse the children and children of children to find
// all inputs by checking the name prop. Maybe do a better
// check here
registerInputs: function (children) {
React.Children.forEach(children, function (child) {
if (child && child.props && child.props.name) {
child.props._attachToForm = this.attachToForm;
child.props._detachFromForm = this.detachFromForm;
child.props._validate = this.validate;
child.props._isFormDisabled = this.isFormDisabled;
child.props._isValidValue = this.runValidation;
}
if (child && child.props && child.props.children) {
this.registerInputs(child.props.children);
}
}.bind(this));
},
isFormDisabled: function () {
return this.props.disabled;
},
getCurrentValues: function () {
return Object.keys(this.inputs).reduce(function (data, name) {
var component = this.inputs[name];
data[name] = component.state._value;
return data;
}.bind(this), {});
},
setFormPristine: function (isPristine) {
var inputs = this.inputs;
var inputKeys = Object.keys(inputs);
// Iterate through each component and set it as pristine
// or "dirty".
inputKeys.forEach(function (name, index) {
var component = inputs[name];
component.setState({
_isPristine: isPristine
});
}.bind(this));
},
// Use the binded values and the actual input value to
// validate the input and set its state. Then check the
// state of the form itself
validate: function (component) {
// Trigger onChange
if (this.state.canChange) {
this.props.onChange(this.getCurrentValues());
}
var isValid = true;
if (component.validate && typeof component.validate === 'function') {
isValid = component.validate();
} else if (component.props.required || component._validations) {
isValid = this.runValidation(component);
}
// Run through the validations, split them up and call
// the validator IF there is a value or it is required
component.setState({
_isValid: isValid,
_serverError: null
}, this.validateForm);
},
// Checks validation on current value or a passed value
runValidation: function (component, value) {
var isValid = true;
value = arguments.length === 2 ? value : component.state._value;
if (component._validations.length) {
component._validations.split(/\,(?![^{\[]*[}\]])/g).forEach(function (validation) {
var args = validation.split(':');
var validateMethod = args.shift();
args = args.map(function (arg) {
try {
return JSON.parse(arg);
} catch (e) {
return arg; // It is a string if it can not parse it
}
});
args = [value].concat(args);
if (!validationRules[validateMethod]) {
throw new Error('Formsy does not have the validation rule: ' + validateMethod);
}
if (!validationRules[validateMethod].apply(this.getCurrentValues(), args)) {
isValid = false;
}
}.bind(this));
}
if (typeof component.validate === "function") {
// the component defines an explicit validate function
isValid = component.validate()
}
return isValid;
},
// Validate the form by going through all child input components
// and check their state
validateForm: function () {
var allIsValid = true;
var inputs = this.inputs;
var inputKeys = Object.keys(inputs);
// We need a callback as we are validating all inputs again. This will
// run when the last component has set its state
var onValidationComplete = function () {
inputKeys.forEach(function (name) {
if (!inputs[name].state._isValid) {
allIsValid = false;
}
}.bind(this));
this.setState({
isValid: allIsValid
});
if (allIsValid) {
this.props.onValid();
} else {
this.props.onInvalid();
}
// Tell the form that it can start to trigger change events
this.setState({
canChange: true
});
}.bind(this);
// Run validation again in case affected by other inputs. The
// last component validated will run the onValidationComplete callback
inputKeys.forEach(function (name, index) {
var component = inputs[name];
var isValid = this.runValidation(component);
component.setState({
_isValid: isValid,
_serverError: null
}, index === inputKeys.length - 1 ? onValidationComplete : null);
}.bind(this));
// If there are no inputs, set state where form is ready to trigger
// change event. New inputs might be added later
if (!inputKeys.length && this.isMounted()) {
this.setState({
canChange: true
});
}
},
// Method put on each input component to register
// itself to the form
attachToForm: function (component) {
this.inputs[component.props.name] = component;
this.model[component.props.name] = component.state._value;
this.validate(component);
},
// Method put on each input component to unregister
// itself from the form
detachFromForm: function (component) {
delete this.inputs[component.props.name];
delete this.model[component.props.name];
},
render: function () {
return React.DOM.form({
onSubmit: this.submit,
className: this.props.className
},
this.props.children
);
}
});
if (!global.exports && !global.module && (!global.define || !global.define.amd)) {
global.Formsy = Formsy;
}
module.exports = Formsy;
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./Mixin.js":"/Users/christianalfoni/Documents/dev/formsy-react/src/Mixin.js","./utils.js":"/Users/christianalfoni/Documents/dev/formsy-react/src/utils.js","./validationRules.js":"/Users/christianalfoni/Documents/dev/formsy-react/src/validationRules.js","react":"react"}],"/Users/christianalfoni/Documents/dev/formsy-react/src/Mixin.js":[function(require,module,exports){
module.exports = {
getInitialState: function () {
var value = 'value' in this.props ? this.props.value : '';
return {
_value: value,
_isValid: true,
_isPristine: true,
_pristineValue: value
};
},
componentWillMount: function () {
var configure = function () {
this.setValidations(this.props.validations, this.props.required);
this.props._attachToForm(this);
}.bind(this);
if (!this.props.name) {
throw new Error('Form Input requires a name property when used');
}
if (!this.props._attachToForm) {
return setTimeout(function () {
if (!this.isMounted()) return;
if (!this.props._attachToForm) {
throw new Error('Form Mixin requires component to be nested in a Form');
}
configure();
}.bind(this), 0);
}
configure();
},
// We have to make the validate method is kept when new props are added
componentWillReceiveProps: function (nextProps) {
nextProps._attachToForm = this.props._attachToForm;
nextProps._detachFromForm = this.props._detachFromForm;
nextProps._validate = this.props._validate;
this.setValidations(nextProps.validations, nextProps.required);
},
componentDidUpdate: function (prevProps, prevState) {
var isValueChanged = function () {
return (
this.props.value !== prevProps.value && (
this.state._value === prevProps.value ||
// Since undefined is converted to empty string we have to
// check that specifically
(this.state._value === '' && prevProps.value === undefined)
)
);
}.bind(this);
// If validations has changed or something outside changes
// the value, set the value again running a validation
if (prevProps.validations !== this.props.validations || isValueChanged()) {
var value = 'value' in this.props ? this.props.value : '';
this.setValue(value);
}
},
// Detach it when component unmounts
componentWillUnmount: function () {
this.props._detachFromForm(this);
},
setValidations: function (validations, required) {
// Add validations to the store itself as the props object can not be modified
this._validations = validations || '';
if (required) {
this._validations = validations ? validations + ',' : '';
this._validations += 'isValue';
}
},
// We validate after the value has been set
setValue: function (value) {
this.setState({
_value: value,
_isPristine: false
}, function () {
this.props._validate(this);
}.bind(this));
},
resetValue: function () {
this.setState({
_value: this.state._pristineValue,
_isPristine: true
}, function () {
this.props._validate(this);
});
},
getValue: function () {
return this.state._value;
},
hasValue: function () {
return this.state._value !== '';
},
getErrorMessage: function () {
return this.isValid() || this.showRequired() ? null : this.state._serverError || this.props.validationError;
},
isFormDisabled: function () {
return this.props._isFormDisabled();
},
isValid: function () {
return this.state._isValid;
},
isPristine: function () {
return this.state._isPristine;
},
isRequired: function () {
return !!this.props.required;
},
showRequired: function () {
return this.isRequired() && this.state._value === '';
},
showError: function () {
return !this.showRequired() && !this.state._isValid;
},
isValidValue: function (value) {
return this.props._isValidValue.call(null, this, value);
}
};
},{}],"/Users/christianalfoni/Documents/dev/formsy-react/src/utils.js":[function(require,module,exports){
var csrfTokenSelector = typeof document != 'undefined' ? document.querySelector('meta[name="csrf-token"]') : null;
var toURLEncoded = function (element, key, list) {
var list = list || [];
if (typeof (element) == 'object') {
for (var idx in element)
toURLEncoded(element[idx], key ? key + '[' + idx + ']' : idx, list);
} else {
list.push(key + '=' + encodeURIComponent(element));
}
return list.join('&');
};
var request = function (method, url, data, contentType, headers) {
var contentType = contentType === 'urlencoded' ? 'application/' + contentType.replace('urlencoded', 'x-www-form-urlencoded') : 'application/json';
data = contentType === 'application/json' ? JSON.stringify(data) : toURLEncoded(data);
return new Promise(function (resolve, reject) {
try {
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('Content-Type', contentType);
if (!!csrfTokenSelector && !!csrfTokenSelector.content) {
xhr.setRequestHeader('X-CSRF-Token', csrfTokenSelector.content);
}
// Add passed headers
Object.keys(headers).forEach(function (header) {
xhr.setRequestHeader(header, headers[header]);
});
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
try {
var response = xhr.responseText ? JSON.parse(xhr.responseText) : null;
if (xhr.status >= 200 && xhr.status < 300) {
resolve(response);
} else {
reject(response);
}
} catch (e) {
reject(e);
}
}
};
xhr.send(data);
} catch (e) {
reject(e);
}
});
};
module.exports = {
arraysDiffer: function (arrayA, arrayB) {
var isDifferent = false;
if (arrayA.length !== arrayB.length) {
isDifferent = true;
} else {
arrayA.forEach(function (item, index) {
if (item !== arrayB[index]) {
isDifferent = true;
}
});
}
return isDifferent;
},
ajax: {
post: request.bind(null, 'POST'),
put: request.bind(null, 'PUT')
}
};
},{}],"/Users/christianalfoni/Documents/dev/formsy-react/src/validationRules.js":[function(require,module,exports){
module.exports = {
'isValue': function (value) {
return value !== '';
},
'isEmail': function (value) {
return value.match(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i);
},
'isTrue': function (value) {
return value === true;
},
'isNumeric': function (value) {
if (typeof value === 'number') {
return true;
} else {
var matchResults = value.match(/[-+]?(\d*[.])?\d+/);
if (!! matchResults) {
return matchResults[0] == value;
} else {
return false;
}
}
},
'isAlpha': function (value) {
return value.match(/^[a-zA-Z]+$/);
},
'isWords': function (value) {
return value.match(/^[a-zA-Z\s]+$/);
},
'isSpecialWords': function (value) {
return value.match(/^[a-zA-Z\s\u00C0-\u017F]+$/);
},
isLength: function (value, min, max) {
if (max !== undefined) {
return value.length >= min && value.length <= max;
}
return value.length >= min;
},
equals: function (value, eql) {
return value == eql;
},
equalsField: function (value, field) {
return value == this[field];
}
};
},{}]},{},["./src/main.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvY2hyaXN0aWFuYWxmb25pL0RvY3VtZW50cy9kZXYvZm9ybXN5LXJlYWN0L3NyYy9tYWluLmpzIiwiL1VzZXJzL2NocmlzdGlhbmFsZm9uaS9Eb2N1bWVudHMvZGV2L2Zvcm1zeS1yZWFjdC9zcmMvTWl4aW4uanMiLCIvVXNlcnMvY2hyaXN0aWFuYWxmb25pL0RvY3VtZW50cy9kZXYvZm9ybXN5LXJlYWN0L3NyYy91dGlscy5qcyIsIi9Vc2Vycy9jaHJpc3RpYW5hbGZvbmkvRG9jdW1lbnRzL2Rldi9mb3Jtc3ktcmVhY3Qvc3JjL3ZhbGlkYXRpb25SdWxlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdEQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7O0FBRWpCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztBQUVyQixNQUFNLENBQUMsUUFBUSxHQUFHLFVBQVUsYUFBYSxFQUFFO0VBQ3pDLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDMUIsQ0FBQyxDQUFDOztBQUVGLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDL0MsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFD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R0FDbkM7RUFDRCxTQUFTLEVBQUUsVUFBVSxLQUFLLEVBQUU7SUFDMUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0dBQ3JDO0VBQ0QsZ0JBQWdCLEVBQUUsVUFBVSxLQUFLLEVBQUU7SUFDakMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7R0FDbEQ7RUFDRCxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNuQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7TUFDckIsT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztLQUNuRDtJQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7R0FDNUI7RUFDRCxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFO0lBQzVCLE9BQU8sS0FBSyxJQUFJLEdBQUcsQ0FBQztHQUNyQjtFQUNELFdBQVcsRUFBRSxVQUFVLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDbkMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQzdCO0FBQ0gsQ0FBQyxDQUFDOztBQUVGIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsInZhciBSZWFjdCA9IGdsb2JhbC5SZWFjdCB8fCByZXF1aXJlKCdyZWFjdCcpO1xudmFyIEZvcm1zeSA9IHt9O1xudmFyIHZhbGlkYXRpb25SdWxlcyA9IHJlcXVpcmUoJy4vdmFsaWRhdGlvblJ1bGVzLmpzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzLmpzJyk7XG52YXIgTWl4aW4gPSByZXF1aXJlKCcuL01peGluLmpzJyk7XG52YXIgb3B0aW9ucyA9IHt9O1xuXG5Gb3Jtc3kuTWl4aW4gPSBNaXhpbjtcblxuRm9ybXN5LmRlZmF1bHRzID0gZnVuY3Rpb24gKHBhc3NlZE9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IHBhc3NlZE9wdGlvbnM7XG59O1xuXG5Gb3Jtc3kuYWRkVmFsaWRhdGlvblJ1bGUgPSBmdW5jdGlvbiAobmFtZSwgZnVuYykge1xuICB2YWxpZGF0aW9uUnVsZXNbbmFtZV0gPSBmdW5jO1xufTtcblxuRm9ybXN5LkZvcm0gPSBSZWFjdC5jcmVhdGVDbGFzcyh7ZGlzcGxheU5hbWU6IFwiRm9ybVwiLFxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIGlzU3VibWl0dGluZzogZmFsc2UsXG4gICAgICBjYW5DaGFuZ2U6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25TdWJtaXQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25WYWxpZFN1Ym1pdDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkludmFsaWRTdWJtaXQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25TdWJtaXR0ZWQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25WYWxpZDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkludmFsaWQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uICgpIHt9XG4gICAgfTtcbiAgfSxcblxuICAvLyBBZGQgYSBtYXAgdG8gc3RvcmUgdGhlIGlucHV0cyBvZiB0aGUgZm9ybSwgYSBtb2RlbCB0byBzdG9yZVxuICAvLyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIGFuZCByZWdpc3RlciBjaGlsZCBpbnB1dHNcbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5pbnB1dHMgPSB7fTtcbiAgICB0aGlzLm1vZGVsID0ge307XG4gICAgdGhpcy5yZWdpc3RlcklucHV0cyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudmFsaWRhdGVGb3JtKCk7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmlucHV0cyk7XG5cbiAgICAvLyBUaGUgdXBkYXRlZCBjaGlsZHJlbiBhcnJheSBpcyBub3QgYXZhaWxhYmxlIGhlcmUgZm9yIHNvbWUgcmVhc29uLFxuICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgbmV4dCBldmVudCBsb29wXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cbiAgICAgIC8vIFRoZSBjb21wb25lbnQgbWlnaHQgaGF2ZSBiZWVuIHVubW91bnRlZCBvbiBhblxuICAgICAgLy8gdXBkYXRlXG4gICAgICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJJbnB1dHModGhpcy5wcm9wcy5jaGlsZHJlbik7XG5cbiAgICAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uRXJyb3JzKSB7XG4gICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbGlkYXRpb25FcnJvcnModGhpcy5wcm9wcy52YWxpZGF0aW9uRXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXdJbnB1dEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmlucHV0cyk7XG4gICAgICAgIGlmICh1dGlscy5hcnJheXNEaWZmZXIoaW5wdXRLZXlzLCBuZXdJbnB1dEtleXMpKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9LmJpbmQodGhpcyksIDApO1xuICB9LFxuXG4gIC8vIFVwZGF0ZSBtb2RlbCwgc3VibWl0IHRvIHVybCBwcm9wIGFuZCBzZW5kIHRoZSBtb2RlbFxuICBzdWJtaXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGZvcm0gYXMgbm90IHByaXN0aW5lLlxuICAgIC8vIElmIGFueSBpbnB1dHMgaGF2ZSBub3QgYmVlbiB0b3VjaGVkIHlldCB0aGlzIHdpbGwgbWFrZSB0aGVtIGRpcnR5XG4gICAgLy8gc28gdmFsaWRhdGlvbiBiZWNvbWVzIHZpc2libGUgKGlmIGJhc2VkIG9uIGlzUHJpc3RpbmUpXG4gICAgdGhpcy5zZXRGb3JtUHJpc3RpbmUoZmFsc2UpO1xuXG4gICAgLy8gVG8gc3VwcG9ydCB1c2UgY2FzZXMgd2hlcmUgbm8gYXN5bmMgb3IgcmVxdWVzdCBvcGVyYXRpb24gaXMgbmVlZGVkLlxuICAgIC8vIFRoZSBcIm9uU3VibWl0XCIgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIG1vZGVsIGUuZy4ge2ZpZWxkTmFtZTogXCJteVZhbHVlXCJ9LFxuICAgIC8vIGlmIHdhbnRpbmcgdG8gcmVzZXQgdGhlIGVudGlyZSBmb3JtIHRvIG9yaWdpbmFsIHN0YXRlLCB0aGUgc2Vjb25kIHBhcmFtIGlzIGEgY2FsbGJhY2sgZm9yIHRoaXMuXG4gICAgaWYgKCF0aGlzLnByb3BzLnVybCkge1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xuICAgICAgdmFyIG1vZGVsID0gdGhpcy5tYXBNb2RlbCgpO1xuICAgICAgdGhpcy5wcm9wcy5vblN1Ym1pdChtb2RlbCwgdGhpcy5yZXNldE1vZGVsLCB0aGlzLnVwZGF0ZUlucHV0c1dpdGhFcnJvcik7XG4gICAgICB0aGlzLnN0YXRlLmlzVmFsaWQgPyB0aGlzLnByb3BzLm9uVmFsaWRTdWJtaXQobW9kZWwsIHRoaXMucmVzZXRNb2RlbCkgOiB0aGlzLnByb3BzLm9uSW52YWxpZFN1Ym1pdChtb2RlbCwgdGhpcy5yZXNldE1vZGVsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc1N1Ym1pdHRpbmc6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMucHJvcHMub25TdWJtaXQodGhpcy5tYXBNb2RlbCgpLCB0aGlzLnJlc2V0TW9kZWwsIHRoaXMudXBkYXRlSW5wdXRzV2l0aEVycm9yKTtcblxuICAgIHZhciBoZWFkZXJzID0gKE9iamVjdC5rZXlzKHRoaXMucHJvcHMuaGVhZGVycykubGVuZ3RoICYmIHRoaXMucHJvcHMuaGVhZGVycykgfHwgb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuXG4gICAgdmFyIG1ldGhvZCA9IHRoaXMucHJvcHMubWV0aG9kICYmIHV0aWxzLmFqYXhbdGhpcy5wcm9wcy5tZXRob2QudG9Mb3dlckNhc2UoKV0gPyB0aGlzLnByb3BzLm1ldGhvZC50b0xvd2VyQ2FzZSgpIDogJ3Bvc3QnO1xuICAgIHV0aWxzLmFqYXhbbWV0aG9kXSh0aGlzLnByb3BzLnVybCwgdGhpcy5tYXBNb2RlbCgpLCB0aGlzLnByb3BzLmNvbnRlbnRUeXBlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgfHwgJ2pzb24nLCBoZWFkZXJzKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25TdWNjZXNzKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vblN1Ym1pdHRlZCgpO1xuICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgLmNhdGNoKHRoaXMuZmFpbFN1Ym1pdCk7XG4gIH0sXG5cbiAgbWFwTW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tYXBwaW5nID8gdGhpcy5wcm9wcy5tYXBwaW5nKHRoaXMubW9kZWwpIDogdGhpcy5tb2RlbDtcbiAgfSxcblxuICAvLyBHb2VzIHRocm91Z2ggYWxsIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhbmRcbiAgLy8gdXBkYXRlcyB0aGUgbW9kZWwgdmFsdWVzXG4gIHVwZGF0ZU1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5pbnB1dHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmlucHV0c1tuYW1lXTtcbiAgICAgIHRoaXMubW9kZWxbbmFtZV0gPSBjb21wb25lbnQuc3RhdGUuX3ZhbHVlO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0sXG5cbiAgLy8gUmVzZXQgZWFjaCBrZXkgaW4gdGhlIG1vZGVsIHRvIHRoZSBvcmlnaW5hbCAvIGluaXRpYWwgdmFsdWVcbiAgcmVzZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuaW5wdXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB0aGlzLmlucHV0c1tuYW1lXS5yZXNldFZhbHVlKCk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnZhbGlkYXRlRm9ybSgpO1xuICB9LFxuXG4gIHNldElucHV0VmFsaWRhdGlvbkVycm9yczogZnVuY3Rpb24gKGVycm9ycykge1xuICAgICBPYmplY3Qua2V5cyh0aGlzLmlucHV0cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmlucHV0c1tuYW1lXTtcbiAgICAgIHZhciBhcmdzID0gW3tcbiAgICAgICAgX2lzVmFsaWQ6ICEobmFtZSBpbiBlcnJvcnMpLFxuICAgICAgICBfc2VydmVyRXJyb3I6IGVycm9yc1tuYW1lXVxuICAgICAgfV07XG4gICAgICBjb21wb25lbnQuc2V0U3RhdGUuYXBwbHkoY29tcG9uZW50LCBhcmdzKTtcbiAgICB9LmJpbmQodGhpcykpOyAgIFxuICB9LFxuXG4gIC8vIEdvIHRocm91Z2ggZXJyb3JzIGZyb20gc2VydmVyIGFuZCBncmFiIHRoZSBjb21wb25lbnRzXG4gIC8vIHN0b3JlZCBpbiB0aGUgaW5wdXRzIG1hcC4gQ2hhbmdlIHRoZWlyIHN0YXRlIHRvIGludmFsaWRcbiAgLy8gYW5kIHNldCB0aGUgc2VydmVyRXJyb3IgbWVzc2FnZVxuICB1cGRhdGVJbnB1dHNXaXRoRXJyb3I6IGZ1bmN0aW9uIChlcnJvcnMpIHtcbiAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5pbnB1dHNbbmFtZV07XG5cbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFyZSB0cnlpbmcgdG8gdXBkYXRlIGFuIGlucHV0IHRoYXQgZG9lcyBub3QgZXhpc3RzLiBWZXJpZnkgZXJyb3JzIG9iamVjdCB3aXRoIGlucHV0IG5hbWVzLiAnICsgSlNPTi5zdHJpbmdpZnkoZXJyb3JzKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmdzID0gW3tcbiAgICAgICAgX2lzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBfc2VydmVyRXJyb3I6IGVycm9yc1tuYW1lXVxuICAgICAgfV07XG4gICAgICBjb21wb25lbnQuc2V0U3RhdGUuYXBwbHkoY29tcG9uZW50LCBhcmdzKTtcbiAgICB9LmJpbmQodGhpcykpO1xuICB9LFxuXG4gIGZhaWxTdWJtaXQ6IGZ1bmN0aW9uIChlcnJvcnMpIHtcbiAgICB0aGlzLnVwZGF0ZUlucHV0c1dpdGhFcnJvcihlcnJvcnMpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNTdWJtaXR0aW5nOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMucHJvcHMub25FcnJvcihlcnJvcnMpO1xuICAgIHRoaXMucHJvcHMub25TdWJtaXR0ZWQoKTtcbiAgfSxcblxuICAvLyBUcmF2ZXJzZSB0aGUgY2hpbGRyZW4gYW5kIGNoaWxkcmVuIG9mIGNoaWxkcmVuIHRvIGZpbmRcbiAgLy8gYWxsIGlucHV0cyBieSBjaGVja2luZyB0aGUgbmFtZSBwcm9wLiBNYXliZSBkbyBhIGJldHRlclxuICAvLyBjaGVjayBoZXJlXG4gIHJlZ2lzdGVySW5wdXRzOiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcblxuICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLnByb3BzICYmIGNoaWxkLnByb3BzLm5hbWUpIHtcbiAgICAgICAgY2hpbGQucHJvcHMuX2F0dGFjaFRvRm9ybSA9IHRoaXMuYXR0YWNoVG9Gb3JtO1xuICAgICAgICBjaGlsZC5wcm9wcy5fZGV0YWNoRnJvbUZvcm0gPSB0aGlzLmRldGFjaEZyb21Gb3JtO1xuICAgICAgICBjaGlsZC5wcm9wcy5fdmFsaWRhdGUgPSB0aGlzLnZhbGlkYXRlO1xuICAgICAgICBjaGlsZC5wcm9wcy5faXNGb3JtRGlzYWJsZWQgPSB0aGlzLmlzRm9ybURpc2FibGVkO1xuICAgICAgICBjaGlsZC5wcm9wcy5faXNWYWxpZFZhbHVlID0gdGhpcy5ydW5WYWxpZGF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQgJiYgY2hpbGQucHJvcHMgJiYgY2hpbGQucHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcklucHV0cyhjaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICB9LmJpbmQodGhpcykpO1xuICB9LFxuXG4gIGlzRm9ybURpc2FibGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGlzYWJsZWQ7XG4gIH0sXG5cbiAgZ2V0Q3VycmVudFZhbHVlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmlucHV0cykucmVkdWNlKGZ1bmN0aW9uIChkYXRhLCBuYW1lKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5pbnB1dHNbbmFtZV07XG4gICAgICBkYXRhW25hbWVdID0gY29tcG9uZW50LnN0YXRlLl92YWx1ZTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0uYmluZCh0aGlzKSwge30pO1xuICB9LFxuXG4gIHNldEZvcm1QcmlzdGluZTogZnVuY3Rpb24gKGlzUHJpc3RpbmUpIHtcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XG4gICAgdmFyIGlucHV0S2V5cyA9IE9iamVjdC5rZXlzKGlucHV0cyk7XG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBjb21wb25lbnQgYW5kIHNldCBpdCBhcyBwcmlzdGluZVxuICAgIC8vIG9yIFwiZGlydHlcIi5cbiAgICBpbnB1dEtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBpbnB1dHNbbmFtZV07XG4gICAgICBjb21wb25lbnQuc2V0U3RhdGUoe1xuICAgICAgICBfaXNQcmlzdGluZTogaXNQcmlzdGluZVxuICAgICAgfSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfSxcblxuICAvLyBVc2UgdGhlIGJpbmRlZCB2YWx1ZXMgYW5kIHRoZSBhY3R1YWwgaW5wdXQgdmFsdWUgdG9cbiAgLy8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBzZXQgaXRzIHN0YXRlLiBUaGVuIGNoZWNrIHRoZVxuICAvLyBzdGF0ZSBvZiB0aGUgZm9ybSBpdHNlbGZcbiAgdmFsaWRhdGU6IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICBcbiAgICAvLyBUcmlnZ2VyIG9uQ2hhbmdlXG4gICAgaWYgKHRoaXMuc3RhdGUuY2FuQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMuZ2V0Q3VycmVudFZhbHVlcygpKTtcbiAgICB9XG5cbiAgICB2YXIgaXNWYWxpZCA9IHRydWU7XG4gICAgaWYgKGNvbXBvbmVudC52YWxpZGF0ZSAmJiB0eXBlb2YgY29tcG9uZW50LnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpc1ZhbGlkID0gY29tcG9uZW50LnZhbGlkYXRlKCk7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnQucHJvcHMucmVxdWlyZWQgfHwgY29tcG9uZW50Ll92YWxpZGF0aW9ucykge1xuICAgICAgaXNWYWxpZCA9IHRoaXMucnVuVmFsaWRhdGlvbihjb21wb25lbnQpO1xuICAgIH1cblxuICAgIC8vIFJ1biB0aHJvdWdoIHRoZSB2YWxpZGF0aW9ucywgc3BsaXQgdGhlbSB1cCBhbmQgY2FsbFxuICAgIC8vIHRoZSB2YWxpZGF0b3IgSUYgdGhlcmUgaXMgYSB2YWx1ZSBvciBpdCBpcyByZXF1aXJlZFxuICAgIGNvbXBvbmVudC5zZXRTdGF0ZSh7XG4gICAgICBfaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgIF9zZXJ2ZXJFcnJvcjogbnVsbFxuICAgIH0sIHRoaXMudmFsaWRhdGVGb3JtKTtcblxuICB9LFxuXG4gIC8vIENoZWNrcyB2YWxpZGF0aW9uIG9uIGN1cnJlbnQgdmFsdWUgb3IgYSBwYXNzZWQgdmFsdWVcbiAgcnVuVmFsaWRhdGlvbjogZnVuY3Rpb24gKGNvbXBvbmVudCwgdmFsdWUpIHtcblxuICAgIHZhciBpc1ZhbGlkID0gdHJ1ZTtcbiAgICB2YWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyB2YWx1ZSA6IGNvbXBvbmVudC5zdGF0ZS5fdmFsdWU7XG4gICAgaWYgKGNvbXBvbmVudC5fdmFsaWRhdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb21wb25lbnQuX3ZhbGlkYXRpb25zLnNwbGl0KC9cXCwoPyFbXntcXFtdKlt9XFxdXSkvZykuZm9yRWFjaChmdW5jdGlvbiAodmFsaWRhdGlvbikge1xuICAgICAgICB2YXIgYXJncyA9IHZhbGlkYXRpb24uc3BsaXQoJzonKTtcbiAgICAgICAgdmFyIHZhbGlkYXRlTWV0aG9kID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShhcmcpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7IC8vIEl0IGlzIGEgc3RyaW5nIGlmIGl0IGNhbiBub3QgcGFyc2UgaXRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcmdzID0gW3ZhbHVlXS5jb25jYXQoYXJncyk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvblJ1bGVzW3ZhbGlkYXRlTWV0aG9kXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybXN5IGRvZXMgbm90IGhhdmUgdGhlIHZhbGlkYXRpb24gcnVsZTogJyArIHZhbGlkYXRlTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRpb25SdWxlc1t2YWxpZGF0ZU1ldGhvZF0uYXBwbHkodGhpcy5nZXRDdXJyZW50VmFsdWVzKCksIGFyZ3MpKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC52YWxpZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyB0aGUgY29tcG9uZW50IGRlZmluZXMgYW4gZXhwbGljaXQgdmFsaWRhdGUgZnVuY3Rpb25cbiAgICAgIGlzVmFsaWQgPSBjb21wb25lbnQudmFsaWRhdGUoKVxuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfSxcblxuICAvLyBWYWxpZGF0ZSB0aGUgZm9ybSBieSBnb2luZyB0aHJvdWdoIGFsbCBjaGlsZCBpbnB1dCBjb21wb25lbnRzXG4gIC8vIGFuZCBjaGVjayB0aGVpciBzdGF0ZVxuICB2YWxpZGF0ZUZvcm06IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYWxsSXNWYWxpZCA9IHRydWU7XG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzO1xuICAgIHZhciBpbnB1dEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuXG4gICAgLy8gV2UgbmVlZCBhIGNhbGxiYWNrIGFzIHdlIGFyZSB2YWxpZGF0aW5nIGFsbCBpbnB1dHMgYWdhaW4uIFRoaXMgd2lsbFxuICAgIC8vIHJ1biB3aGVuIHRoZSBsYXN0IGNvbXBvbmVudCBoYXMgc2V0IGl0cyBzdGF0ZVxuICAgIHZhciBvblZhbGlkYXRpb25Db21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghaW5wdXRzW25hbWVdLnN0YXRlLl9pc1ZhbGlkKSB7XG4gICAgICAgICAgYWxsSXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNWYWxpZDogYWxsSXNWYWxpZFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhbGxJc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25WYWxpZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkludmFsaWQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGVsbCB0aGUgZm9ybSB0aGF0IGl0IGNhbiBzdGFydCB0byB0cmlnZ2VyIGNoYW5nZSBldmVudHNcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjYW5DaGFuZ2U6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gUnVuIHZhbGlkYXRpb24gYWdhaW4gaW4gY2FzZSBhZmZlY3RlZCBieSBvdGhlciBpbnB1dHMuIFRoZVxuICAgIC8vIGxhc3QgY29tcG9uZW50IHZhbGlkYXRlZCB3aWxsIHJ1biB0aGUgb25WYWxpZGF0aW9uQ29tcGxldGUgY2FsbGJhY2tcbiAgICBpbnB1dEtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBpbnB1dHNbbmFtZV07XG4gICAgICB2YXIgaXNWYWxpZCA9IHRoaXMucnVuVmFsaWRhdGlvbihjb21wb25lbnQpO1xuICAgICAgY29tcG9uZW50LnNldFN0YXRlKHtcbiAgICAgICAgX2lzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIF9zZXJ2ZXJFcnJvcjogbnVsbFxuICAgICAgfSwgaW5kZXggPT09IGlucHV0S2V5cy5sZW5ndGggLSAxID8gb25WYWxpZGF0aW9uQ29tcGxldGUgOiBudWxsKTtcbiAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGlucHV0cywgc2V0IHN0YXRlIHdoZXJlIGZvcm0gaXMgcmVhZHkgdG8gdHJpZ2dlclxuICAgIC8vIGNoYW5nZSBldmVudC4gTmV3IGlucHV0cyBtaWdodCBiZSBhZGRlZCBsYXRlclxuICAgIGlmICghaW5wdXRLZXlzLmxlbmd0aCAmJiB0aGlzLmlzTW91bnRlZCgpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2FuQ2hhbmdlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTWV0aG9kIHB1dCBvbiBlYWNoIGlucHV0IGNvbXBvbmVudCB0byByZWdpc3RlclxuICAvLyBpdHNlbGYgdG8gdGhlIGZvcm1cbiAgYXR0YWNoVG9Gb3JtOiBmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgdGhpcy5pbnB1dHNbY29tcG9uZW50LnByb3BzLm5hbWVdID0gY29tcG9uZW50O1xuICAgIHRoaXMubW9kZWxbY29tcG9uZW50LnByb3BzLm5hbWVdID0gY29tcG9uZW50LnN0YXRlLl92YWx1ZTtcbiAgICB0aGlzLnZhbGlkYXRlKGNvbXBvbmVudCk7XG4gIH0sXG5cbiAgLy8gTWV0aG9kIHB1dCBvbiBlYWNoIGlucHV0IGNvbXBvbmVudCB0byB1bnJlZ2lzdGVyXG4gIC8vIGl0c2VsZiBmcm9tIHRoZSBmb3JtXG4gIGRldGFjaEZyb21Gb3JtOiBmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgZGVsZXRlIHRoaXMuaW5wdXRzW2NvbXBvbmVudC5wcm9wcy5uYW1lXTtcbiAgICBkZWxldGUgdGhpcy5tb2RlbFtjb21wb25lbnQucHJvcHMubmFtZV07XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuXG4gICAgcmV0dXJuIFJlYWN0LkRPTS5mb3JtKHtcbiAgICAgICAgb25TdWJtaXQ6IHRoaXMuc3VibWl0LFxuICAgICAgICBjbGFzc05hbWU6IHRoaXMucHJvcHMuY2xhc3NOYW1lXG4gICAgICB9LFxuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICk7XG5cbiAgfVxufSk7XG5cbmlmICghZ2xvYmFsLmV4cG9ydHMgJiYgIWdsb2JhbC5tb2R1bGUgJiYgKCFnbG9iYWwuZGVmaW5lIHx8ICFnbG9iYWwuZGVmaW5lLmFtZCkpIHtcbiAgZ2xvYmFsLkZvcm1zeSA9IEZvcm1zeTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGb3Jtc3k7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaUwxVnpaWEp6TDJOb2NtbHpkR2xoYm1Gc1ptOXVhUzlFYjJOMWJXVnVkSE12WkdWMkwyWnZjbTF6ZVMxeVpXRmpkQzl6Y21NdmJXRnBiaTVxY3lJc0luTnZkWEpqWlhNaU9sc2lMMVZ6WlhKekwyTm9jbWx6ZEdsaGJtRnNabTl1YVM5RWIyTjFiV1Z1ZEhNdlpHVjJMMlp2Y20xemVTMXlaV0ZqZEM5emNtTXZiV0ZwYmk1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hKUVVGSkxFdEJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNTMEZCU3l4SlFVRkpMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU0zUXl4SlFVRkpMRTFCUVUwc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGFFSXNTVUZCU1N4bFFVRmxMRWRCUVVjc1QwRkJUeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNN1FVRkRkRVFzU1VGQlNTeExRVUZMTEVkQlFVY3NUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRMnhETEVsQlFVa3NTMEZCU3l4SFFVRkhMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEJRVU5zUXl4SlFVRkpMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU03TzBGQlJXcENMRTFCUVUwc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZET3p0QlFVVnlRaXhOUVVGTkxFTkJRVU1zVVVGQlVTeEhRVUZITEZWQlFWVXNZVUZCWVN4RlFVRkZPMFZCUTNwRExFOUJRVThzUjBGQlJ5eGhRVUZoTEVOQlFVTTdRVUZETVVJc1EwRkJReXhEUVVGRE96dEJRVVZHTEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eFZRVUZWTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVN1JVRkRMME1zWlVGQlpTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRCUVVNdlFpeERRVUZETEVOQlFVTTdPMEZCUlVZc2FVTkJRV2xETEc5Q1FVRkJPMFZCUXk5Q0xHVkJRV1VzUlVGQlJTeFpRVUZaTzBsQlF6TkNMRTlCUVU4N1RVRkRUQ3hQUVVGUExFVkJRVVVzU1VGQlNUdE5RVU5pTEZsQlFWa3NSVUZCUlN4TFFVRkxPMDFCUTI1Q0xGTkJRVk1zUlVGQlJTeExRVUZMTzB0QlEycENMRU5CUVVNN1IwRkRTRHRGUVVORUxHVkJRV1VzUlVGQlJTeFpRVUZaTzBsQlF6TkNMRTlCUVU4N1RVRkRUQ3hQUVVGUExFVkJRVVVzUlVGQlJUdE5RVU5ZTEZOQlFWTXNSVUZCUlN4WlFVRlpMRVZCUVVVN1RVRkRla0lzVDBGQlR5eEZRVUZGTEZsQlFWa3NSVUZCUlR0TlFVTjJRaXhSUVVGUkxFVkJRVVVzV1VGQldTeEZRVUZGTzAxQlEzaENMR0ZCUVdFc1JVRkJSU3haUVVGWkxFVkJRVVU3VFVGRE4wSXNaVUZCWlN4RlFVRkZMRmxCUVZrc1JVRkJSVHROUVVNdlFpeFhRVUZYTEVWQlFVVXNXVUZCV1N4RlFVRkZPMDFCUXpOQ0xFOUJRVThzUlVGQlJTeFpRVUZaTEVWQlFVVTdUVUZEZGtJc1UwRkJVeXhGUVVGRkxGbEJRVmtzUlVGQlJUdE5RVU42UWl4UlFVRlJMRVZCUVVVc1dVRkJXU3hGUVVGRk8wdEJRM3BDTEVOQlFVTTdRVUZEVGl4SFFVRkhPMEZCUTBnN1FVRkRRVHM3UlVGRlJTeHJRa0ZCYTBJc1JVRkJSU3haUVVGWk8wbEJRemxDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMnBDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMmhDTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhIUVVGSE96dEZRVVZFTEdsQ1FVRnBRaXhGUVVGRkxGbEJRVms3U1VGRE4wSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wRkJRM2hDTEVkQlFVYzdPMFZCUlVRc2JVSkJRVzFDTEVWQlFVVXNXVUZCV1R0QlFVTnVReXhKUVVGSkxFbEJRVWtzVTBGQlV5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6ZERPMEZCUTBFN08wRkJSVUVzU1VGQlNTeFZRVUZWTEVOQlFVTXNXVUZCV1R0QlFVTXpRanRCUVVOQk96dEJRVVZCTEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVU3TzBGQlJUVkNMRkZCUVZFc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE96dFBRVVV4UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWjBKQlFXZENMRVZCUVVVN1ZVRkRPVUlzU1VGQlNTeERRVUZETEhkQ1FVRjNRaXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dEJRVU55UlN4VFFVRlRPenRSUVVWRUxFbEJRVWtzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6VkRMRWxCUVVrc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eFRRVUZUTEVWQlFVVXNXVUZCV1N4RFFVRkRMRVZCUVVVN1ZVRkRMME1zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMEZCUXpsQ0xGTkJRVk03TzBGQlJWUXNUMEZCVHpzN1MwRkZSaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOeVFpeEhRVUZITzBGQlEwZzdPMFZCUlVVc1RVRkJUU3hGUVVGRkxGVkJRVlVzUzBGQlN5eEZRVUZGTzBGQlF6TkNMRWxCUVVrc1MwRkJTeXhEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETzBGQlF6TkNPMEZCUTBFN1FVRkRRVHM3UVVGRlFTeEpRVUZKTEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGFFTTdRVUZEUVR0QlFVTkJPenRKUVVWSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1JVRkJSVHROUVVOdVFpeEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1RVRkRia0lzU1VGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wMUJRelZDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRPMDFCUTNoRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0TlFVTXpTQ3hQUVVGUE8wRkJRMklzUzBGQlN6czdTVUZGUkN4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03U1VGRGJrSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenROUVVOYUxGbEJRVmtzUlVGQlJTeEpRVUZKTzBGQlEzaENMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZRTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03TzBGQlJYUkdMRWxCUVVrc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eExRVUZMTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWxCUVVrc1JVRkJSU3hEUVVGRE96dEpRVVYwUnl4SlFVRkpMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVWNzVFVGQlRTeERRVUZETzBsQlEzcElMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4WFFVRlhMRWxCUVVrc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF6dFBRVU5zU0N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hSUVVGUkxFVkJRVVU3VVVGRGVFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETDBJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0UFFVTXhRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UFFVTmFMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdRVUZET1VJc1IwRkJSenM3UlVGRlJDeFJRVUZSTEVWQlFVVXNXVUZCV1R0SlFVTndRaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlF6VkZMRWRCUVVjN1FVRkRTRHRCUVVOQk96dEZRVVZGTEZkQlFWY3NSVUZCUlN4WlFVRlpPMGxCUTNaQ0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVsQlFVa3NSVUZCUlR0TlFVTXZReXhKUVVGSkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wMUJRMnhETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN1MwRkRNME1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOc1FpeEhRVUZITzBGQlEwZzdPMFZCUlVVc1ZVRkJWU3hGUVVGRkxGbEJRVms3U1VGRGRFSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZVc1NVRkJTU3hGUVVGRk8wMUJReTlETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZEYUVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTmtMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dEJRVU40UWl4SFFVRkhPenRGUVVWRUxIZENRVUYzUWl4RlFVRkZMRlZCUVZVc1RVRkJUU3hGUVVGRk8wdEJRM3BETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRlZMRWxCUVVrc1JVRkJSU3hMUVVGTExFVkJRVVU3VFVGRGRrUXNTVUZCU1N4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TlFVTnNReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETzFGQlExWXNVVUZCVVN4RlFVRkZMRVZCUVVVc1NVRkJTU3hKUVVGSkxFMUJRVTBzUTBGQlF6dFJRVU16UWl4WlFVRlpMRVZCUVVVc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dFBRVU16UWl4RFFVRkRMRU5CUVVNN1RVRkRTQ3hUUVVGVExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE0wTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5zUWl4SFFVRkhPMEZCUTBnN1FVRkRRVHRCUVVOQk96dEZRVVZGTEhGQ1FVRnhRaXhGUVVGRkxGVkJRVlVzVFVGQlRTeEZRVUZGTzBsQlEzWkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZVc1NVRkJTU3hGUVVGRkxFdEJRVXNzUlVGQlJUdEJRVU4yUkN4TlFVRk5MRWxCUVVrc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN08wMUJSV3hETEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVN1VVRkRaQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdsSFFVRnBSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOd1NpeFBRVUZQT3p0TlFVVkVMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU03VVVGRFZpeFJRVUZSTEVWQlFVVXNTMEZCU3p0UlFVTm1MRmxCUVZrc1JVRkJSU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETzA5QlF6TkNMRU5CUVVNc1EwRkJRenROUVVOSUxGTkJRVk1zUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dExRVU16UXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyeENMRWRCUVVjN08wVkJSVVFzVlVGQlZTeEZRVUZGTEZWQlFWVXNUVUZCVFN4RlFVRkZPMGxCUXpWQ0xFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU51UXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8wMUJRMW9zV1VGQldTeEZRVUZGTEV0QlFVczdTMEZEY0VJc1EwRkJReXhEUVVGRE8wbEJRMGdzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRE0wSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dEJRVU0zUWl4SFFVRkhPMEZCUTBnN1FVRkRRVHRCUVVOQk96dEZRVVZGTEdOQlFXTXNSVUZCUlN4VlFVRlZMRkZCUVZFc1JVRkJSVHRCUVVOMFF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUlVGQlJTeFZRVUZWTEV0QlFVc3NSVUZCUlRzN1RVRkZhRVFzU1VGQlNTeExRVUZMTEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlR0UlFVTTFReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRE8xRkJRemxETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTTdVVUZEYkVRc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVOMFF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETzFGQlEyeEVMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNN1FVRkRka1FzVDBGQlR6czdUVUZGUkN4SlFVRkpMRXRCUVVzc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hGUVVGRk8xRkJRMmhFTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTnNSQ3hQUVVGUE96dExRVVZHTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJFSXNSMEZCUnpzN1JVRkZSQ3hqUVVGakxFVkJRVVVzV1VGQldUdEpRVU14UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETzBGQlF5OUNMRWRCUVVjN08wVkJSVVFzWjBKQlFXZENMRVZCUVVVc1dVRkJXVHRKUVVNMVFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRlZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVU3VFVGRE0wUXNTVUZCU1N4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TlFVTnNReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03VFVGRGNFTXNUMEZCVHl4SlFVRkpMRU5CUVVNN1MwRkRZaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOMFFpeEhRVUZIT3p0RlFVVkVMR1ZCUVdVc1JVRkJSU3hWUVVGVkxGVkJRVlVzUlVGQlJUdEpRVU55UXl4SlFVRkpMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF6ZENMRWxCUVVrc1NVRkJTU3hUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVONFF6dEJRVU5CT3p0SlFVVkpMRk5CUVZNc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlZTeEpRVUZKTEVWQlFVVXNTMEZCU3l4RlFVRkZPMDFCUTNaRExFbEJRVWtzVTBGQlV5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenROUVVNM1FpeFRRVUZUTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTJwQ0xGZEJRVmNzUlVGQlJTeFZRVUZWTzA5QlEzaENMRU5CUVVNc1EwRkJRenRMUVVOS0xFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRiRUlzUjBGQlJ6dEJRVU5JTzBGQlEwRTdRVUZEUVRzN1FVRkZRU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFZRVUZWTEZOQlFWTXNSVUZCUlR0QlFVTnFRenM3U1VGRlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhGUVVGRk8wMUJRM2hDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGJrUXNTMEZCU3pzN1NVRkZSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdTVUZEYmtJc1NVRkJTU3hUUVVGVExFTkJRVU1zVVVGQlVTeEpRVUZKTEU5QlFVOHNVMEZCVXl4RFFVRkRMRkZCUVZFc1MwRkJTeXhWUVVGVkxFVkJRVVU3VFVGRGJFVXNUMEZCVHl4SFFVRkhMRk5CUVZNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dExRVU5vUXl4TlFVRk5MRWxCUVVrc1UwRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVsQlFVa3NVMEZCVXl4RFFVRkRMRmxCUVZrc1JVRkJSVHROUVVNM1JDeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU01UXl4TFFVRkxPMEZCUTB3N1FVRkRRVHM3U1VGRlNTeFRRVUZUTEVOQlFVTXNVVUZCVVN4RFFVRkRPMDFCUTJwQ0xGRkJRVkVzUlVGQlJTeFBRVUZQTzAxQlEycENMRmxCUVZrc1JVRkJSU3hKUVVGSk8wRkJRM2hDTEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03TzBGQlJURkNMRWRCUVVjN1FVRkRTRHM3UVVGRlFTeEZRVUZGTEdGQlFXRXNSVUZCUlN4VlFVRlZMRk5CUVZNc1JVRkJSU3hMUVVGTExFVkJRVVU3TzBsQlJYcERMRWxCUVVrc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dEpRVU51UWl4TFFVRkxMRWRCUVVjc1UwRkJVeXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVY3NTMEZCU3l4SFFVRkhMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyaEZMRWxCUVVrc1UwRkJVeXhEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVWQlFVVTdUVUZEYWtNc1UwRkJVeXhEUVVGRExGbEJRVmtzUTBGQlF5eExRVUZMTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4VlFVRlZMRVZCUVVVN1VVRkRhRVlzU1VGQlNTeEpRVUZKTEVkQlFVY3NWVUZCVlN4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5xUXl4SlFVRkpMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdVVUZEYkVNc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4SFFVRkhMRVZCUVVVN1ZVRkROMElzU1VGQlNUdFpRVU5HTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFhRVU40UWl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xbEJRMVlzVDBGQlR5eEhRVUZITEVOQlFVTTdWMEZEV2p0VFFVTkdMRU5CUVVNc1EwRkJRenRSUVVOSUxFbEJRVWtzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU0xUWl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExHTkJRV01zUTBGQlF5eEZRVUZGTzFWQlEzQkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zTkVOQlFUUkRMRWRCUVVjc1kwRkJZeXhEUVVGRExFTkJRVU03VTBGRGFFWTdVVUZEUkN4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSVHRWUVVONlJTeFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMU5CUTJwQ08wOUJRMFlzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVObU8wRkJRMHdzU1VGQlNTeEpRVUZKTEU5QlFVOHNVMEZCVXl4RFFVRkRMRkZCUVZFc1MwRkJTeXhWUVVGVkxFVkJRVVU3TzAxQlJUVkRMRTlCUVU4c1IwRkJSeXhUUVVGVExFTkJRVU1zVVVGQlVTeEZRVUZGTzB0QlF5OUNPMGxCUTBRc1QwRkJUeXhQUVVGUExFTkJRVU03UVVGRGJrSXNSMEZCUnp0QlFVTklPMEZCUTBFN08wVkJSVVVzV1VGQldTeEZRVUZGTEZsQlFWazdTVUZEZUVJc1NVRkJTU3hWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETzBsQlEzUkNMRWxCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZETjBJc1NVRkJTU3hKUVVGSkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM2hETzBGQlEwRTdPMGxCUlVrc1NVRkJTU3h2UWtGQmIwSXNSMEZCUnl4WlFVRlpPMDFCUTNKRExGTkJRVk1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4SlFVRkpMRVZCUVVVN1VVRkRhRU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeEZRVUZGTzFWQlEyaERMRlZCUVZVc1IwRkJSeXhMUVVGTExFTkJRVU03VTBGRGNFSTdRVUZEVkN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdPMDFCUldRc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU5hTEU5QlFVOHNSVUZCUlN4VlFVRlZPMEZCUXpOQ0xFOUJRVThzUTBGQlF5eERRVUZET3p0TlFVVklMRWxCUVVrc1ZVRkJWU3hGUVVGRk8xRkJRMlFzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRQUVVOMFFpeE5RVUZOTzFGQlEwd3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dEJRVU12UWl4UFFVRlBPMEZCUTFBN08wMUJSVTBzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTmFMRk5CUVZNc1JVRkJSU3hKUVVGSk8wRkJRM1pDTEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWVUxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRha0k3UVVGRFFUczdTVUZGU1N4VFFVRlRMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0TlFVTjJReXhKUVVGSkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1RVRkROMElzU1VGQlNTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dE5RVU0xUXl4VFFVRlRMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRMnBDTEZGQlFWRXNSVUZCUlN4UFFVRlBPMUZCUTJwQ0xGbEJRVmtzUlVGQlJTeEpRVUZKTzA5QlEyNUNMRVZCUVVVc1MwRkJTeXhMUVVGTExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkhMRzlDUVVGdlFpeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNaRkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOc1FqdEJRVU5CT3p0SlFVVkpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEpRVUZKTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1JVRkJSVHROUVVONlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTFvc1UwRkJVeXhGUVVGRkxFbEJRVWs3VDBGRGFFSXNRMEZCUXl4RFFVRkRPMHRCUTBvN1FVRkRUQ3hIUVVGSE8wRkJRMGc3UVVGRFFUczdSVUZGUlN4WlFVRlpMRVZCUVVVc1ZVRkJWU3hUUVVGVExFVkJRVVU3U1VGRGFrTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJRenRKUVVNNVF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRE1VUXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU0zUWl4SFFVRkhPMEZCUTBnN1FVRkRRVHM3UlVGRlJTeGpRVUZqTEVWQlFVVXNWVUZCVlN4VFFVRlRMRVZCUVVVN1NVRkRia01zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEZWtNc1QwRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UjBGRGVrTTdRVUZEU0N4RlFVRkZMRTFCUVUwc1JVRkJSU3haUVVGWk96dEpRVVZzUWl4UFFVRlBMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEyeENMRkZCUVZFc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRUdFJRVU55UWl4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTzA5QlEyaERPMDFCUTBRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTzBGQlEzcENMRXRCUVVzc1EwRkJRenM3UjBGRlNEdEJRVU5JTEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWSUxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZPMFZCUXk5RkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTNwQ0xFTkJRVU03TzBGQlJVUXNUVUZCVFN4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKMllYSWdVbVZoWTNRZ1BTQm5iRzlpWVd3dVVtVmhZM1FnZkh3Z2NtVnhkV2x5WlNnbmNtVmhZM1FuS1R0Y2JuWmhjaUJHYjNKdGMza2dQU0I3ZlR0Y2JuWmhjaUIyWVd4cFpHRjBhVzl1VW5Wc1pYTWdQU0J5WlhGMWFYSmxLQ2N1TDNaaGJHbGtZWFJwYjI1U2RXeGxjeTVxY3ljcE8xeHVkbUZ5SUhWMGFXeHpJRDBnY21WeGRXbHlaU2duTGk5MWRHbHNjeTVxY3ljcE8xeHVkbUZ5SUUxcGVHbHVJRDBnY21WeGRXbHlaU2duTGk5TmFYaHBiaTVxY3ljcE8xeHVkbUZ5SUc5d2RHbHZibk1nUFNCN2ZUdGNibHh1Um05eWJYTjVMazFwZUdsdUlEMGdUV2w0YVc0N1hHNWNia1p2Y20xemVTNWtaV1poZFd4MGN5QTlJR1oxYm1OMGFXOXVJQ2h3WVhOelpXUlBjSFJwYjI1ektTQjdYRzRnSUc5d2RHbHZibk1nUFNCd1lYTnpaV1JQY0hScGIyNXpPMXh1ZlR0Y2JseHVSbTl5YlhONUxtRmtaRlpoYkdsa1lYUnBiMjVTZFd4bElEMGdablZ1WTNScGIyNGdLRzVoYldVc0lHWjFibU1wSUh0Y2JpQWdkbUZzYVdSaGRHbHZibEoxYkdWelcyNWhiV1ZkSUQwZ1puVnVZenRjYm4wN1hHNWNia1p2Y20xemVTNUdiM0p0SUQwZ1VtVmhZM1F1WTNKbFlYUmxRMnhoYzNNb2UxeHVJQ0JuWlhSSmJtbDBhV0ZzVTNSaGRHVTZJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdhWE5XWVd4cFpEb2dkSEoxWlN4Y2JpQWdJQ0FnSUdselUzVmliV2wwZEdsdVp6b2dabUZzYzJVc1hHNGdJQ0FnSUNCallXNURhR0Z1WjJVNklHWmhiSE5sWEc0Z0lDQWdmVHRjYmlBZ2ZTeGNiaUFnWjJWMFJHVm1ZWFZzZEZCeWIzQnpPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJR2hsWVdSbGNuTTZJSHQ5TEZ4dUlDQWdJQ0FnYjI1VGRXTmpaWE56T2lCbWRXNWpkR2x2YmlBb0tTQjdmU3hjYmlBZ0lDQWdJRzl1UlhKeWIzSTZJR1oxYm1OMGFXOXVJQ2dwSUh0OUxGeHVJQ0FnSUNBZ2IyNVRkV0p0YVhRNklHWjFibU4wYVc5dUlDZ3BJSHQ5TEZ4dUlDQWdJQ0FnYjI1V1lXeHBaRk4xWW0xcGREb2dablZ1WTNScGIyNGdLQ2tnZTMwc1hHNGdJQ0FnSUNCdmJrbHVkbUZzYVdSVGRXSnRhWFE2SUdaMWJtTjBhVzl1SUNncElIdDlMRnh1SUNBZ0lDQWdiMjVUZFdKdGFYUjBaV1E2SUdaMWJtTjBhVzl1SUNncElIdDlMRnh1SUNBZ0lDQWdiMjVXWVd4cFpEb2dablZ1WTNScGIyNGdLQ2tnZTMwc1hHNGdJQ0FnSUNCdmJrbHVkbUZzYVdRNklHWjFibU4wYVc5dUlDZ3BJSHQ5TEZ4dUlDQWdJQ0FnYjI1RGFHRnVaMlU2SUdaMWJtTjBhVzl1SUNncElIdDlYRzRnSUNBZ2ZUdGNiaUFnZlN4Y2JseHVJQ0F2THlCQlpHUWdZU0J0WVhBZ2RHOGdjM1J2Y21VZ2RHaGxJR2x1Y0hWMGN5QnZaaUIwYUdVZ1ptOXliU3dnWVNCdGIyUmxiQ0IwYnlCemRHOXlaVnh1SUNBdkx5QjBhR1VnZG1Gc2RXVnpJRzltSUhSb1pTQm1iM0p0SUdGdVpDQnlaV2RwYzNSbGNpQmphR2xzWkNCcGJuQjFkSE5jYmlBZ1kyOXRjRzl1Wlc1MFYybHNiRTF2ZFc1ME9pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdkR2hwY3k1cGJuQjFkSE1nUFNCN2ZUdGNiaUFnSUNCMGFHbHpMbTF2WkdWc0lEMGdlMzA3WEc0Z0lDQWdkR2hwY3k1eVpXZHBjM1JsY2tsdWNIVjBjeWgwYUdsekxuQnliM0J6TG1Ob2FXeGtjbVZ1S1R0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUkVhV1JOYjNWdWREb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJSFJvYVhNdWRtRnNhV1JoZEdWR2IzSnRLQ2s3WEc0Z0lIMHNYRzVjYmlBZ1kyOXRjRzl1Wlc1MFYybHNiRlZ3WkdGMFpUb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJSFpoY2lCcGJuQjFkRXRsZVhNZ1BTQlBZbXBsWTNRdWEyVjVjeWgwYUdsekxtbHVjSFYwY3lrN1hHNWNiaUFnSUNBdkx5QlVhR1VnZFhCa1lYUmxaQ0JqYUdsc1pISmxiaUJoY25KaGVTQnBjeUJ1YjNRZ1lYWmhhV3hoWW14bElHaGxjbVVnWm05eUlITnZiV1VnY21WaGMyOXVMRnh1SUNBZ0lDOHZJSGRsSUc1bFpXUWdkRzhnZDJGcGRDQm1iM0lnYm1WNGRDQmxkbVZ1ZENCc2IyOXdYRzRnSUNBZ2MyVjBWR2x0Wlc5MWRDaG1kVzVqZEdsdmJpQW9LU0I3WEc1Y2JpQWdJQ0FnSUM4dklGUm9aU0JqYjIxd2IyNWxiblFnYldsbmFIUWdhR0YyWlNCaVpXVnVJSFZ1Ylc5MWJuUmxaQ0J2YmlCaGJseHVJQ0FnSUNBZ0x5OGdkWEJrWVhSbFhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1cGMwMXZkVzUwWldRb0tTa2dlMXh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjbVZuYVhOMFpYSkpibkIxZEhNb2RHaHBjeTV3Y205d2N5NWphR2xzWkhKbGJpazdYRzVjYmlBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3Y205d2N5NTJZV3hwWkdGMGFXOXVSWEp5YjNKektTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXpaWFJKYm5CMWRGWmhiR2xrWVhScGIyNUZjbkp2Y25Nb2RHaHBjeTV3Y205d2N5NTJZV3hwWkdGMGFXOXVSWEp5YjNKektUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhaaGNpQnVaWGRKYm5CMWRFdGxlWE1nUFNCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG1sdWNIVjBjeWs3WEc0Z0lDQWdJQ0FnSUdsbUlDaDFkR2xzY3k1aGNuSmhlWE5FYVdabVpYSW9hVzV3ZFhSTFpYbHpMQ0J1WlhkSmJuQjFkRXRsZVhNcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NTJZV3hwWkdGMFpVWnZjbTBvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtzSURBcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUZWd1pHRjBaU0J0YjJSbGJDd2djM1ZpYldsMElIUnZJSFZ5YkNCd2NtOXdJR0Z1WkNCelpXNWtJSFJvWlNCdGIyUmxiRnh1SUNCemRXSnRhWFE2SUdaMWJtTjBhVzl1SUNobGRtVnVkQ2tnZTF4dUlDQWdJR1YyWlc1MExuQnlaWFpsYm5SRVpXWmhkV3gwS0NrN1hHNWNiaUFnSUNBdkx5QlVjbWxuWjJWeUlHWnZjbTBnWVhNZ2JtOTBJSEJ5YVhOMGFXNWxMbHh1SUNBZ0lDOHZJRWxtSUdGdWVTQnBibkIxZEhNZ2FHRjJaU0J1YjNRZ1ltVmxiaUIwYjNWamFHVmtJSGxsZENCMGFHbHpJSGRwYkd3Z2JXRnJaU0IwYUdWdElHUnBjblI1WEc0Z0lDQWdMeThnYzI4Z2RtRnNhV1JoZEdsdmJpQmlaV052YldWeklIWnBjMmxpYkdVZ0tHbG1JR0poYzJWa0lHOXVJR2x6VUhKcGMzUnBibVVwWEc0Z0lDQWdkR2hwY3k1elpYUkdiM0p0VUhKcGMzUnBibVVvWm1Gc2MyVXBPMXh1WEc0Z0lDQWdMeThnVkc4Z2MzVndjRzl5ZENCMWMyVWdZMkZ6WlhNZ2QyaGxjbVVnYm04Z1lYTjVibU1nYjNJZ2NtVnhkV1Z6ZENCdmNHVnlZWFJwYjI0Z2FYTWdibVZsWkdWa0xseHVJQ0FnSUM4dklGUm9aU0JjSW05dVUzVmliV2wwWENJZ1kyRnNiR0poWTJzZ2FYTWdZMkZzYkdWa0lIZHBkR2dnZEdobElHMXZaR1ZzSUdVdVp5NGdlMlpwWld4a1RtRnRaVG9nWENKdGVWWmhiSFZsWENKOUxGeHVJQ0FnSUM4dklHbG1JSGRoYm5ScGJtY2dkRzhnY21WelpYUWdkR2hsSUdWdWRHbHlaU0JtYjNKdElIUnZJRzl5YVdkcGJtRnNJSE4wWVhSbExDQjBhR1VnYzJWamIyNWtJSEJoY21GdElHbHpJR0VnWTJGc2JHSmhZMnNnWm05eUlIUm9hWE11WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbkJ5YjNCekxuVnliQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWTmIyUmxiQ2dwTzF4dUlDQWdJQ0FnZG1GeUlHMXZaR1ZzSUQwZ2RHaHBjeTV0WVhCTmIyUmxiQ2dwTzF4dUlDQWdJQ0FnZEdocGN5NXdjbTl3Y3k1dmJsTjFZbTFwZENodGIyUmxiQ3dnZEdocGN5NXlaWE5sZEUxdlpHVnNMQ0IwYUdsekxuVndaR0YwWlVsdWNIVjBjMWRwZEdoRmNuSnZjaWs3WEc0Z0lDQWdJQ0IwYUdsekxuTjBZWFJsTG1selZtRnNhV1FnUHlCMGFHbHpMbkJ5YjNCekxtOXVWbUZzYVdSVGRXSnRhWFFvYlc5a1pXd3NJSFJvYVhNdWNtVnpaWFJOYjJSbGJDa2dPaUIwYUdsekxuQnliM0J6TG05dVNXNTJZV3hwWkZOMVltMXBkQ2h0YjJSbGJDd2dkR2hwY3k1eVpYTmxkRTF2WkdWc0tUdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxuVndaR0YwWlUxdlpHVnNLQ2s3WEc0Z0lDQWdkR2hwY3k1elpYUlRkR0YwWlNoN1hHNGdJQ0FnSUNCcGMxTjFZbTFwZEhScGJtYzZJSFJ5ZFdWY2JpQWdJQ0I5S1R0Y2JseHVJQ0FnSUhSb2FYTXVjSEp2Y0hNdWIyNVRkV0p0YVhRb2RHaHBjeTV0WVhCTmIyUmxiQ2dwTENCMGFHbHpMbkpsYzJWMFRXOWtaV3dzSUhSb2FYTXVkWEJrWVhSbFNXNXdkWFJ6VjJsMGFFVnljbTl5S1R0Y2JseHVJQ0FnSUhaaGNpQm9aV0ZrWlhKeklEMGdLRTlpYW1WamRDNXJaWGx6S0hSb2FYTXVjSEp2Y0hNdWFHVmhaR1Z5Y3lrdWJHVnVaM1JvSUNZbUlIUm9hWE11Y0hKdmNITXVhR1ZoWkdWeWN5a2dmSHdnYjNCMGFXOXVjeTVvWldGa1pYSnpJSHg4SUh0OU8xeHVYRzRnSUNBZ2RtRnlJRzFsZEdodlpDQTlJSFJvYVhNdWNISnZjSE11YldWMGFHOWtJQ1ltSUhWMGFXeHpMbUZxWVhoYmRHaHBjeTV3Y205d2N5NXRaWFJvYjJRdWRHOU1iM2RsY2tOaGMyVW9LVjBnUHlCMGFHbHpMbkJ5YjNCekxtMWxkR2h2WkM1MGIweHZkMlZ5UTJGelpTZ3BJRG9nSjNCdmMzUW5PMXh1SUNBZ0lIVjBhV3h6TG1GcVlYaGJiV1YwYUc5a1hTaDBhR2x6TG5CeWIzQnpMblZ5YkN3Z2RHaHBjeTV0WVhCTmIyUmxiQ2dwTENCMGFHbHpMbkJ5YjNCekxtTnZiblJsYm5SVWVYQmxJSHg4SUc5d2RHbHZibk11WTI5dWRHVnVkRlI1Y0dVZ2ZId2dKMnB6YjI0bkxDQm9aV0ZrWlhKektWeHVJQ0FnSUNBZ0xuUm9aVzRvWm5WdVkzUnBiMjRnS0hKbGMzQnZibk5sS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0hKdmNITXViMjVUZFdOalpYTnpLSEpsYzNCdmJuTmxLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdjbTl3Y3k1dmJsTjFZbTFwZEhSbFpDZ3BPMXh1SUNBZ0lDQWdmUzVpYVc1a0tIUm9hWE1wS1Z4dUlDQWdJQ0FnTG1OaGRHTm9LSFJvYVhNdVptRnBiRk4xWW0xcGRDazdYRzRnSUgwc1hHNWNiaUFnYldGd1RXOWtaV3c2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXdjbTl3Y3k1dFlYQndhVzVuSUQ4Z2RHaHBjeTV3Y205d2N5NXRZWEJ3YVc1bktIUm9hWE11Ylc5a1pXd3BJRG9nZEdocGN5NXRiMlJsYkR0Y2JpQWdmU3hjYmx4dUlDQXZMeUJIYjJWeklIUm9jbTkxWjJnZ1lXeHNJSEpsWjJsemRHVnlaV1FnWTI5dGNHOXVaVzUwY3lCaGJtUmNiaUFnTHk4Z2RYQmtZWFJsY3lCMGFHVWdiVzlrWld3Z2RtRnNkV1Z6WEc0Z0lIVndaR0YwWlUxdlpHVnNPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnVDJKcVpXTjBMbXRsZVhNb2RHaHBjeTVwYm5CMWRITXBMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLRzVoYldVcElIdGNiaUFnSUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCMGFHbHpMbWx1Y0hWMGMxdHVZVzFsWFR0Y2JpQWdJQ0FnSUhSb2FYTXViVzlrWld4YmJtRnRaVjBnUFNCamIyMXdiMjVsYm5RdWMzUmhkR1V1WDNaaGJIVmxPMXh1SUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lIMHNYRzVjYmlBZ0x5OGdVbVZ6WlhRZ1pXRmphQ0JyWlhrZ2FXNGdkR2hsSUcxdlpHVnNJSFJ2SUhSb1pTQnZjbWxuYVc1aGJDQXZJR2x1YVhScFlXd2dkbUZzZFdWY2JpQWdjbVZ6WlhSTmIyUmxiRG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUU5aWFtVmpkQzVyWlhsektIUm9hWE11YVc1d2RYUnpLUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2h1WVcxbEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG1sdWNIVjBjMXR1WVcxbFhTNXlaWE5sZEZaaGJIVmxLQ2s3WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdJQ0IwYUdsekxuWmhiR2xrWVhSbFJtOXliU2dwTzF4dUlDQjlMRnh1WEc0Z0lITmxkRWx1Y0hWMFZtRnNhV1JoZEdsdmJrVnljbTl5Y3pvZ1puVnVZM1JwYjI0Z0tHVnljbTl5Y3lrZ2UxeHVJQ0FnSUNCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG1sdWNIVjBjeWt1Wm05eVJXRmphQ2htZFc1amRHbHZiaUFvYm1GdFpTd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCMGFHbHpMbWx1Y0hWMGMxdHVZVzFsWFR0Y2JpQWdJQ0FnSUhaaGNpQmhjbWR6SUQwZ1czdGNiaUFnSUNBZ0lDQWdYMmx6Vm1Gc2FXUTZJQ0VvYm1GdFpTQnBiaUJsY25KdmNuTXBMRnh1SUNBZ0lDQWdJQ0JmYzJWeWRtVnlSWEp5YjNJNklHVnljbTl5YzF0dVlXMWxYVnh1SUNBZ0lDQWdmVjA3WEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblF1YzJWMFUzUmhkR1V1WVhCd2JIa29ZMjl0Y0c5dVpXNTBMQ0JoY21kektUdGNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPeUFnSUZ4dUlDQjlMRnh1WEc0Z0lDOHZJRWR2SUhSb2NtOTFaMmdnWlhKeWIzSnpJR1p5YjIwZ2MyVnlkbVZ5SUdGdVpDQm5jbUZpSUhSb1pTQmpiMjF3YjI1bGJuUnpYRzRnSUM4dklITjBiM0psWkNCcGJpQjBhR1VnYVc1d2RYUnpJRzFoY0M0Z1EyaGhibWRsSUhSb1pXbHlJSE4wWVhSbElIUnZJR2x1ZG1Gc2FXUmNiaUFnTHk4Z1lXNWtJSE5sZENCMGFHVWdjMlZ5ZG1WeVJYSnliM0lnYldWemMyRm5aVnh1SUNCMWNHUmhkR1ZKYm5CMWRITlhhWFJvUlhKeWIzSTZJR1oxYm1OMGFXOXVJQ2hsY25KdmNuTXBJSHRjYmlBZ0lDQlBZbXBsWTNRdWEyVjVjeWhsY25KdmNuTXBMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLRzVoYldVc0lHbHVaR1Y0S1NCN1hHNGdJQ0FnSUNCMllYSWdZMjl0Y0c5dVpXNTBJRDBnZEdocGN5NXBibkIxZEhOYmJtRnRaVjA3WEc1Y2JpQWdJQ0FnSUdsbUlDZ2hZMjl0Y0c5dVpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduV1c5MUlHRnlaU0IwY25scGJtY2dkRzhnZFhCa1lYUmxJR0Z1SUdsdWNIVjBJSFJvWVhRZ1pHOWxjeUJ1YjNRZ1pYaHBjM1J6TGlCV1pYSnBabmtnWlhKeWIzSnpJRzlpYW1WamRDQjNhWFJvSUdsdWNIVjBJRzVoYldWekxpQW5JQ3NnU2xOUFRpNXpkSEpwYm1kcFpua29aWEp5YjNKektTazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSFpoY2lCaGNtZHpJRDBnVzN0Y2JpQWdJQ0FnSUNBZ1gybHpWbUZzYVdRNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNCZmMyVnlkbVZ5UlhKeWIzSTZJR1Z5Y205eWMxdHVZVzFsWFZ4dUlDQWdJQ0FnZlYwN1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5RdWMyVjBVM1JoZEdVdVlYQndiSGtvWTI5dGNHOXVaVzUwTENCaGNtZHpLVHRjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQjlMRnh1WEc0Z0lHWmhhV3hUZFdKdGFYUTZJR1oxYm1OMGFXOXVJQ2hsY25KdmNuTXBJSHRjYmlBZ0lDQjBhR2x6TG5Wd1pHRjBaVWx1Y0hWMGMxZHBkR2hGY25KdmNpaGxjbkp2Y25NcE8xeHVJQ0FnSUhSb2FYTXVjMlYwVTNSaGRHVW9lMXh1SUNBZ0lDQWdhWE5UZFdKdGFYUjBhVzVuT2lCbVlXeHpaVnh1SUNBZ0lIMHBPMXh1SUNBZ0lIUm9hWE11Y0hKdmNITXViMjVGY25KdmNpaGxjbkp2Y25NcE8xeHVJQ0FnSUhSb2FYTXVjSEp2Y0hNdWIyNVRkV0p0YVhSMFpXUW9LVHRjYmlBZ2ZTeGNibHh1SUNBdkx5QlVjbUYyWlhKelpTQjBhR1VnWTJocGJHUnlaVzRnWVc1a0lHTm9hV3hrY21WdUlHOW1JR05vYVd4a2NtVnVJSFJ2SUdacGJtUmNiaUFnTHk4Z1lXeHNJR2x1Y0hWMGN5QmllU0JqYUdWamEybHVaeUIwYUdVZ2JtRnRaU0J3Y205d0xpQk5ZWGxpWlNCa2J5QmhJR0psZEhSbGNseHVJQ0F2THlCamFHVmpheUJvWlhKbFhHNGdJSEpsWjJsemRHVnlTVzV3ZFhSek9pQm1kVzVqZEdsdmJpQW9ZMmhwYkdSeVpXNHBJSHRjYmlBZ0lDQlNaV0ZqZEM1RGFHbHNaSEpsYmk1bWIzSkZZV05vS0dOb2FXeGtjbVZ1TENCbWRXNWpkR2x2YmlBb1kyaHBiR1FwSUh0Y2JseHVJQ0FnSUNBZ2FXWWdLR05vYVd4a0lDWW1JR05vYVd4a0xuQnliM0J6SUNZbUlHTm9hV3hrTG5CeWIzQnpMbTVoYldVcElIdGNiaUFnSUNBZ0lDQWdZMmhwYkdRdWNISnZjSE11WDJGMGRHRmphRlJ2Um05eWJTQTlJSFJvYVhNdVlYUjBZV05vVkc5R2IzSnRPMXh1SUNBZ0lDQWdJQ0JqYUdsc1pDNXdjbTl3Y3k1ZlpHVjBZV05vUm5KdmJVWnZjbTBnUFNCMGFHbHpMbVJsZEdGamFFWnliMjFHYjNKdE8xeHVJQ0FnSUNBZ0lDQmphR2xzWkM1d2NtOXdjeTVmZG1Gc2FXUmhkR1VnUFNCMGFHbHpMblpoYkdsa1lYUmxPMXh1SUNBZ0lDQWdJQ0JqYUdsc1pDNXdjbTl3Y3k1ZmFYTkdiM0p0UkdsellXSnNaV1FnUFNCMGFHbHpMbWx6Um05eWJVUnBjMkZpYkdWa08xeHVJQ0FnSUNBZ0lDQmphR2xzWkM1d2NtOXdjeTVmYVhOV1lXeHBaRlpoYkhWbElEMGdkR2hwY3k1eWRXNVdZV3hwWkdGMGFXOXVPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JwWmlBb1kyaHBiR1FnSmlZZ1kyaHBiR1F1Y0hKdmNITWdKaVlnWTJocGJHUXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1eVpXZHBjM1JsY2tsdWNIVjBjeWhqYUdsc1pDNXdjbTl3Y3k1amFHbHNaSEpsYmlrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPMXh1SUNCOUxGeHVYRzRnSUdselJtOXliVVJwYzJGaWJHVmtPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNISnZjSE11WkdsellXSnNaV1E3WEc0Z0lIMHNYRzVjYmlBZ1oyVjBRM1Z5Y21WdWRGWmhiSFZsY3pvZ1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG1sdWNIVjBjeWt1Y21Wa2RXTmxLR1oxYm1OMGFXOXVJQ2hrWVhSaExDQnVZVzFsS1NCN1hHNGdJQ0FnSUNCMllYSWdZMjl0Y0c5dVpXNTBJRDBnZEdocGN5NXBibkIxZEhOYmJtRnRaVjA3WEc0Z0lDQWdJQ0JrWVhSaFcyNWhiV1ZkSUQwZ1kyOXRjRzl1Wlc1MExuTjBZWFJsTGw5MllXeDFaVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmtZWFJoTzF4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1N3Z2UzMHBPMXh1SUNCOUxGeHVYRzRnSUhObGRFWnZjbTFRY21semRHbHVaVG9nWm5WdVkzUnBiMjRnS0dselVISnBjM1JwYm1VcElIdGNiaUFnSUNCMllYSWdhVzV3ZFhSeklEMGdkR2hwY3k1cGJuQjFkSE03WEc0Z0lDQWdkbUZ5SUdsdWNIVjBTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLR2x1Y0hWMGN5azdYRzVjYmlBZ0lDQXZMeUJKZEdWeVlYUmxJSFJvY205MVoyZ2daV0ZqYUNCamIyMXdiMjVsYm5RZ1lXNWtJSE5sZENCcGRDQmhjeUJ3Y21semRHbHVaVnh1SUNBZ0lDOHZJRzl5SUZ3aVpHbHlkSGxjSWk1Y2JpQWdJQ0JwYm5CMWRFdGxlWE11Wm05eVJXRmphQ2htZFc1amRHbHZiaUFvYm1GdFpTd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCcGJuQjFkSE5iYm1GdFpWMDdYRzRnSUNBZ0lDQmpiMjF3YjI1bGJuUXVjMlYwVTNSaGRHVW9lMXh1SUNBZ0lDQWdJQ0JmYVhOUWNtbHpkR2x1WlRvZ2FYTlFjbWx6ZEdsdVpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZTNWlhVzVrS0hSb2FYTXBLVHRjYmlBZ2ZTeGNibHh1SUNBdkx5QlZjMlVnZEdobElHSnBibVJsWkNCMllXeDFaWE1nWVc1a0lIUm9aU0JoWTNSMVlXd2dhVzV3ZFhRZ2RtRnNkV1VnZEc5Y2JpQWdMeThnZG1Gc2FXUmhkR1VnZEdobElHbHVjSFYwSUdGdVpDQnpaWFFnYVhSeklITjBZWFJsTGlCVWFHVnVJR05vWldOcklIUm9aVnh1SUNBdkx5QnpkR0YwWlNCdlppQjBhR1VnWm05eWJTQnBkSE5sYkdaY2JpQWdkbUZzYVdSaGRHVTZJR1oxYm1OMGFXOXVJQ2hqYjIxd2IyNWxiblFwSUh0Y2JpQWdJQ0JjYmlBZ0lDQXZMeUJVY21sbloyVnlJRzl1UTJoaGJtZGxYRzRnSUNBZ2FXWWdLSFJvYVhNdWMzUmhkR1V1WTJGdVEyaGhibWRsS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxtOXVRMmhoYm1kbEtIUm9hWE11WjJWMFEzVnljbVZ1ZEZaaGJIVmxjeWdwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2FYTldZV3hwWkNBOUlIUnlkV1U3WEc0Z0lDQWdhV1lnS0dOdmJYQnZibVZ1ZEM1MllXeHBaR0YwWlNBbUppQjBlWEJsYjJZZ1kyOXRjRzl1Wlc1MExuWmhiR2xrWVhSbElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNCcGMxWmhiR2xrSUQwZ1kyOXRjRzl1Wlc1MExuWmhiR2xrWVhSbEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjF3YjI1bGJuUXVjSEp2Y0hNdWNtVnhkV2x5WldRZ2ZId2dZMjl0Y0c5dVpXNTBMbDkyWVd4cFpHRjBhVzl1Y3lrZ2UxeHVJQ0FnSUNBZ2FYTldZV3hwWkNBOUlIUm9hWE11Y25WdVZtRnNhV1JoZEdsdmJpaGpiMjF3YjI1bGJuUXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRkoxYmlCMGFISnZkV2RvSUhSb1pTQjJZV3hwWkdGMGFXOXVjeXdnYzNCc2FYUWdkR2hsYlNCMWNDQmhibVFnWTJGc2JGeHVJQ0FnSUM4dklIUm9aU0IyWVd4cFpHRjBiM0lnU1VZZ2RHaGxjbVVnYVhNZ1lTQjJZV3gxWlNCdmNpQnBkQ0JwY3lCeVpYRjFhWEpsWkZ4dUlDQWdJR052YlhCdmJtVnVkQzV6WlhSVGRHRjBaU2g3WEc0Z0lDQWdJQ0JmYVhOV1lXeHBaRG9nYVhOV1lXeHBaQ3hjYmlBZ0lDQWdJRjl6WlhKMlpYSkZjbkp2Y2pvZ2JuVnNiRnh1SUNBZ0lIMHNJSFJvYVhNdWRtRnNhV1JoZEdWR2IzSnRLVHRjYmx4dUlDQjlMRnh1WEc0Z0lDOHZJRU5vWldOcmN5QjJZV3hwWkdGMGFXOXVJRzl1SUdOMWNuSmxiblFnZG1Gc2RXVWdiM0lnWVNCd1lYTnpaV1FnZG1Gc2RXVmNiaUFnY25WdVZtRnNhV1JoZEdsdmJqb2dablZ1WTNScGIyNGdLR052YlhCdmJtVnVkQ3dnZG1Gc2RXVXBJSHRjYmx4dUlDQWdJSFpoY2lCcGMxWmhiR2xrSUQwZ2RISjFaVHRjYmlBZ0lDQjJZV3gxWlNBOUlHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ1BUMDlJRElnUHlCMllXeDFaU0E2SUdOdmJYQnZibVZ1ZEM1emRHRjBaUzVmZG1Gc2RXVTdYRzRnSUNBZ2FXWWdLR052YlhCdmJtVnVkQzVmZG1Gc2FXUmhkR2x2Ym5NdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5RdVgzWmhiR2xrWVhScGIyNXpMbk53YkdsMEtDOWNYQ3dvUHlGYlhudGNYRnRkS2x0OVhGeGRYU2t2WnlrdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlBb2RtRnNhV1JoZEdsdmJpa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ1lYSm5jeUE5SUhaaGJHbGtZWFJwYjI0dWMzQnNhWFFvSnpvbktUdGNiaUFnSUNBZ0lDQWdkbUZ5SUhaaGJHbGtZWFJsVFdWMGFHOWtJRDBnWVhKbmN5NXphR2xtZENncE8xeHVJQ0FnSUNBZ0lDQmhjbWR6SUQwZ1lYSm5jeTV0WVhBb1puVnVZM1JwYjI0Z0tHRnlaeWtnZTF4dUlDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1NsTlBUaTV3WVhKelpTaGhjbWNwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGNtYzdJQzh2SUVsMElHbHpJR0VnYzNSeWFXNW5JR2xtSUdsMElHTmhiaUJ1YjNRZ2NHRnljMlVnYVhSY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCaGNtZHpJRDBnVzNaaGJIVmxYUzVqYjI1allYUW9ZWEpuY3lrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doZG1Gc2FXUmhkR2x2YmxKMWJHVnpXM1poYkdsa1lYUmxUV1YwYUc5a1hTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUm05eWJYTjVJR1J2WlhNZ2JtOTBJR2hoZG1VZ2RHaGxJSFpoYkdsa1lYUnBiMjRnY25Wc1pUb2dKeUFySUhaaGJHbGtZWFJsVFdWMGFHOWtLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9JWFpoYkdsa1lYUnBiMjVTZFd4bGMxdDJZV3hwWkdGMFpVMWxkR2h2WkYwdVlYQndiSGtvZEdocGN5NW5aWFJEZFhKeVpXNTBWbUZzZFdWektDa3NJR0Z5WjNNcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVhOV1lXeHBaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJYQnZibVZ1ZEM1MllXeHBaR0YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBdkx5QjBhR1VnWTI5dGNHOXVaVzUwSUdSbFptbHVaWE1nWVc0Z1pYaHdiR2xqYVhRZ2RtRnNhV1JoZEdVZ1puVnVZM1JwYjI1Y2JpQWdJQ0FnSUdselZtRnNhV1FnUFNCamIyMXdiMjVsYm5RdWRtRnNhV1JoZEdVb0tWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdhWE5XWVd4cFpEdGNiaUFnZlN4Y2JseHVJQ0F2THlCV1lXeHBaR0YwWlNCMGFHVWdabTl5YlNCaWVTQm5iMmx1WnlCMGFISnZkV2RvSUdGc2JDQmphR2xzWkNCcGJuQjFkQ0JqYjIxd2IyNWxiblJ6WEc0Z0lDOHZJR0Z1WkNCamFHVmpheUIwYUdWcGNpQnpkR0YwWlZ4dUlDQjJZV3hwWkdGMFpVWnZjbTA2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCMllYSWdZV3hzU1hOV1lXeHBaQ0E5SUhSeWRXVTdYRzRnSUNBZ2RtRnlJR2x1Y0hWMGN5QTlJSFJvYVhNdWFXNXdkWFJ6TzF4dUlDQWdJSFpoY2lCcGJuQjFkRXRsZVhNZ1BTQlBZbXBsWTNRdWEyVjVjeWhwYm5CMWRITXBPMXh1WEc0Z0lDQWdMeThnVjJVZ2JtVmxaQ0JoSUdOaGJHeGlZV05ySUdGeklIZGxJR0Z5WlNCMllXeHBaR0YwYVc1bklHRnNiQ0JwYm5CMWRITWdZV2RoYVc0dUlGUm9hWE1nZDJsc2JGeHVJQ0FnSUM4dklISjFiaUIzYUdWdUlIUm9aU0JzWVhOMElHTnZiWEJ2Ym1WdWRDQm9ZWE1nYzJWMElHbDBjeUJ6ZEdGMFpWeHVJQ0FnSUhaaGNpQnZibFpoYkdsa1lYUnBiMjVEYjIxd2JHVjBaU0E5SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNBZ0lHbHVjSFYwUzJWNWN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaHVZVzFsS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doYVc1d2RYUnpXMjVoYldWZExuTjBZWFJsTGw5cGMxWmhiR2xrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZV3hzU1hOV1lXeHBaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG5ObGRGTjBZWFJsS0h0Y2JpQWdJQ0FnSUNBZ2FYTldZV3hwWkRvZ1lXeHNTWE5XWVd4cFpGeHVJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJR2xtSUNoaGJHeEpjMVpoYkdsa0tTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNISnZjSE11YjI1V1lXeHBaQ2dwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdjbTl3Y3k1dmJrbHVkbUZzYVdRb0tUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnVkdWc2JDQjBhR1VnWm05eWJTQjBhR0YwSUdsMElHTmhiaUJ6ZEdGeWRDQjBieUIwY21sbloyVnlJR05vWVc1blpTQmxkbVZ1ZEhOY2JpQWdJQ0FnSUhSb2FYTXVjMlYwVTNSaGRHVW9lMXh1SUNBZ0lDQWdJQ0JqWVc1RGFHRnVaMlU2SUhSeWRXVmNiaUFnSUNBZ0lIMHBPMXh1WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wTzF4dVhHNGdJQ0FnTHk4Z1VuVnVJSFpoYkdsa1lYUnBiMjRnWVdkaGFXNGdhVzRnWTJGelpTQmhabVpsWTNSbFpDQmllU0J2ZEdobGNpQnBibkIxZEhNdUlGUm9aVnh1SUNBZ0lDOHZJR3hoYzNRZ1kyOXRjRzl1Wlc1MElIWmhiR2xrWVhSbFpDQjNhV3hzSUhKMWJpQjBhR1VnYjI1V1lXeHBaR0YwYVc5dVEyOXRjR3hsZEdVZ1kyRnNiR0poWTJ0Y2JpQWdJQ0JwYm5CMWRFdGxlWE11Wm05eVJXRmphQ2htZFc1amRHbHZiaUFvYm1GdFpTd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCcGJuQjFkSE5iYm1GdFpWMDdYRzRnSUNBZ0lDQjJZWElnYVhOV1lXeHBaQ0E5SUhSb2FYTXVjblZ1Vm1Gc2FXUmhkR2x2YmloamIyMXdiMjVsYm5RcE8xeHVJQ0FnSUNBZ1kyOXRjRzl1Wlc1MExuTmxkRk4wWVhSbEtIdGNiaUFnSUNBZ0lDQWdYMmx6Vm1Gc2FXUTZJR2x6Vm1Gc2FXUXNYRzRnSUNBZ0lDQWdJRjl6WlhKMlpYSkZjbkp2Y2pvZ2JuVnNiRnh1SUNBZ0lDQWdmU3dnYVc1a1pYZ2dQVDA5SUdsdWNIVjBTMlY1Y3k1c1pXNW5kR2dnTFNBeElEOGdiMjVXWVd4cFpHRjBhVzl1UTI5dGNHeGxkR1VnT2lCdWRXeHNLVHRjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dVhHNGdJQ0FnTHk4Z1NXWWdkR2hsY21VZ1lYSmxJRzV2SUdsdWNIVjBjeXdnYzJWMElITjBZWFJsSUhkb1pYSmxJR1p2Y20wZ2FYTWdjbVZoWkhrZ2RHOGdkSEpwWjJkbGNseHVJQ0FnSUM4dklHTm9ZVzVuWlNCbGRtVnVkQzRnVG1WM0lHbHVjSFYwY3lCdGFXZG9kQ0JpWlNCaFpHUmxaQ0JzWVhSbGNseHVJQ0FnSUdsbUlDZ2hhVzV3ZFhSTFpYbHpMbXhsYm1kMGFDQW1KaUIwYUdsekxtbHpUVzkxYm5SbFpDZ3BLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTmxkRk4wWVhSbEtIdGNiaUFnSUNBZ0lDQWdZMkZ1UTJoaGJtZGxPaUIwY25WbFhHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeThnVFdWMGFHOWtJSEIxZENCdmJpQmxZV05vSUdsdWNIVjBJR052YlhCdmJtVnVkQ0IwYnlCeVpXZHBjM1JsY2x4dUlDQXZMeUJwZEhObGJHWWdkRzhnZEdobElHWnZjbTFjYmlBZ1lYUjBZV05vVkc5R2IzSnRPaUJtZFc1amRHbHZiaUFvWTI5dGNHOXVaVzUwS1NCN1hHNGdJQ0FnZEdocGN5NXBibkIxZEhOYlkyOXRjRzl1Wlc1MExuQnliM0J6TG01aGJXVmRJRDBnWTI5dGNHOXVaVzUwTzF4dUlDQWdJSFJvYVhNdWJXOWtaV3hiWTI5dGNHOXVaVzUwTG5CeWIzQnpMbTVoYldWZElEMGdZMjl0Y0c5dVpXNTBMbk4wWVhSbExsOTJZV3gxWlR0Y2JpQWdJQ0IwYUdsekxuWmhiR2xrWVhSbEtHTnZiWEJ2Ym1WdWRDazdYRzRnSUgwc1hHNWNiaUFnTHk4Z1RXVjBhRzlrSUhCMWRDQnZiaUJsWVdOb0lHbHVjSFYwSUdOdmJYQnZibVZ1ZENCMGJ5QjFibkpsWjJsemRHVnlYRzRnSUM4dklHbDBjMlZzWmlCbWNtOXRJSFJvWlNCbWIzSnRYRzRnSUdSbGRHRmphRVp5YjIxR2IzSnRPaUJtZFc1amRHbHZiaUFvWTI5dGNHOXVaVzUwS1NCN1hHNGdJQ0FnWkdWc1pYUmxJSFJvYVhNdWFXNXdkWFJ6VzJOdmJYQnZibVZ1ZEM1d2NtOXdjeTV1WVcxbFhUdGNiaUFnSUNCa1pXeGxkR1VnZEdocGN5NXRiMlJsYkZ0amIyMXdiMjVsYm5RdWNISnZjSE11Ym1GdFpWMDdYRzRnSUgwc1hHNGdJSEpsYm1SbGNqb2dablZ1WTNScGIyNGdLQ2tnZTF4dVhHNGdJQ0FnY21WMGRYSnVJRkpsWVdOMExrUlBUUzVtYjNKdEtIdGNiaUFnSUNBZ0lDQWdiMjVUZFdKdGFYUTZJSFJvYVhNdWMzVmliV2wwTEZ4dUlDQWdJQ0FnSUNCamJHRnpjMDVoYldVNklIUm9hWE11Y0hKdmNITXVZMnhoYzNOT1lXMWxYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdkR2hwY3k1d2NtOXdjeTVqYUdsc1pISmxibHh1SUNBZ0lDazdYRzVjYmlBZ2ZWeHVmU2s3WEc1Y2JtbG1JQ2doWjJ4dlltRnNMbVY0Y0c5eWRITWdKaVlnSVdkc2IySmhiQzV0YjJSMWJHVWdKaVlnS0NGbmJHOWlZV3d1WkdWbWFXNWxJSHg4SUNGbmJHOWlZV3d1WkdWbWFXNWxMbUZ0WkNrcElIdGNiaUFnWjJ4dlltRnNMa1p2Y20xemVTQTlJRVp2Y20xemVUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCR2IzSnRjM2s3WEc0aVhYMD0iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gJ3ZhbHVlJyBpbiB0aGlzLnByb3BzID8gdGhpcy5wcm9wcy52YWx1ZSA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICBfdmFsdWU6IHZhbHVlLFxuICAgICAgX2lzVmFsaWQ6IHRydWUsXG4gICAgICBfaXNQcmlzdGluZTogdHJ1ZSxcbiAgICAgIF9wcmlzdGluZVZhbHVlOiB2YWx1ZVxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGNvbmZpZ3VyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbnModGhpcy5wcm9wcy52YWxpZGF0aW9ucywgdGhpcy5wcm9wcy5yZXF1aXJlZCk7XG4gICAgICB0aGlzLnByb3BzLl9hdHRhY2hUb0Zvcm0odGhpcyk7XG4gICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBJbnB1dCByZXF1aXJlcyBhIG5hbWUgcHJvcGVydHkgd2hlbiB1c2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnByb3BzLl9hdHRhY2hUb0Zvcm0pIHtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW91bnRlZCgpKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5fYXR0YWNoVG9Gb3JtKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtIE1peGluIHJlcXVpcmVzIGNvbXBvbmVudCB0byBiZSBuZXN0ZWQgaW4gYSBGb3JtJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlndXJlKCk7XG4gICAgICB9LmJpbmQodGhpcyksIDApO1xuICAgIH1cbiAgICBjb25maWd1cmUoKTtcblxuICB9LFxuXG4gIC8vIFdlIGhhdmUgdG8gbWFrZSB0aGUgdmFsaWRhdGUgbWV0aG9kIGlzIGtlcHQgd2hlbiBuZXcgcHJvcHMgYXJlIGFkZGVkXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uIChuZXh0UHJvcHMpIHtcbiAgICBuZXh0UHJvcHMuX2F0dGFjaFRvRm9ybSA9IHRoaXMucHJvcHMuX2F0dGFjaFRvRm9ybTtcbiAgICBuZXh0UHJvcHMuX2RldGFjaEZyb21Gb3JtID0gdGhpcy5wcm9wcy5fZGV0YWNoRnJvbUZvcm07XG4gICAgbmV4dFByb3BzLl92YWxpZGF0ZSA9IHRoaXMucHJvcHMuX3ZhbGlkYXRlO1xuICAgIHRoaXMuc2V0VmFsaWRhdGlvbnMobmV4dFByb3BzLnZhbGlkYXRpb25zLCBuZXh0UHJvcHMucmVxdWlyZWQpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24gKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG5cbiAgICB2YXIgaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSAmJiAoXG4gICAgICAgICAgdGhpcy5zdGF0ZS5fdmFsdWUgPT09IHByZXZQcm9wcy52YWx1ZSB8fFxuXG4gICAgICAgICAgLy8gU2luY2UgdW5kZWZpbmVkIGlzIGNvbnZlcnRlZCB0byBlbXB0eSBzdHJpbmcgd2UgaGF2ZSB0b1xuICAgICAgICAgIC8vIGNoZWNrIHRoYXQgc3BlY2lmaWNhbGx5XG4gICAgICAgICAgKHRoaXMuc3RhdGUuX3ZhbHVlID09PSAnJyAmJiBwcmV2UHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIH0uYmluZCh0aGlzKTtcblxuXG4gICAgLy8gSWYgdmFsaWRhdGlvbnMgaGFzIGNoYW5nZWQgb3Igc29tZXRoaW5nIG91dHNpZGUgY2hhbmdlcyBcbiAgICAvLyB0aGUgdmFsdWUsIHNldCB0aGUgdmFsdWUgYWdhaW4gcnVubmluZyBhIHZhbGlkYXRpb25cblxuICAgIGlmIChwcmV2UHJvcHMudmFsaWRhdGlvbnMgIT09IHRoaXMucHJvcHMudmFsaWRhdGlvbnMgfHwgaXNWYWx1ZUNoYW5nZWQoKSkge1xuICAgICAgdmFyIHZhbHVlID0gJ3ZhbHVlJyBpbiB0aGlzLnByb3BzID8gdGhpcy5wcm9wcy52YWx1ZSA6ICcnO1xuICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIERldGFjaCBpdCB3aGVuIGNvbXBvbmVudCB1bm1vdW50c1xuICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucHJvcHMuX2RldGFjaEZyb21Gb3JtKHRoaXMpO1xuICB9LFxuXG4gIHNldFZhbGlkYXRpb25zOiBmdW5jdGlvbiAodmFsaWRhdGlvbnMsIHJlcXVpcmVkKSB7XG5cbiAgICAvLyBBZGQgdmFsaWRhdGlvbnMgdG8gdGhlIHN0b3JlIGl0c2VsZiBhcyB0aGUgcHJvcHMgb2JqZWN0IGNhbiBub3QgYmUgbW9kaWZpZWRcbiAgICB0aGlzLl92YWxpZGF0aW9ucyA9IHZhbGlkYXRpb25zIHx8ICcnO1xuXG4gICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICB0aGlzLl92YWxpZGF0aW9ucyA9IHZhbGlkYXRpb25zID8gdmFsaWRhdGlvbnMgKyAnLCcgOiAnJztcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25zICs9ICdpc1ZhbHVlJztcbiAgICB9XG5cbiAgfSxcblxuICAvLyBXZSB2YWxpZGF0ZSBhZnRlciB0aGUgdmFsdWUgaGFzIGJlZW4gc2V0XG4gIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIF92YWx1ZTogdmFsdWUsXG4gICAgICBfaXNQcmlzdGluZTogZmFsc2VcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnByb3BzLl92YWxpZGF0ZSh0aGlzKTtcbiAgICB9LmJpbmQodGhpcykpO1xuICB9LFxuICByZXNldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBfdmFsdWU6IHRoaXMuc3RhdGUuX3ByaXN0aW5lVmFsdWUsXG4gICAgICBfaXNQcmlzdGluZTogdHJ1ZVxuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMucHJvcHMuX3ZhbGlkYXRlKHRoaXMpO1xuICAgIH0pO1xuICB9LFxuICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLl92YWx1ZTtcbiAgfSxcbiAgaGFzVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5fdmFsdWUgIT09ICcnO1xuICB9LFxuICBnZXRFcnJvck1lc3NhZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgfHwgdGhpcy5zaG93UmVxdWlyZWQoKSA/IG51bGwgOiB0aGlzLnN0YXRlLl9zZXJ2ZXJFcnJvciB8fCB0aGlzLnByb3BzLnZhbGlkYXRpb25FcnJvcjtcbiAgfSxcbiAgaXNGb3JtRGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5faXNGb3JtRGlzYWJsZWQoKTtcbiAgfSxcbiAgaXNWYWxpZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLl9pc1ZhbGlkO1xuICB9LFxuICBpc1ByaXN0aW5lOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuX2lzUHJpc3RpbmU7XG4gIH0sXG4gIGlzUmVxdWlyZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnByb3BzLnJlcXVpcmVkO1xuICB9LFxuICBzaG93UmVxdWlyZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkKCkgJiYgdGhpcy5zdGF0ZS5fdmFsdWUgPT09ICcnO1xuICB9LFxuICBzaG93RXJyb3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gIXRoaXMuc2hvd1JlcXVpcmVkKCkgJiYgIXRoaXMuc3RhdGUuX2lzVmFsaWQ7XG4gIH0sXG4gIGlzVmFsaWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuX2lzVmFsaWRWYWx1ZS5jYWxsKG51bGwsIHRoaXMsIHZhbHVlKTtcbiAgfVxufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pTDFWelpYSnpMMk5vY21semRHbGhibUZzWm05dWFTOUViMk4xYldWdWRITXZaR1YyTDJadmNtMXplUzF5WldGamRDOXpjbU12VFdsNGFXNHVhbk1pTENKemIzVnlZMlZ6SWpwYklpOVZjMlZ5Y3k5amFISnBjM1JwWVc1aGJHWnZibWt2Ukc5amRXMWxiblJ6TDJSbGRpOW1iM0p0YzNrdGNtVmhZM1F2YzNKakwwMXBlR2x1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTFCUVUwc1EwRkJReXhQUVVGUExFZEJRVWM3UlVGRFppeGxRVUZsTEVWQlFVVXNXVUZCV1R0SlFVTXpRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eFBRVUZQTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRNVVFzVDBGQlR6dE5RVU5NTEUxQlFVMHNSVUZCUlN4TFFVRkxPMDFCUTJJc1VVRkJVU3hGUVVGRkxFbEJRVWs3VFVGRFpDeFhRVUZYTEVWQlFVVXNTVUZCU1R0TlFVTnFRaXhqUVVGakxFVkJRVVVzUzBGQlN6dExRVU4wUWl4RFFVRkRPMGRCUTBnN1FVRkRTQ3hGUVVGRkxHdENRVUZyUWl4RlFVRkZMRmxCUVZrN08wbEJSVGxDTEVsQlFVa3NVMEZCVXl4SFFVRkhMRmxCUVZrN1RVRkRNVUlzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wMUJRMnBGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzSkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdPMGxCUldJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZPMDFCUTNCQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNLME5CUVN0RExFTkJRVU1zUTBGQlF6dEJRVU4yUlN4TFFVRkxPenRKUVVWRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMR0ZCUVdFc1JVRkJSVHROUVVNM1FpeFBRVUZQTEZWQlFWVXNRMEZCUXl4WlFVRlpPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1QwRkJUenRSUVVNNVFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhoUVVGaExFVkJRVVU3VlVGRE4wSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh6UkVGQmMwUXNRMEZCUXl4RFFVRkRPMU5CUTNwRk8xRkJRMFFzVTBGQlV5eEZRVUZGTEVOQlFVTTdUMEZEWWl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTnNRanRCUVVOTUxFbEJRVWtzVTBGQlV5eEZRVUZGTEVOQlFVTTdPMEZCUldoQ0xFZEJRVWM3UVVGRFNEczdSVUZGUlN4NVFrRkJlVUlzUlVGQlJTeFZRVUZWTEZOQlFWTXNSVUZCUlR0SlFVTTVReXhUUVVGVExFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1lVRkJZU3hEUVVGRE8wbEJRMjVFTEZOQlFWTXNRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTTdTVUZEZGtRc1UwRkJVeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJRenRKUVVNelF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRk5CUVZNc1EwRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTI1RkxFZEJRVWM3TzBGQlJVZ3NSVUZCUlN4clFrRkJhMElzUlVGQlJTeFZRVUZWTEZOQlFWTXNSVUZCUlN4VFFVRlRMRVZCUVVVN08wRkJSWFJFTEVsQlFVa3NTVUZCU1N4alFVRmpMRWRCUVVjc1dVRkJXVHM3VFVGRkwwSTdVVUZEUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUzBGQlN5eFRRVUZUTEVOQlFVTXNTMEZCU3p0QlFVTTFReXhWUVVGVkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4TFFVRkxMRk5CUVZNc1EwRkJReXhMUVVGTE8wRkJReTlETzBGQlEwRTdPMWRCUlZjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NSVUZCUlN4SlFVRkpMRk5CUVZNc1EwRkJReXhMUVVGTExFdEJRVXNzVTBGQlV5eERRVUZETzFOQlF6VkVPMEZCUTFRc1VVRkJVVHM3UVVGRlVpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMnBDTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRKUVVWSkxFbEJRVWtzVTBGQlV5eERRVUZETEZkQlFWY3NTMEZCU3l4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzU1VGQlNTeGpRVUZqTEVWQlFVVXNSVUZCUlR0TlFVTjRSU3hKUVVGSkxFdEJRVXNzUjBGQlJ5eFBRVUZQTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN1RVRkRNVVFzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRMUVVOMFFqdEJRVU5NTEVkQlFVYzdRVUZEU0RzN1JVRkZSU3h2UWtGQmIwSXNSVUZCUlN4WlFVRlpPMGxCUTJoRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRM0pETEVkQlFVYzdPMEZCUlVnc1JVRkJSU3hqUVVGakxFVkJRVVVzVlVGQlZTeFhRVUZYTEVWQlFVVXNVVUZCVVN4RlFVRkZPMEZCUTI1RU96dEJRVVZCTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhYUVVGWExFbEJRVWtzUlVGQlJTeERRVUZET3p0SlFVVjBReXhKUVVGSkxGRkJRVkVzUlVGQlJUdE5RVU5hTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1YwRkJWeXhIUVVGSExGZEJRVmNzUjBGQlJ5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMDFCUTNwRUxFbEJRVWtzUTBGQlF5eFpRVUZaTEVsQlFVa3NVMEZCVXl4RFFVRkRPMEZCUTNKRExFdEJRVXM3TzBGQlJVd3NSMEZCUnp0QlFVTklPenRGUVVWRkxGRkJRVkVzUlVGQlJTeFZRVUZWTEV0QlFVc3NSVUZCUlR0SlFVTjZRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzAxQlExb3NUVUZCVFN4RlFVRkZMRXRCUVVzN1RVRkRZaXhYUVVGWExFVkJRVVVzUzBGQlN6dExRVU51UWl4RlFVRkZMRmxCUVZrN1RVRkRZaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVNMVFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8wZEJRMlk3UlVGRFJDeFZRVUZWTEVWQlFVVXNXVUZCV1R0SlFVTjBRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzAxQlExb3NUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWTBGQll6dE5RVU5xUXl4WFFVRlhMRVZCUVVVc1NVRkJTVHRMUVVOc1FpeEZRVUZGTEZsQlFWazdUVUZEWWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTTFRaXhEUVVGRExFTkJRVU03UjBGRFNqdEZRVU5FTEZGQlFWRXNSVUZCUlN4WlFVRlpPMGxCUTNCQ0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN1IwRkRNVUk3UlVGRFJDeFJRVUZSTEVWQlFVVXNXVUZCV1R0SlFVTndRaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4TFFVRkxMRVZCUVVVc1EwRkJRenRIUVVOcVF6dEZRVU5FTEdWQlFXVXNSVUZCUlN4WlFVRlpPMGxCUXpOQ0xFOUJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNN1IwRkROMGM3UlVGRFJDeGpRVUZqTEVWQlFVVXNXVUZCV1R0SlFVTXhRaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RlFVRkZMRU5CUVVNN1IwRkRja003UlVGRFJDeFBRVUZQTEVWQlFVVXNXVUZCV1R0SlFVTnVRaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGRCUXpWQ08wVkJRMFFzVlVGQlZTeEZRVUZGTEZsQlFWazdTVUZEZEVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXp0SFFVTXZRanRGUVVORUxGVkJRVlVzUlVGQlJTeFpRVUZaTzBsQlEzUkNMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGRCUXpsQ08wVkJRMFFzV1VGQldTeEZRVUZGTEZsQlFWazdTVUZEZUVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFdEJRVXNzUlVGQlJTeERRVUZETzBkQlEzUkVPMFZCUTBRc1UwRkJVeXhGUVVGRkxGbEJRVms3U1VGRGNrSXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRE8wZEJRM0pFTzBWQlEwUXNXVUZCV1N4RlFVRkZMRlZCUVZVc1MwRkJTeXhGUVVGRk8wbEJRemRDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UjBGRGVrUTdRMEZEUml4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYlc5a2RXeGxMbVY0Y0c5eWRITWdQU0I3WEc0Z0lHZGxkRWx1YVhScFlXeFRkR0YwWlRvZ1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lIWmhjaUIyWVd4MVpTQTlJQ2QyWVd4MVpTY2dhVzRnZEdocGN5NXdjbTl3Y3lBL0lIUm9hWE11Y0hKdmNITXVkbUZzZFdVZ09pQW5KenRjYmlBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ1gzWmhiSFZsT2lCMllXeDFaU3hjYmlBZ0lDQWdJRjlwYzFaaGJHbGtPaUIwY25WbExGeHVJQ0FnSUNBZ1gybHpVSEpwYzNScGJtVTZJSFJ5ZFdVc1hHNGdJQ0FnSUNCZmNISnBjM1JwYm1WV1lXeDFaVG9nZG1Gc2RXVmNiaUFnSUNCOU8xeHVJQ0I5TEZ4dUlDQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUTZJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JseHVJQ0FnSUhaaGNpQmpiMjVtYVdkMWNtVWdQU0JtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbk5sZEZaaGJHbGtZWFJwYjI1ektIUm9hWE11Y0hKdmNITXVkbUZzYVdSaGRHbHZibk1zSUhSb2FYTXVjSEp2Y0hNdWNtVnhkV2x5WldRcE8xeHVJQ0FnSUNBZ2RHaHBjeTV3Y205d2N5NWZZWFIwWVdOb1ZHOUdiM0p0S0hSb2FYTXBPMXh1SUNBZ0lIMHVZbWx1WkNoMGFHbHpLVHRjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTV3Y205d2N5NXVZVzFsS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBadmNtMGdTVzV3ZFhRZ2NtVnhkV2x5WlhNZ1lTQnVZVzFsSUhCeWIzQmxjblI1SUhkb1pXNGdkWE5sWkNjcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1d2NtOXdjeTVmWVhSMFlXTm9WRzlHYjNKdEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MyVjBWR2x0Wlc5MWRDaG1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1cGMwMXZkVzUwWldRb0tTa2djbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVhSb2FYTXVjSEp2Y0hNdVgyRjBkR0ZqYUZSdlJtOXliU2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblJtOXliU0JOYVhocGJpQnlaWEYxYVhKbGN5QmpiMjF3YjI1bGJuUWdkRzhnWW1VZ2JtVnpkR1ZrSUdsdUlHRWdSbTl5YlNjcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR052Ym1acFozVnlaU2dwTzF4dUlDQWdJQ0FnZlM1aWFXNWtLSFJvYVhNcExDQXdLVHRjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVabWxuZFhKbEtDazdYRzVjYmlBZ2ZTeGNibHh1SUNBdkx5QlhaU0JvWVhabElIUnZJRzFoYTJVZ2RHaGxJSFpoYkdsa1lYUmxJRzFsZEdodlpDQnBjeUJyWlhCMElIZG9aVzRnYm1WM0lIQnliM0J6SUdGeVpTQmhaR1JsWkZ4dUlDQmpiMjF3YjI1bGJuUlhhV3hzVW1WalpXbDJaVkJ5YjNCek9pQm1kVzVqZEdsdmJpQW9ibVY0ZEZCeWIzQnpLU0I3WEc0Z0lDQWdibVY0ZEZCeWIzQnpMbDloZEhSaFkyaFViMFp2Y20wZ1BTQjBhR2x6TG5CeWIzQnpMbDloZEhSaFkyaFViMFp2Y20wN1hHNGdJQ0FnYm1WNGRGQnliM0J6TGw5a1pYUmhZMmhHY205dFJtOXliU0E5SUhSb2FYTXVjSEp2Y0hNdVgyUmxkR0ZqYUVaeWIyMUdiM0p0TzF4dUlDQWdJRzVsZUhSUWNtOXdjeTVmZG1Gc2FXUmhkR1VnUFNCMGFHbHpMbkJ5YjNCekxsOTJZV3hwWkdGMFpUdGNiaUFnSUNCMGFHbHpMbk5sZEZaaGJHbGtZWFJwYjI1ektHNWxlSFJRY205d2N5NTJZV3hwWkdGMGFXOXVjeXdnYm1WNGRGQnliM0J6TG5KbGNYVnBjbVZrS1R0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVTZJR1oxYm1OMGFXOXVJQ2h3Y21WMlVISnZjSE1zSUhCeVpYWlRkR0YwWlNrZ2UxeHVYRzRnSUNBZ2RtRnlJR2x6Vm1Gc2RXVkRhR0Z1WjJWa0lEMGdablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJQ0FnWEc0Z0lDQWdJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnliM0J6TG5aaGJIVmxJQ0U5UFNCd2NtVjJVSEp2Y0hNdWRtRnNkV1VnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWMzUmhkR1V1WDNaaGJIVmxJRDA5UFNCd2NtVjJVSEp2Y0hNdWRtRnNkV1VnZkh4Y2JseHVJQ0FnSUNBZ0lDQWdJQzh2SUZOcGJtTmxJSFZ1WkdWbWFXNWxaQ0JwY3lCamIyNTJaWEowWldRZ2RHOGdaVzF3ZEhrZ2MzUnlhVzVuSUhkbElHaGhkbVVnZEc5Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJqYUdWamF5QjBhR0YwSUhOd1pXTnBabWxqWVd4c2VWeHVJQ0FnSUNBZ0lDQWdJQ2gwYUdsekxuTjBZWFJsTGw5MllXeDFaU0E5UFQwZ0p5Y2dKaVlnY0hKbGRsQnliM0J6TG5aaGJIVmxJRDA5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnSUNBZ0lDbGNiaUFnSUNBZ0lDazdYRzVjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWs3WEc1Y2JseHVJQ0FnSUM4dklFbG1JSFpoYkdsa1lYUnBiMjV6SUdoaGN5QmphR0Z1WjJWa0lHOXlJSE52YldWMGFHbHVaeUJ2ZFhSemFXUmxJR05vWVc1blpYTWdYRzRnSUNBZ0x5OGdkR2hsSUhaaGJIVmxMQ0J6WlhRZ2RHaGxJSFpoYkhWbElHRm5ZV2x1SUhKMWJtNXBibWNnWVNCMllXeHBaR0YwYVc5dVhHNWNiaUFnSUNCcFppQW9jSEpsZGxCeWIzQnpMblpoYkdsa1lYUnBiMjV6SUNFOVBTQjBhR2x6TG5CeWIzQnpMblpoYkdsa1lYUnBiMjV6SUh4OElHbHpWbUZzZFdWRGFHRnVaMlZrS0NrcElIdGNiaUFnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJQ2QyWVd4MVpTY2dhVzRnZEdocGN5NXdjbTl3Y3lBL0lIUm9hWE11Y0hKdmNITXVkbUZzZFdVZ09pQW5KenRjYmlBZ0lDQWdJSFJvYVhNdWMyVjBWbUZzZFdVb2RtRnNkV1VwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdkx5QkVaWFJoWTJnZ2FYUWdkMmhsYmlCamIyMXdiMjVsYm5RZ2RXNXRiM1Z1ZEhOY2JpQWdZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblE2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCMGFHbHpMbkJ5YjNCekxsOWtaWFJoWTJoR2NtOXRSbTl5YlNoMGFHbHpLVHRjYmlBZ2ZTeGNibHh1SUNCelpYUldZV3hwWkdGMGFXOXVjem9nWm5WdVkzUnBiMjRnS0haaGJHbGtZWFJwYjI1ekxDQnlaWEYxYVhKbFpDa2dlMXh1WEc0Z0lDQWdMeThnUVdSa0lIWmhiR2xrWVhScGIyNXpJSFJ2SUhSb1pTQnpkRzl5WlNCcGRITmxiR1lnWVhNZ2RHaGxJSEJ5YjNCeklHOWlhbVZqZENCallXNGdibTkwSUdKbElHMXZaR2xtYVdWa1hHNGdJQ0FnZEdocGN5NWZkbUZzYVdSaGRHbHZibk1nUFNCMllXeHBaR0YwYVc5dWN5QjhmQ0FuSnp0Y2JseHVJQ0FnSUdsbUlDaHlaWEYxYVhKbFpDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmRtRnNhV1JoZEdsdmJuTWdQU0IyWVd4cFpHRjBhVzl1Y3lBL0lIWmhiR2xrWVhScGIyNXpJQ3NnSnl3bklEb2dKeWM3WEc0Z0lDQWdJQ0IwYUdsekxsOTJZV3hwWkdGMGFXOXVjeUFyUFNBbmFYTldZV3gxWlNjN1hHNGdJQ0FnZlZ4dVhHNGdJSDBzWEc1Y2JpQWdMeThnVjJVZ2RtRnNhV1JoZEdVZ1lXWjBaWElnZEdobElIWmhiSFZsSUdoaGN5QmlaV1Z1SUhObGRGeHVJQ0J6WlhSV1lXeDFaVG9nWm5WdVkzUnBiMjRnS0haaGJIVmxLU0I3WEc0Z0lDQWdkR2hwY3k1elpYUlRkR0YwWlNoN1hHNGdJQ0FnSUNCZmRtRnNkV1U2SUhaaGJIVmxMRnh1SUNBZ0lDQWdYMmx6VUhKcGMzUnBibVU2SUdaaGJITmxYRzRnSUNBZ2ZTd2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdjbTl3Y3k1ZmRtRnNhV1JoZEdVb2RHaHBjeWs3WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdmU3hjYmlBZ2NtVnpaWFJXWVd4MVpUb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJSFJvYVhNdWMyVjBVM1JoZEdVb2UxeHVJQ0FnSUNBZ1gzWmhiSFZsT2lCMGFHbHpMbk4wWVhSbExsOXdjbWx6ZEdsdVpWWmhiSFZsTEZ4dUlDQWdJQ0FnWDJselVISnBjM1JwYm1VNklIUnlkV1ZjYmlBZ0lDQjlMQ0JtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxsOTJZV3hwWkdGMFpTaDBhR2x6S1R0Y2JpQWdJQ0I5S1R0Y2JpQWdmU3hjYmlBZ1oyVjBWbUZzZFdVNklHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV6ZEdGMFpTNWZkbUZzZFdVN1hHNGdJSDBzWEc0Z0lHaGhjMVpoYkhWbE9pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YzNSaGRHVXVYM1poYkhWbElDRTlQU0FuSnp0Y2JpQWdmU3hjYmlBZ1oyVjBSWEp5YjNKTlpYTnpZV2RsT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhWE5XWVd4cFpDZ3BJSHg4SUhSb2FYTXVjMmh2ZDFKbGNYVnBjbVZrS0NrZ1B5QnVkV3hzSURvZ2RHaHBjeTV6ZEdGMFpTNWZjMlZ5ZG1WeVJYSnliM0lnZkh3Z2RHaHBjeTV3Y205d2N5NTJZV3hwWkdGMGFXOXVSWEp5YjNJN1hHNGdJSDBzWEc0Z0lHbHpSbTl5YlVScGMyRmliR1ZrT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjSEp2Y0hNdVgybHpSbTl5YlVScGMyRmliR1ZrS0NrN1hHNGdJSDBzWEc0Z0lHbHpWbUZzYVdRNklHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV6ZEdGMFpTNWZhWE5XWVd4cFpEdGNiaUFnZlN4Y2JpQWdhWE5RY21semRHbHVaVG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuTjBZWFJsTGw5cGMxQnlhWE4wYVc1bE8xeHVJQ0I5TEZ4dUlDQnBjMUpsY1hWcGNtVmtPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ0VoZEdocGN5NXdjbTl3Y3k1eVpYRjFhWEpsWkR0Y2JpQWdmU3hjYmlBZ2MyaHZkMUpsY1hWcGNtVmtPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFYTlNaWEYxYVhKbFpDZ3BJQ1ltSUhSb2FYTXVjM1JoZEdVdVgzWmhiSFZsSUQwOVBTQW5KenRjYmlBZ2ZTeGNiaUFnYzJodmQwVnljbTl5T2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUNGMGFHbHpMbk5vYjNkU1pYRjFhWEpsWkNncElDWW1JQ0YwYUdsekxuTjBZWFJsTGw5cGMxWmhiR2xrTzF4dUlDQjlMRnh1SUNCcGMxWmhiR2xrVm1Gc2RXVTZJR1oxYm1OMGFXOXVJQ2gyWVd4MVpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJ5YjNCekxsOXBjMVpoYkdsa1ZtRnNkV1V1WTJGc2JDaHVkV3hzTENCMGFHbHpMQ0IyWVd4MVpTazdYRzRnSUgxY2JuMDdYRzRpWFgwPSIsInZhciBjc3JmVG9rZW5TZWxlY3RvciA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJyA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKSA6IG51bGw7XG5cbnZhciB0b1VSTEVuY29kZWQgPSBmdW5jdGlvbiAoZWxlbWVudCwga2V5LCBsaXN0KSB7XG4gIHZhciBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgaWYgKHR5cGVvZiAoZWxlbWVudCkgPT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKHZhciBpZHggaW4gZWxlbWVudClcbiAgICAgIHRvVVJMRW5jb2RlZChlbGVtZW50W2lkeF0sIGtleSA/IGtleSArICdbJyArIGlkeCArICddJyA6IGlkeCwgbGlzdCk7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC5wdXNoKGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChlbGVtZW50KSk7XG4gIH1cbiAgcmV0dXJuIGxpc3Quam9pbignJicpO1xufTtcblxudmFyIHJlcXVlc3QgPSBmdW5jdGlvbiAobWV0aG9kLCB1cmwsIGRhdGEsIGNvbnRlbnRUeXBlLCBoZWFkZXJzKSB7XG5cbiAgdmFyIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgPT09ICd1cmxlbmNvZGVkJyA/ICdhcHBsaWNhdGlvbi8nICsgY29udGVudFR5cGUucmVwbGFjZSgndXJsZW5jb2RlZCcsICd4LXd3dy1mb3JtLXVybGVuY29kZWQnKSA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgZGF0YSA9IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IHRvVVJMRW5jb2RlZChkYXRhKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cbiAgICAgIGlmICghIWNzcmZUb2tlblNlbGVjdG9yICYmICEhY3NyZlRva2VuU2VsZWN0b3IuY29udGVudCkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignWC1DU1JGLVRva2VuJywgY3NyZlRva2VuU2VsZWN0b3IuY29udGVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBwYXNzZWQgaGVhZGVyc1xuICAgICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgIH0pO1xuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB4aHIucmVzcG9uc2VUZXh0ID8gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkge1xuICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLnNlbmQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXJyYXlzRGlmZmVyOiBmdW5jdGlvbiAoYXJyYXlBLCBhcnJheUIpIHtcbiAgICB2YXIgaXNEaWZmZXJlbnQgPSBmYWxzZTtcbiAgICBpZiAoYXJyYXlBLmxlbmd0aCAhPT0gYXJyYXlCLmxlbmd0aCkge1xuICAgICAgaXNEaWZmZXJlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnJheUEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGl0ZW0gIT09IGFycmF5QltpbmRleF0pIHtcbiAgICAgICAgICBpc0RpZmZlcmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXNEaWZmZXJlbnQ7XG4gIH0sXG4gIGFqYXg6IHtcbiAgICBwb3N0OiByZXF1ZXN0LmJpbmQobnVsbCwgJ1BPU1QnKSxcbiAgICBwdXQ6IHJlcXVlc3QuYmluZChudWxsLCAnUFVUJylcbiAgfVxufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pTDFWelpYSnpMMk5vY21semRHbGhibUZzWm05dWFTOUViMk4xYldWdWRITXZaR1YyTDJadmNtMXplUzF5WldGamRDOXpjbU12ZFhScGJITXVhbk1pTENKemIzVnlZMlZ6SWpwYklpOVZjMlZ5Y3k5amFISnBjM1JwWVc1aGJHWnZibWt2Ukc5amRXMWxiblJ6TDJSbGRpOW1iM0p0YzNrdGNtVmhZM1F2YzNKakwzVjBhV3h6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRWxCUVVrc2FVSkJRV2xDTEVkQlFVY3NUMEZCVHl4UlFVRlJMRWxCUVVrc1YwRkJWeXhIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNlVUpCUVhsQ0xFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdPMEZCUld4SUxFbEJRVWtzV1VGQldTeEhRVUZITEZWQlFWVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hKUVVGSkxFVkJRVVU3UlVGREwwTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF6dEZRVU4wUWl4SlFVRkpMRkZCUVZFc1QwRkJUeXhEUVVGRExFbEJRVWtzVVVGQlVTeEZRVUZGTzBsQlEyaERMRXRCUVVzc1NVRkJTU3hIUVVGSExFbEJRVWtzVDBGQlR6dE5RVU55UWl4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wZEJRM1pGTEUxQlFVMDdTVUZEVEN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0SFFVTndSRHRGUVVORUxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVONFFpeERRVUZETEVOQlFVTTdPMEZCUlVZc1NVRkJTU3hQUVVGUExFZEJRVWNzVlVGQlZTeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hYUVVGWExFVkJRVVVzVDBGQlR5eEZRVUZGT3p0RlFVVXZSQ3hKUVVGSkxGZEJRVmNzUjBGQlJ5eFhRVUZYTEV0QlFVc3NXVUZCV1N4SFFVRkhMR05CUVdNc1IwRkJSeXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NSVUZCUlN4MVFrRkJkVUlzUTBGQlF5eEhRVUZITEd0Q1FVRnJRaXhEUVVGRE8wRkJRM0JLTEVWQlFVVXNTVUZCU1N4SFFVRkhMRmRCUVZjc1MwRkJTeXhyUWtGQmEwSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UlVGRmRFWXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGVkxFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVTdTVUZETlVNc1NVRkJTVHROUVVOR0xFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NZMEZCWXl4RlFVRkZMRU5CUVVNN1RVRkRMMElzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzAxQlF6VkNMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRlJMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0QlFVTjZSQ3hOUVVGTkxFZEJRVWNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhqUVVGakxFVkJRVVVzVjBGQlZ5eERRVUZETEVOQlFVTTdPMDFCUld4RUxFbEJRVWtzUTBGQlF5eERRVUZETEdsQ1FVRnBRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRGRFUXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeERRVUZETEdOQlFXTXNSVUZCUlN4cFFrRkJhVUlzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTjRSU3hQUVVGUE8wRkJRMUE3TzAxQlJVMHNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4TlFVRk5MRVZCUVVVN1VVRkROME1zUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOMFJDeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1RVRkZTQ3hIUVVGSExFTkJRVU1zYTBKQlFXdENMRWRCUVVjc1dVRkJXVHRCUVVNelF5eFJRVUZSTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhEUVVGRExFVkJRVVU3TzFWQlJYaENMRWxCUVVrN1dVRkRSaXhKUVVGSkxGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOMFJTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RlFVRkZPMk5CUTNwRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0aFFVTnVRaXhOUVVGTk8yTkJRMHdzVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUTJ4Q08xZEJRMFlzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0WlFVTldMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4wUWl4WFFVRlhPenRUUVVWR08wOUJRMFlzUTBGQlF6dE5RVU5HTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGFFSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHROUVVOV0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTllPMGRCUTBZc1EwRkJReXhEUVVGRE8wRkJRMHdzUTBGQlF5eERRVUZET3p0QlFVVkdMRTFCUVUwc1EwRkJReXhQUVVGUExFZEJRVWM3UlVGRFppeFpRVUZaTEVWQlFVVXNWVUZCVlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRk8wbEJRM1JETEVsQlFVa3NWMEZCVnl4SFFVRkhMRXRCUVVzc1EwRkJRenRKUVVONFFpeEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJUdE5RVU51UXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRE8wdEJRM0JDTEUxQlFVMDdUVUZEVEN4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0UlFVTndReXhKUVVGSkxFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN1ZVRkRNVUlzVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXp0VFFVTndRanRQUVVOR0xFTkJRVU1zUTBGQlF6dExRVU5LTzBsQlEwUXNUMEZCVHl4WFFVRlhMRU5CUVVNN1IwRkRjRUk3UlVGRFJDeEpRVUZKTEVWQlFVVTdTVUZEU2l4SlFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRPMGxCUTJoRExFZEJRVWNzUlVGQlJTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03UjBGREwwSTdRMEZEUml4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpZG1GeUlHTnpjbVpVYjJ0bGJsTmxiR1ZqZEc5eUlEMGdkSGx3Wlc5bUlHUnZZM1Z0Wlc1MElDRTlJQ2QxYm1SbFptbHVaV1FuSUQ4Z1pHOWpkVzFsYm5RdWNYVmxjbmxUWld4bFkzUnZjaWduYldWMFlWdHVZVzFsUFZ3aVkzTnlaaTEwYjJ0bGJsd2lYU2NwSURvZ2JuVnNiRHRjYmx4dWRtRnlJSFJ2VlZKTVJXNWpiMlJsWkNBOUlHWjFibU4wYVc5dUlDaGxiR1Z0Wlc1MExDQnJaWGtzSUd4cGMzUXBJSHRjYmlBZ2RtRnlJR3hwYzNRZ1BTQnNhWE4wSUh4OElGdGRPMXh1SUNCcFppQW9kSGx3Wlc5bUlDaGxiR1Z0Wlc1MEtTQTlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJR1p2Y2lBb2RtRnlJR2xrZUNCcGJpQmxiR1Z0Wlc1MEtWeHVJQ0FnSUNBZ2RHOVZVa3hGYm1OdlpHVmtLR1ZzWlcxbGJuUmJhV1I0WFN3Z2EyVjVJRDhnYTJWNUlDc2dKMXNuSUNzZ2FXUjRJQ3NnSjEwbklEb2dhV1I0TENCc2FYTjBLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JzYVhOMExuQjFjMmdvYTJWNUlDc2dKejBuSUNzZ1pXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtHVnNaVzFsYm5RcEtUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2JHbHpkQzVxYjJsdUtDY21KeWs3WEc1OU8xeHVYRzUyWVhJZ2NtVnhkV1Z6ZENBOUlHWjFibU4wYVc5dUlDaHRaWFJvYjJRc0lIVnliQ3dnWkdGMFlTd2dZMjl1ZEdWdWRGUjVjR1VzSUdobFlXUmxjbk1wSUh0Y2JseHVJQ0IyWVhJZ1kyOXVkR1Z1ZEZSNWNHVWdQU0JqYjI1MFpXNTBWSGx3WlNBOVBUMGdKM1Z5YkdWdVkyOWtaV1FuSUQ4Z0oyRndjR3hwWTJGMGFXOXVMeWNnS3lCamIyNTBaVzUwVkhsd1pTNXlaWEJzWVdObEtDZDFjbXhsYm1OdlpHVmtKeXdnSjNndGQzZDNMV1p2Y20wdGRYSnNaVzVqYjJSbFpDY3BJRG9nSjJGd2NHeHBZMkYwYVc5dUwycHpiMjRuTzF4dUlDQmtZWFJoSUQwZ1kyOXVkR1Z1ZEZSNWNHVWdQVDA5SUNkaGNIQnNhV05oZEdsdmJpOXFjMjl1SnlBL0lFcFRUMDR1YzNSeWFXNW5hV1o1S0dSaGRHRXBJRG9nZEc5VlVreEZibU52WkdWa0tHUmhkR0VwTzF4dVhHNGdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2htZFc1amRHbHZiaUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0I3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhaaGNpQjRhSElnUFNCdVpYY2dXRTFNU0hSMGNGSmxjWFZsYzNRb0tUdGNiaUFnSUNBZ0lIaG9jaTV2Y0dWdUtHMWxkR2h2WkN3Z2RYSnNMQ0IwY25WbEtUdGNiaUFnSUNBZ0lIaG9jaTV6WlhSU1pYRjFaWE4wU0dWaFpHVnlLQ2RCWTJObGNIUW5MQ0FuWVhCd2JHbGpZWFJwYjI0dmFuTnZiaWNwTzF4dUlDQWdJQ0FnZUdoeUxuTmxkRkpsY1hWbGMzUklaV0ZrWlhJb0owTnZiblJsYm5RdFZIbHdaU2NzSUdOdmJuUmxiblJVZVhCbEtUdGNibHh1SUNBZ0lDQWdhV1lnS0NFaFkzTnlabFJ2YTJWdVUyVnNaV04wYjNJZ0ppWWdJU0ZqYzNKbVZHOXJaVzVUWld4bFkzUnZjaTVqYjI1MFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUhob2NpNXpaWFJTWlhGMVpYTjBTR1ZoWkdWeUtDZFlMVU5UVWtZdFZHOXJaVzRuTENCamMzSm1WRzlyWlc1VFpXeGxZM1J2Y2k1amIyNTBaVzUwS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdRV1JrSUhCaGMzTmxaQ0JvWldGa1pYSnpYRzRnSUNBZ0lDQlBZbXBsWTNRdWEyVjVjeWhvWldGa1pYSnpLUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hvWldGa1pYSXBJSHRjYmlBZ0lDQWdJQ0FnZUdoeUxuTmxkRkpsY1hWbGMzUklaV0ZrWlhJb2FHVmhaR1Z5TENCb1pXRmtaWEp6VzJobFlXUmxjbDBwTzF4dUlDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lIaG9jaTV2Ym5KbFlXUjVjM1JoZEdWamFHRnVaMlVnUFNCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoNGFISXVjbVZoWkhsVGRHRjBaU0E5UFQwZ05Da2dlMXh1WEc0Z0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ5WlhOd2IyNXpaU0E5SUhob2NpNXlaWE53YjI1elpWUmxlSFFnUHlCS1UwOU9MbkJoY25ObEtIaG9jaTV5WlhOd2IyNXpaVlJsZUhRcElEb2diblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoNGFISXVjM1JoZEhWeklENDlJREl3TUNBbUppQjRhSEl1YzNSaGRIVnpJRHdnTXpBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjMjlzZG1Vb2NtVnpjRzl1YzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtISmxjM0J2Ym5ObEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaV3BsWTNRb1pTazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQjRhSEl1YzJWdVpDaGtZWFJoS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnZlZ4dUlDQjlLVHRjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdlMXh1SUNCaGNuSmhlWE5FYVdabVpYSTZJR1oxYm1OMGFXOXVJQ2hoY25KaGVVRXNJR0Z5Y21GNVFpa2dlMXh1SUNBZ0lIWmhjaUJwYzBScFptWmxjbVZ1ZENBOUlHWmhiSE5sTzF4dUlDQWdJR2xtSUNoaGNuSmhlVUV1YkdWdVozUm9JQ0U5UFNCaGNuSmhlVUl1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0JwYzBScFptWmxjbVZ1ZENBOUlIUnlkV1U3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHRnljbUY1UVM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNocGRHVnRMQ0JwYm1SbGVDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYUmxiU0FoUFQwZ1lYSnlZWGxDVzJsdVpHVjRYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbHpSR2xtWm1WeVpXNTBJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCcGMwUnBabVpsY21WdWREdGNiaUFnZlN4Y2JpQWdZV3BoZURvZ2UxeHVJQ0FnSUhCdmMzUTZJSEpsY1hWbGMzUXVZbWx1WkNodWRXeHNMQ0FuVUU5VFZDY3BMRnh1SUNBZ0lIQjFkRG9nY21WeGRXVnpkQzVpYVc1a0tHNTFiR3dzSUNkUVZWUW5LVnh1SUNCOVhHNTlPMXh1SWwxOSIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAnaXNWYWx1ZSc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gJyc7XG4gIH0sXG4gICdpc0VtYWlsJzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSQvaSk7XG4gIH0sXG4gICdpc1RydWUnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHRydWU7XG4gIH0sXG4gICdpc051bWVyaWMnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXRjaFJlc3VsdHMgPSB2YWx1ZS5tYXRjaCgvWy0rXT8oXFxkKlsuXSk/XFxkKy8pO1xuICAgICAgaWYgKCEhIG1hdGNoUmVzdWx0cykge1xuICAgICAgICByZXR1cm4gbWF0Y2hSZXN1bHRzWzBdID09IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgJ2lzQWxwaGEnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUubWF0Y2goL15bYS16QS1aXSskLyk7XG4gIH0sXG4gICdpc1dvcmRzJzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9eW2EtekEtWlxcc10rJC8pO1xuICB9LFxuICAnaXNTcGVjaWFsV29yZHMnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUubWF0Y2goL15bYS16QS1aXFxzXFx1MDBDMC1cXHUwMTdGXSskLyk7XG4gIH0sXG4gIGlzTGVuZ3RoOiBmdW5jdGlvbiAodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID49IG1pbiAmJiB2YWx1ZS5sZW5ndGggPD0gbWF4O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID49IG1pbjtcbiAgfSxcbiAgZXF1YWxzOiBmdW5jdGlvbiAodmFsdWUsIGVxbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBlcWw7XG4gIH0sXG4gIGVxdWFsc0ZpZWxkOiBmdW5jdGlvbiAodmFsdWUsIGZpZWxkKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IHRoaXNbZmllbGRdO1xuICB9XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lMMVZ6WlhKekwyTm9jbWx6ZEdsaGJtRnNabTl1YVM5RWIyTjFiV1Z1ZEhNdlpHVjJMMlp2Y20xemVTMXlaV0ZqZEM5emNtTXZkbUZzYVdSaGRHbHZibEoxYkdWekxtcHpJaXdpYzI5MWNtTmxjeUk2V3lJdlZYTmxjbk12WTJoeWFYTjBhV0Z1WVd4bWIyNXBMMFJ2WTNWdFpXNTBjeTlrWlhZdlptOXliWE41TFhKbFlXTjBMM055WXk5MllXeHBaR0YwYVc5dVVuVnNaWE11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUVUZCVFN4RFFVRkRMRTlCUVU4c1IwRkJSenRGUVVObUxGTkJRVk1zUlVGQlJTeFZRVUZWTEV0QlFVc3NSVUZCUlR0SlFVTXhRaXhQUVVGUExFdEJRVXNzUzBGQlN5eEZRVUZGTEVOQlFVTTdSMEZEY2tJN1JVRkRSQ3hUUVVGVExFVkJRVVVzVlVGQlZTeExRVUZMTEVWQlFVVTdTVUZETVVJc1QwRkJUeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEhrMFFrRkJlVFJDTEVOQlFVTXNRMEZCUXp0SFFVTXZOVUk3UlVGRFJDeFJRVUZSTEVWQlFVVXNWVUZCVlN4TFFVRkxMRVZCUVVVN1NVRkRla0lzVDBGQlR5eExRVUZMTEV0QlFVc3NTVUZCU1N4RFFVRkRPMGRCUTNaQ08wVkJRMFFzVjBGQlZ5eEZRVUZGTEZWQlFWVXNTMEZCU3l4RlFVRkZPMGxCUXpWQ0xFbEJRVWtzVDBGQlR5eExRVUZMTEV0QlFVc3NVVUZCVVN4RlFVRkZPMDFCUXpkQ0xFOUJRVThzU1VGQlNTeERRVUZETzB0QlEySXNUVUZCVFR0TlFVTk1MRWxCUVVrc1dVRkJXU3hIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dE5RVU53UkN4SlFVRkpMRU5CUVVNc1JVRkJSU3haUVVGWkxFVkJRVVU3VVVGRGJrSXNUMEZCVHl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETzA5QlEycERMRTFCUVUwN1VVRkRUQ3hQUVVGUExFdEJRVXNzUTBGQlF6dFBRVU5rTzB0QlEwWTdSMEZEUmp0RlFVTkVMRk5CUVZNc1JVRkJSU3hWUVVGVkxFdEJRVXNzUlVGQlJUdEpRVU14UWl4UFFVRlBMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdSMEZEYmtNN1JVRkRSQ3hUUVVGVExFVkJRVVVzVlVGQlZTeExRVUZMTEVWQlFVVTdTVUZETVVJc1QwRkJUeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMGRCUTNKRE8wVkJRMFFzWjBKQlFXZENMRVZCUVVVc1ZVRkJWU3hMUVVGTExFVkJRVVU3U1VGRGFrTXNUMEZCVHl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExEUkNRVUUwUWl4RFFVRkRMRU5CUVVNN1IwRkRiRVE3UlVGRFJDeFJRVUZSTEVWQlFVVXNWVUZCVlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJUdEpRVU51UXl4SlFVRkpMRWRCUVVjc1MwRkJTeXhUUVVGVExFVkJRVVU3VFVGRGNrSXNUMEZCVHl4TFFVRkxMRU5CUVVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJRenRMUVVOdVJEdEpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkRMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU03UjBGRE5VSTdSVUZEUkN4TlFVRk5MRVZCUVVVc1ZVRkJWU3hMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTzBsQlF6VkNMRTlCUVU4c1MwRkJTeXhKUVVGSkxFZEJRVWNzUTBGQlF6dEhRVU55UWp0RlFVTkVMRmRCUVZjc1JVRkJSU3hWUVVGVkxFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVTdTVUZEYmtNc1QwRkJUeXhMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGRCUXpkQ08wTkJRMFlzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdlMXh1SUNBbmFYTldZV3gxWlNjNklHWjFibU4wYVc5dUlDaDJZV3gxWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpTQWhQVDBnSnljN1hHNGdJSDBzWEc0Z0lDZHBjMFZ0WVdsc0p6b2dablZ1WTNScGIyNGdLSFpoYkhWbEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhaaGJIVmxMbTFoZEdOb0tDOWVLQ2dvVzJFdGVsMThYRnhrZkZzaEkxeGNKQ1VtSjF4Y0tseGNLMXhjTFZ4Y0x6MWNYRDljWEY1ZllIdGNYSHg5ZmwxOFcxeGNkVEF3UVRBdFhGeDFSRGRHUmx4Y2RVWTVNREF0WEZ4MVJrUkRSbHhjZFVaRVJqQXRYRngxUmtaRlJsMHBLeWhjWEM0b1cyRXRlbDE4WEZ4a2ZGc2hJMXhjSkNVbUoxeGNLbHhjSzF4Y0xWeGNMejFjWEQ5Y1hGNWZZSHRjWEh4OWZsMThXMXhjZFRBd1FUQXRYRngxUkRkR1JseGNkVVk1TURBdFhGeDFSa1JEUmx4Y2RVWkVSakF0WEZ4MVJrWkZSbDBwS3lrcUtYd29LRnhjZURJeUtTZ29LQ2hjWEhneU1IeGNYSGd3T1NrcUtGeGNlREJrWEZ4NE1HRXBLVDhvWEZ4NE1qQjhYRng0TURrcEt5ay9LQ2hiWEZ4NE1ERXRYRng0TURoY1hIZ3dZbHhjZURCalhGeDRNR1V0WEZ4NE1XWmNYSGczWmwxOFhGeDRNakY4VzF4Y2VESXpMVnhjZURWaVhYeGJYRng0TldRdFhGeDROMlZkZkZ0Y1hIVXdNRUV3TFZ4Y2RVUTNSa1pjWEhWR09UQXdMVnhjZFVaRVEwWmNYSFZHUkVZd0xWeGNkVVpHUlVaZEtYd29YRnhjWENoYlhGeDRNREV0WEZ4NE1EbGNYSGd3WWx4Y2VEQmpYRng0TUdRdFhGeDROMlpkZkZ0Y1hIVXdNRUV3TFZ4Y2RVUTNSa1pjWEhWR09UQXdMVnhjZFVaRVEwWmNYSFZHUkVZd0xWeGNkVVpHUlVaZEtTa3BLU29vS0NoY1hIZ3lNSHhjWEhnd09Ta3FLRnhjZURCa1hGeDRNR0VwS1Q4b1hGeDRNakI4WEZ4NE1Ea3BLeWsvS0Z4Y2VESXlLU2twUUNnb0tGdGhMWHBkZkZ4Y1pIeGJYRngxTURCQk1DMWNYSFZFTjBaR1hGeDFSamt3TUMxY1hIVkdSRU5HWEZ4MVJrUkdNQzFjWEhWR1JrVkdYU2w4S0NoYllTMTZYWHhjWEdSOFcxeGNkVEF3UVRBdFhGeDFSRGRHUmx4Y2RVWTVNREF0WEZ4MVJrUkRSbHhjZFVaRVJqQXRYRngxUmtaRlJsMHBLRnRoTFhwZGZGeGNaSHd0ZkZ4Y0xueGZmSDU4VzF4Y2RUQXdRVEF0WEZ4MVJEZEdSbHhjZFVZNU1EQXRYRngxUmtSRFJseGNkVVpFUmpBdFhGeDFSa1pGUmwwcEtpaGJZUzE2WFh4Y1hHUjhXMXhjZFRBd1FUQXRYRngxUkRkR1JseGNkVVk1TURBdFhGeDFSa1JEUmx4Y2RVWkVSakF0WEZ4MVJrWkZSbDBwS1NsY1hDNHBLeWdvVzJFdGVsMThXMXhjZFRBd1FUQXRYRngxUkRkR1JseGNkVVk1TURBdFhGeDFSa1JEUmx4Y2RVWkVSakF0WEZ4MVJrWkZSbDBwZkNnb1cyRXRlbDE4VzF4Y2RUQXdRVEF0WEZ4MVJEZEdSbHhjZFVZNU1EQXRYRngxUmtSRFJseGNkVVpFUmpBdFhGeDFSa1pGUmwwcEtGdGhMWHBkZkZ4Y1pId3RmRnhjTG54ZmZINThXMXhjZFRBd1FUQXRYRngxUkRkR1JseGNkVVk1TURBdFhGeDFSa1JEUmx4Y2RVWkVSakF0WEZ4MVJrWkZSbDBwS2loYllTMTZYWHhiWEZ4MU1EQkJNQzFjWEhWRU4wWkdYRngxUmprd01DMWNYSFZHUkVOR1hGeDFSa1JHTUMxY1hIVkdSa1ZHWFNrcEtTUXZhU2s3WEc0Z0lIMHNYRzRnSUNkcGMxUnlkV1VuT2lCbWRXNWpkR2x2YmlBb2RtRnNkV1VwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVZ1BUMDlJSFJ5ZFdVN1hHNGdJSDBzWEc0Z0lDZHBjMDUxYldWeWFXTW5PaUJtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYm5WdFltVnlKeWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFpoY2lCdFlYUmphRkpsYzNWc2RITWdQU0IyWVd4MVpTNXRZWFJqYUNndld5MHJYVDhvWEZ4a0tsc3VYU2svWEZ4a0t5OHBPMXh1SUNBZ0lDQWdhV1lnS0NFaElHMWhkR05vVW1WemRXeDBjeWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYldGMFkyaFNaWE4xYkhSeld6QmRJRDA5SUhaaGJIVmxPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTeGNiaUFnSjJselFXeHdhR0VuT2lCbWRXNWpkR2x2YmlBb2RtRnNkV1VwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVdWJXRjBZMmdvTDE1YllTMTZRUzFhWFNza0x5azdYRzRnSUgwc1hHNGdJQ2RwYzFkdmNtUnpKem9nWm5WdVkzUnBiMjRnS0haaGJIVmxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIWmhiSFZsTG0xaGRHTm9LQzllVzJFdGVrRXRXbHhjYzEwckpDOHBPMXh1SUNCOUxGeHVJQ0FuYVhOVGNHVmphV0ZzVjI5eVpITW5PaUJtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RtRnNkV1V1YldGMFkyZ29MMTViWVMxNlFTMWFYRnh6WEZ4MU1EQkRNQzFjWEhVd01UZEdYU3NrTHlrN1hHNGdJSDBzWEc0Z0lHbHpUR1Z1WjNSb09pQm1kVzVqZEdsdmJpQW9kbUZzZFdVc0lHMXBiaXdnYldGNEtTQjdYRzRnSUNBZ2FXWWdLRzFoZUNBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVdWJHVnVaM1JvSUQ0OUlHMXBiaUFtSmlCMllXeDFaUzVzWlc1bmRHZ2dQRDBnYldGNE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVdWJHVnVaM1JvSUQ0OUlHMXBianRjYmlBZ2ZTeGNiaUFnWlhGMVlXeHpPaUJtZFc1amRHbHZiaUFvZG1Gc2RXVXNJR1Z4YkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpTQTlQU0JsY1d3N1hHNGdJSDBzWEc0Z0lHVnhkV0ZzYzBacFpXeGtPaUJtZFc1amRHbHZiaUFvZG1Gc2RXVXNJR1pwWld4a0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhaaGJIVmxJRDA5SUhSb2FYTmJabWxsYkdSZE8xeHVJQ0I5WEc1OU8xeHVJbDE5Il19