1
0
mirror of https://github.com/bigchaindb/js-bigchaindb-driver.git synced 2024-12-01 21:57:10 +01:00
js-bigchaindb-driver/dist/bundle/bundle.js
2017-05-10 09:36:07 +02:00

10302 lines
2.6 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["js-bigchaindb-driver"] = factory();
else
root["js-bigchaindb-driver"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 95);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = getApiUrls;
function getApiUrls(API_PATH) {
return {
'blocks': API_PATH + 'blocks',
'blocks_detail': API_PATH + 'blocks/%(blockId)s',
'outputs': API_PATH + 'outputs',
'statuses': API_PATH + 'statuses',
'transactions': API_PATH + 'transactions',
'transactions_detail': API_PATH + 'transactions/%(txId)s',
'votes': API_PATH + 'votes'
};
}
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = request;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseRequest__ = __webpack_require__(28);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sanitize__ = __webpack_require__(38);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var DEFAULT_REQUEST_CONFIG = {
credentials: 'include',
headers: {
'Accept': 'application/json'
}
};
/**
* Small wrapper around js-utility-belt's request that provides url resolving, default settings, and
* response handling.
*/
function request(url) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var onlyJsonResponse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
// Load default fetch configuration and remove any falsy query parameters
var requestConfig = _extends({}, DEFAULT_REQUEST_CONFIG, config, {
query: config.query && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__sanitize__["a" /* default */])(config.query)
});
var apiUrl = url;
if (requestConfig.jsonBody) {
requestConfig.headers = _extends({}, requestConfig.headers, {
'Content-Type': 'application/json'
});
}
if (!url) {
return Promise.reject(new Error('Request was not given a url.'));
}
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__baseRequest__["a" /* default */])(apiUrl, requestConfig).then(function (res) {
return onlyJsonResponse ? res.json() : {
json: res.json(),
url: res.url
};
}).catch(function (err) {
console.error(err);
throw err;
});
}
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
* @license MIT
*/
/* eslint-disable no-proto */
var base64 = __webpack_require__(52)
var ieee754 = __webpack_require__(83)
var isArray = __webpack_require__(84)
exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50
/**
* If `Buffer.TYPED_ARRAY_SUPPORT`:
* === true Use Uint8Array implementation (fastest)
* === false Use Object implementation (most compatible, even IE6)
*
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
* Opera 11.6+, iOS 4.2+.
*
* Due to various browser bugs, sometimes the Object implementation will be used even
* when the browser supports typed arrays.
*
* Note:
*
* - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
* See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
*
* - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
*
* - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
* incorrect length in some situations.
* We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
* get the Object implementation, which is slower but behaves correctly.
*/
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
? global.TYPED_ARRAY_SUPPORT
: typedArraySupport()
/*
* Export kMaxLength after typed array support is determined.
*/
exports.kMaxLength = kMaxLength()
function typedArraySupport () {
try {
var arr = new Uint8Array(1)
arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
return arr.foo() === 42 && // typed array instances can be augmented
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
} catch (e) {
return false
}
}
function kMaxLength () {
return Buffer.TYPED_ARRAY_SUPPORT
? 0x7fffffff
: 0x3fffffff
}
function createBuffer (that, length) {
if (kMaxLength() < length) {
throw new RangeError('Invalid typed array length')
}
if (Buffer.TYPED_ARRAY_SUPPORT) {
// Return an augmented `Uint8Array` instance, for best performance
that = new Uint8Array(length)
that.__proto__ = Buffer.prototype
} else {
// Fallback: Return an object instance of the Buffer class
if (that === null) {
that = new Buffer(length)
}
that.length = length
}
return that
}
/**
* The Buffer constructor returns instances of `Uint8Array` that have their
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods
* and the `Uint8Array` methods. Square bracket notation works as expected -- it
* returns a single octet.
*
* The `Uint8Array` prototype remains unmodified.
*/
function Buffer (arg, encodingOrOffset, length) {
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
return new Buffer(arg, encodingOrOffset, length)
}
// Common case.
if (typeof arg === 'number') {
if (typeof encodingOrOffset === 'string') {
throw new Error(
'If encoding is specified then the first argument must be a string'
)
}
return allocUnsafe(this, arg)
}
return from(this, arg, encodingOrOffset, length)
}
Buffer.poolSize = 8192 // not used by this implementation
// TODO: Legacy, not needed anymore. Remove in next major version.
Buffer._augment = function (arr) {
arr.__proto__ = Buffer.prototype
return arr
}
function from (that, value, encodingOrOffset, length) {
if (typeof value === 'number') {
throw new TypeError('"value" argument must not be a number')
}
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
return fromArrayBuffer(that, value, encodingOrOffset, length)
}
if (typeof value === 'string') {
return fromString(that, value, encodingOrOffset)
}
return fromObject(that, value)
}
/**
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
* if value is a number.
* Buffer.from(str[, encoding])
* Buffer.from(array)
* Buffer.from(buffer)
* Buffer.from(arrayBuffer[, byteOffset[, length]])
**/
Buffer.from = function (value, encodingOrOffset, length) {
return from(null, value, encodingOrOffset, length)
}
if (Buffer.TYPED_ARRAY_SUPPORT) {
Buffer.prototype.__proto__ = Uint8Array.prototype
Buffer.__proto__ = Uint8Array
if (typeof Symbol !== 'undefined' && Symbol.species &&
Buffer[Symbol.species] === Buffer) {
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
Object.defineProperty(Buffer, Symbol.species, {
value: null,
configurable: true
})
}
}
function assertSize (size) {
if (typeof size !== 'number') {
throw new TypeError('"size" argument must be a number')
} else if (size < 0) {
throw new RangeError('"size" argument must not be negative')
}
}
function alloc (that, size, fill, encoding) {
assertSize(size)
if (size <= 0) {
return createBuffer(that, size)
}
if (fill !== undefined) {
// Only pay attention to encoding if it's a string. This
// prevents accidentally sending in a number that would
// be interpretted as a start offset.
return typeof encoding === 'string'
? createBuffer(that, size).fill(fill, encoding)
: createBuffer(that, size).fill(fill)
}
return createBuffer(that, size)
}
/**
* Creates a new filled Buffer instance.
* alloc(size[, fill[, encoding]])
**/
Buffer.alloc = function (size, fill, encoding) {
return alloc(null, size, fill, encoding)
}
function allocUnsafe (that, size) {
assertSize(size)
that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
if (!Buffer.TYPED_ARRAY_SUPPORT) {
for (var i = 0; i < size; ++i) {
that[i] = 0
}
}
return that
}
/**
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
* */
Buffer.allocUnsafe = function (size) {
return allocUnsafe(null, size)
}
/**
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
*/
Buffer.allocUnsafeSlow = function (size) {
return allocUnsafe(null, size)
}
function fromString (that, string, encoding) {
if (typeof encoding !== 'string' || encoding === '') {
encoding = 'utf8'
}
if (!Buffer.isEncoding(encoding)) {
throw new TypeError('"encoding" must be a valid string encoding')
}
var length = byteLength(string, encoding) | 0
that = createBuffer(that, length)
var actual = that.write(string, encoding)
if (actual !== length) {
// Writing a hex string, for example, that contains invalid characters will
// cause everything after the first invalid character to be ignored. (e.g.
// 'abxxcd' will be treated as 'ab')
that = that.slice(0, actual)
}
return that
}
function fromArrayLike (that, array) {
var length = array.length < 0 ? 0 : checked(array.length) | 0
that = createBuffer(that, length)
for (var i = 0; i < length; i += 1) {
that[i] = array[i] & 255
}
return that
}
function fromArrayBuffer (that, array, byteOffset, length) {
array.byteLength // this throws if `array` is not a valid ArrayBuffer
if (byteOffset < 0 || array.byteLength < byteOffset) {
throw new RangeError('\'offset\' is out of bounds')
}
if (array.byteLength < byteOffset + (length || 0)) {
throw new RangeError('\'length\' is out of bounds')
}
if (byteOffset === undefined && length === undefined) {
array = new Uint8Array(array)
} else if (length === undefined) {
array = new Uint8Array(array, byteOffset)
} else {
array = new Uint8Array(array, byteOffset, length)
}
if (Buffer.TYPED_ARRAY_SUPPORT) {
// Return an augmented `Uint8Array` instance, for best performance
that = array
that.__proto__ = Buffer.prototype
} else {
// Fallback: Return an object instance of the Buffer class
that = fromArrayLike(that, array)
}
return that
}
function fromObject (that, obj) {
if (Buffer.isBuffer(obj)) {
var len = checked(obj.length) | 0
that = createBuffer(that, len)
if (that.length === 0) {
return that
}
obj.copy(that, 0, 0, len)
return that
}
if (obj) {
if ((typeof ArrayBuffer !== 'undefined' &&
obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
if (typeof obj.length !== 'number' || isnan(obj.length)) {
return createBuffer(that, 0)
}
return fromArrayLike(that, obj)
}
if (obj.type === 'Buffer' && isArray(obj.data)) {
return fromArrayLike(that, obj.data)
}
}
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
}
function checked (length) {
// Note: cannot use `length < kMaxLength()` here because that fails when
// length is NaN (which is otherwise coerced to zero.)
if (length >= kMaxLength()) {
throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
'size: 0x' + kMaxLength().toString(16) + ' bytes')
}
return length | 0
}
function SlowBuffer (length) {
if (+length != length) { // eslint-disable-line eqeqeq
length = 0
}
return Buffer.alloc(+length)
}
Buffer.isBuffer = function isBuffer (b) {
return !!(b != null && b._isBuffer)
}
Buffer.compare = function compare (a, b) {
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
throw new TypeError('Arguments must be Buffers')
}
if (a === b) return 0
var x = a.length
var y = b.length
for (var i = 0, len = Math.min(x, y); i < len; ++i) {
if (a[i] !== b[i]) {
x = a[i]
y = b[i]
break
}
}
if (x < y) return -1
if (y < x) return 1
return 0
}
Buffer.isEncoding = function isEncoding (encoding) {
switch (String(encoding).toLowerCase()) {
case 'hex':
case 'utf8':
case 'utf-8':
case 'ascii':
case 'latin1':
case 'binary':
case 'base64':
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return true
default:
return false
}
}
Buffer.concat = function concat (list, length) {
if (!isArray(list)) {
throw new TypeError('"list" argument must be an Array of Buffers')
}
if (list.length === 0) {
return Buffer.alloc(0)
}
var i
if (length === undefined) {
length = 0
for (i = 0; i < list.length; ++i) {
length += list[i].length
}
}
var buffer = Buffer.allocUnsafe(length)
var pos = 0
for (i = 0; i < list.length; ++i) {
var buf = list[i]
if (!Buffer.isBuffer(buf)) {
throw new TypeError('"list" argument must be an Array of Buffers')
}
buf.copy(buffer, pos)
pos += buf.length
}
return buffer
}
function byteLength (string, encoding) {
if (Buffer.isBuffer(string)) {
return string.length
}
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
(ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
return string.byteLength
}
if (typeof string !== 'string') {
string = '' + string
}
var len = string.length
if (len === 0) return 0
// Use a for loop to avoid recursion
var loweredCase = false
for (;;) {
switch (encoding) {
case 'ascii':
case 'latin1':
case 'binary':
return len
case 'utf8':
case 'utf-8':
case undefined:
return utf8ToBytes(string).length
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return len * 2
case 'hex':
return len >>> 1
case 'base64':
return base64ToBytes(string).length
default:
if (loweredCase) return utf8ToBytes(string).length // assume utf8
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
Buffer.byteLength = byteLength
function slowToString (encoding, start, end) {
var loweredCase = false
// No need to verify that "this.length <= MAX_UINT32" since it's a read-only
// property of a typed array.
// This behaves neither like String nor Uint8Array in that we set start/end
// to their upper/lower bounds if the value passed is out of range.
// undefined is handled specially as per ECMA-262 6th Edition,
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
if (start === undefined || start < 0) {
start = 0
}
// Return early if start > this.length. Done here to prevent potential uint32
// coercion fail below.
if (start > this.length) {
return ''
}
if (end === undefined || end > this.length) {
end = this.length
}
if (end <= 0) {
return ''
}
// Force coersion to uint32. This will also coerce falsey/NaN values to 0.
end >>>= 0
start >>>= 0
if (end <= start) {
return ''
}
if (!encoding) encoding = 'utf8'
while (true) {
switch (encoding) {
case 'hex':
return hexSlice(this, start, end)
case 'utf8':
case 'utf-8':
return utf8Slice(this, start, end)
case 'ascii':
return asciiSlice(this, start, end)
case 'latin1':
case 'binary':
return latin1Slice(this, start, end)
case 'base64':
return base64Slice(this, start, end)
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return utf16leSlice(this, start, end)
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
encoding = (encoding + '').toLowerCase()
loweredCase = true
}
}
}
// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
// Buffer instances.
Buffer.prototype._isBuffer = true
function swap (b, n, m) {
var i = b[n]
b[n] = b[m]
b[m] = i
}
Buffer.prototype.swap16 = function swap16 () {
var len = this.length
if (len % 2 !== 0) {
throw new RangeError('Buffer size must be a multiple of 16-bits')
}
for (var i = 0; i < len; i += 2) {
swap(this, i, i + 1)
}
return this
}
Buffer.prototype.swap32 = function swap32 () {
var len = this.length
if (len % 4 !== 0) {
throw new RangeError('Buffer size must be a multiple of 32-bits')
}
for (var i = 0; i < len; i += 4) {
swap(this, i, i + 3)
swap(this, i + 1, i + 2)
}
return this
}
Buffer.prototype.swap64 = function swap64 () {
var len = this.length
if (len % 8 !== 0) {
throw new RangeError('Buffer size must be a multiple of 64-bits')
}
for (var i = 0; i < len; i += 8) {
swap(this, i, i + 7)
swap(this, i + 1, i + 6)
swap(this, i + 2, i + 5)
swap(this, i + 3, i + 4)
}
return this
}
Buffer.prototype.toString = function toString () {
var length = this.length | 0
if (length === 0) return ''
if (arguments.length === 0) return utf8Slice(this, 0, length)
return slowToString.apply(this, arguments)
}
Buffer.prototype.equals = function equals (b) {
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
if (this === b) return true
return Buffer.compare(this, b) === 0
}
Buffer.prototype.inspect = function inspect () {
var str = ''
var max = exports.INSPECT_MAX_BYTES
if (this.length > 0) {
str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
if (this.length > max) str += ' ... '
}
return '<Buffer ' + str + '>'
}
Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
if (!Buffer.isBuffer(target)) {
throw new TypeError('Argument must be a Buffer')
}
if (start === undefined) {
start = 0
}
if (end === undefined) {
end = target ? target.length : 0
}
if (thisStart === undefined) {
thisStart = 0
}
if (thisEnd === undefined) {
thisEnd = this.length
}
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
throw new RangeError('out of range index')
}
if (thisStart >= thisEnd && start >= end) {
return 0
}
if (thisStart >= thisEnd) {
return -1
}
if (start >= end) {
return 1
}
start >>>= 0
end >>>= 0
thisStart >>>= 0
thisEnd >>>= 0
if (this === target) return 0
var x = thisEnd - thisStart
var y = end - start
var len = Math.min(x, y)
var thisCopy = this.slice(thisStart, thisEnd)
var targetCopy = target.slice(start, end)
for (var i = 0; i < len; ++i) {
if (thisCopy[i] !== targetCopy[i]) {
x = thisCopy[i]
y = targetCopy[i]
break
}
}
if (x < y) return -1
if (y < x) return 1
return 0
}
// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
// Empty buffer means no match
if (buffer.length === 0) return -1
// Normalize byteOffset
if (typeof byteOffset === 'string') {
encoding = byteOffset
byteOffset = 0
} else if (byteOffset > 0x7fffffff) {
byteOffset = 0x7fffffff
} else if (byteOffset < -0x80000000) {
byteOffset = -0x80000000
}
byteOffset = +byteOffset // Coerce to Number.
if (isNaN(byteOffset)) {
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
byteOffset = dir ? 0 : (buffer.length - 1)
}
// Normalize byteOffset: negative offsets start from the end of the buffer
if (byteOffset < 0) byteOffset = buffer.length + byteOffset
if (byteOffset >= buffer.length) {
if (dir) return -1
else byteOffset = buffer.length - 1
} else if (byteOffset < 0) {
if (dir) byteOffset = 0
else return -1
}
// Normalize val
if (typeof val === 'string') {
val = Buffer.from(val, encoding)
}
// Finally, search either indexOf (if dir is true) or lastIndexOf
if (Buffer.isBuffer(val)) {
// Special case: looking for empty string/buffer always fails
if (val.length === 0) {
return -1
}
return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
} else if (typeof val === 'number') {
val = val & 0xFF // Search for a byte value [0-255]
if (Buffer.TYPED_ARRAY_SUPPORT &&
typeof Uint8Array.prototype.indexOf === 'function') {
if (dir) {
return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
} else {
return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
}
}
return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
}
throw new TypeError('val must be string, number or Buffer')
}
function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
var indexSize = 1
var arrLength = arr.length
var valLength = val.length
if (encoding !== undefined) {
encoding = String(encoding).toLowerCase()
if (encoding === 'ucs2' || encoding === 'ucs-2' ||
encoding === 'utf16le' || encoding === 'utf-16le') {
if (arr.length < 2 || val.length < 2) {
return -1
}
indexSize = 2
arrLength /= 2
valLength /= 2
byteOffset /= 2
}
}
function read (buf, i) {
if (indexSize === 1) {
return buf[i]
} else {
return buf.readUInt16BE(i * indexSize)
}
}
var i
if (dir) {
var foundIndex = -1
for (i = byteOffset; i < arrLength; i++) {
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
if (foundIndex === -1) foundIndex = i
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
} else {
if (foundIndex !== -1) i -= i - foundIndex
foundIndex = -1
}
}
} else {
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
for (i = byteOffset; i >= 0; i--) {
var found = true
for (var j = 0; j < valLength; j++) {
if (read(arr, i + j) !== read(val, j)) {
found = false
break
}
}
if (found) return i
}
}
return -1
}
Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
return this.indexOf(val, byteOffset, encoding) !== -1
}
Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}
Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}
function hexWrite (buf, string, offset, length) {
offset = Number(offset) || 0
var remaining = buf.length - offset
if (!length) {
length = remaining
} else {
length = Number(length)
if (length > remaining) {
length = remaining
}
}
// must be an even number of digits
var strLen = string.length
if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
if (length > strLen / 2) {
length = strLen / 2
}
for (var i = 0; i < length; ++i) {
var parsed = parseInt(string.substr(i * 2, 2), 16)
if (isNaN(parsed)) return i
buf[offset + i] = parsed
}
return i
}
function utf8Write (buf, string, offset, length) {
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}
function asciiWrite (buf, string, offset, length) {
return blitBuffer(asciiToBytes(string), buf, offset, length)
}
function latin1Write (buf, string, offset, length) {
return asciiWrite(buf, string, offset, length)
}
function base64Write (buf, string, offset, length) {
return blitBuffer(base64ToBytes(string), buf, offset, length)
}
function ucs2Write (buf, string, offset, length) {
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}
Buffer.prototype.write = function write (string, offset, length, encoding) {
// Buffer#write(string)
if (offset === undefined) {
encoding = 'utf8'
length = this.length
offset = 0
// Buffer#write(string, encoding)
} else if (length === undefined && typeof offset === 'string') {
encoding = offset
length = this.length
offset = 0
// Buffer#write(string, offset[, length][, encoding])
} else if (isFinite(offset)) {
offset = offset | 0
if (isFinite(length)) {
length = length | 0
if (encoding === undefined) encoding = 'utf8'
} else {
encoding = length
length = undefined
}
// legacy write(string, encoding, offset, length) - remove in v0.13
} else {
throw new Error(
'Buffer.write(string, encoding, offset[, length]) is no longer supported'
)
}
var remaining = this.length - offset
if (length === undefined || length > remaining) length = remaining
if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
throw new RangeError('Attempt to write outside buffer bounds')
}
if (!encoding) encoding = 'utf8'
var loweredCase = false
for (;;) {
switch (encoding) {
case 'hex':
return hexWrite(this, string, offset, length)
case 'utf8':
case 'utf-8':
return utf8Write(this, string, offset, length)
case 'ascii':
return asciiWrite(this, string, offset, length)
case 'latin1':
case 'binary':
return latin1Write(this, string, offset, length)
case 'base64':
// Warning: maxLength not taken into account in base64Write
return base64Write(this, string, offset, length)
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return ucs2Write(this, string, offset, length)
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
Buffer.prototype.toJSON = function toJSON () {
return {
type: 'Buffer',
data: Array.prototype.slice.call(this._arr || this, 0)
}
}
function base64Slice (buf, start, end) {
if (start === 0 && end === buf.length) {
return base64.fromByteArray(buf)
} else {
return base64.fromByteArray(buf.slice(start, end))
}
}
function utf8Slice (buf, start, end) {
end = Math.min(buf.length, end)
var res = []
var i = start
while (i < end) {
var firstByte = buf[i]
var codePoint = null
var bytesPerSequence = (firstByte > 0xEF) ? 4
: (firstByte > 0xDF) ? 3
: (firstByte > 0xBF) ? 2
: 1
if (i + bytesPerSequence <= end) {
var secondByte, thirdByte, fourthByte, tempCodePoint
switch (bytesPerSequence) {
case 1:
if (firstByte < 0x80) {
codePoint = firstByte
}
break
case 2:
secondByte = buf[i + 1]
if ((secondByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
if (tempCodePoint > 0x7F) {
codePoint = tempCodePoint
}
}
break
case 3:
secondByte = buf[i + 1]
thirdByte = buf[i + 2]
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
codePoint = tempCodePoint
}
}
break
case 4:
secondByte = buf[i + 1]
thirdByte = buf[i + 2]
fourthByte = buf[i + 3]
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
codePoint = tempCodePoint
}
}
}
}
if (codePoint === null) {
// we did not generate a valid codePoint so insert a
// replacement char (U+FFFD) and advance only 1 byte
codePoint = 0xFFFD
bytesPerSequence = 1
} else if (codePoint > 0xFFFF) {
// encode to utf16 (surrogate pair dance)
codePoint -= 0x10000
res.push(codePoint >>> 10 & 0x3FF | 0xD800)
codePoint = 0xDC00 | codePoint & 0x3FF
}
res.push(codePoint)
i += bytesPerSequence
}
return decodeCodePointsArray(res)
}
// Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000
function decodeCodePointsArray (codePoints) {
var len = codePoints.length
if (len <= MAX_ARGUMENTS_LENGTH) {
return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
}
// Decode in chunks to avoid "call stack size exceeded".
var res = ''
var i = 0
while (i < len) {
res += String.fromCharCode.apply(
String,
codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
)
}
return res
}
function asciiSlice (buf, start, end) {
var ret = ''
end = Math.min(buf.length, end)
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i] & 0x7F)
}
return ret
}
function latin1Slice (buf, start, end) {
var ret = ''
end = Math.min(buf.length, end)
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i])
}
return ret
}
function hexSlice (buf, start, end) {
var len = buf.length
if (!start || start < 0) start = 0
if (!end || end < 0 || end > len) end = len
var out = ''
for (var i = start; i < end; ++i) {
out += toHex(buf[i])
}
return out
}
function utf16leSlice (buf, start, end) {
var bytes = buf.slice(start, end)
var res = ''
for (var i = 0; i < bytes.length; i += 2) {
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
}
return res
}
Buffer.prototype.slice = function slice (start, end) {
var len = this.length
start = ~~start
end = end === undefined ? len : ~~end
if (start < 0) {
start += len
if (start < 0) start = 0
} else if (start > len) {
start = len
}
if (end < 0) {
end += len
if (end < 0) end = 0
} else if (end > len) {
end = len
}
if (end < start) end = start
var newBuf
if (Buffer.TYPED_ARRAY_SUPPORT) {
newBuf = this.subarray(start, end)
newBuf.__proto__ = Buffer.prototype
} else {
var sliceLen = end - start
newBuf = new Buffer(sliceLen, undefined)
for (var i = 0; i < sliceLen; ++i) {
newBuf[i] = this[i + start]
}
}
return newBuf
}
/*
* Need to make sure that buffer isn't trying to write out of bounds.
*/
function checkOffset (offset, ext, length) {
if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}
Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var val = this[offset]
var mul = 1
var i = 0
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul
}
return val
}
Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) {
checkOffset(offset, byteLength, this.length)
}
var val = this[offset + --byteLength]
var mul = 1
while (byteLength > 0 && (mul *= 0x100)) {
val += this[offset + --byteLength] * mul
}
return val
}
Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
if (!noAssert) checkOffset(offset, 1, this.length)
return this[offset]
}
Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
return this[offset] | (this[offset + 1] << 8)
}
Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
return (this[offset] << 8) | this[offset + 1]
}
Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return ((this[offset]) |
(this[offset + 1] << 8) |
(this[offset + 2] << 16)) +
(this[offset + 3] * 0x1000000)
}
Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset] * 0x1000000) +
((this[offset + 1] << 16) |
(this[offset + 2] << 8) |
this[offset + 3])
}
Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var val = this[offset]
var mul = 1
var i = 0
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul
}
mul *= 0x80
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
return val
}
Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var i = byteLength
var mul = 1
var val = this[offset + --i]
while (i > 0 && (mul *= 0x100)) {
val += this[offset + --i] * mul
}
mul *= 0x80
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
return val
}
Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
if (!noAssert) checkOffset(offset, 1, this.length)
if (!(this[offset] & 0x80)) return (this[offset])
return ((0xff - this[offset] + 1) * -1)
}
Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
var val = this[offset] | (this[offset + 1] << 8)
return (val & 0x8000) ? val | 0xFFFF0000 : val
}
Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length)
var val = this[offset + 1] | (this[offset] << 8)
return (val & 0x8000) ? val | 0xFFFF0000 : val
}
Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset]) |
(this[offset + 1] << 8) |
(this[offset + 2] << 16) |
(this[offset + 3] << 24)
}
Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset] << 24) |
(this[offset + 1] << 16) |
(this[offset + 2] << 8) |
(this[offset + 3])
}
Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return ieee754.read(this, offset, true, 23, 4)
}
Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length)
return ieee754.read(this, offset, false, 23, 4)
}
Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 8, this.length)
return ieee754.read(this, offset, true, 52, 8)
}
Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
if (!noAssert) checkOffset(offset, 8, this.length)
return ieee754.read(this, offset, false, 52, 8)
}
function checkInt (buf, value, offset, ext, max, min) {
if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
if (offset + ext > buf.length) throw new RangeError('Index out of range')
}
Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength) - 1
checkInt(this, value, offset, byteLength, maxBytes, 0)
}
var mul = 1
var i = 0
this[offset] = value & 0xFF
while (++i < byteLength && (mul *= 0x100)) {
this[offset + i] = (value / mul) & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
byteLength = byteLength | 0
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength) - 1
checkInt(this, value, offset, byteLength, maxBytes, 0)
}
var i = byteLength - 1
var mul = 1
this[offset + i] = value & 0xFF
while (--i >= 0 && (mul *= 0x100)) {
this[offset + i] = (value / mul) & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
this[offset] = (value & 0xff)
return offset + 1
}
function objectWriteUInt16 (buf, value, offset, littleEndian) {
if (value < 0) value = 0xffff + value + 1
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
(littleEndian ? i : 1 - i) * 8
}
}
Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
} else {
objectWriteUInt16(this, value, offset, true)
}
return offset + 2
}
Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 8)
this[offset + 1] = (value & 0xff)
} else {
objectWriteUInt16(this, value, offset, false)
}
return offset + 2
}
function objectWriteUInt32 (buf, value, offset, littleEndian) {
if (value < 0) value = 0xffffffff + value + 1
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
}
}
Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset + 3] = (value >>> 24)
this[offset + 2] = (value >>> 16)
this[offset + 1] = (value >>> 8)
this[offset] = (value & 0xff)
} else {
objectWriteUInt32(this, value, offset, true)
}
return offset + 4
}
Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 24)
this[offset + 1] = (value >>> 16)
this[offset + 2] = (value >>> 8)
this[offset + 3] = (value & 0xff)
} else {
objectWriteUInt32(this, value, offset, false)
}
return offset + 4
}
Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength - 1)
checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
var i = 0
var mul = 1
var sub = 0
this[offset] = value & 0xFF
while (++i < byteLength && (mul *= 0x100)) {
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
sub = 1
}
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength - 1)
checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
var i = byteLength - 1
var mul = 1
var sub = 0
this[offset + i] = value & 0xFF
while (--i >= 0 && (mul *= 0x100)) {
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
sub = 1
}
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
if (value < 0) value = 0xff + value + 1
this[offset] = (value & 0xff)
return offset + 1
}
Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
} else {
objectWriteUInt16(this, value, offset, true)
}
return offset + 2
}
Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 8)
this[offset + 1] = (value & 0xff)
} else {
objectWriteUInt16(this, value, offset, false)
}
return offset + 2
}
Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
this[offset + 2] = (value >>> 16)
this[offset + 3] = (value >>> 24)
} else {
objectWriteUInt32(this, value, offset, true)
}
return offset + 4
}
Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
value = +value
offset = offset | 0
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
if (value < 0) value = 0xffffffff + value + 1
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = (value >>> 24)
this[offset + 1] = (value >>> 16)
this[offset + 2] = (value >>> 8)
this[offset + 3] = (value & 0xff)
} else {
objectWriteUInt32(this, value, offset, false)
}
return offset + 4
}
function checkIEEE754 (buf, value, offset, ext, max, min) {
if (offset + ext > buf.length) throw new RangeError('Index out of range')
if (offset < 0) throw new RangeError('Index out of range')
}
function writeFloat (buf, value, offset, littleEndian, noAssert) {
if (!noAssert) {
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
}
ieee754.write(buf, value, offset, littleEndian, 23, 4)
return offset + 4
}
Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
return writeFloat(this, value, offset, true, noAssert)
}
Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
return writeFloat(this, value, offset, false, noAssert)
}
function writeDouble (buf, value, offset, littleEndian, noAssert) {
if (!noAssert) {
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
}
ieee754.write(buf, value, offset, littleEndian, 52, 8)
return offset + 8
}
Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
return writeDouble(this, value, offset, true, noAssert)
}
Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
return writeDouble(this, value, offset, false, noAssert)
}
// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
if (!start) start = 0
if (!end && end !== 0) end = this.length
if (targetStart >= target.length) targetStart = target.length
if (!targetStart) targetStart = 0
if (end > 0 && end < start) end = start
// Copy 0 bytes; we're done
if (end === start) return 0
if (target.length === 0 || this.length === 0) return 0
// Fatal error conditions
if (targetStart < 0) {
throw new RangeError('targetStart out of bounds')
}
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
if (end < 0) throw new RangeError('sourceEnd out of bounds')
// Are we oob?
if (end > this.length) end = this.length
if (target.length - targetStart < end - start) {
end = target.length - targetStart + start
}
var len = end - start
var i
if (this === target && start < targetStart && targetStart < end) {
// descending copy from end
for (i = len - 1; i >= 0; --i) {
target[i + targetStart] = this[i + start]
}
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
// ascending copy from start
for (i = 0; i < len; ++i) {
target[i + targetStart] = this[i + start]
}
} else {
Uint8Array.prototype.set.call(
target,
this.subarray(start, start + len),
targetStart
)
}
return len
}
// Usage:
// buffer.fill(number[, offset[, end]])
// buffer.fill(buffer[, offset[, end]])
// buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill (val, start, end, encoding) {
// Handle string cases:
if (typeof val === 'string') {
if (typeof start === 'string') {
encoding = start
start = 0
end = this.length
} else if (typeof end === 'string') {
encoding = end
end = this.length
}
if (val.length === 1) {
var code = val.charCodeAt(0)
if (code < 256) {
val = code
}
}
if (encoding !== undefined && typeof encoding !== 'string') {
throw new TypeError('encoding must be a string')
}
if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
throw new TypeError('Unknown encoding: ' + encoding)
}
} else if (typeof val === 'number') {
val = val & 255
}
// Invalid ranges are not set to a default, so can range check early.
if (start < 0 || this.length < start || this.length < end) {
throw new RangeError('Out of range index')
}
if (end <= start) {
return this
}
start = start >>> 0
end = end === undefined ? this.length : end >>> 0
if (!val) val = 0
var i
if (typeof val === 'number') {
for (i = start; i < end; ++i) {
this[i] = val
}
} else {
var bytes = Buffer.isBuffer(val)
? val
: utf8ToBytes(new Buffer(val, encoding).toString())
var len = bytes.length
for (i = 0; i < end - start; ++i) {
this[i + start] = bytes[i % len]
}
}
return this
}
// HELPER FUNCTIONS
// ================
var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
function base64clean (str) {
// Node strips out invalid characters like \n and \t from the string, base64-js does not
str = stringtrim(str).replace(INVALID_BASE64_RE, '')
// Node converts strings with length < 2 to ''
if (str.length < 2) return ''
// Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
while (str.length % 4 !== 0) {
str = str + '='
}
return str
}
function stringtrim (str) {
if (str.trim) return str.trim()
return str.replace(/^\s+|\s+$/g, '')
}
function toHex (n) {
if (n < 16) return '0' + n.toString(16)
return n.toString(16)
}
function utf8ToBytes (string, units) {
units = units || Infinity
var codePoint
var length = string.length
var leadSurrogate = null
var bytes = []
for (var i = 0; i < length; ++i) {
codePoint = string.charCodeAt(i)
// is surrogate component
if (codePoint > 0xD7FF && codePoint < 0xE000) {
// last char was a lead
if (!leadSurrogate) {
// no lead yet
if (codePoint > 0xDBFF) {
// unexpected trail
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
continue
} else if (i + 1 === length) {
// unpaired lead
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
continue
}
// valid lead
leadSurrogate = codePoint
continue
}
// 2 leads in a row
if (codePoint < 0xDC00) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
leadSurrogate = codePoint
continue
}
// valid surrogate pair
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
} else if (leadSurrogate) {
// valid bmp char, but last char was a lead
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
}
leadSurrogate = null
// encode utf8
if (codePoint < 0x80) {
if ((units -= 1) < 0) break
bytes.push(codePoint)
} else if (codePoint < 0x800) {
if ((units -= 2) < 0) break
bytes.push(
codePoint >> 0x6 | 0xC0,
codePoint & 0x3F | 0x80
)
} else if (codePoint < 0x10000) {
if ((units -= 3) < 0) break
bytes.push(
codePoint >> 0xC | 0xE0,
codePoint >> 0x6 & 0x3F | 0x80,
codePoint & 0x3F | 0x80
)
} else if (codePoint < 0x110000) {
if ((units -= 4) < 0) break
bytes.push(
codePoint >> 0x12 | 0xF0,
codePoint >> 0xC & 0x3F | 0x80,
codePoint >> 0x6 & 0x3F | 0x80,
codePoint & 0x3F | 0x80
)
} else {
throw new Error('Invalid code point')
}
}
return bytes
}
function asciiToBytes (str) {
var byteArray = []
for (var i = 0; i < str.length; ++i) {
// Node's code seems to be doing this and not & 0x7F..
byteArray.push(str.charCodeAt(i) & 0xFF)
}
return byteArray
}
function utf16leToBytes (str, units) {
var c, hi, lo
var byteArray = []
for (var i = 0; i < str.length; ++i) {
if ((units -= 2) < 0) break
c = str.charCodeAt(i)
hi = c >> 8
lo = c % 256
byteArray.push(lo)
byteArray.push(hi)
}
return byteArray
}
function base64ToBytes (str) {
return base64.toByteArray(base64clean(str))
}
function blitBuffer (src, dst, offset, length) {
for (var i = 0; i < length; ++i) {
if ((i + offset >= dst.length) || (i >= src.length)) break
dst[i + offset] = src[i]
}
return i
}
function isnan (val) {
return val !== val // eslint-disable-line no-self-compare
}
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(14)))
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
var basex = __webpack_require__(51)
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
module.exports = basex(ALPHABET)
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
!function(t,e){ true?module.exports=e():"function"==typeof define&&define.amd?define("FiveBellsCondition",[],e):"object"==typeof exports?exports.FiveBellsCondition=e():t.FiveBellsCondition=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.i=function(t){return t},e.d=function(t,e,r){Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=613)}([function(t,e,r){var n=r(4),i=r(32),o=r(14),a=r(15),f=r(33),s="prototype",u=function(t,e,r){var h,c,d,l,p=t&u.F,b=t&u.G,v=t&u.S,y=t&u.P,m=t&u.B,g=b?n:v?n[e]||(n[e]={}):(n[e]||{})[s],w=b?i:i[e]||(i[e]={}),_=w[s]||(w[s]={});b&&(r=e);for(h in r)c=!p&&g&&void 0!==g[h],d=(c?g:r)[h],l=m&&c?f(d,n):y&&"function"==typeof d?f(Function.call,d):d,g&&a(g,h,d,t&u.U),w[h]!=d&&o(w,h,l),y&&_[h]!=d&&(_[h]=d)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){"use strict";(function(t,n){function i(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,r){if(o()<r)throw new RangeError("Invalid typed array length");return t.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(r),e.__proto__=t.prototype):(null===e&&(e=new t(r)),e.length=r),e}function t(e,r,n){if(!(t.TYPED_ARRAY_SUPPORT||this instanceof t))return new t(e,r,n);if("number"==typeof e){if("string"==typeof r)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return f(this,e,r,n)}function f(t,e,r,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?l(t,e,r,n):"string"==typeof e?c(t,e,r):p(t,e)}function s(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function u(t,e,r,n){return s(e),e<=0?a(t,e):void 0!==r?"string"==typeof n?a(t,e).fill(r,n):a(t,e).fill(r):a(t,e)}function h(e,r){if(s(r),e=a(e,r<0?0:0|b(r)),!t.TYPED_ARRAY_SUPPORT)for(var n=0;n<r;++n)e[n]=0;return e}function c(e,r,n){if("string"==typeof n&&""!==n||(n="utf8"),!t.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|y(r,n);e=a(e,i);var o=e.write(r,n);return o!==i&&(e=e.slice(0,o)),e}function d(t,e){var r=e.length<0?0:0|b(e.length);t=a(t,r);for(var n=0;n<r;n+=1)t[n]=255&e[n];return t}function l(e,r,n,i){if(r.byteLength,n<0||r.byteLength<n)throw new RangeError("'offset' is out of bounds");if(r.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");return r=void 0===n&&void 0===i?new Uint8Array(r):void 0===i?new Uint8Array(r,n):new Uint8Array(r,n,i),t.TYPED_ARRAY_SUPPORT?(e=r,e.__proto__=t.prototype):e=d(e,r),e}function p(e,r){if(t.isBuffer(r)){var n=0|b(r.length);return e=a(e,n),0===e.length?e:(r.copy(e,0,0,n),e)}if(r){if("undefined"!=typeof ArrayBuffer&&r.buffer instanceof ArrayBuffer||"length"in r)return"number"!=typeof r.length||Z(r.length)?a(e,0):d(e,r);if("Buffer"===r.type&&Q(r.data))return d(e,r.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function b(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(e){return+e!=e&&(e=0),t.alloc(+e)}function y(e,r){if(t.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(e).length;default:if(i)return V(e).length;r=(""+r).toLowerCase(),i=!0}}function m(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return B(this,e,r);case"ascii":return R(this,e,r);case"latin1":case"binary":return P(this,e,r);case"base64":return I(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function w(e,r,n,i,o){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof r&&(r=t.from(r,i)),t.isBuffer(r))return 0===r.length?-1:_(e,r,n,i,o);if("number"==typeof r)return r&=255,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):_(e,[r],n,i,o);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,f=t.length,s=e.length;if(void 0!==n&&(n=String(n).toLowerCase(),"ucs2"===n||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,f/=2,s/=2,r/=2}var u;if(i){var h=-1;for(u=r;u<f;u++)if(o(t,u)===o(e,h===-1?0:u-h)){if(h===-1&&(h=u),u-h+1===s)return h*a}else h!==-1&&(u-=u-h),h=-1}else for(r+s>f&&(r=f-s),u=r;u>=0;u--){for(var c=!0,d=0;d<s;d++)if(o(t,u+d)!==o(e,d)){c=!1;break}if(c)return u}return-1}function M(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var f=parseInt(e.substr(2*a,2),16);if(isNaN(f))return a;t[r+a]=f}return a}function S(t,e,r,n){return W(V(e,t.length-r),t,r,n)}function E(t,e,r,n){return W(H(e),t,r,n)}function A(t,e,r,n){return E(t,e,r,n)}function k(t,e,r,n){return W(Y(e),t,r,n)}function x(t,e,r,n){return W(X(e,t.length-r),t,r,n)}function I(t,e,r){return 0===e&&r===t.length?J.fromByteArray(t):J.fromByteArray(t.slice(e,r))}function B(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o=t[i],a=null,f=o>239?4:o>223?3:o>191?2:1;if(i+f<=r){var s,u,h,c;switch(f){case 1:o<128&&(a=o);break;case 2:s=t[i+1],128===(192&s)&&(c=(31&o)<<6|63&s,c>127&&(a=c));break;case 3:s=t[i+1],u=t[i+2],128===(192&s)&&128===(192&u)&&(c=(15&o)<<12|(63&s)<<6|63&u,c>2047&&(c<55296||c>57343)&&(a=c));break;case 4:s=t[i+1],u=t[i+2],h=t[i+3],128===(192&s)&&128===(192&u)&&128===(192&h)&&(c=(15&o)<<18|(63&s)<<12|(63&u)<<6|63&h,c>65535&&c<1114112&&(a=c))}}null===a?(a=65533,f=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=f}return O(n)}function O(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=tt));return r}function R(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function P(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function T(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",o=e;o<r;++o)i+=G(t[o]);return i}function j(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function C(t,e,r){if(t%1!==0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function N(e,r,n,i,o,a){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||r<a)throw new RangeError('"value" argument is out of bounds');if(n+i>e.length)throw new RangeError("Index out of range")}function L(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i<o;++i)t[r+i]=(e&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function U(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i<o;++i)t[r+i]=e>>>8*(n?i:3-i)&255}function z(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function D(t,e,r,n,i){return i||z(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),$.write(t,e,r,n,23,4),r+4}function q(t,e,r,n,i){return i||z(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),$.write(t,e,r,n,52,8),r+8}function F(t){if(t=K(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function K(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function G(t){return t<16?"0"+t.toString(16):t.toString(16)}function V(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a<n;++a){if(r=t.charCodeAt(a),r>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}function X(t,e){for(var r,n,i,o=[],a=0;a<t.length&&!((e-=2)<0);++a)r=t.charCodeAt(a),n=r>>8,i=r%256,o.push(i),o.push(n);return o}function Y(t){return J.toByteArray(F(t))}function W(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function Z(t){return t!==t}var J=r(490),$=r(491),Q=r(492);e.Buffer=t,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,t.TYPED_ARRAY_SUPPORT=void 0!==n.TYPED_ARRAY_SUPPORT?n.TYPED_ARRAY_SUPPORT:i(),e.kMaxLength=o(),t.poolSize=8192,t._augment=function(e){return e.__proto__=t.prototype,e},t.from=function(t,e,r){return f(null,t,e,r)},t.TYPED_ARRAY_SUPPORT&&(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})),t.alloc=function(t,e,r){return u(null,t,e,r)},t.allocUnsafe=function(t){return h(null,t)},t.allocUnsafeSlow=function(t){return h(null,t)},t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,r){if(!t.isBuffer(e)||!t.isBuffer(r))throw new TypeError("Arguments must be Buffers");if(e===r)return 0;for(var n=e.length,i=r.length,o=0,a=Math.min(n,i);o<a;++o)if(e[o]!==r[o]){n=e[o],i=r[o];break}return n<i?-1:i<n?1:0},t.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},t.concat=function(e,r){if(!Q(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return t.alloc(0);var n;if(void 0===r)for(r=0,n=0;n<e.length;++n)r+=e[n].length;var i=t.allocUnsafe(r),o=0;for(n=0;n<e.length;++n){var a=e[n];if(!t.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(i,o),o+=a.length}return i},t.byteLength=y,t.prototype._isBuffer=!0,t.prototype.swap16=function(){var t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)g(this,e,e+1);return this},t.prototype.swap32=function(){var t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)g(this,e,e+3),g(this,e+1,e+2);return this},t.prototype.swap64=function(){var t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)g(this,e,e+7),g(this,e+1,e+6),g(this,e+2,e+5),g(this,e+3,e+4);return this},t.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?B(this,0,t):m.apply(this,arguments)},t.prototype.equals=function(e){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===t.compare(this,e)},t.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"},t.prototype.compare=function(e,r,n,i,o){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var a=o-i,f=n-r,s=Math.min(a,f),u=this.slice(i,o),h=e.slice(r,n),c=0;c<s;++c)if(u[c]!==h[c]){a=u[c],f=h[c];break}return a<f?-1:f<a?1:0},t.prototype.includes=function(t,e,r){return this.indexOf(t,e,r)!==-1},t.prototype.indexOf=function(t,e,r){return w(this,t,e,r,!0)},t.prototype.lastIndexOf=function(t,e,r){return w(this,t,e,r,!1)},t.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return M(this,t,e,r);case"utf8":case"utf-8":return S(this,t,e,r);case"ascii":return E(this,t,e,r);case"latin1":case"binary":return A(this,t,e,r);case"base64":return k(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(e,r){var n=this.length;e=~~e,r=void 0===r?n:~~r,e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r<e&&(r=e);var i;if(t.TYPED_ARRAY_SUPPORT)i=this.subarray(e,r),i.__proto__=t.prototype;else{var o=r-e;i=new t(o,void 0);for(var a=0;a<o;++a)i[a]=this[a+e]}return i},t.prototype.readUIntLE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},t.prototype.readUIntBE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},t.prototype.readUInt8=function(t,e){return e||C(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||C(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||C(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*e)),n},t.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||C(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||C(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(t,e){e||C(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(t,e){return e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||C(t,4,this.length),$.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||C(t,4,this.length),$.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||C(t,8,this.length),$.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||C(t,8,this.length),$.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){var i=Math.pow(2,8*r)-1;N(this,t,e,r,i,0)}var o=1,a=0;for(this[e]=255&t;++a<r&&(o*=256);)this[e+a]=t/o&255;return e+r},t.prototype.writeUIntBE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){var i=Math.pow(2,8*r)-1;N(this,t,e,r,i,0)}var o=r-1,a=1;for(this[e+o]=255&t;--o>=0&&(a*=256);)this[e+o]=t/a&255;return e+r},t.prototype.writeUInt8=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},t.prototype.writeUInt16LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):L(this,e,r,!0),r+2},t.prototype.writeUInt16BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):L(this,e,r,!1),r+2},t.prototype.writeUInt32LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):U(this,e,r,!0),r+4},t.prototype.writeUInt32BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):U(this,e,r,!1),r+4},t.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);N(this,t,e,r,i-1,-i)}var o=0,a=1,f=0;for(this[e]=255&t;++o<r&&(a*=256);)t<0&&0===f&&0!==this[e+o-1]&&(f=1),this[e+o]=(t/a>>0)-f&255;return e+r},t.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);N(this,t,e,r,i-1,-i)}var o=r-1,a=1,f=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===f&&0!==this[e+o+1]&&(f=1),this[e+o]=(t/a>>0)-f&255;return e+r},t.prototype.writeInt8=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},t.prototype.writeInt16LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):L(this,e,r,!0),r+2},t.prototype.writeInt16BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):L(this,e,r,!1),r+2},t.prototype.writeInt32LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):U(this,e,r,!0),r+4},t.prototype.writeInt32BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):U(this,e,r,!1),r+4},t.prototype.writeFloatLE=function(t,e,r){return D(this,t,e,!0,r)},t.prototype.writeFloatBE=function(t,e,r){return D(this,t,e,!1,r)},t.prototype.writeDoubleLE=function(t,e,r){return q(this,t,e,!0,r)},t.prototype.writeDoubleBE=function(t,e,r){return q(this,t,e,!1,r)},t.prototype.copy=function(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===e.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r<i-n&&(i=e.length-r+n);var o,a=i-n;if(this===e&&n<r&&r<i)for(o=a-1;o>=0;--o)e[o+r]=this[o+n];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o<a;++o)e[o+r]=this[o+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+a),r);return a},t.prototype.fill=function(e,r,n,i){if("string"==typeof e){if("string"==typeof r?(i=r,r=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===e.length){var o=e.charCodeAt(0);o<256&&(e=o)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!t.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof e&&(e&=255);if(r<0||this.length<r||this.length<n)throw new RangeError("Out of range index");if(n<=r)return this;r>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=r;a<n;++a)this[a]=e;else{var f=t.isBuffer(e)?e:V(new t(e,i).toString()),s=f.length;for(a=0;a<n-r;++a)this[a+r]=f[a%s]}return this};var et=/[^+\/0-9A-Za-z-_]/g}).call(e,r(1).Buffer,r(39))},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e,r){var n=r(6);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){var n=r(87)("wks"),i=r(48),o=r(4).Symbol,a="function"==typeof o,f=t.exports=function(t){return n[t]||(n[t]=a&&o[t]||(a?o:i)("Symbol."+t))};f.store=n},function(t,e,r){t.exports=!r(5)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(3),i=r(174),o=r(29),a=Object.defineProperty;e.f=r(8)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e,r){var n=r(38),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},function(t,e,r){var n=r(24);t.exports=function(t){return Object(n(t))}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(37);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(4),i=r(14),o=r(12),a=r(48)("src"),f="toString",s=Function[f],u=(""+s).split(f);r(32).inspectSource=function(t){return s.call(t)},(t.exports=function(t,e,r,f){var s="function"==typeof r;s&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(s&&(o(r,a)||i(r,a,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:f?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,f,function(){return"function"==typeof this&&this[a]||s.call(this)})},function(t,e,r){var n=r(0),i=r(5),o=r(24),a=/"/g,f=function(t,e,r,n){var i=String(o(t)),f="<"+e;return""!==r&&(f+=" "+r+'="'+String(n).replace(a,"&quot;")+'"'),f+">"+i+"</"+e+">"};t.exports=function(t,e){var r={};r[t]=e(f),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e,r){var n=r(65),i=r(24);t.exports=function(t){return n(i(t))}},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))))}function a(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=49?f-49+10:f>=17?f-17+10:f}return i}function s(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}function u(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,f=67108863&a,s=a/67108864|0;r.words[0]=f;for(var u=1;u<n;u++){for(var h=s>>>26,c=67108863&s,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;i=0|t.words[p],o=0|e.words[l],a=i*o+c,h+=a/67108864|0,c=67108863&a}r.words[u]=0|c,s=0|h}return 0!==s?r.words[u]=0|s:r.length--,r.strip()}function h(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>26)|0,i+=a>>>26,a&=67108863}r.words[o]=f,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(t,e,r){var n=new d;return n.mulp(t,e,r)}function d(t,e){this.x=t,this.y=e}function l(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function y(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function m(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function g(t){m.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var w;try{w=r(1).Buffer}catch(t){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36),t=t.toString().replace(/\s+/g,"");var i=0;"-"===t[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,h=r;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],M=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],S=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,e){t=t||10,e=0|e||1;var r;if(16===t||"hex"===t){r="";for(var i=0,o=0,a=0;a<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>24-i&16777215,r=0!==o||a!==this.length-1?_[6-s.length]+s+r:s+r,i+=2,i>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=M[t],h=S[t];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(t);c=c.idivn(h),r=c.isZero()?d+r:_[u-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n("undefined"!=typeof w),this.toArrayLike(w,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,f,s="le"===e,u=new t(o),h=this.clone();if(s){for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[f]=a;for(;f<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),
h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191&lt,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);
return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){"use strict";var n=e;n.version=r(465).version,n.utils=r(521),n.rand=r(522),n.hmacDRBG=r(519),n.curve=r(99),n.curves=r(512),n.ec=r(513),n.eddsa=r(516)},function(t,e,r){var n=r(66),i=r(37),o=r(17),a=r(29),f=r(12),s=r(174),u=Object.getOwnPropertyDescriptor;e.f=r(8)?u:function(t,e){if(t=o(t),e=a(e,!0),s)try{return u(t,e)}catch(t){}if(f(t,e))return i(!n.f.call(t,e),t[e])}},function(t,e,r){var n=r(12),i=r(11),o=r(133)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,e,r){"use strict";var n=e;n.version=r(467).version,n.utils=r(558),n.rand=r(559),n.hmacDRBG=r(556),n.curve=r(104),n.curves=r(549),n.ec=r(550),n.eddsa=r(553)},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(t){if(h===setTimeout)return setTimeout(t,0);if((h===r||!h)&&setTimeout)return h=setTimeout,setTimeout(t,0);try{return h(t,0)}catch(e){try{return h.call(null,t,0)}catch(e){return h.call(this,t,0)}}}function o(t){if(c===clearTimeout)return clearTimeout(t);if((c===n||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(t);try{return c(t)}catch(e){try{return c.call(null,t)}catch(e){return c.call(this,t)}}}function a(){b&&l&&(b=!1,l.length?p=l.concat(p):v=-1,p.length&&f())}function f(){if(!b){var t=i(a);b=!0;for(var e=p.length;e;){for(l=p,p=[];++v<e;)l&&l[v].run();v=-1,e=p.length}l=null,b=!1,o(t)}}function s(t,e){this.fun=t,this.array=e}function u(){}var h,c,d=t.exports={};!function(){try{h="function"==typeof setTimeout?setTimeout:r}catch(t){h=r}try{c="function"==typeof clearTimeout?clearTimeout:n}catch(t){c=n}}();var l,p=[],b=!1,v=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];p.push(new s(t,e)),1!==p.length||b||i(f)},s.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=u,d.addListener=u,d.once=u,d.off=u,d.removeListener=u,d.removeAllListeners=u,d.emit=u,d.binding=function(t){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(t){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(t,e,r){var n=r(33),i=r(65),o=r(11),a=r(10),f=r(283);t.exports=function(t,e){var r=1==t,s=2==t,u=3==t,h=4==t,c=6==t,d=5==t||c,l=e||f;return function(e,f,p){for(var b,v,y=o(e),m=i(y),g=n(f,p,3),w=a(m.length),_=0,M=r?l(e,w):s?l(e,0):void 0;w>_;_++)if((d||_ in m)&&(b=m[_],v=g(b,_,y),t))if(r)M[_]=v;else if(v)switch(t){case 3:return!0;case 5:return b;case 6:return _;case 2:M.push(b)}else if(h)return!1;return c?-1:u||h?h:M}}},function(t,e,r){var n=r(0),i=r(32),o=r(5);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],a={};a[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",a)}},function(t,e,r){var n=r(6);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))))}function a(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=49?f-49+10:f>=17?f-17+10:f}return i}function s(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}function u(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,f=67108863&a,s=a/67108864|0;r.words[0]=f;for(var u=1;u<n;u++){for(var h=s>>>26,c=67108863&s,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;i=0|t.words[p],o=0|e.words[l],a=i*o+c,h+=a/67108864|0,c=67108863&a}r.words[u]=0|c,s=0|h}return 0!==s?r.words[u]=0|s:r.length--,r.strip()}function h(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>26)|0,i+=a>>>26,a&=67108863}r.words[o]=f,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(t,e,r){var n=new d;return n.mulp(t,e,r)}function d(t,e){this.x=t,this.y=e}function l(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function y(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function m(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function g(t){m.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var w;try{w=r(1).Buffer}catch(t){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36),t=t.toString().replace(/\s+/g,"");var i=0;"-"===t[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,h=r;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],M=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],S=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,e){t=t||10,e=0|e||1;var r;if(16===t||"hex"===t){r="";for(var i=0,o=0,a=0;a<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>24-i&16777215,r=0!==o||a!==this.length-1?_[6-s.length]+s+r:s+r,i+=2,i>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=M[t],h=S[t];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(t);c=c.idivn(h),r=c.isZero()?d+r:_[u-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n("undefined"!=typeof w),this.toArrayLike(w,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,f,s="le"===e,u=new t(o),h=this.clone();if(s){for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[f]=a;for(;f<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191&lt,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),
this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){function n(){i.call(this)}t.exports=n;var i=r(110).EventEmitter,o=r(603);o(n,i),n.Readable=r(600),n.Writable=r(602),n.Duplex=r(595),n.Transform=r(601),n.PassThrough=r(599),n.Stream=n,n.prototype.pipe=function(t,e){function r(e){t.writable&&!1===t.write(e)&&u.pause&&u.pause()}function n(){u.readable&&u.resume&&u.resume()}function o(){h||(h=!0,t.end())}function a(){h||(h=!0,"function"==typeof t.destroy&&t.destroy())}function f(t){if(s(),0===i.listenerCount(this,"error"))throw t}function s(){u.removeListener("data",r),t.removeListener("drain",n),u.removeListener("end",o),u.removeListener("close",a),u.removeListener("error",f),t.removeListener("error",f),u.removeListener("end",s),u.removeListener("close",s),t.removeListener("close",s)}var u=this;u.on("data",r),t.on("drain",n),t._isStdio||e&&e.end===!1||(u.on("end",o),u.on("close",a));var h=!1;return u.on("error",f),t.on("error",f),u.on("end",s),u.on("close",s),t.on("close",s),t.emit("pipe",u),t}},function(t,e){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(13);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,r){var n=r(190),i=r(0),o=r(87)("metadata"),a=o.store||(o.store=new(r(193))),f=function(t,e,r){var i=a.get(t);if(!i){if(!r)return;a.set(t,i=new n)}var o=i.get(e);if(!o){if(!r)return;i.set(e,o=new n)}return o},s=function(t,e,r){var n=f(e,r,!1);return void 0!==n&&n.has(t)},u=function(t,e,r){var n=f(e,r,!1);return void 0===n?void 0:n.get(t)},h=function(t,e,r,n){f(r,n,!0).set(t,e)},c=function(t,e){var r=f(t,e,!1),n=[];return r&&r.forEach(function(t,e){n.push(e)}),n},d=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},l=function(t){i(i.S,"Reflect",t)};t.exports={store:a,map:f,has:s,get:u,set:h,keys:c,key:d,exp:l}},function(t,e,r){"use strict";if(r(8)){var n=r(41),i=r(4),o=r(5),a=r(0),f=r(88),s=r(140),u=r(33),h=r(40),c=r(37),d=r(14),l=r(45),p=r(38),b=r(10),v=r(47),y=r(29),m=r(12),g=r(187),w=r(64),_=r(6),M=r(11),S=r(125),E=r(42),A=r(21),k=r(43).f,x=r(142),I=r(48),B=r(7),O=r(27),R=r(78),P=r(134),T=r(143),j=r(56),C=r(84),N=r(46),L=r(118),U=r(167),z=r(9),D=r(20),q=z.f,F=D.f,K=i.RangeError,G=i.TypeError,V=i.Uint8Array,H="ArrayBuffer",X="Shared"+H,Y="BYTES_PER_ELEMENT",W="prototype",Z=Array[W],J=s.ArrayBuffer,$=s.DataView,Q=O(0),tt=O(2),et=O(3),rt=O(4),nt=O(5),it=O(6),ot=R(!0),at=R(!1),ft=T.values,st=T.keys,ut=T.entries,ht=Z.lastIndexOf,ct=Z.reduce,dt=Z.reduceRight,lt=Z.join,pt=Z.sort,bt=Z.slice,vt=Z.toString,yt=Z.toLocaleString,mt=B("iterator"),gt=B("toStringTag"),wt=I("typed_constructor"),_t=I("def_constructor"),Mt=f.CONSTR,St=f.TYPED,Et=f.VIEW,At="Wrong length!",kt=O(1,function(t,e){return Pt(P(t,t[_t]),e)}),xt=o(function(){return 1===new V(new Uint16Array([1]).buffer)[0]}),It=!!V&&!!V[W].set&&o(function(){new V(1).set({})}),Bt=function(t,e){if(void 0===t)throw G(At);var r=+t,n=b(t);if(e&&!g(r,n))throw K(At);return n},Ot=function(t,e){var r=p(t);if(r<0||r%e)throw K("Wrong offset!");return r},Rt=function(t){if(_(t)&&St in t)return t;throw G(t+" is not a typed array!")},Pt=function(t,e){if(!(_(t)&&wt in t))throw G("It is not a typed array constructor!");return new t(e)},Tt=function(t,e){return jt(P(t,t[_t]),e)},jt=function(t,e){for(var r=0,n=e.length,i=Pt(t,n);n>r;)i[r]=e[r++];return i},Ct=function(t,e,r){q(t,e,{get:function(){return this._d[r]}})},Nt=function(t){var e,r,n,i,o,a,f=M(t),s=arguments.length,h=s>1?arguments[1]:void 0,c=void 0!==h,d=x(f);if(void 0!=d&&!S(d)){for(a=d.call(f),n=[],e=0;!(o=a.next()).done;e++)n.push(o.value);f=n}for(c&&s>2&&(h=u(h,arguments[2],2)),e=0,r=b(f.length),i=Pt(this,r);r>e;e++)i[e]=c?h(f[e],e):f[e];return i},Lt=function(){for(var t=0,e=arguments.length,r=Pt(this,e);e>t;)r[t]=arguments[t++];return r},Ut=!!V&&o(function(){yt.call(new V(1))}),zt=function(){return yt.apply(Ut?bt.call(Rt(this)):Rt(this),arguments)},Dt={copyWithin:function(t,e){return U.call(Rt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return rt(Rt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return L.apply(Rt(this),arguments)},filter:function(t){return Tt(this,tt(Rt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return nt(Rt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return it(Rt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Q(Rt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return at(Rt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return ot(Rt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return lt.apply(Rt(this),arguments)},lastIndexOf:function(t){return ht.apply(Rt(this),arguments)},map:function(t){return kt(Rt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ct.apply(Rt(this),arguments)},reduceRight:function(t){return dt.apply(Rt(this),arguments)},reverse:function(){for(var t,e=this,r=Rt(e).length,n=Math.floor(r/2),i=0;i<n;)t=e[i],e[i++]=e[--r],e[r]=t;return e},some:function(t){return et(Rt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Rt(this),t)},subarray:function(t,e){var r=Rt(this),n=r.length,i=v(t,n);return new(P(r,r[_t]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,b((void 0===e?n:v(e,n))-i))}},qt=function(t,e){return Tt(this,bt.call(Rt(this),t,e))},Ft=function(t){Rt(this);var e=Ot(arguments[1],1),r=this.length,n=M(t),i=b(n.length),o=0;if(i+e>r)throw K(At);for(;o<i;)this[e+o]=n[o++]},Kt={entries:function(){return ut.call(Rt(this))},keys:function(){return st.call(Rt(this))},values:function(){return ft.call(Rt(this))}},Gt=function(t,e){return _(t)&&t[St]&&"symbol"!=typeof e&&e in t&&String(+e)==String(e)},Vt=function(t,e){return Gt(t,e=y(e,!0))?c(2,t[e]):F(t,e)},Ht=function(t,e,r){return!(Gt(t,e=y(e,!0))&&_(r)&&m(r,"value"))||m(r,"get")||m(r,"set")||r.configurable||m(r,"writable")&&!r.writable||m(r,"enumerable")&&!r.enumerable?q(t,e,r):(t[e]=r.value,t)};Mt||(D.f=Vt,z.f=Ht),a(a.S+a.F*!Mt,"Object",{getOwnPropertyDescriptor:Vt,defineProperty:Ht}),o(function(){vt.call({})})&&(vt=yt=function(){return lt.call(this)});var Xt=l({},Dt);l(Xt,Kt),d(Xt,mt,Kt.values),l(Xt,{slice:qt,set:Ft,constructor:function(){},toString:vt,toLocaleString:zt}),Ct(Xt,"buffer","b"),Ct(Xt,"byteOffset","o"),Ct(Xt,"byteLength","l"),Ct(Xt,"length","e"),q(Xt,gt,{get:function(){return this[St]}}),t.exports=function(t,e,r,s){s=!!s;var u=t+(s?"Clamped":"")+"Array",c="Uint8Array"!=u,l="get"+t,p="set"+t,v=i[u],y=v||{},m=v&&A(v),g=!v||!f.ABV,M={},S=v&&v[W],x=function(t,r){var n=t._d;return n.v[l](r*e+n.o,xt)},I=function(t,r,n){var i=t._d;s&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[p](r*e+i.o,n,xt)},B=function(t,e){q(t,e,{get:function(){return x(this,e)},set:function(t){return I(this,e,t)},enumerable:!0})};g?(v=r(function(t,r,n,i){h(t,v,u,"_d");var o,a,f,s,c=0,l=0;if(_(r)){if(!(r instanceof J||(s=w(r))==H||s==X))return St in r?jt(v,r):Nt.call(v,r);o=r,l=Ot(n,e);var p=r.byteLength;if(void 0===i){if(p%e)throw K(At);if(a=p-l,a<0)throw K(At)}else if(a=b(i)*e,a+l>p)throw K(At);f=a/e}else f=Bt(r,!0),a=f*e,o=new J(a);for(d(t,"_d",{b:o,o:l,l:a,e:f,v:new $(o)});c<f;)B(t,c++)}),S=v[W]=E(Xt),d(S,"constructor",v)):C(function(t){new v(null),new v(t)},!0)||(v=r(function(t,r,n,i){h(t,v,u);var o;return _(r)?r instanceof J||(o=w(r))==H||o==X?void 0!==i?new y(r,Ot(n,e),i):void 0!==n?new y(r,Ot(n,e)):new y(r):St in r?jt(v,r):Nt.call(v,r):new y(Bt(r,c))}),Q(m!==Function.prototype?k(y).concat(k(m)):k(y),function(t){t in v||d(v,t,y[t])}),v[W]=S,n||(S.constructor=v));var O=S[mt],R=!!O&&("values"==O.name||void 0==O.name),P=Kt.values;d(v,wt,!0),d(S,St,u),d(S,Et,!0),d(S,_t,v),(s?new v(1)[gt]==u:gt in S)||q(S,gt,{get:function(){return u}}),M[u]=v,a(a.G+a.W+a.F*(v!=y),M),a(a.S,u,{BYTES_PER_ELEMENT:e,from:Nt,of:Lt}),Y in S||d(S,Y,e),a(a.P,u,Dt),N(u),a(a.P+a.F*It,u,{set:Ft}),a(a.P+a.F*!R,u,Kt),a(a.P+a.F*(S.toString!=vt),u,{toString:vt}),a(a.P+a.F*o(function(){new v(1).slice()}),u,{slice:qt}),a(a.P+a.F*(o(function(){return[1,2].toLocaleString()!=new v([1,2]).toLocaleString()})||!o(function(){S.toLocaleString.call([1,2])})),u,{toLocaleString:zt}),j[u]=R?O:P,n||R||d(S,mt,P)}}else t.exports=function(){}},function(t,e,r){var n=r(48)("meta"),i=r(6),o=r(12),a=r(9).f,f=0,s=Object.isExtensible||function(){return!0},u=!r(5)(function(){return s(Object.preventExtensions({}))}),h=function(t){a(t,n,{value:{i:"O"+ ++f,w:{}}})},c=function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,n)){if(!s(t))return"F";if(!e)return"E";h(t)}return t[n].i},d=function(t,e){if(!o(t,n)){if(!s(t))return!0;if(!e)return!1;h(t)}return t[n].w},l=function(t){return u&&p.NEED&&s(t)&&!o(t,n)&&h(t),t},p=t.exports={KEY:n,NEED:!1,fastKey:c,getWeak:d,onFreeze:l}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e){t.exports=!1},function(t,e,r){var n=r(3),i=r(180),o=r(121),a=r(133)("IE_PROTO"),f=function(){},s="prototype",u=function(){var t,e=r(120)("iframe"),n=o.length,i="<",a=">";for(e.style.display="none",r(123).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(i+"script"+a+"document.F=Object"+i+"/script"+a),t.close(),u=t.F;n--;)delete u[s][o[n]];return u()};t.exports=Object.create||function(t,e){var r;return null!==t?(f[s]=n(t),r=new f,f[s]=null,r[a]=t):r=u(),void 0===e?r:i(r,e)}},function(t,e,r){var n=r(182),i=r(121).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},function(t,e,r){var n=r(182),i=r(121);t.exports=Object.keys||function(t){return n(t,i)}},function(t,e,r){var n=r(15);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){"use strict";var n=r(4),i=r(9),o=r(8),a=r(7)("species");t.exports=function(t){var e=n[t];o&&e&&!e[a]&&i.f(e,a,{configurable:!0,get:function(){return this}})}},function(t,e,r){var n=r(38),i=Math.max,o=Math.min;t.exports=function(t,e){return t=n(t),t<0?i(t+e,0):o(t,e)}},function(t,e){var r=0,n=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+n).toString(36))}},function(t,e,r){var n=e;n.utils=r(527),n.common=r(523),n.sha=r(526),n.ripemd=r(525),n.hmac=r(524),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(t,e,r){var n=e;n.utils=r(564),n.common=r(560),n.sha=r(563),n.ripemd=r(562),n.hmac=r(561),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(t,e,r){"use strict";function n(t){return this instanceof n?(u.call(this,t),h.call(this,t),t&&t.readable===!1&&(this.readable=!1),t&&t.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,t&&t.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",i)):new n(t)}function i(){this.allowHalfOpen||this._writableState.ended||f(o,this)}function o(t){t.end()}var a=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=n;var f=r(157),s=r(73);s.inherits=r(74);var u=r(250),h=r(155);s.inherits(n,u);for(var c=a(h.prototype),d=0;d<c.length;d++){var l=c[d];n.prototype[l]||(n.prototype[l]=h.prototype[l])}},function(t,e,r){function n(t){if(t&&!s(t))throw new Error("Unknown encoding: "+t)}function i(t){return t.toString(this.encoding)}function o(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function a(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var f=r(1).Buffer,s=f.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},u=e.StringDecoder=function(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),n(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=a;break;default:return void(this.write=i)}this.charBuffer=new f(6),this.charReceived=0,this.charLength=0};u.prototype.write=function(t){for(var e="";this.charLength;){var r=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived<this.charLength)return"";t=t.slice(r,t.length),e=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var n=e.charCodeAt(e.length-1);if(!(n>=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,n=e.charCodeAt(i);if(n>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},u.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var r=t[t.length-e];if(1==e&&r>>5==6){this.charLength=2;break}if(e<=2&&r>>4==14){this.charLength=3;break}if(e<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=e},u.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;e+=n.slice(0,r).toString(i)}return e}},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){var n=r(7)("unscopables"),i=Array.prototype;void 0==i[n]&&r(14)(i,n,{}),t.exports=function(t){i[n][t]=!0}},function(t,e,r){var n=r(33),i=r(176),o=r(125),a=r(3),f=r(10),s=r(142),u={},h={},e=t.exports=function(t,e,r,c,d){var l,p,b,v,y=d?function(){return t}:s(t),m=n(r,c,e?2:1),g=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(l=f(t.length);l>g;g++)if(v=e?m(a(p=t[g])[0],p[1]):m(t[g]),v===u||v===h)return v}else for(b=y.call(t);!(p=b.next()).done;)if(v=i(b,m,p.value,e),v===u||v===h)return v};e.BREAK=u,e.RETURN=h},function(t,e){t.exports={}},function(t,e,r){var n=r(9).f,i=r(12),o=r(7)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},function(t,e,r){var n=r(0),i=r(24),o=r(5),a=r(138),f="["+a+"]",s="…",u=RegExp("^"+f+f+"*"),h=RegExp(f+f+"*$"),c=function(t,e,r){var i={},f=o(function(){return!!a[t]()||s[t]()!=s}),u=i[t]=f?e(d):a[t];r&&(i[r]=u),n(n.P+n.F*f,"String",i)},d=c.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(h,"")),t};t.exports=c},function(t,e,r){"use strict";(function(e){function n(t){u.call(this,"digest"),this._hash=t,this.buffers=[]}function i(t){u.call(this,"digest"),this._hash=t}var o=r(2),a=r(105),f=r(567),s=r(568),u=r(566);o(n,u),n.prototype._update=function(t){this.buffers.push(t)},n.prototype._final=function(){var t=e.concat(this.buffers),r=this._hash(t);return this.buffers=null,r},o(i,u),i.prototype._update=function(t){this._hash.update(t)},i.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return t=t.toLowerCase(),"md5"===t?new n(a):"rmd160"===t||"ripemd160"===t?new n(f):new i(s(t))}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t,r){this._block=new e(t),this._finalSize=r,this._blockSize=t,this._len=0,this._s=0}r.prototype.update=function(t,r){"string"==typeof t&&(r=r||"utf8",t=new e(t,r));for(var n=this._len+=t.length,i=this._s||0,o=0,a=this._block;i<n;){for(var f=Math.min(t.length,o+this._blockSize-i%this._blockSize),s=f-o,u=0;u<s;u++)a[i%this._blockSize+u]=t[u+o];i+=s,o+=s,i%this._blockSize===0&&this._update(a)}return this._s=i,this},r.prototype.digest=function(t){var e=8*this._len;this._block[this._len%this._blockSize]=128,this._block.fill(0,this._len%this._blockSize+1),e%(8*this._blockSize)>=8*this._finalSize&&(this._update(this._block),this._block.fill(0)),this._block.writeInt32BE(e,this._blockSize-4);var r=this._update(this._block)||this._hash();return t?r.toString(t):r},r.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=r}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e,r,n){function i(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}function o(t,i){if(t>65536)throw new Error("requested too many random bytes");var o=new e.Uint8Array(t);t>0&&a.getRandomValues(o);var f=new r(o.buffer);return"function"==typeof i?n.nextTick(function(){i(null,f)}):f}var a=e.crypto||e.msCrypto;a&&a.getRandomValues?t.exports=o:t.exports=i}).call(e,r(39),r(1).Buffer,r(26))},function(t,e){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var o=function(t){function e(t){r(this,e);var i=n(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return Object.defineProperty(i,"message",{configurable:!0,enumerable:!1,value:void 0!==t?String(t):""}),Object.defineProperty(i,"name",{configurable:!0,enumerable:!1,value:i.constructor.name}),Error.captureStackTrace&&Error.captureStackTrace(i,i.constructor),i}return i(e,t),e}(Error);t.exports=o},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(115),a=r(75),f=r(90),s=r(91),u=r(201),h=r(116),c=r(159),d=r(113),l=/^cf:([1-9a-f][0-9a-f]{0,3}|0):[a-zA-Z0-9_-]*$/,p=function(){function t(){n(this,t)}return i(t,[{key:"getTypeId",value:function(){return this.constructor.TYPE_ID}},{key:"getBitmask",value:function(){return this.constructor.FEATURE_BITMASK}},{key:"getCondition",value:function(){var t=new a;return t.setTypeId(this.getTypeId()),t.setBitmask(this.getBitmask()),t.setHash(this.generateHash()),t.setMaxFulfillmentLength(this.calculateMaxFulfillmentLength()),t}},{key:"getConditionUri",value:function(){return this.getCondition().serializeUri()}},{key:"getConditionBinary",value:function(){return this.getCondition().serializeBinary()}},{key:"generateHash",value:function(){throw new Error("This method should be implemented by a subclass")}},{key:"calculateMaxFulfillmentLength",value:function(){var t=new f;return this.writePayload(t),t.getSize()}},{key:"serializeUri",value:function(){return"cf:"+this.getTypeId().toString(16)+":"+h.encode(this.serializePayload())}},{key:"serializeBinary",value:function(){var t=new s;return t.writeUInt16(this.getTypeId()),t.writeVarOctetString(this.serializePayload()),t.getBuffer()}},{key:"serializePayload",value:function(){var t=new s;return this.writePayload(t),t.getBuffer()}},{key:"validate",value:function(){throw new Error("Not implemented")}}],[{key:"fromUri",value:function(e){if(e instanceof t)return e;if("string"!=typeof e)throw new Error("Serialized fulfillment must be a string");var r=e.split(":");if("cf"!==r[0])throw new c('Serialized fulfillment must start with "cf:"');if(!t.REGEX.exec(e))throw new d("Invalid fulfillment format");var n=parseInt(r[1],16),i=h.decode(r[2]),a=o.getClassFromTypeId(n),f=new a;return f.parsePayload(u.from(i),i.length),f}},{key:"fromBinary",value:function(t){t=u.from(t);var e=o.getClassFromTypeId(t.readUInt16()),r=new e,n=t.readLengthPrefix();return r.parsePayload(t,n),r}}]),t}();p.REGEX=l,t.exports=p},function(t,e,r){var n=r(23),i=r(7)("toStringTag"),o="Arguments"==n(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,r,f;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=a(e=Object(t),i))?r:o?n(e):"Object"==(f=n(e))&&"function"==typeof e.callee?"Arguments":f}},function(t,e,r){var n=r(23);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;o<n;++o)i[o]=t[o]^r[o];return i}}).call(e,r(1).Buffer)},function(t,e,r){var n=e;n.Reporter=r(532).Reporter,n.DecoderBuffer=r(214).DecoderBuffer,n.EncoderBuffer=r(214).EncoderBuffer,n.Node=r(531)},function(t,e,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;o<n;++o)i[o]=t[o]^r[o];return i}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))))}function a(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=49?f-49+10:f>=17?f-17+10:f}return i}function s(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}function u(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,f=67108863&a,s=a/67108864|0;r.words[0]=f;for(var u=1;u<n;u++){for(var h=s>>>26,c=67108863&s,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;i=0|t.words[p],o=0|e.words[l],a=i*o+c,h+=a/67108864|0,c=67108863&a}r.words[u]=0|c,s=0|h}return 0!==s?r.words[u]=0|s:r.length--,r.strip()}function h(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>26)|0,i+=a>>>26,a&=67108863}r.words[o]=f,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(t,e,r){var n=new d;return n.mulp(t,e,r)}function d(t,e){this.x=t,this.y=e}function l(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function y(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function m(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function g(t){m.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var w;try{w=r(1).Buffer}catch(t){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36),t=t.toString().replace(/\s+/g,"");var i=0;"-"===t[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,h=r;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],M=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],S=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,e){t=t||10,e=0|e||1;var r;if(16===t||"hex"===t){r="";for(var i=0,o=0,a=0;a<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>24-i&16777215,r=0!==o||a!==this.length-1?_[6-s.length]+s+r:s+r,i+=2,i>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=M[t],h=S[t];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(t);c=c.idivn(h),r=c.isZero()?d+r:_[u-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n("undefined"!=typeof w),this.toArrayLike(w,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,f,s="le"===e,u=new t(o),h=this.clone();if(s){for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[f]=a;for(;f<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191&lt,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},
d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){var n=e;n.Reporter=r(582).Reporter,n.DecoderBuffer=r(234).DecoderBuffer,n.EncoderBuffer=r(234).EncoderBuffer,n.Node=r(581)},function(t,e,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;o<n;++o)i[o]=t[o]^r[o];return i}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t){return Array.isArray?Array.isArray(t):"[object Array]"===v(t)}function n(t){return"boolean"==typeof t}function i(t){return null===t}function o(t){return null==t}function a(t){return"number"==typeof t}function f(t){return"string"==typeof t}function s(t){return"symbol"==typeof t}function u(t){return void 0===t}function h(t){return"[object RegExp]"===v(t)}function c(t){return"object"==typeof t&&null!==t}function d(t){return"[object Date]"===v(t)}function l(t){return"[object Error]"===v(t)||t instanceof Error}function p(t){return"function"==typeof t}function b(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t}function v(t){return Object.prototype.toString.call(t)}e.isArray=r,e.isBoolean=n,e.isNull=i,e.isNullOrUndefined=o,e.isNumber=a,e.isString=f,e.isSymbol=s,e.isUndefined=u,e.isRegExp=h,e.isObject=c,e.isDate=d,e.isError=l,e.isFunction=p,e.isPrimitive=b,e.isBuffer=t.isBuffer}).call(e,r(1).Buffer)},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(115),a=r(159),f=r(113),s=r(53),u=r(116),h=r(201),c=r(91),d=r(162),l=/^cc:([1-9a-f][0-9a-f]{0,3}|0):[1-9a-f][0-9a-f]{0,15}:[a-zA-Z0-9_-]{0,86}:([1-9][0-9]{0,17}|0)$/,p=/^cc:([1-9a-f][0-9a-f]{0,3}|0):[1-9a-f][0-9a-f]{0,7}:[a-zA-Z0-9_-]{0,86}:([1-9][0-9]{0,17}|0)$/,b=function(){function t(){n(this,t)}return i(t,[{key:"getTypeId",value:function(){return this.type}},{key:"setTypeId",value:function(t){this.type=t}},{key:"getBitmask",value:function(){return this.bitmask}},{key:"setBitmask",value:function(t){this.bitmask=t}},{key:"getHash",value:function(){if(!this.hash)throw new s("Hash not set");return this.hash}},{key:"setHash",value:function(t){if(!e.isBuffer(t))throw new TypeError("Hash must be a Buffer");this.hash=t}},{key:"getMaxFulfillmentLength",value:function(){if("number"!=typeof this.maxFulfillmentLength)throw new s("Maximum fulfillment length not set");return this.maxFulfillmentLength}},{key:"setMaxFulfillmentLength",value:function(t){if(!d(t))throw new TypeError("Fulfillment length must be an integer");if(t<0)throw new TypeError("Fulfillment length must be positive or zero");this.maxFulfillmentLength=t}},{key:"serializeUri",value:function(){return"cc:"+this.getTypeId().toString(16)+":"+this.getBitmask().toString(16)+":"+u.encode(this.getHash())+":"+this.getMaxFulfillmentLength()}},{key:"serializeBinary",value:function(){var t=new c;return t.writeUInt16(this.getTypeId()),t.writeVarUInt(this.getBitmask()),t.writeVarOctetString(this.getHash()),t.writeVarUInt(this.getMaxFulfillmentLength()),t.getBuffer()}},{key:"parseBinary",value:function(t){this.setTypeId(t.readUInt16()),this.setBitmask(t.readVarUInt()),this.setHash(t.readVarOctetString()),this.setMaxFulfillmentLength(t.readVarUInt())}},{key:"validate",value:function(){if(o.getClassFromTypeId(this.getTypeId()),this.getBitmask()>t.MAX_SAFE_BITMASK)throw new Error("Bitmask too large to be safely represented");if(this.getBitmask()&~t.SUPPORTED_BITMASK)throw new Error("Condition requested unsupported feature suites");if(this.getMaxFulfillmentLength()>t.MAX_FULFILLMENT_LENGTH)throw new Error("Condition requested too large of a max fulfillment size");return!0}}],[{key:"fromUri",value:function(e){if(e instanceof t)return e;if("string"!=typeof e)throw new Error("Serialized condition must be a string");var r=e.split(":");if("cc"!==r[0])throw new a('Serialized condition must start with "cc:"');if(!t.REGEX_STRICT.exec(e))throw new f("Invalid condition format");var n=new t;return n.setTypeId(parseInt(r[1],16)),n.setBitmask(parseInt(r[2],16)),n.setHash(u.decode(r[3])),n.setMaxFulfillmentLength(parseInt(r[4],10)),n}},{key:"fromBinary",value:function(e){e=h.from(e);var r=new t;return r.parseBinary(e),r}}]),t}();b.MAX_SAFE_BITMASK=4294967295,b.SUPPORTED_BITMASK=63,b.MAX_FULFILLMENT_LENGTH=65535,b.REGEX=l,b.REGEX_STRICT=p,t.exports=b}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(63),s=r(114),u=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),a(e,[{key:"generateHash",value:function(){var t=new s("sha256");return this.writeHashPayload(t),t.getDigest()}}]),e}(f);t.exports=u},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){var n=r(17),i=r(10),o=r(47);t.exports=function(t){return function(e,r,a){var f,s=n(e),u=i(s.length),h=o(a,u);if(t&&r!=r){for(;u>h;)if(f=s[h++],f!=f)return!0}else for(;u>h;h++)if((t||h in s)&&s[h]===r)return t||h||0;return!t&&-1}}},function(t,e,r){"use strict";var n=r(4),i=r(0),o=r(15),a=r(45),f=r(36),s=r(55),u=r(40),h=r(6),c=r(5),d=r(84),l=r(57),p=r(124);t.exports=function(t,e,r,b,v,y){var m=n[t],g=m,w=v?"set":"add",_=g&&g.prototype,M={},S=function(t){var e=_[t];o(_,t,"delete"==t?function(t){return!(y&&!h(t))&&e.call(this,0===t?0:t)}:"has"==t?function(t){return!(y&&!h(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return y&&!h(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof g&&(y||_.forEach&&!c(function(){(new g).entries().next()}))){var E=new g,A=E[w](y?{}:-0,1)!=E,k=c(function(){E.has(1)}),x=d(function(t){new g(t)}),I=!y&&c(function(){for(var t=new g,e=5;e--;)t[w](e,e);return!t.has(-0)});x||(g=e(function(e,r){u(e,g,t);var n=p(new m,e,g);return void 0!=r&&s(r,v,n[w],n),n}),g.prototype=_,_.constructor=g),(k||I)&&(S("delete"),S("has"),v&&S("get")),(I||A)&&S(w),y&&_.clear&&delete _.clear}else g=b.getConstructor(e,t,v,w),a(g.prototype,r),f.NEED=!0;return l(g,t),M[t]=g,i(i.G+i.W+i.F*(g!=m),M),y||b.setStrong(g,t,v),g}},function(t,e,r){"use strict";var n=r(14),i=r(15),o=r(5),a=r(24),f=r(7);t.exports=function(t,e,r){var s=f(t),u=r(a,s,""[t]),h=u[0],c=u[1];o(function(){var e={};return e[s]=function(){return 7},7!=""[t](e)})&&(i(String.prototype,t,h),n(RegExp.prototype,s,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},function(t,e,r){"use strict";var n=r(3);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e){t.exports=function(t,e,r){var n=void 0===r;switch(e.length){case 0:return n?t():t.call(r);case 1:return n?t(e[0]):t.call(r,e[0]);case 2:return n?t(e[0],e[1]):t.call(r,e[0],e[1]);case 3:return n?t(e[0],e[1],e[2]):t.call(r,e[0],e[1],e[2]);case 4:return n?t(e[0],e[1],e[2],e[3]):t.call(r,e[0],e[1],e[2],e[3])}return t.apply(r,e)}},function(t,e,r){var n=r(6),i=r(23),o=r(7)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(7)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],a=o[n]();a.next=function(){return{done:r=!0}},o[n]=function(){return a},t(o)}catch(t){}return r}},function(t,e,r){t.exports=r(41)||!r(5)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(4)[t]})},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(4),i="__core-js_shared__",o=n[i]||(n[i]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e,r){for(var n,i=r(4),o=r(14),a=r(48),f=a("typed_array"),s=a("view"),u=!(!i.ArrayBuffer||!i.DataView),h=u,c=0,d=9,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");c<d;)(n=i[l[c++]])?(o(n.prototype,f,!0),o(n.prototype,s,!0)):h=!1;t.exports={ABV:u,CONSTR:h,TYPED:f,VIEW:s}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){"use strict";t.exports=r(472)},function(t,e,r){"use strict";t.exports=r(474)},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,configurable:!1,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,configurable:!1,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,r){"use strict";e.randomBytes=e.rng=e.pseudoRandomBytes=e.prng=r(61),e.createHash=e.Hash=r(59),e.createHmac=e.Hmac=r(149);var n=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(Object.keys(r(211)));e.getHashes=function(){return n};var i=r(151);e.pbkdf2=i.pbkdf2,e.pbkdf2Sync=i.pbkdf2Sync;var o=r(493);["Cipher","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers"].forEach(function(t){e[t]=o[t]});var a=r(573);["DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman"].forEach(function(t){e[t]=a[t]});var f=r(506);["createSign","Sign","createVerify","Verify"].forEach(function(t){e[t]=f[t]}),e.createECDH=r(544);var s=r(577);["publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt"].forEach(function(t){e[t]=s[t]}),["createCredentials"].forEach(function(t){e[t]=function(){throw new Error(["sorry, "+t+" is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))}})},function(t,e,r){(function(t){function r(t){var e,r;return e=t>f||t<0?(r=Math.abs(t)%f,t<0?f-r:r):t}function n(t){for(var e=0;e<t.length;t++)t[e]=0;return!1}function i(){this.SBOX=[],this.INV_SBOX=[],this.SUB_MIX=[[],[],[],[]],this.INV_SUB_MIX=[[],[],[],[]],this.init(),this.RCON=[0,1,2,4,8,16,32,64,128,27,54]}function o(t){for(var e=t.length/4,r=new Array(e),n=-1;++n<e;)r[n]=t.readUInt32BE(4*n);return r}function a(t){this._key=o(t),this._doReset()}var f=Math.pow(2,32);i.prototype.init=function(){var t,e,r,n,i,o,a,f,s,u;for(t=function(){var t,r;for(r=[],e=t=0;t<256;e=++t)e<128?r.push(e<<1):r.push(e<<1^283);return r}(),i=0,s=0,e=u=0;u<256;e=++u)r=s^s<<1^s<<2^s<<3^s<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=t[i],a=t[o],f=t[a],n=257*t[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*f^65537*a^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=s=1:(i=o^t[t[t[f^o]]],s^=t[t[s]]);return!0};var s=new i;a.blockSize=16,a.prototype.blockSize=a.blockSize,a.keySize=32,a.prototype.keySize=a.keySize,a.prototype._doReset=function(){var t,e,r,n,i,o;for(r=this._key,e=r.length,this._nRounds=e+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;n<i;n++)this._keySchedule[n]=n<e?r[n]:(o=this._keySchedule[n-1],n%e===0?(o=o<<8|o>>>24,o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o],o^=s.RCON[n/e|0]<<24):e>6&&n%e===4?o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o]:void 0,this._keySchedule[n-e]^o);for(this._invKeySchedule=[],t=0;t<i;t++)n=i-t,o=this._keySchedule[n-(t%4?0:4)],this._invKeySchedule[t]=t<4||n<=4?o:s.INV_SUB_MIX[0][s.SBOX[o>>>24]]^s.INV_SUB_MIX[1][s.SBOX[o>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[o>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&o]];
return!0},a.prototype.encryptBlock=function(e){e=o(new t(e));var r=this._doCryptBlock(e,this._keySchedule,s.SUB_MIX,s.SBOX),n=new t(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},a.prototype.decryptBlock=function(e){e=o(new t(e));var r=[e[3],e[1]];e[1]=r[0],e[3]=r[1];var n=this._doCryptBlock(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),i=new t(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},a.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},a.prototype._doCryptBlock=function(t,e,n,i){var o,a,f,s,u,h,c,d,l;a=t[0]^e[0],f=t[1]^e[1],s=t[2]^e[2],u=t[3]^e[3],o=4;for(var p=1;p<this._nRounds;p++)h=n[0][a>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&u]^e[o++],c=n[0][f>>>24]^n[1][s>>>16&255]^n[2][u>>>8&255]^n[3][255&a]^e[o++],d=n[0][s>>>24]^n[1][u>>>16&255]^n[2][a>>>8&255]^n[3][255&f]^e[o++],l=n[0][u>>>24]^n[1][a>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^e[o++],a=h,f=c,s=d,u=l;return h=(i[a>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&u])^e[o++],c=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[u>>>8&255]<<8|i[255&a])^e[o++],d=(i[s>>>24]<<24|i[u>>>16&255]<<16|i[a>>>8&255]<<8|i[255&f])^e[o++],l=(i[u>>>24]<<24|i[a>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^e[o++],[r(h),r(c),r(d),r(l)]},e.AES=a}).call(e,r(1).Buffer)},function(t,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},function(t,e,r){(function(t){function n(t){for(var e,r=t.length;r--;){if(e=t.readUInt8(r),255!==e){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function i(t){var e=t._cipher.encryptBlock(t._prev);return n(t._prev),e}var o=r(67);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,i(e)]);var n=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),o(r,n)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){"use strict";var n=e;n.base=r(508),n.short=r(511),n.mont=r(510),n.edwards=r(509)},function(t,e,r){var n=e;n.bignum=r(18),n.define=r(530).define,n.base=r(68),n.constants=r(215),n.decoders=r(534),n.encoders=r(536)},function(t,e,r){(function(t){function r(t){var e,r;return e=t>f||t<0?(r=Math.abs(t)%f,t<0?f-r:r):t}function n(t){for(var e=0;e<t.length;t++)t[e]=0;return!1}function i(){this.SBOX=[],this.INV_SBOX=[],this.SUB_MIX=[[],[],[],[]],this.INV_SUB_MIX=[[],[],[],[]],this.init(),this.RCON=[0,1,2,4,8,16,32,64,128,27,54]}function o(t){for(var e=t.length/4,r=new Array(e),n=-1;++n<e;)r[n]=t.readUInt32BE(4*n);return r}function a(t){this._key=o(t),this._doReset()}var f=Math.pow(2,32);i.prototype.init=function(){var t,e,r,n,i,o,a,f,s,u;for(t=function(){var t,r;for(r=[],e=t=0;t<256;e=++t)e<128?r.push(e<<1):r.push(e<<1^283);return r}(),i=0,s=0,e=u=0;u<256;e=++u)r=s^s<<1^s<<2^s<<3^s<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=t[i],a=t[o],f=t[a],n=257*t[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*f^65537*a^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=s=1:(i=o^t[t[t[f^o]]],s^=t[t[s]]);return!0};var s=new i;a.blockSize=16,a.prototype.blockSize=a.blockSize,a.keySize=32,a.prototype.keySize=a.keySize,a.prototype._doReset=function(){var t,e,r,n,i,o;for(r=this._key,e=r.length,this._nRounds=e+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;n<i;n++)this._keySchedule[n]=n<e?r[n]:(o=this._keySchedule[n-1],n%e===0?(o=o<<8|o>>>24,o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o],o^=s.RCON[n/e|0]<<24):e>6&&n%e===4?o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o]:void 0,this._keySchedule[n-e]^o);for(this._invKeySchedule=[],t=0;t<i;t++)n=i-t,o=this._keySchedule[n-(t%4?0:4)],this._invKeySchedule[t]=t<4||n<=4?o:s.INV_SUB_MIX[0][s.SBOX[o>>>24]]^s.INV_SUB_MIX[1][s.SBOX[o>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[o>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&o]];return!0},a.prototype.encryptBlock=function(e){e=o(new t(e));var r=this._doCryptBlock(e,this._keySchedule,s.SUB_MIX,s.SBOX),n=new t(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},a.prototype.decryptBlock=function(e){e=o(new t(e));var r=[e[3],e[1]];e[1]=r[0],e[3]=r[1];var n=this._doCryptBlock(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),i=new t(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},a.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},a.prototype._doCryptBlock=function(t,e,n,i){var o,a,f,s,u,h,c,d,l;a=t[0]^e[0],f=t[1]^e[1],s=t[2]^e[2],u=t[3]^e[3],o=4;for(var p=1;p<this._nRounds;p++)h=n[0][a>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&u]^e[o++],c=n[0][f>>>24]^n[1][s>>>16&255]^n[2][u>>>8&255]^n[3][255&a]^e[o++],d=n[0][s>>>24]^n[1][u>>>16&255]^n[2][a>>>8&255]^n[3][255&f]^e[o++],l=n[0][u>>>24]^n[1][a>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^e[o++],a=h,f=c,s=d,u=l;return h=(i[a>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&u])^e[o++],c=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[u>>>8&255]<<8|i[255&a])^e[o++],d=(i[s>>>24]<<24|i[u>>>16&255]<<16|i[a>>>8&255]<<8|i[255&f])^e[o++],l=(i[u>>>24]<<24|i[a>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^e[o++],[r(h),r(c),r(d),r(l)]},e.AES=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(t){for(var e,r=t.length;r--;){if(e=t.readUInt8(r),255!==e){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function i(t){var e=t._cipher.encryptBlock(t._prev);return n(t._prev),e}var o=r(69);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,i(e)]);var n=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),o(r,n)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";var n=e;n.base=r(545),n.short=r(548),n.mont=r(547),n.edwards=r(546)},function(t,e,r){"use strict";function n(t,e){t[e>>5]|=128<<e%32,t[(e+64>>>9<<4)+14]=e;for(var r=1732584193,n=-271733879,i=-1732584194,h=271733878,c=0;c<t.length;c+=16){var d=r,l=n,p=i,b=h;r=o(r,n,i,h,t[c+0],7,-680876936),h=o(h,r,n,i,t[c+1],12,-389564586),i=o(i,h,r,n,t[c+2],17,606105819),n=o(n,i,h,r,t[c+3],22,-1044525330),r=o(r,n,i,h,t[c+4],7,-176418897),h=o(h,r,n,i,t[c+5],12,1200080426),i=o(i,h,r,n,t[c+6],17,-1473231341),n=o(n,i,h,r,t[c+7],22,-45705983),r=o(r,n,i,h,t[c+8],7,1770035416),h=o(h,r,n,i,t[c+9],12,-1958414417),i=o(i,h,r,n,t[c+10],17,-42063),n=o(n,i,h,r,t[c+11],22,-1990404162),r=o(r,n,i,h,t[c+12],7,1804603682),h=o(h,r,n,i,t[c+13],12,-40341101),i=o(i,h,r,n,t[c+14],17,-1502002290),n=o(n,i,h,r,t[c+15],22,1236535329),r=a(r,n,i,h,t[c+1],5,-165796510),h=a(h,r,n,i,t[c+6],9,-1069501632),i=a(i,h,r,n,t[c+11],14,643717713),n=a(n,i,h,r,t[c+0],20,-373897302),r=a(r,n,i,h,t[c+5],5,-701558691),h=a(h,r,n,i,t[c+10],9,38016083),i=a(i,h,r,n,t[c+15],14,-660478335),n=a(n,i,h,r,t[c+4],20,-405537848),r=a(r,n,i,h,t[c+9],5,568446438),h=a(h,r,n,i,t[c+14],9,-1019803690),i=a(i,h,r,n,t[c+3],14,-187363961),n=a(n,i,h,r,t[c+8],20,1163531501),r=a(r,n,i,h,t[c+13],5,-1444681467),h=a(h,r,n,i,t[c+2],9,-51403784),i=a(i,h,r,n,t[c+7],14,1735328473),n=a(n,i,h,r,t[c+12],20,-1926607734),r=f(r,n,i,h,t[c+5],4,-378558),h=f(h,r,n,i,t[c+8],11,-2022574463),i=f(i,h,r,n,t[c+11],16,1839030562),n=f(n,i,h,r,t[c+14],23,-35309556),r=f(r,n,i,h,t[c+1],4,-1530992060),h=f(h,r,n,i,t[c+4],11,1272893353),i=f(i,h,r,n,t[c+7],16,-155497632),n=f(n,i,h,r,t[c+10],23,-1094730640),r=f(r,n,i,h,t[c+13],4,681279174),h=f(h,r,n,i,t[c+0],11,-358537222),i=f(i,h,r,n,t[c+3],16,-722521979),n=f(n,i,h,r,t[c+6],23,76029189),r=f(r,n,i,h,t[c+9],4,-640364487),h=f(h,r,n,i,t[c+12],11,-421815835),i=f(i,h,r,n,t[c+15],16,530742520),n=f(n,i,h,r,t[c+2],23,-995338651),r=s(r,n,i,h,t[c+0],6,-198630844),h=s(h,r,n,i,t[c+7],10,1126891415),i=s(i,h,r,n,t[c+14],15,-1416354905),n=s(n,i,h,r,t[c+5],21,-57434055),r=s(r,n,i,h,t[c+12],6,1700485571),h=s(h,r,n,i,t[c+3],10,-1894986606),i=s(i,h,r,n,t[c+10],15,-1051523),n=s(n,i,h,r,t[c+1],21,-2054922799),r=s(r,n,i,h,t[c+8],6,1873313359),h=s(h,r,n,i,t[c+15],10,-30611744),i=s(i,h,r,n,t[c+6],15,-1560198380),n=s(n,i,h,r,t[c+13],21,1309151649),r=s(r,n,i,h,t[c+4],6,-145523070),h=s(h,r,n,i,t[c+11],10,-1120210379),i=s(i,h,r,n,t[c+2],15,718787259),n=s(n,i,h,r,t[c+9],21,-343485551),r=u(r,d),n=u(n,l),i=u(i,p),h=u(h,b)}return Array(r,n,i,h)}function i(t,e,r,n,i,o){return u(h(u(u(e,t),u(n,o)),i),r)}function o(t,e,r,n,o,a,f){return i(e&r|~e&n,t,e,o,a,f)}function a(t,e,r,n,o,a,f){return i(e&n|r&~n,t,e,o,a,f)}function f(t,e,r,n,o,a,f){return i(e^r^n,t,e,o,a,f)}function s(t,e,r,n,o,a,f){return i(r^(e|~n),t,e,o,a,f)}function u(t,e){var r=(65535&t)+(65535&e),n=(t>>16)+(e>>16)+(r>>16);return n<<16|65535&r}function h(t,e){return t<<e|t>>>32-e}var c=r(565);t.exports=function(t){return c.hash(t,n,16)}},function(t,e,r){var n=e;n.bignum=r(70),n.define=r(580).define,n.base=r(71),n.constants=r(235),n.decoders=r(584),n.encoders=r(586)},function(t,e,r){(function(t){function r(t){var e,r;return e=t>f||t<0?(r=Math.abs(t)%f,t<0?f-r:r):t}function n(t){for(var e=0;e<t.length;t++)t[e]=0;return!1}function i(){this.SBOX=[],this.INV_SBOX=[],this.SUB_MIX=[[],[],[],[]],this.INV_SUB_MIX=[[],[],[],[]],this.init(),this.RCON=[0,1,2,4,8,16,32,64,128,27,54]}function o(t){for(var e=t.length/4,r=new Array(e),n=-1;++n<e;)r[n]=t.readUInt32BE(4*n);return r}function a(t){this._key=o(t),this._doReset()}var f=Math.pow(2,32);i.prototype.init=function(){var t,e,r,n,i,o,a,f,s,u;for(t=function(){var t,r;for(r=[],e=t=0;t<256;e=++t)e<128?r.push(e<<1):r.push(e<<1^283);return r}(),i=0,s=0,e=u=0;u<256;e=++u)r=s^s<<1^s<<2^s<<3^s<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=t[i],a=t[o],f=t[a],n=257*t[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*f^65537*a^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=s=1:(i=o^t[t[t[f^o]]],s^=t[t[s]]);return!0};var s=new i;a.blockSize=16,a.prototype.blockSize=a.blockSize,a.keySize=32,a.prototype.keySize=a.keySize,a.prototype._doReset=function(){var t,e,r,n,i,o;for(r=this._key,e=r.length,this._nRounds=e+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;n<i;n++)this._keySchedule[n]=n<e?r[n]:(o=this._keySchedule[n-1],n%e===0?(o=o<<8|o>>>24,o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o],o^=s.RCON[n/e|0]<<24):e>6&&n%e===4?o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o]:void 0,this._keySchedule[n-e]^o);for(this._invKeySchedule=[],t=0;t<i;t++)n=i-t,o=this._keySchedule[n-(t%4?0:4)],this._invKeySchedule[t]=t<4||n<=4?o:s.INV_SUB_MIX[0][s.SBOX[o>>>24]]^s.INV_SUB_MIX[1][s.SBOX[o>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[o>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&o]];return!0},a.prototype.encryptBlock=function(e){e=o(new t(e));var r=this._doCryptBlock(e,this._keySchedule,s.SUB_MIX,s.SBOX),n=new t(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},a.prototype.decryptBlock=function(e){e=o(new t(e));var r=[e[3],e[1]];e[1]=r[0],e[3]=r[1];var n=this._doCryptBlock(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),i=new t(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},a.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},a.prototype._doCryptBlock=function(t,e,n,i){var o,a,f,s,u,h,c,d,l;a=t[0]^e[0],f=t[1]^e[1],s=t[2]^e[2],u=t[3]^e[3],o=4;for(var p=1;p<this._nRounds;p++)h=n[0][a>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&u]^e[o++],c=n[0][f>>>24]^n[1][s>>>16&255]^n[2][u>>>8&255]^n[3][255&a]^e[o++],d=n[0][s>>>24]^n[1][u>>>16&255]^n[2][a>>>8&255]^n[3][255&f]^e[o++],l=n[0][u>>>24]^n[1][a>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^e[o++],a=h,f=c,s=d,u=l;return h=(i[a>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&u])^e[o++],c=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[u>>>8&255]<<8|i[255&a])^e[o++],d=(i[s>>>24]<<24|i[u>>>16&255]<<16|i[a>>>8&255]<<8|i[255&f])^e[o++],l=(i[u>>>24]<<24|i[a>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^e[o++],[r(h),r(c),r(d),r(l)]},e.AES=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(t){for(var e,r=t.length;r--;){if(e=t.readUInt8(r),255!==e){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function i(t){var e=t._cipher.encryptBlock(t._prev);return n(t._prev),e}var o=r(72);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,i(e)]);var n=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),o(r,n)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function a(t){return void 0===t}t.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},r.prototype.emit=function(t){var e,r,i,f,s,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(e=arguments[1],e instanceof Error)throw e;var h=new Error('Uncaught, unspecified "error" event. ('+e+")");throw h.context=e,h}if(r=this._events[t],a(r))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:f=Array.prototype.slice.call(arguments,1),r.apply(this,f)}else if(o(r))for(f=Array.prototype.slice.call(arguments,1),u=r.slice(),i=u.length,s=0;s<i;s++)u[s].apply(this,f);return!0},r.prototype.addListener=function(t,e){var i;if(!n(e))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,n(e.listener)?e.listener:e),this._events[t]?o(this._events[t])?this._events[t].push(e):this._events[t]=[this._events[t],e]:this._events[t]=e,o(this._events[t])&&!this._events[t].warned&&(i=a(this._maxListeners)?r.defaultMaxListeners:this._maxListeners,i&&i>0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){function r(){this.removeListener(t,r),i||(i=!0,e.apply(this,arguments))}if(!n(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(t,r),this},r.prototype.removeListener=function(t,e){var r,i,a,f;if(!n(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(r=this._events[t],a=r.length,i=-1,r===e||n(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(r)){for(f=a;f-- >0;)if(r[f]===e||r[f].listener&&r[f].listener===e){i=f;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},r.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[t],n(r))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},r.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?n(this._events[t])?[this._events[t]]:this._events[t].slice():[]},r.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(n(e))return 1;if(e)return e.length}return 0},r.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e){t.exports={newInvalidAsn1Error:function(t){var e=new Error;return e.name="InvalidAsn1Error",e.message=t||"",e}}},function(t,e){t.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(93),s=r(91),u=function(t){function e(t){n(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.hash=f.createHash(t),r}return o(e,t),a(e,[{key:"write",value:function(t){this.hash.update(t)}},{key:"getDigest",value:function(){return this.hash.digest()}}],[{key:"getLength",value:function(t){return f.createHash(t).digest().length}}]),e}(s);t.exports=u},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(261),a=function(){function t(){n(this,t)}return i(t,null,[{key:"getClassFromTypeId",value:function(e){if(e>Number.MAX_SAFE_INTEGER)throw new o("Type "+e+" is not supported");var r=!0,n=!1,i=void 0;try{for(var a,f=t.registeredTypes[Symbol.iterator]();!(r=(a=f.next()).done);r=!0){var s=a.value;if(e===s.typeId)return s.Class}}catch(t){n=!0,i=t}finally{try{!r&&f.return&&f.return()}finally{if(n)throw i}}throw new o("Type "+e+" is not supported")}},{key:"registerType",value:function(e){t.registeredTypes.push({typeId:e.TYPE_ID,Class:e})}}]),t}();a.registeredTypes=[],t.exports=a},function(t,e,r){"use strict";(function(e){function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var n=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),i=function(){function t(){r(this,t)}return n(t,null,[{key:"decode",value:function(t){var r=t.replace(/\-/g,"+").replace(/_/g,"/");return new e(r,"base64")}},{key:"encode",value:function(t){return t.toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}}]),t}();t.exports=i}).call(e,r(1).Buffer)},function(t,e,r){t.exports=!r(164)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){"use strict";var n=r(11),i=r(47),o=r(10);t.exports=function(t){for(var e=n(this),r=o(e.length),a=arguments.length,f=i(a>1?arguments[1]:void 0,r),s=a>2?arguments[2]:void 0,u=void 0===s?r:i(s,r);u>f;)e[f++]=t;return e}},function(t,e,r){"use strict";var n=r(9),i=r(37);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(6),i=r(4).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){t.exports=r(4).document&&document.documentElement},function(t,e,r){var n=r(6),i=r(132).set;t.exports=function(t,e,r){var o,a=e.constructor;return a!==r&&"function"==typeof a&&(o=a.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){var n=r(56),i=r(7)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){var n=r(23);t.exports=Array.isArray||function(t){return"Array"==n(t)}},function(t,e,r){"use strict";var n=r(42),i=r(37),o=r(57),a={};r(14)(a,r(7)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(a,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){"use strict";var n=r(41),i=r(0),o=r(15),a=r(14),f=r(12),s=r(56),u=r(127),h=r(57),c=r(21),d=r(7)("iterator"),l=!([].keys&&"next"in[].keys()),p="@@iterator",b="keys",v="values",y=function(){return this};t.exports=function(t,e,r,m,g,w,_){u(r,e,m);var M,S,E,A=function(t){if(!l&&t in B)return B[t];switch(t){case b:return function(){return new r(this,t)};case v:return function(){return new r(this,t)}}return function(){return new r(this,t)}},k=e+" Iterator",x=g==v,I=!1,B=t.prototype,O=B[d]||B[p]||g&&B[g],R=O||A(g),P=g?x?A("entries"):R:void 0,T="Array"==e?B.entries||O:O;if(T&&(E=c(T.call(new t)),E!==Object.prototype&&(h(E,k,!0),n||f(E,d)||a(E,d,y))),x&&O&&O.name!==v&&(I=!0,R=function(){return O.call(this)}),n&&!_||!l&&!I&&B[d]||a(B,d,R),s[e]=R,s[k]=y,g)if(M={values:x?R:A(v),keys:w?R:A(b),entries:P},_)for(S in M)S in B||o(B,S,M[S]);else i(i.P+i.F*(l||I),e,M);return M}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||r(-2e-17)!=-2e-17?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,r){var n=r(4),i=r(139).set,o=n.MutationObserver||n.WebKitMutationObserver,a=n.process,f=n.Promise,s="process"==r(23)(a);t.exports=function(){var t,e,r,u=function(){var n,i;for(s&&(n=a.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(s)r=function(){a.nextTick(u)};else if(o){var h=!0,c=document.createTextNode("");new o(u).observe(c,{characterData:!0}),r=function(){c.data=h=!h}}else if(f&&f.resolve){var d=f.resolve();r=function(){d.then(u)}}else r=function(){i.call(n,u)};return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){var n=r(6),i=r(3),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{n=r(33)(Function.call,r(20).f(Object.prototype,"__proto__").set,2),n(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},function(t,e,r){var n=r(87)("keys"),i=r(48);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e,r){var n=r(3),i=r(13),o=r(7)("species");t.exports=function(t,e){var r,a=n(t).constructor;return void 0===a||void 0==(r=n(a)[o])?e:i(r)}},function(t,e,r){var n=r(38),i=r(24);t.exports=function(t){return function(e,r){var o,a,f=String(i(e)),s=n(r),u=f.length;return s<0||s>=u?t?"":void 0:(o=f.charCodeAt(s),o<55296||o>56319||s+1===u||(a=f.charCodeAt(s+1))<56320||a>57343?t?f.charAt(s):o:t?f.slice(s,s+2):(o-55296<<10)+(a-56320)+65536)}}},function(t,e,r){var n=r(83),i=r(24);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){"use strict";var n=r(38),i=r(24);t.exports=function(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},function(t,e){t.exports="\t\n\v\f\r    \u2028\u2029\ufeff"},function(t,e,r){var n,i,o,a=r(33),f=r(82),s=r(123),u=r(120),h=r(4),c=h.process,d=h.setImmediate,l=h.clearImmediate,p=h.MessageChannel,b=0,v={},y="onreadystatechange",m=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},g=function(t){m.call(t.data)};d&&l||(d=function(t){for(var e=[],r=1;arguments.length>r;)e.push(arguments[r++]);return v[++b]=function(){f("function"==typeof t?t:Function(t),e)},n(b),b},l=function(t){delete v[t]},"process"==r(23)(c)?n=function(t){c.nextTick(a(m,t,1))}:p?(i=new p,o=i.port2,i.port1.onmessage=g,n=a(o.postMessage,o,1)):h.addEventListener&&"function"==typeof postMessage&&!h.importScripts?(n=function(t){h.postMessage(t+"","*")},h.addEventListener("message",g,!1)):n=y in u("script")?function(t){s.appendChild(u("script"))[y]=function(){s.removeChild(this),m.call(t)}}:function(t){setTimeout(a(m,t,1),0)}),t.exports={set:d,clear:l}},function(t,e,r){"use strict";var n=r(4),i=r(8),o=r(41),a=r(88),f=r(14),s=r(45),u=r(5),h=r(40),c=r(38),d=r(10),l=r(43).f,p=r(9).f,b=r(118),v=r(57),y="ArrayBuffer",m="DataView",g="prototype",w="Wrong length!",_="Wrong index!",M=n[y],S=n[m],E=n.Math,A=n.RangeError,k=n.Infinity,x=M,I=E.abs,B=E.pow,O=E.floor,R=E.log,P=E.LN2,T="buffer",j="byteLength",C="byteOffset",N=i?"_b":T,L=i?"_l":j,U=i?"_o":C,z=function(t,e,r){
var n,i,o,a=Array(r),f=8*r-e-1,s=(1<<f)-1,u=s>>1,h=23===e?B(2,-24)-B(2,-77):0,c=0,d=t<0||0===t&&1/t<0?1:0;for(t=I(t),t!=t||t===k?(i=t!=t?1:0,n=s):(n=O(R(t)/P),t*(o=B(2,-n))<1&&(n--,o*=2),t+=n+u>=1?h/o:h*B(2,1-u),t*o>=2&&(n++,o/=2),n+u>=s?(i=0,n=s):n+u>=1?(i=(t*o-1)*B(2,e),n+=u):(i=t*B(2,u-1)*B(2,e),n=0));e>=8;a[c++]=255&i,i/=256,e-=8);for(n=n<<e|i,f+=e;f>0;a[c++]=255&n,n/=256,f-=8);return a[--c]|=128*d,a},D=function(t,e,r){var n,i=8*r-e-1,o=(1<<i)-1,a=o>>1,f=i-7,s=r-1,u=t[s--],h=127&u;for(u>>=7;f>0;h=256*h+t[s],s--,f-=8);for(n=h&(1<<-f)-1,h>>=-f,f+=e;f>0;n=256*n+t[s],s--,f-=8);if(0===h)h=1-a;else{if(h===o)return n?NaN:u?-k:k;n+=B(2,e),h-=a}return(u?-1:1)*n*B(2,h-e)},q=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},F=function(t){return[255&t]},K=function(t){return[255&t,t>>8&255]},G=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},V=function(t){return z(t,52,8)},H=function(t){return z(t,23,4)},X=function(t,e,r){p(t[g],e,{get:function(){return this[r]}})},Y=function(t,e,r,n){var i=+r,o=c(i);if(i!=o||o<0||o+e>t[L])throw A(_);var a=t[N]._b,f=o+t[U],s=a.slice(f,f+e);return n?s:s.reverse()},W=function(t,e,r,n,i,o){var a=+r,f=c(a);if(a!=f||f<0||f+e>t[L])throw A(_);for(var s=t[N]._b,u=f+t[U],h=n(+i),d=0;d<e;d++)s[u+d]=h[o?d:e-d-1]},Z=function(t,e){h(t,M,y);var r=+e,n=d(r);if(r!=n)throw A(w);return n};if(a.ABV){if(!u(function(){new M})||!u(function(){new M(.5)})){M=function(t){return new x(Z(this,t))};for(var J,$=M[g]=x[g],Q=l(x),tt=0;Q.length>tt;)(J=Q[tt++])in M||f(M,J,x[J]);o||($.constructor=M)}var et=new S(new M(2)),rt=S[g].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),!et.getInt8(0)&&et.getInt8(1)||s(S[g],{setInt8:function(t,e){rt.call(this,t,e<<24>>24)},setUint8:function(t,e){rt.call(this,t,e<<24>>24)}},!0)}else M=function(t){var e=Z(this,t);this._b=b.call(Array(e),0),this[L]=e},S=function(t,e,r){h(this,S,m),h(t,M,m);var n=t[L],i=c(e);if(i<0||i>n)throw A("Wrong offset!");if(r=void 0===r?n-i:d(r),i+r>n)throw A(w);this[N]=t,this[U]=i,this[L]=r},i&&(X(M,j,"_l"),X(S,T,"_b"),X(S,j,"_l"),X(S,C,"_o")),s(S[g],{getInt8:function(t){return Y(this,1,t)[0]<<24>>24},getUint8:function(t){return Y(this,1,t)[0]},getInt16:function(t){var e=Y(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=Y(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return q(Y(this,4,t,arguments[1]))},getUint32:function(t){return q(Y(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return D(Y(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return D(Y(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){W(this,1,t,F,e)},setUint8:function(t,e){W(this,1,t,F,e)},setInt16:function(t,e){W(this,2,t,K,e,arguments[2])},setUint16:function(t,e){W(this,2,t,K,e,arguments[2])},setInt32:function(t,e){W(this,4,t,G,e,arguments[2])},setUint32:function(t,e){W(this,4,t,G,e,arguments[2])},setFloat32:function(t,e){W(this,4,t,H,e,arguments[2])},setFloat64:function(t,e){W(this,8,t,V,e,arguments[2])}});v(M,y),v(S,m),f(S[g],a.VIEW,!0),e[y]=M,e[m]=S},function(t,e,r){var n=r(4),i=r(32),o=r(41),a=r(189),f=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||f(e,t,{value:a.f(t)})}},function(t,e,r){var n=r(64),i=r(7)("iterator"),o=r(56);t.exports=r(32).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){"use strict";var n=r(54),i=r(177),o=r(56),a=r(17);t.exports=r(128)(Array,"Array",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):"keys"==e?i(0,r):"values"==e?i(0,t[r]):i(0,[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){t.exports=!r(199)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){"use strict";e.utils=r(505),e.Cipher=r(502),e.DES=r(503),e.CBC=r(501),e.EDE=r(504)},function(t,e,r){(function(e){function n(t,r,n,o){e.isBuffer(t)||(t=new e(t,"binary")),r&&!e.isBuffer(r)&&(r=new e(r,"binary")),n/=8,o=o||0;for(var a,f,s=0,u=0,h=new e(n),c=new e(o),d=0,l=[];;){if(d++>0&&l.push(a),l.push(t),r&&l.push(r),a=i(e.concat(l)),l=[],f=0,n>0)for(;;){if(0===n)break;if(f===a.length)break;h[s++]=a[f],n--,f++}if(o>0&&f!==a.length)for(;;){if(0===o)break;if(f===a.length)break;c[u++]=a[f],o--,f++}if(0===n&&0===o)break}for(f=0;f<a.length;f++)a[f]=0;return{key:h,iv:c}}var i=r(105);t.exports=n}).call(e,r(1).Buffer)},function(t,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},function(t,e,r){(function(e){function n(t,r,n,o){e.isBuffer(t)||(t=new e(t,"binary")),r&&!e.isBuffer(r)&&(r=new e(r,"binary")),n/=8,o=o||0;for(var a,f,s=0,u=0,h=new e(n),c=new e(o),d=0,l=[];;){if(d++>0&&l.push(a),l.push(t),r&&l.push(r),a=i(e.concat(l)),l=[],f=0,n>0)for(;;){if(0===n)break;if(f===a.length)break;h[s++]=a[f],n--,f++}if(o>0&&f!==a.length)for(;;){if(0===o)break;if(f===a.length)break;c[u++]=a[f],o--,f++}if(0===n&&0===o)break}for(f=0;f<a.length;f++)a[f]=0;return{key:h,iv:c}}var i=r(105);t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,r){a.call(this),t=t.toLowerCase(),"string"==typeof r&&(r=new e(r));var n="sha512"===t||"sha384"===t?128:64;this._alg=t,this._key=r,r.length>n?r=i(t).update(r).digest():r.length<n&&(r=e.concat([r,f],n));for(var o=this._ipad=new e(n),s=this._opad=new e(n),u=0;u<n;u++)o[u]=54^r[u],s[u]=92^r[u];this._hash=i(t).update(o)}var i=r(59),o=r(2),a=r(31).Transform,f=new e(128);f.fill(0),o(n,a),n.prototype.update=function(t,e){return this._hash.update(t,e),this},n.prototype._transform=function(t,e,r){this._hash.update(t),r()},n.prototype._flush=function(t){this.push(this.digest()),t()},n.prototype.digest=function(t){var e=this._hash.digest();return i(this._alg).update(this._opad).update(e).digest(t)},t.exports=function(t,e){return new n(t,e)}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))))}function a(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=49?f-49+10:f>=17?f-17+10:f}return i}function s(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}function u(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,f=67108863&a,s=a/67108864|0;r.words[0]=f;for(var u=1;u<n;u++){for(var h=s>>>26,c=67108863&s,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;i=0|t.words[p],o=0|e.words[l],a=i*o+c,h+=a/67108864|0,c=67108863&a}r.words[u]=0|c,s=0|h}return 0!==s?r.words[u]=0|s:r.length--,r.strip()}function h(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>26)|0,i+=a>>>26,a&=67108863}r.words[o]=f,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(t,e,r){var n=new d;return n.mulp(t,e,r)}function d(t,e){this.x=t,this.y=e}function l(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function y(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function m(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function g(t){m.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var w;try{w=r(1).Buffer}catch(t){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36),t=t.toString().replace(/\s+/g,"");var i=0;"-"===t[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,h=r;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],M=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],S=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,e){t=t||10,e=0|e||1;var r;if(16===t||"hex"===t){r="";for(var i=0,o=0,a=0;a<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>24-i&16777215,r=0!==o||a!==this.length-1?_[6-s.length]+s+r:s+r,i+=2,i>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=M[t],h=S[t];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(t);c=c.idivn(h),r=c.isZero()?d+r:_[u-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n("undefined"!=typeof w),this.toArrayLike(w,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,f,s="le"===e,u=new t(o),h=this.clone();if(s){for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[f]=a;for(;f<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191&lt,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,
l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){(function(t,n){var i=r(149),o=r(576);e.pbkdf2=function(t,r,n,i,a,f){if("function"==typeof a&&(f=a,a=void 0),o(n,i),"function"!=typeof f)throw new Error("No callback provided to pbkdf2");setTimeout(function(){f(null,e.pbkdf2Sync(t,r,n,i,a))})};var a;if(t.browser)a="utf-8";else{var f=parseInt(t.version.split(".")[0].slice(1),10);a=f>=6?"utf-8":"binary"}e.pbkdf2Sync=function(t,e,r,f,s){n.isBuffer(t)||(t=new n(t,a)),n.isBuffer(e)||(e=new n(e,a)),o(r,f),s=s||"sha1";var u,h=1,c=new n(f),d=new n(e.length+4);e.copy(d,0,0,e.length);for(var l,p,b=1;b<=h;b++){d.writeUInt32BE(b,e.length);var v=i(s,t).update(d).digest();u||(u=v.length,p=new n(u),h=Math.ceil(f/u),l=f-(h-1)*u),v.copy(p,0,0,u);for(var y=1;y<r;y++){v=i(s,t).update(v).digest();for(var m=0;m<u;m++)p[m]^=v[m]}var g=(b-1)*u,w=b===h?l:u;p.copy(c,g,0,w)}return c}}).call(e,r(26),r(1).Buffer)},function(t,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},function(t,e,r){(function(e){function n(t,r,n,o){e.isBuffer(t)||(t=new e(t,"binary")),r&&!e.isBuffer(r)&&(r=new e(r,"binary")),n/=8,o=o||0;for(var a,f,s=0,u=0,h=new e(n),c=new e(o),d=0,l=[];;){if(d++>0&&l.push(a),l.push(t),r&&l.push(r),a=i(e.concat(l)),l=[],f=0,n>0)for(;;){if(0===n)break;if(f===a.length)break;h[s++]=a[f],n--,f++}if(o>0&&f!==a.length)for(;;){if(0===o)break;if(f===a.length)break;c[u++]=a[f],o--,f++}if(0===n&&0===o)break}for(f=0;f<a.length;f++)a[f]=0;return{key:h,iv:c}}var i=r(105);t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t){this.afterTransform=function(e,r){return i(t,e,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function i(t,e,r){var n=t._transformState;n.transforming=!1;var i=n.writecb;if(!i)return t.emit("error",new Error("no writecb in Transform class"));n.writechunk=null,n.writecb=null,null!==r&&void 0!==r&&t.push(r),i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&t._read(o.highWaterMark)}function o(t){if(!(this instanceof o))return new o(t);f.call(this,t),this._transformState=new n(this);var e=this;this._readableState.needReadable=!0,this._readableState.sync=!1,t&&("function"==typeof t.transform&&(this._transform=t.transform),"function"==typeof t.flush&&(this._flush=t.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(t){a(e,t)}):a(e)})}function a(t,e){if(e)return t.emit("error",e);var r=t._writableState,n=t._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(n.transforming)throw new Error("Calling transform done when still transforming");return t.push(null)}t.exports=o;var f=r(51),s=r(73);s.inherits=r(74),s.inherits(o,f),o.prototype.push=function(t,e){return this._transformState.needTransform=!1,f.prototype.push.call(this,t,e)},o.prototype._transform=function(t,e,r){throw new Error("Not implemented")},o.prototype._write=function(t,e,r){var n=this._transformState;if(n.writecb=r,n.writechunk=t,n.writeencoding=e,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},o.prototype._read=function(t){var e=this._transformState;null!==e.writechunk&&e.writecb&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0}},function(t,e,r){"use strict";(function(e,n){function i(){}function o(t,e,r){this.chunk=t,this.encoding=e,this.callback=r,this.next=null}function a(t,e){R=R||r(51),t=t||{},this.objectMode=!!t.objectMode,e instanceof R&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var n=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){b(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new S(this)}function f(t){return R=R||r(51),this instanceof f||this instanceof R?(this._writableState=new a(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev)),void x.call(this)):new f(t)}function s(t,e){var r=new Error("write after end");t.emit("error",r),E(e,r)}function u(t,e,r,n){var i=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):B.isBuffer(r)||"string"==typeof r||void 0===r||e.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(t.emit("error",o),E(n,o),i=!1),i}function h(t,e,r){return t.objectMode||t.decodeStrings===!1||"string"!=typeof e||(e=O.from(e,r)),e}function c(t,e,r,n,i){r=h(e,r,n),B.isBuffer(r)&&(n="buffer");var a=e.objectMode?1:r.length;e.length+=a;var f=e.length<e.highWaterMark;if(f||(e.needDrain=!0),e.writing||e.corked){var s=e.lastBufferedRequest;e.lastBufferedRequest=new o(r,n,i),s?s.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else d(t,e,!1,a,r,n,i);return f}function d(t,e,r,n,i,o,a){e.writelen=n,e.writecb=a,e.writing=!0,e.sync=!0,r?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function l(t,e,r,n,i){--e.pendingcb,r?E(i,n):i(n),t._writableState.errorEmitted=!0,t.emit("error",n)}function p(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}function b(t,e){var r=t._writableState,n=r.sync,i=r.writecb;if(p(r),e)l(t,r,n,e,i);else{var o=g(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||m(t,r),n?A(v,t,r,o,i):v(t,r,o,i)}}function v(t,e,r,n){r||y(t,e),e.pendingcb--,n(),_(t,e)}function y(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}function m(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var a=0;r;)i[a]=r,r=r.next,a+=1;d(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new S(e)}else{for(;r;){var f=r.chunk,s=r.encoding,u=r.callback,h=e.objectMode?1:f.length;if(d(t,e,!1,h,f,s,u),r=r.next,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequestCount=0,e.bufferedRequest=r,e.bufferProcessing=!1}function g(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function w(t,e){e.prefinished||(e.prefinished=!0,t.emit("prefinish"))}function _(t,e){var r=g(e);return r&&(0===e.pendingcb?(w(t,e),e.finished=!0,t.emit("finish")):w(t,e)),r}function M(t,e,r){e.ending=!0,_(t,e),r&&(e.finished?E(r):t.once("finish",r)),e.ended=!0,t.writable=!1}function S(t){var e=this;this.next=null,this.entry=null,this.finish=function(r){var n=e.entry;for(e.entry=null;n;){var i=n.callback;t.pendingcb--,i(r),n=n.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}}t.exports=f;var E=r(157),A=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?n:E;f.WritableState=a;var k=r(73);k.inherits=r(74);var x,I={deprecate:r(598)};!function(){try{x=r(31)}catch(t){}finally{x||(x=r(110).EventEmitter)}}();var B=r(1).Buffer,O=r(156);k.inherits(f,x);var R;a.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(a.prototype,"buffer",{get:I.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(t){}}();var R;f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},f.prototype.write=function(t,e,r){var n=this._writableState,o=!1;return"function"==typeof e&&(r=e,e=null),B.isBuffer(t)?e="buffer":e||(e=n.defaultEncoding),"function"!=typeof r&&(r=i),n.ended?s(this,r):u(this,n,t,r)&&(n.pendingcb++,o=c(this,n,t,e,r)),o},f.prototype.cork=function(){var t=this._writableState;t.corked++},f.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||m(this,t))},f.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},f.prototype._write=function(t,e,r){r(new Error("not implemented"))},f.prototype._writev=null,f.prototype.end=function(t,e,r){var n=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!==t&&void 0!==t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||M(this,n,r)}}).call(e,r(26),r(158).setImmediate)},function(t,e,r){"use strict";(function(t){var n=r(1),i=n.Buffer,o=n.SlowBuffer,a=n.kMaxLength||2147483647;e.alloc=function(t,e,r){if("function"==typeof i.alloc)return i.alloc(t,e,r);if("number"==typeof r)throw new TypeError("encoding must not be number");if("number"!=typeof t)throw new TypeError("size must be a number");if(t>a)throw new RangeError("size is too large");var n=r,o=e;void 0===o&&(n=void 0,o=0);var f=new i(t);if("string"==typeof o)for(var s=new i(o,n),u=s.length,h=-1;++h<t;)f[h]=s[h%u];else f.fill(o);return f},e.allocUnsafe=function(t){if("function"==typeof i.allocUnsafe)return i.allocUnsafe(t);if("number"!=typeof t)throw new TypeError("size must be a number");if(t>a)throw new RangeError("size is too large");return new i(t)},e.from=function(e,r,n){if("function"==typeof i.from&&(!t.Uint8Array||Uint8Array.from!==i.from))return i.from(e,r,n);if("number"==typeof e)throw new TypeError('"value" argument must not be a number');if("string"==typeof e)return new i(e,r);if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer){var o=r;if(1===arguments.length)return new i(e);"undefined"==typeof o&&(o=0);var a=n;if("undefined"==typeof a&&(a=e.byteLength-o),o>=e.byteLength)throw new RangeError("'offset' is out of bounds");if(a>e.byteLength-o)throw new RangeError("'length' is out of bounds");return new i(e.slice(o,o+a))}if(i.isBuffer(e)){var f=new i(e.length);return e.copy(f,0,0,e.length),f}if(e){if(Array.isArray(e)||"undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return new i(e);if("Buffer"===e.type&&Array.isArray(e.data))return new i(e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},e.allocUnsafeSlow=function(t){if("function"==typeof i.allocUnsafeSlow)return i.allocUnsafeSlow(t);if("number"!=typeof t)throw new TypeError("size must be a number");if(t>=a)throw new RangeError("size is too large");return new o(t)}}).call(e,r(39))},function(t,e,r){"use strict";(function(e){function r(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,f=arguments.length;switch(f){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,r)});case 3:return e.nextTick(function(){t.call(null,r,n)});case 4:return e.nextTick(function(){t.call(null,r,n,i)});default:for(o=new Array(f-1),a=0;a<o.length;)o[a++]=arguments[a];return e.nextTick(function(){t.apply(null,o)})}}!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports=r:t.exports=e.nextTick;
}).call(e,r(26))},function(t,e,r){(function(t,n){function i(t,e){this._id=t,this._clearFn=e}var o=r(26).nextTick,a=Function.prototype.apply,f=Array.prototype.slice,s={},u=0;e.setTimeout=function(){return new i(a.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new i(a.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},e.setImmediate="function"==typeof t?t:function(t){var r=u++,n=!(arguments.length<2)&&f.call(arguments,1);return s[r]=!0,o(function(){s[r]&&(n?t.apply(null,n):t.call(null),e.clearImmediate(r))}),r},e.clearImmediate="function"==typeof n?n:function(t){delete s[t]}}).call(e,r(158).setImmediate,r(158).clearImmediate)},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(257).Ber,a=65537,f=function(){function t(){n(this,t)}return i(t,null,[{key:"modulusToPem",value:function(t){if(0===t[0])throw new Error("Modulus may not start with zero");128&t[0]&&(t=e.concat([new e([0]),t]));var r=new o.Writer;return r.startSequence(),r.writeBuffer(t,2),r.writeInt(a),r.endSequence(),"-----BEGIN RSA PUBLIC KEY-----\n"+r.buffer.toString("base64").match(/.{1,64}/g).join("\n")+"\n-----END RSA PUBLIC KEY-----\n"}},{key:"modulusFromPrivateKey",value:function(t){var r=t.replace("-----BEGIN RSA PRIVATE KEY-----","").replace("-----END RSA PRIVATE KEY-----","").replace(/\s+|\n\r|\n|\r$/gm,""),n=new e(r,"base64"),i=new o.Reader(n);i.readSequence(),i.readString(2,!0);var a=i.readString(2,!0);return 0===a[0]?a.slice(1):a}}]),t}();t.exports=f}).call(e,r(1).Buffer)},function(t,e,r){r(281),t.exports=r(163).Number.isInteger},function(t,e){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){var n=r(23);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){"use strict";var n=r(11),i=r(47),o=r(10);t.exports=[].copyWithin||function(t,e){var r=n(this),a=o(r.length),f=i(t,a),s=i(e,a),u=arguments.length>2?arguments[2]:void 0,h=Math.min((void 0===u?a:i(u,a))-s,a-f),c=1;for(s<f&&f<s+h&&(c=-1,s+=h-1,f+=h-1);h-- >0;)s in r?r[f]=r[s]:delete r[f],f+=c,s+=c;return r}},function(t,e,r){var n=r(55);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e,r){var n=r(13),i=r(11),o=r(65),a=r(10);t.exports=function(t,e,r,f,s){n(e);var u=i(t),h=o(u),c=a(u.length),d=s?c-1:0,l=s?-1:1;if(r<2)for(;;){if(d in h){f=h[d],d+=l;break}if(d+=l,s?d<0:c<=d)throw TypeError("Reduce of empty array with no initial value")}for(;s?d>=0:c>d;d+=l)d in h&&(f=e(f,h[d],d,u));return f}},function(t,e,r){"use strict";var n=r(13),i=r(6),o=r(82),a=[].slice,f={},s=function(t,e,r){if(!(e in f)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";f[e]=Function("F,a","return new F("+n.join(",")+")")}return f[e](t,r)};t.exports=Function.bind||function(t){var e=n(this),r=a.call(arguments,1),f=function(){var n=r.concat(a.call(arguments));return this instanceof f?s(e,n.length,n):o(e,n,t)};return i(e.prototype)&&(f.prototype=e.prototype),f}},function(t,e,r){"use strict";var n=r(9).f,i=r(42),o=r(45),a=r(33),f=r(40),s=r(24),u=r(55),h=r(128),c=r(177),d=r(46),l=r(8),p=r(36).fastKey,b=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,h){var c=t(function(t,n){f(t,c,e,"_i"),t._i=i(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=n&&u(n,r,t[h],t)});return o(c.prototype,{clear:function(){for(var t=this,e=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete e[r.i];t._f=t._l=void 0,t[b]=0},delete:function(t){var e=this,r=v(e,t);if(r){var n=r.n,i=r.p;delete e._i[r.i],r.r=!0,i&&(i.n=n),n&&(n.p=i),e._f==r&&(e._f=n),e._l==r&&(e._l=i),e[b]--}return!!r},forEach:function(t){f(this,c,"forEach");for(var e,r=a(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(r(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!v(this,t)}}),l&&n(c.prototype,"size",{get:function(){return s(this[b])}}),c},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[b]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){h(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?"keys"==e?c(0,r.k):"values"==e?c(0,r.v):c(0,[r.k,r.v]):(t._t=void 0,c(1))},r?"entries":"values",!r,!0),d(e)}}},function(t,e,r){var n=r(64),i=r(168);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){"use strict";var n=r(45),i=r(36).getWeak,o=r(3),a=r(6),f=r(40),s=r(55),u=r(27),h=r(12),c=u(5),d=u(6),l=0,p=function(t){return t._l||(t._l=new b)},b=function(){this.a=[]},v=function(t,e){return c(t.a,function(t){return t[0]===e})};b.prototype={get:function(t){var e=v(this,t);if(e)return e[1]},has:function(t){return!!v(this,t)},set:function(t,e){var r=v(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=d(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var u=t(function(t,n){f(t,u,e,"_i"),t._i=l++,t._l=void 0,void 0!=n&&s(n,r,t[o],t)});return n(u.prototype,{delete:function(t){if(!a(t))return!1;var e=i(t);return e===!0?p(this).delete(t):e&&h(e,this._i)&&delete e[this._i]},has:function(t){if(!a(t))return!1;var e=i(t);return e===!0?p(this).has(t):e&&h(e,this._i)}}),u},def:function(t,e,r){var n=i(o(e),!0);return n===!0?p(t).set(e,r):n[t._i]=r,t},ufstore:p}},function(t,e,r){t.exports=!r(8)&&!r(5)(function(){return 7!=Object.defineProperty(r(120)("div"),"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(6),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,r){var n=r(3);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,e,r){"use strict";var n=r(44),i=r(86),o=r(66),a=r(11),f=r(65),s=Object.assign;t.exports=!s||r(5)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=s({},t)[r]||Object.keys(s({},e)).join("")!=n})?function(t,e){for(var r=a(t),s=arguments.length,u=1,h=i.f,c=o.f;s>u;)for(var d,l=f(arguments[u++]),p=h?n(l).concat(h(l)):n(l),b=p.length,v=0;b>v;)c.call(l,d=p[v++])&&(r[d]=l[d]);return r}:s},function(t,e,r){var n=r(9),i=r(3),o=r(44);t.exports=r(8)?Object.defineProperties:function(t,e){i(t);for(var r,a=o(e),f=a.length,s=0;f>s;)n.f(t,r=a[s++],e[r]);return t}},function(t,e,r){var n=r(17),i=r(43).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],f=function(t){try{return i(t)}catch(t){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==o.call(t)?f(t):i(n(t))}},function(t,e,r){var n=r(12),i=r(17),o=r(78)(!1),a=r(133)("IE_PROTO");t.exports=function(t,e){var r,f=i(t),s=0,u=[];for(r in f)r!=a&&n(f,r)&&u.push(r);for(;e.length>s;)n(f,r=e[s++])&&(~o(u,r)||u.push(r));return u}},function(t,e,r){var n=r(44),i=r(17),o=r(66).f;t.exports=function(t){return function(e){for(var r,a=i(e),f=n(a),s=f.length,u=0,h=[];s>u;)o.call(a,r=f[u++])&&h.push(t?[r,a[r]]:a[r]);return h}}},function(t,e,r){var n=r(43),i=r(86),o=r(3),a=r(4).Reflect;t.exports=a&&a.ownKeys||function(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},function(t,e,r){var n=r(4).parseFloat,i=r(58).trim;t.exports=1/n(r(138)+"-0")!==-(1/0)?function(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},function(t,e,r){var n=r(4).parseInt,i=r(58).trim,o=r(138),a=/^[\-+]?0[xX]/;t.exports=8!==n(o+"08")||22!==n(o+"0x16")?function(t,e){var r=i(String(t),3);return n(r,e>>>0||(a.test(r)?16:10))}:n},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},function(t,e,r){var n=r(10),i=r(137),o=r(24);t.exports=function(t,e,r,a){var f=String(o(t)),s=f.length,u=void 0===r?" ":String(r),h=n(e);if(h<=s||""==u)return f;var c=h-s,d=i.call(u,Math.ceil(c/u.length));return d.length>c&&(d=d.slice(0,c)),a?d+f:f+d}},function(t,e,r){e.f=r(7)},function(t,e,r){"use strict";var n=r(171);t.exports=r(79)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=n.getEntry(this,t);return e&&e.v},set:function(t,e){return n.def(this,0===t?0:t,e)}},n,!0)},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(81)})},function(t,e,r){"use strict";var n=r(171);t.exports=r(79)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return n.def(this,t=0===t?0:t,t)}},n)},function(t,e,r){"use strict";var n,i=r(27)(0),o=r(15),a=r(36),f=r(179),s=r(173),u=r(6),h=a.getWeak,c=Object.isExtensible,d=s.ufstore,l={},p=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(t){if(u(t)){var e=h(t);return e===!0?d(this).get(t):e?e[this._i]:void 0}},set:function(t,e){return s.def(this,t,e)}},v=t.exports=r(79)("WeakMap",p,b,s,!0,!0);7!=(new v).set((Object.freeze||Object)(l),7).get(l)&&(n=s.getConstructor(p),f(n.prototype,b),a.NEED=!0,i(["delete","has","get","set"],function(t){var e=v.prototype,r=e[t];o(e,t,function(e,i){if(u(e)&&!c(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e){function r(t){throw new Error("Cannot find module '"+t+"'.")}r.keys=function(){return[]},r.resolve=r,t.exports=r,r.id=194},function(t,e){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var o=function(t){function e(t){r(this,e);var i=n(this,Object.getPrototypeOf(e).call(this));return Object.defineProperty(i,"message",{configurable:!0,enumerable:!1,value:void 0!==t?String(t):""}),Object.defineProperty(i,"name",{configurable:!0,enumerable:!1,value:i.constructor.name}),Error.captureStackTrace&&Error.captureStackTrace(i,i.constructor),i}return i(e,t),e}(Error);t.exports=o},function(t,e,r){r(486),t.exports=r(197).Number.isInteger},function(t,e){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(200),i=r(197),o=r(478),a=r(480),f="prototype",s=function(t,e,r){var u,h,c,d=t&s.F,l=t&s.G,p=t&s.S,b=t&s.P,v=t&s.B,y=t&s.W,m=l?i:i[e]||(i[e]={}),g=m[f],w=l?n:p?n[e]:(n[e]||{})[f];l&&(r=e);for(u in r)h=!d&&w&&void 0!==w[u],h&&u in m||(c=h?w[u]:r[u],m[u]=l&&"function"!=typeof w[u]?r[u]:v&&h?o(c,n):y&&w[u]==c?function(t){var e=function(e,r,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,r)}return new t(e,r,n)}return t.apply(this,arguments)};return e[f]=t[f],e}(c):b&&"function"==typeof c?o(Function.call,c):c,b&&((m.virtual||(m.virtual={}))[u]=c,t&s.R&&g&&!g[u]&&a(g,u,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";t.exports=r(473)},function(t,e,r){"use strict";(function(e){/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
* @license MIT
*/
function n(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i<o;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}function i(t){return e.Buffer&&"function"==typeof e.Buffer.isBuffer?e.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}function o(t){return Object.prototype.toString.call(t)}function a(t){return!i(t)&&("function"==typeof e.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer))))}function f(t){if(w.isFunction(t)){if(S)return t.name;var e=t.toString(),r=e.match(A);return r&&r[1]}}function s(t,e){return"string"==typeof t?t.length<e?t:t.slice(0,e):t}function u(t){if(S||!w.isFunction(t))return w.inspect(t);var e=f(t),r=e?": "+e:"";return"[Function"+r+"]"}function h(t){return s(u(t.actual),128)+" "+t.operator+" "+s(u(t.expected),128)}function c(t,e,r,n,i){throw new E.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:i})}function d(t,e){t||c(t,!0,e,"==",E.ok)}function l(t,e,r,f){if(t===e)return!0;if(i(t)&&i(e))return 0===n(t,e);if(w.isDate(t)&&w.isDate(e))return t.getTime()===e.getTime();if(w.isRegExp(t)&&w.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&"object"==typeof t||null!==e&&"object"==typeof e){if(a(t)&&a(e)&&o(t)===o(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===n(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(i(t)!==i(e))return!1;f=f||{actual:[],expected:[]};var s=f.actual.indexOf(t);return s!==-1&&s===f.expected.indexOf(e)||(f.actual.push(t),f.expected.push(e),b(t,e,r,f))}return r?t===e:t==e}function p(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function b(t,e,r,n){if(null===t||void 0===t||null===e||void 0===e)return!1;if(w.isPrimitive(t)||w.isPrimitive(e))return t===e;if(r&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var i=p(t),o=p(e);if(i&&!o||!i&&o)return!1;if(i)return t=M.call(t),e=M.call(e),l(t,e,r);var a,f,s=k(t),u=k(e);if(s.length!==u.length)return!1;for(s.sort(),u.sort(),f=s.length-1;f>=0;f--)if(s[f]!==u[f])return!1;for(f=s.length-1;f>=0;f--)if(a=s[f],!l(t[a],e[a],r,n))return!1;return!0}function v(t,e,r){l(t,e,!0)&&c(t,e,r,"notDeepStrictEqual",v)}function y(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&e.call({},t)===!0}function m(t){var e;try{t()}catch(t){e=t}return e}function g(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=m(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&c(i,r,"Missing expected exception"+n);var o="string"==typeof n,a=!t&&w.isError(i),f=!t&&i&&!r;if((a&&o&&y(i,r)||f)&&c(i,r,"Got unwanted exception"+n),t&&i&&r&&!y(i,r)||!t&&i)throw i}var w=r(606),_=Object.prototype.hasOwnProperty,M=Array.prototype.slice,S=function(){return"foo"===function(){}.name}(),E=t.exports=d,A=/\s*function\s+([^\(\s]*)\s*/;E.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=h(this),this.generatedMessage=!0);var e=t.stackStartFunction||c;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=f(e),o=n.indexOf("\n"+i);if(o>=0){var a=n.indexOf("\n",o+1);n=n.substring(a+1)}this.stack=n}}},w.inherits(E.AssertionError,Error),E.fail=c,E.ok=d,E.equal=function(t,e,r){t!=e&&c(t,e,r,"==",E.equal)},E.notEqual=function(t,e,r){t==e&&c(t,e,r,"!=",E.notEqual)},E.deepEqual=function(t,e,r){l(t,e,!1)||c(t,e,r,"deepEqual",E.deepEqual)},E.deepStrictEqual=function(t,e,r){l(t,e,!0)||c(t,e,r,"deepStrictEqual",E.deepStrictEqual)},E.notDeepEqual=function(t,e,r){l(t,e,!1)&&c(t,e,r,"notDeepEqual",E.notDeepEqual)},E.notDeepStrictEqual=v,E.strictEqual=function(t,e,r){t!==e&&c(t,e,r,"===",E.strictEqual)},E.notStrictEqual=function(t,e,r){t===e&&c(t,e,r,"!==",E.notStrictEqual)},E.throws=function(t,e,r){g(!0,t,e,r)},E.doesNotThrow=function(t,e,r){g(!1,t,e,r)},E.ifError=function(t){if(t)throw t};var k=Object.keys||function(t){var e=[];for(var r in t)_.call(t,r)&&e.push(r);return e}}).call(e,r(39))},function(t,e,r){(function(e){function n(t,r,i,f){if(!(this instanceof n))return new n(t,r,i);a.call(this),this._finID=e.concat([i,new e([0,0,0,1])]),i=e.concat([i,new e([0,0,0,2])]),this._cipher=new o.AES(r),this._prev=new e(i.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,this._alen=0,this._len=0,i.copy(this._prev),this._mode=t;var u=new e(4);u.fill(0),this._ghash=new s(this._cipher.encryptBlock(u)),this._authTag=null,this._called=!1}function i(t,e){var r=0;t.length!==e.length&&r++;for(var n=Math.min(t.length,e.length),i=-1;++i<n;)r+=t[i]^e[i];return r}var o=r(94),a=r(97),f=r(2),s=r(497),u=r(67);f(n,a),t.exports=n,n.prototype._update=function(t){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=new e(r),r.fill(0),this._ghash.update(r))}this._called=!0;var n=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(n),this._len+=t.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=t;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&e.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},n.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length}}).call(e,r(1).Buffer)},function(t,e,r){var n=r(67);e.encrypt=function(t,e){var r=n(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},e.decrypt=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return n(i,r)}},function(t,e,r){(function(t){function n(e,r,n){var o=r.length,a=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:a]),a}var i=r(67);e.encrypt=function(e,r,i){for(var o,a=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){a=t.concat([a,n(e,r,i)]);break}o=e._cache.length,a=t.concat([a,n(e,r.slice(0,o),i)]),r=r.slice(o)}return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e,r){for(var i,o,a,f=-1,s=8,u=0;++f<s;)i=t._cipher.encryptBlock(t._prev),o=e&1<<7-f?128:0,a=i[0]^o,u+=(128&a)>>f%8,t._prev=n(t._prev,r?o:a);return u}function n(e,r){var n=e.length,i=-1,o=new t(e.length);for(e=t.concat([e,new t([r])]);++i<n;)o[i]=e[i]<<1|e[i+1]>>7;return o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(e,r,n){var i=e._cipher.encryptBlock(e._prev),o=i[0]^r;return e._prev=t.concat([e._prev.slice(1),new t([n?r:o])]),o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e){e.encrypt=function(t,e){return t._cipher.encryptBlock(e)},e.decrypt=function(t,e){return t._cipher.decryptBlock(e)}},function(t,e,r){(function(t){function n(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}var i=r(67);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,n(e)]);var o=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),i(r,o)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,a,f){return this instanceof n?(o.call(this),this._cipher=new i.AES(r),this._prev=new e(a.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,a.copy(this._prev),void(this._mode=t)):new n(t,r,a)}var i=r(94),o=r(97),a=r(2);a(n,o),t.exports=n,n.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},n.prototype._final=function(){this._cipher.scrub()}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(t){e["RSA-SHA224"]=e.sha224WithRSAEncryption={sign:"rsa",hash:"sha224",id:new t("302d300d06096086480165030402040500041c","hex")},e["RSA-SHA256"]=e.sha256WithRSAEncryption={sign:"rsa",hash:"sha256",id:new t("3031300d060960864801650304020105000420","hex")},e["RSA-SHA384"]=e.sha384WithRSAEncryption={sign:"rsa",hash:"sha384",id:new t("3041300d060960864801650304020205000430","hex")},e["RSA-SHA512"]=e.sha512WithRSAEncryption={sign:"rsa",hash:"sha512",id:new t("3051300d060960864801650304020305000440","hex")},e["RSA-SHA1"]={sign:"rsa",hash:"sha1",id:new t("3021300906052b0e03021a05000414","hex")},e["ecdsa-with-SHA1"]={sign:"ecdsa",hash:"sha1",id:new t("","hex")},e.DSA=e["DSA-SHA1"]=e["DSA-SHA"]={sign:"dsa",hash:"sha1",id:new t("","hex")},e["DSA-SHA224"]=e["DSA-WITH-SHA224"]={sign:"dsa",hash:"sha224",id:new t("","hex")},e["DSA-SHA256"]=e["DSA-WITH-SHA256"]={sign:"dsa",hash:"sha256",id:new t("","hex")},e["DSA-SHA384"]=e["DSA-WITH-SHA384"]={sign:"dsa",hash:"sha384",id:new t("","hex")},e["DSA-SHA512"]=e["DSA-WITH-SHA512"]={sign:"dsa",hash:"sha512",id:new t("","hex")},e["DSA-RIPEMD160"]={sign:"dsa",hash:"rmd160",id:new t("","hex")},e["RSA-RIPEMD160"]=e.ripemd160WithRSA={sign:"rsa",hash:"rmd160",id:new t("3021300906052b2403020105000414","hex")},e["RSA-MD5"]=e.md5WithRSAEncryption={sign:"rsa",hash:"md5",id:new t("3020300c06082a864886f70d020505000410","hex")}}).call(e,r(1).Buffer)},function(t,e){"use strict";e["1.3.132.0.10"]="secp256k1",e["1.3.132.0.33"]="p224",e["1.2.840.10045.3.1.1"]="p192",e["1.2.840.10045.3.1.7"]="p256",e["1.3.132.0.34"]="p384",e["1.3.132.0.35"]="p521"},function(t,e,r){(function(e){function n(t){var r;"object"!=typeof t||e.isBuffer(t)||(r=t.passphrase,t=t.key),"string"==typeof t&&(t=new e(t));var n,a,s=f(t,r),u=s.tag,h=s.data;switch(u){case"PUBLIC KEY":switch(a=o.PublicKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPublicKey.decode(a.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return a.subjectPrivateKey=a.subjectPublicKey,{type:"ec",data:a};case"1.2.840.10040.4.1":return a.algorithm.params.pub_key=o.DSAparam.decode(a.subjectPublicKey.data,"der"),{type:"dsa",data:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"ENCRYPTED PRIVATE KEY":h=o.EncryptedPrivateKey.decode(h,"der"),h=i(h,r);case"PRIVATE KEY":switch(a=o.PrivateKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPrivateKey.decode(a.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:a.algorithm.curve,privateKey:o.ECPrivateKey.decode(a.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return a.algorithm.params.priv_key=o.DSAparam.decode(a.subjectPrivateKey,"der"),{type:"dsa",params:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"RSA PUBLIC KEY":return o.RSAPublicKey.decode(h,"der");case"RSA PRIVATE KEY":return o.RSAPrivateKey.decode(h,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:o.DSAPrivateKey.decode(h,"der")};case"EC PRIVATE KEY":return h=o.ECPrivateKey.decode(h,"der"),{curve:h.parameters.value,privateKey:h.privateKey};default:throw new Error("unknown key type "+u)}}function i(t,r){var n=t.algorithm.decrypt.kde.kdeparams.salt,i=parseInt(t.algorithm.decrypt.kde.kdeparams.iters.toString(),10),o=a[t.algorithm.decrypt.cipher.algo.join(".")],f=t.algorithm.decrypt.cipher.iv,h=t.subjectPrivateKey,c=parseInt(o.split("-")[1],10)/8,d=u.pbkdf2Sync(r,n,i,c),l=s.createDecipheriv(o,d,f),p=[];return p.push(l.update(h)),p.push(l.final()),e.concat(p)}var o=r(528),a=r(466),f=r(529),s=r(219),u=r(151);t.exports=n,n.signature=o.signature}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){return a.call(this,e),f.isBuffer(t)?(this.base=t,this.offset=0,void(this.length=t.length)):void this.error("Input not Buffer")}function i(t,e){if(Array.isArray(t))this.length=0,this.value=t.map(function(t){return t instanceof i||(t=new i(t,e)),this.length+=t.length,t},this);else if("number"==typeof t){if(!(0<=t&&t<=255))return e.error("non-byte EncoderBuffer value");this.value=t,this.length=1}else if("string"==typeof t)this.value=t,this.length=f.byteLength(t);else{if(!f.isBuffer(t))return e.error("Unsupported type: "+typeof t);this.value=t,this.length=t.length}}var o=r(2),a=r(68).Reporter,f=r(1).Buffer;o(n,a),e.DecoderBuffer=n,n.prototype.save=function(){return{offset:this.offset,reporter:a.prototype.save.call(this)}},n.prototype.restore=function(t){var e=new n(this.base);return e.offset=t.offset,e.length=this.offset,this.offset=t.offset,a.prototype.restore.call(this,t.reporter),e},n.prototype.isEmpty=function(){return this.offset===this.length},n.prototype.readUInt8=function(t){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(t||"DecoderBuffer overrun")},n.prototype.skip=function(t,e){if(!(this.offset+t<=this.length))return this.error(e||"DecoderBuffer overrun");var r=new n(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+t,this.offset+=t,r},n.prototype.raw=function(t){return this.base.slice(t?t.offset:this.offset,this.length)},e.EncoderBuffer=i,i.prototype.join=function(t,e){return t||(t=new f(this.length)),e||(e=0),0===this.length?t:(Array.isArray(this.value)?this.value.forEach(function(r){r.join(t,e),e+=r.length}):("number"==typeof this.value?t[e]=this.value:"string"==typeof this.value?t.write(this.value,e):f.isBuffer(this.value)&&this.value.copy(t,e),e+=this.length),t)}},function(t,e,r){var n=e;n._reverse=function(t){var e={};return Object.keys(t).forEach(function(r){(0|r)==r&&(r|=0);var n=t[r];e[n]=r}),e},n.der=r(533)},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){u.Node.call(this,"der",t)}function o(t,e){var r=t.readUInt8(e);if(t.isError(r))return r;var n=c.tagClass[r>>6],i=0===(32&r);if(31===(31&r)){var o=r;for(r=0;128===(128&o);){if(o=t.readUInt8(e),t.isError(o))return o;r<<=7,r|=127&o}}else r&=31;var a=c.tag[r];return{cls:n,primitive:i,tag:r,tagStr:a}}function a(t,e,r){var n=t.readUInt8(r);if(t.isError(n))return n;if(!e&&128===n)return null;if(0===(128&n))return n;var i=127&n;if(i>=4)return t.error("length octect is too long");n=0;for(var o=0;o<i;o++){n<<=8;var a=t.readUInt8(r);if(t.isError(a))return a;n|=a}return n}var f=r(2),s=r(100),u=s.base,h=s.bignum,c=s.constants.der;t.exports=n,n.prototype.decode=function(t,e){return t instanceof u.DecoderBuffer||(t=new u.DecoderBuffer(t,e)),this.tree._decode(t,e)},f(i,u.Node),i.prototype._peekTag=function(t,e,r){if(t.isEmpty())return!1;var n=t.save(),i=o(t,'Failed to peek tag: "'+e+'"');return t.isError(i)?i:(t.restore(n),i.tag===e||i.tagStr===e||i.tagStr+"of"===e||r)},i.prototype._decodeTag=function(t,e,r){var n=o(t,'Failed to decode tag of "'+e+'"');if(t.isError(n))return n;var i=a(t,n.primitive,'Failed to get length of "'+e+'"');if(t.isError(i))return i;if(!r&&n.tag!==e&&n.tagStr!==e&&n.tagStr+"of"!==e)return t.error('Failed to match tag: "'+e+'"');if(n.primitive||null!==i)return t.skip(i,'Failed to match body of: "'+e+'"');var f=t.save(),s=this._skipUntilEnd(t,'Failed to skip indefinite length body: "'+this.tag+'"');return t.isError(s)?s:(i=t.offset-f.offset,t.restore(f),t.skip(i,'Failed to match body of: "'+e+'"'))},i.prototype._skipUntilEnd=function(t,e){for(;;){var r=o(t,e);if(t.isError(r))return r;var n=a(t,r.primitive,e);if(t.isError(n))return n;var i;if(i=r.primitive||null!==n?t.skip(n):this._skipUntilEnd(t,e),t.isError(i))return i;if("end"===r.tagStr)break}},i.prototype._decodeList=function(t,e,r,n){for(var i=[];!t.isEmpty();){var o=this._peekTag(t,"end");if(t.isError(o))return o;var a=r.decode(t,"der",n);if(t.isError(a)&&o)break;i.push(a)}return i},i.prototype._decodeStr=function(t,e){if("bitstr"===e){var r=t.readUInt8();return t.isError(r)?r:{unused:r,data:t.raw()}}if("bmpstr"===e){var n=t.raw();if(n.length%2===1)return t.error("Decoding of string type: bmpstr length mismatch");for(var i="",o=0;o<n.length/2;o++)i+=String.fromCharCode(n.readUInt16BE(2*o));return i}if("numstr"===e){var a=t.raw().toString("ascii");return this._isNumstr(a)?a:t.error("Decoding of string type: numstr unsupported characters")}if("octstr"===e)return t.raw();if("printstr"===e){var f=t.raw().toString("ascii");return this._isPrintstr(f)?f:t.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(e)?t.raw().toString():t.error("Decoding of string type: "+e+" unsupported")},i.prototype._decodeObjid=function(t,e,r){for(var n,i=[],o=0;!t.isEmpty();){var a=t.readUInt8();o<<=7,o|=127&a,0===(128&a)&&(i.push(o),o=0)}128&a&&i.push(o);var f=i[0]/40|0,s=i[0]%40;if(n=r?i:[f,s].concat(i.slice(1)),e){var u=e[n.join(" ")];void 0===u&&(u=e[n.join(".")]),void 0!==u&&(n=u)}return n},i.prototype._decodeTime=function(t,e){var r=t.raw().toString();if("gentime"===e)var n=0|r.slice(0,4),i=0|r.slice(4,6),o=0|r.slice(6,8),a=0|r.slice(8,10),f=0|r.slice(10,12),s=0|r.slice(12,14);else{if("utctime"!==e)return t.error("Decoding "+e+" time is not supported yet");var n=0|r.slice(0,2),i=0|r.slice(2,4),o=0|r.slice(4,6),a=0|r.slice(6,8),f=0|r.slice(8,10),s=0|r.slice(10,12);n=n<70?2e3+n:1900+n}return Date.UTC(n,i-1,o,a,f,s,0)},i.prototype._decodeNull=function(t){return null},i.prototype._decodeBool=function(t){var e=t.readUInt8();return t.isError(e)?e:0!==e},i.prototype._decodeInt=function(t,e){var r=t.raw(),n=new h(r);return e&&(n=e[n.toString(10)]||n),n},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getDecoder("der").tree}},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){h.Node.call(this,"der",t)}function o(t){return t<10?"0"+t:t}function a(t,e,r,n){var i;if("seqof"===t?t="seq":"setof"===t&&(t="set"),c.tagByName.hasOwnProperty(t))i=c.tagByName[t];else{if("number"!=typeof t||(0|t)!==t)return n.error("Unknown tag: "+t);i=t}return i>=31?n.error("Multi-octet tag encoding unsupported"):(e||(i|=32),i|=c.tagClassByName[r||"universal"]<<6)}var f=r(2),s=r(1).Buffer,u=r(100),h=u.base,c=u.constants.der;t.exports=n,n.prototype.encode=function(t,e){return this.tree._encode(t,e).join()},f(i,h.Node),i.prototype._encodeComposite=function(t,e,r,n){var i=a(t,e,r,this.reporter);if(n.length<128){var o=new s(2);return o[0]=i,o[1]=n.length,this._createEncoderBuffer([o,n])}for(var f=1,u=n.length;u>=256;u>>=8)f++;var o=new s(2+f);o[0]=i,o[1]=128|f;for(var u=1+f,h=n.length;h>0;u--,h>>=8)o[u]=255&h;return this._createEncoderBuffer([o,n])},i.prototype._encodeStr=function(t,e){if("bitstr"===e)return this._createEncoderBuffer([0|t.unused,t.data]);if("bmpstr"===e){for(var r=new s(2*t.length),n=0;n<t.length;n++)r.writeUInt16BE(t.charCodeAt(n),2*n);return this._createEncoderBuffer(r)}return"numstr"===e?this._isNumstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===e?this._isPrintstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(e)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: "+e+" unsupported")},i.prototype._encodeObjid=function(t,e,r){if("string"==typeof t){if(!e)return this.reporter.error("string objid given, but no values map found");if(!e.hasOwnProperty(t))return this.reporter.error("objid not found in values map");t=e[t].split(/[\s\.]+/g);for(var n=0;n<t.length;n++)t[n]|=0}else if(Array.isArray(t)){t=t.slice();for(var n=0;n<t.length;n++)t[n]|=0}if(!Array.isArray(t))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(t));if(!r){if(t[1]>=40)return this.reporter.error("Second objid identifier OOB");t.splice(0,2,40*t[0]+t[1])}for(var i=0,n=0;n<t.length;n++){var o=t[n];for(i++;o>=128;o>>=7)i++}for(var a=new s(i),f=a.length-1,n=t.length-1;n>=0;n--){var o=t[n];for(a[f--]=127&o;(o>>=7)>0;)a[f--]=128|127&o}return this._createEncoderBuffer(a)},i.prototype._encodeTime=function(t,e){var r,n=new Date(t);return"gentime"===e?r=[o(n.getFullYear()),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):"utctime"===e?r=[o(n.getFullYear()%100),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+e+" time is not supported yet"),this._encodeStr(r,"octstr")},i.prototype._encodeNull=function(){return this._createEncoderBuffer("")},i.prototype._encodeInt=function(t,e){if("string"==typeof t){if(!e)return this.reporter.error("String int or enum given, but no values map");if(!e.hasOwnProperty(t))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(t));t=e[t]}if("number"!=typeof t&&!s.isBuffer(t)){var r=t.toArray();!t.sign&&128&r[0]&&r.unshift(0),t=new s(r)}if(s.isBuffer(t)){var n=t.length;0===t.length&&n++;var i=new s(n);return t.copy(i),0===t.length&&(i[0]=0),this._createEncoderBuffer(i)}if(t<128)return this._createEncoderBuffer(t);if(t<256)return this._createEncoderBuffer([0,t]);for(var n=1,o=t;o>=256;o>>=8)n++;for(var i=new Array(n),o=i.length-1;o>=0;o--)i[o]=255&t,t>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(new s(i))},i.prototype._encodeBool=function(t){return this._createEncoderBuffer(t?255:0)},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getEncoder("der").tree},i.prototype._skipDefault=function(t,e,r){var n,i=this._baseState;if(null===i.default)return!1;var o=t.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,e,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n<o.length;n++)if(o[n]!==i.defaultBuffer[n])return!1;return!0}},function(t,e,r){(function(e){function n(t,r,i,f){if(!(this instanceof n))return new n(t,r,i);a.call(this),this._finID=e.concat([i,new e([0,0,0,1])]),i=e.concat([i,new e([0,0,0,2])]),this._cipher=new o.AES(r),this._prev=new e(i.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,this._alen=0,this._len=0,i.copy(this._prev),this._mode=t;var u=new e(4);u.fill(0),this._ghash=new s(this._cipher.encryptBlock(u)),this._authTag=null,this._called=!1}function i(t,e){var r=0;t.length!==e.length&&r++;for(var n=Math.min(t.length,e.length),i=-1;++i<n;)r+=t[i]^e[i];return r}var o=r(101),a=r(103),f=r(2),s=r(541),u=r(69);f(n,a),t.exports=n,n.prototype._update=function(t){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=new e(r),r.fill(0),this._ghash.update(r))}this._called=!0;var n=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(n),this._len+=t.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=t;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&e.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},n.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length}}).call(e,r(1).Buffer)},function(t,e,r){function n(){return Object.keys(a)}var i=r(540);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv;var o=r(539);e.createDecipher=e.Decipher=o.createDecipher,e.createDecipheriv=e.Decipheriv=o.createDecipheriv;var a=r(147);e.listCiphers=e.getCiphers=n},function(t,e,r){var n=r(69);e.encrypt=function(t,e){var r=n(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},e.decrypt=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return n(i,r)}},function(t,e,r){(function(t){function n(e,r,n){var o=r.length,a=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:a]),a}var i=r(69);e.encrypt=function(e,r,i){for(var o,a=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){a=t.concat([a,n(e,r,i)]);break}o=e._cache.length,a=t.concat([a,n(e,r.slice(0,o),i)]),r=r.slice(o)}return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e,r){for(var i,o,a,f=-1,s=8,u=0;++f<s;)i=t._cipher.encryptBlock(t._prev),o=e&1<<7-f?128:0,a=i[0]^o,u+=(128&a)>>f%8,t._prev=n(t._prev,r?o:a);return u}function n(e,r){var n=e.length,i=-1,o=new t(e.length);for(e=t.concat([e,new t([r])]);++i<n;)o[i]=e[i]<<1|e[i+1]>>7;return o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(e,r,n){var i=e._cipher.encryptBlock(e._prev),o=i[0]^r;return e._prev=t.concat([e._prev.slice(1),new t([n?r:o])]),o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e){e.encrypt=function(t,e){return t._cipher.encryptBlock(e)},e.decrypt=function(t,e){return t._cipher.decryptBlock(e)}},function(t,e,r){(function(t){function n(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}var i=r(69);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,n(e)]);var o=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),i(r,o)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,a,f){return this instanceof n?(o.call(this),this._cipher=new i.AES(r),this._prev=new e(a.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,a.copy(this._prev),void(this._mode=t)):new n(t,r,a)}var i=r(101),o=r(103),a=r(2);a(n,o),t.exports=n,n.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},n.prototype._final=function(){this._cipher.scrub()}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=l,c.call(this,64,56)}function i(t,e,r){return r^t&(e^r)}function o(t,e,r){return t&e|r&(t|e)}function a(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function f(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function s(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}function u(t){return(t>>>17|t<<15)^(t>>>19|t<<13)^t>>>10}var h=r(2),c=r(60),d=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=new Array(64);h(n,c),n.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._a,n=0|this._b,h=0|this._c,c=0|this._d,l=0|this._e,p=0|this._f,b=0|this._g,v=0|this._h,y=0;y<16;++y)e[y]=t.readInt32BE(4*y);for(;y<64;++y)e[y]=u(e[y-2])+e[y-7]+s(e[y-15])+e[y-16]|0;for(var m=0;m<64;++m){var g=v+f(l)+i(l,p,b)+d[m]+e[m]|0,w=a(r)+o(r,n,h)|0;v=b,b=p,p=l,l=c+g|0,c=h,h=n,n=r,r=g+w|0}this._a=r+this._a|0,this._b=n+this._b|0,this._c=h+this._c|0,this._d=c+this._d|0,this._e=l+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=v+this._h|0},n.prototype._hash=function(){var t=new e(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=v,p.call(this,128,112)}function i(t,e,r){return r^t&(e^r)}function o(t,e,r){return t&e|r&(t|e)}function a(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function f(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function s(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function u(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function h(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function c(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function d(t,e){return t>>>0<e>>>0?1:0}var l=r(2),p=r(60),b=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],v=new Array(160);l(n,p),n.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._ah,n=0|this._bh,l=0|this._ch,p=0|this._dh,v=0|this._eh,y=0|this._fh,m=0|this._gh,g=0|this._hh,w=0|this._al,_=0|this._bl,M=0|this._cl,S=0|this._dl,E=0|this._el,A=0|this._fl,k=0|this._gl,x=0|this._hl,I=0;I<32;I+=2)e[I]=t.readInt32BE(4*I),e[I+1]=t.readInt32BE(4*I+4);for(;I<160;I+=2){var B=e[I-30],O=e[I-30+1],R=s(B,O),P=u(O,B);
B=e[I-4],O=e[I-4+1];var T=h(B,O),j=c(O,B),C=e[I-14],N=e[I-14+1],L=e[I-32],U=e[I-32+1],z=P+N|0,D=R+C+d(z,P)|0;z=z+j|0,D=D+T+d(z,j)|0,z=z+U|0,D=D+L+d(z,U)|0,e[I]=D,e[I+1]=z}for(var q=0;q<160;q+=2){D=e[q],z=e[q+1];var F=o(r,n,l),K=o(w,_,M),G=a(r,w),V=a(w,r),H=f(v,E),X=f(E,v),Y=b[q],W=b[q+1],Z=i(v,y,m),J=i(E,A,k),$=x+X|0,Q=g+H+d($,x)|0;$=$+J|0,Q=Q+Z+d($,J)|0,$=$+W|0,Q=Q+Y+d($,W)|0,$=$+z|0,Q=Q+D+d($,z)|0;var tt=V+K|0,et=G+F+d(tt,V)|0;g=m,x=k,m=y,k=A,y=v,A=E,E=S+$|0,v=p+Q+d(E,S)|0,p=l,S=M,l=n,M=_,n=r,_=w,w=$+tt|0,r=Q+et+d(w,$)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+M|0,this._dl=this._dl+S|0,this._el=this._el+E|0,this._fl=this._fl+A|0,this._gl=this._gl+k|0,this._hl=this._hl+x|0,this._ah=this._ah+r+d(this._al,w)|0,this._bh=this._bh+n+d(this._bl,_)|0,this._ch=this._ch+l+d(this._cl,M)|0,this._dh=this._dh+p+d(this._dl,S)|0,this._eh=this._eh+v+d(this._el,E)|0,this._fh=this._fh+y+d(this._fl,A)|0,this._gh=this._gh+m+d(this._gl,k)|0,this._hh=this._hh+g+d(this._hl,x)|0},n.prototype._hash=function(){function t(t,e,n){r.writeInt32BE(t,n),r.writeInt32BE(e,n+4)}var r=new e(64);return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),r},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){function n(){if(null!==g)return g;var t=1048576,e=[];e[0]=2;for(var r=1,n=3;n<t;n+=2){for(var i=Math.ceil(Math.sqrt(n)),o=0;o<r&&e[o]<=i&&n%e[o]!==0;o++);r!==o&&e[o]<=i||(e[r++]=n)}return g=e,e}function i(t){for(var e=n(),r=0;r<e.length;r++)if(0===t.modn(e[r]))return 0===t.cmpn(e[r]);return!0}function o(t){var e=s.mont(t);return 0===l.toRed(e).redPow(t.subn(1)).fromRed().cmpn(1)}function a(t,e){if(t<16)return new s(2===e||5===e?[140,123]:[140,39]);e=new s(e);for(var r,n;;){for(r=new s(f(Math.ceil(t/8)));r.bitLength()>t;)r.ishrn(1);if(r.isEven()&&r.iadd(d),r.testn(1)||r.iadd(l),e.cmp(l)){if(!e.cmp(p))for(;r.mod(b).cmp(v);)r.iadd(m)}else for(;r.mod(u).cmp(y);)r.iadd(m);if(n=r.shrn(1),i(n)&&i(r)&&o(n)&&o(r)&&c.test(n)&&c.test(r))return r}}var f=r(61);t.exports=a,a.simpleSieve=i,a.fermatTest=o;var s=r(150),u=new s(24),h=r(230),c=new h,d=new s(1),l=new s(2),p=new s(5),b=(new s(16),new s(8),new s(10)),v=new s(3),y=(new s(7),new s(11)),m=new s(4),g=(new s(12),null)},function(t,e,r){function n(t){this.rand=t||new o.Rand}var i=r(150),o=r(575);t.exports=n,n.create=function(t){return new n(t)},n.prototype._rand=function(t){var e=t.bitLength(),r=this.rand.generate(Math.ceil(e/8));r[0]|=3;var n=7&e;return 0!==n&&(r[r.length-1]>>=7-n),new i(r)},n.prototype.test=function(t,e,r){var n=t.bitLength(),o=i.mont(t),a=new i(1).toRed(o);e||(e=Math.max(1,n/48|0));for(var f=t.subn(1),s=f.subn(1),u=0;!f.testn(u);u++);for(var h=t.shrn(u),c=f.toRed(o),d=!0;e>0;e--){var l=this._rand(s);r&&r(l);var p=l.toRed(o).redPow(h);if(0!==p.cmp(a)&&0!==p.cmp(c)){for(var b=1;b<u;b++){if(p=p.redSqr(),0===p.cmp(a))return!1;if(0===p.cmp(c))break}if(b===u)return!1}}return d},n.prototype.getDivisor=function(t,e){var r=t.bitLength(),n=i.mont(t),o=new i(1).toRed(n);e||(e=Math.max(1,r/48|0));for(var a=t.subn(1),f=a.subn(1),s=0;!a.testn(s);s++);for(var u=t.shrn(s),h=a.toRed(n);e>0;e--){var c=this._rand(f),d=t.gcd(c);if(0!==d.cmpn(1))return d;var l=c.toRed(n).redPow(u);if(0!==l.cmp(o)&&0!==l.cmp(h)){for(var p=1;p<s;p++){if(l=l.redSqr(),0===l.cmp(o))return l.fromRed().subn(1).gcd(t);if(0===l.cmp(h))break}if(p===s)return l=l.redSqr(),l.fromRed().subn(1).gcd(t)}}return!1}},function(t,e,r){(function(e){function n(t){var r=new e(4);return r.writeUInt32BE(t,0),r}var i=r(59);t.exports=function(t,r){for(var o,a=new e(""),f=0;a.length<r;)o=n(f++),a=e.concat([a,i("sha1").update(t).update(o).digest()]);return a.slice(0,r)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){var e=o(t),r=e.toRed(a.mont(t.modulus)).redPow(new a(t.publicExponent)).fromRed();return{blinder:r,unblinder:e.invm(t.modulus)}}function i(t,r){var i=n(r),o=r.modulus.byteLength(),f=(a.mont(r.modulus),new a(t).mul(i.blinder).umod(r.modulus)),s=f.toRed(a.mont(r.prime1)),u=f.toRed(a.mont(r.prime2)),h=r.coefficient,c=r.prime1,d=r.prime2,l=s.redPow(r.exponent1),p=u.redPow(r.exponent2);l=l.fromRed(),p=p.fromRed();var b=l.isub(p).imul(h).umod(c);return b.imul(d),p.iadd(b),new e(p.imul(i.unblinder).umod(r.modulus).toArray(!1,o))}function o(t){for(var e=t.modulus.byteLength(),r=new a(f(e));r.cmp(t.modulus)>=0||!r.umod(t.prime1)||!r.umod(t.prime2);)r=new a(f(e));return r}var a=r(70),f=r(61);t.exports=i,i.getr=o}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){var r;"object"!=typeof t||e.isBuffer(t)||(r=t.passphrase,t=t.key),"string"==typeof t&&(t=new e(t));var n,a,s=f(t,r),u=s.tag,h=s.data;switch(u){case"PUBLIC KEY":switch(a=o.PublicKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPublicKey.decode(a.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return a.subjectPrivateKey=a.subjectPublicKey,{type:"ec",data:a};case"1.2.840.10040.4.1":return a.algorithm.params.pub_key=o.DSAparam.decode(a.subjectPublicKey.data,"der"),{type:"dsa",data:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"ENCRYPTED PRIVATE KEY":h=o.EncryptedPrivateKey.decode(h,"der"),h=i(h,r);case"PRIVATE KEY":switch(a=o.PrivateKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPrivateKey.decode(a.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:a.algorithm.curve,privateKey:o.ECPrivateKey.decode(a.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return a.algorithm.params.priv_key=o.DSAparam.decode(a.subjectPrivateKey,"der"),{type:"dsa",params:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"RSA PUBLIC KEY":return o.RSAPublicKey.decode(h,"der");case"RSA PRIVATE KEY":return o.RSAPrivateKey.decode(h,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:o.DSAPrivateKey.decode(h,"der")};case"EC PRIVATE KEY":return h=o.ECPrivateKey.decode(h,"der"),{curve:h.parameters.value,privateKey:h.privateKey};default:throw new Error("unknown key type "+u)}}function i(t,r){var n=t.algorithm.decrypt.kde.kdeparams.salt,i=parseInt(t.algorithm.decrypt.kde.kdeparams.iters.toString(),10),o=a[t.algorithm.decrypt.cipher.algo.join(".")],f=t.algorithm.decrypt.cipher.iv,h=t.subjectPrivateKey,c=parseInt(o.split("-")[1],10)/8,d=u.pbkdf2Sync(r,n,i,c),l=s.createDecipheriv(o,d,f),p=[];return p.push(l.update(h)),p.push(l.final()),e.concat(p)}var o=r(578),a=r(469),f=r(579),s=r(239),u=r(151);t.exports=n,n.signature=o.signature}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){return a.call(this,e),f.isBuffer(t)?(this.base=t,this.offset=0,void(this.length=t.length)):void this.error("Input not Buffer")}function i(t,e){if(Array.isArray(t))this.length=0,this.value=t.map(function(t){return t instanceof i||(t=new i(t,e)),this.length+=t.length,t},this);else if("number"==typeof t){if(!(0<=t&&t<=255))return e.error("non-byte EncoderBuffer value");this.value=t,this.length=1}else if("string"==typeof t)this.value=t,this.length=f.byteLength(t);else{if(!f.isBuffer(t))return e.error("Unsupported type: "+typeof t);this.value=t,this.length=t.length}}var o=r(2),a=r(71).Reporter,f=r(1).Buffer;o(n,a),e.DecoderBuffer=n,n.prototype.save=function(){return{offset:this.offset,reporter:a.prototype.save.call(this)}},n.prototype.restore=function(t){var e=new n(this.base);return e.offset=t.offset,e.length=this.offset,this.offset=t.offset,a.prototype.restore.call(this,t.reporter),e},n.prototype.isEmpty=function(){return this.offset===this.length},n.prototype.readUInt8=function(t){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(t||"DecoderBuffer overrun")},n.prototype.skip=function(t,e){if(!(this.offset+t<=this.length))return this.error(e||"DecoderBuffer overrun");var r=new n(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+t,this.offset+=t,r},n.prototype.raw=function(t){return this.base.slice(t?t.offset:this.offset,this.length)},e.EncoderBuffer=i,i.prototype.join=function(t,e){return t||(t=new f(this.length)),e||(e=0),0===this.length?t:(Array.isArray(this.value)?this.value.forEach(function(r){r.join(t,e),e+=r.length}):("number"==typeof this.value?t[e]=this.value:"string"==typeof this.value?t.write(this.value,e):f.isBuffer(this.value)&&this.value.copy(t,e),e+=this.length),t)}},function(t,e,r){var n=e;n._reverse=function(t){var e={};return Object.keys(t).forEach(function(r){(0|r)==r&&(r|=0);var n=t[r];e[n]=r}),e},n.der=r(583)},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){u.Node.call(this,"der",t)}function o(t,e){var r=t.readUInt8(e);if(t.isError(r))return r;var n=c.tagClass[r>>6],i=0===(32&r);if(31===(31&r)){var o=r;for(r=0;128===(128&o);){if(o=t.readUInt8(e),t.isError(o))return o;r<<=7,r|=127&o}}else r&=31;var a=c.tag[r];return{cls:n,primitive:i,tag:r,tagStr:a}}function a(t,e,r){var n=t.readUInt8(r);if(t.isError(n))return n;if(!e&&128===n)return null;if(0===(128&n))return n;var i=127&n;if(i>=4)return t.error("length octect is too long");n=0;for(var o=0;o<i;o++){n<<=8;var a=t.readUInt8(r);if(t.isError(a))return a;n|=a}return n}var f=r(2),s=r(106),u=s.base,h=s.bignum,c=s.constants.der;t.exports=n,n.prototype.decode=function(t,e){return t instanceof u.DecoderBuffer||(t=new u.DecoderBuffer(t,e)),this.tree._decode(t,e)},f(i,u.Node),i.prototype._peekTag=function(t,e,r){if(t.isEmpty())return!1;var n=t.save(),i=o(t,'Failed to peek tag: "'+e+'"');return t.isError(i)?i:(t.restore(n),i.tag===e||i.tagStr===e||i.tagStr+"of"===e||r)},i.prototype._decodeTag=function(t,e,r){var n=o(t,'Failed to decode tag of "'+e+'"');if(t.isError(n))return n;var i=a(t,n.primitive,'Failed to get length of "'+e+'"');if(t.isError(i))return i;if(!r&&n.tag!==e&&n.tagStr!==e&&n.tagStr+"of"!==e)return t.error('Failed to match tag: "'+e+'"');if(n.primitive||null!==i)return t.skip(i,'Failed to match body of: "'+e+'"');var f=t.save(),s=this._skipUntilEnd(t,'Failed to skip indefinite length body: "'+this.tag+'"');return t.isError(s)?s:(i=t.offset-f.offset,t.restore(f),t.skip(i,'Failed to match body of: "'+e+'"'))},i.prototype._skipUntilEnd=function(t,e){for(;;){var r=o(t,e);if(t.isError(r))return r;var n=a(t,r.primitive,e);if(t.isError(n))return n;var i;if(i=r.primitive||null!==n?t.skip(n):this._skipUntilEnd(t,e),t.isError(i))return i;if("end"===r.tagStr)break}},i.prototype._decodeList=function(t,e,r,n){for(var i=[];!t.isEmpty();){var o=this._peekTag(t,"end");if(t.isError(o))return o;var a=r.decode(t,"der",n);if(t.isError(a)&&o)break;i.push(a)}return i},i.prototype._decodeStr=function(t,e){if("bitstr"===e){var r=t.readUInt8();return t.isError(r)?r:{unused:r,data:t.raw()}}if("bmpstr"===e){var n=t.raw();if(n.length%2===1)return t.error("Decoding of string type: bmpstr length mismatch");for(var i="",o=0;o<n.length/2;o++)i+=String.fromCharCode(n.readUInt16BE(2*o));return i}if("numstr"===e){var a=t.raw().toString("ascii");return this._isNumstr(a)?a:t.error("Decoding of string type: numstr unsupported characters")}if("octstr"===e)return t.raw();if("printstr"===e){var f=t.raw().toString("ascii");return this._isPrintstr(f)?f:t.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(e)?t.raw().toString():t.error("Decoding of string type: "+e+" unsupported")},i.prototype._decodeObjid=function(t,e,r){for(var n,i=[],o=0;!t.isEmpty();){var a=t.readUInt8();o<<=7,o|=127&a,0===(128&a)&&(i.push(o),o=0)}128&a&&i.push(o);var f=i[0]/40|0,s=i[0]%40;if(n=r?i:[f,s].concat(i.slice(1)),e){var u=e[n.join(" ")];void 0===u&&(u=e[n.join(".")]),void 0!==u&&(n=u)}return n},i.prototype._decodeTime=function(t,e){var r=t.raw().toString();if("gentime"===e)var n=0|r.slice(0,4),i=0|r.slice(4,6),o=0|r.slice(6,8),a=0|r.slice(8,10),f=0|r.slice(10,12),s=0|r.slice(12,14);else{if("utctime"!==e)return t.error("Decoding "+e+" time is not supported yet");var n=0|r.slice(0,2),i=0|r.slice(2,4),o=0|r.slice(4,6),a=0|r.slice(6,8),f=0|r.slice(8,10),s=0|r.slice(10,12);n=n<70?2e3+n:1900+n}return Date.UTC(n,i-1,o,a,f,s,0)},i.prototype._decodeNull=function(t){return null},i.prototype._decodeBool=function(t){var e=t.readUInt8();return t.isError(e)?e:0!==e},i.prototype._decodeInt=function(t,e){var r=t.raw(),n=new h(r);return e&&(n=e[n.toString(10)]||n),n},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getDecoder("der").tree}},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){h.Node.call(this,"der",t)}function o(t){return t<10?"0"+t:t}function a(t,e,r,n){var i;if("seqof"===t?t="seq":"setof"===t&&(t="set"),c.tagByName.hasOwnProperty(t))i=c.tagByName[t];else{if("number"!=typeof t||(0|t)!==t)return n.error("Unknown tag: "+t);i=t}return i>=31?n.error("Multi-octet tag encoding unsupported"):(e||(i|=32),i|=c.tagClassByName[r||"universal"]<<6)}var f=r(2),s=r(1).Buffer,u=r(106),h=u.base,c=u.constants.der;t.exports=n,n.prototype.encode=function(t,e){return this.tree._encode(t,e).join()},f(i,h.Node),i.prototype._encodeComposite=function(t,e,r,n){var i=a(t,e,r,this.reporter);if(n.length<128){var o=new s(2);return o[0]=i,o[1]=n.length,this._createEncoderBuffer([o,n])}for(var f=1,u=n.length;u>=256;u>>=8)f++;var o=new s(2+f);o[0]=i,o[1]=128|f;for(var u=1+f,h=n.length;h>0;u--,h>>=8)o[u]=255&h;return this._createEncoderBuffer([o,n])},i.prototype._encodeStr=function(t,e){if("bitstr"===e)return this._createEncoderBuffer([0|t.unused,t.data]);if("bmpstr"===e){for(var r=new s(2*t.length),n=0;n<t.length;n++)r.writeUInt16BE(t.charCodeAt(n),2*n);return this._createEncoderBuffer(r)}return"numstr"===e?this._isNumstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===e?this._isPrintstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(e)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: "+e+" unsupported")},i.prototype._encodeObjid=function(t,e,r){if("string"==typeof t){if(!e)return this.reporter.error("string objid given, but no values map found");if(!e.hasOwnProperty(t))return this.reporter.error("objid not found in values map");t=e[t].split(/[\s\.]+/g);for(var n=0;n<t.length;n++)t[n]|=0}else if(Array.isArray(t)){t=t.slice();for(var n=0;n<t.length;n++)t[n]|=0}if(!Array.isArray(t))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(t));if(!r){if(t[1]>=40)return this.reporter.error("Second objid identifier OOB");t.splice(0,2,40*t[0]+t[1])}for(var i=0,n=0;n<t.length;n++){var o=t[n];for(i++;o>=128;o>>=7)i++}for(var a=new s(i),f=a.length-1,n=t.length-1;n>=0;n--){var o=t[n];for(a[f--]=127&o;(o>>=7)>0;)a[f--]=128|127&o}return this._createEncoderBuffer(a)},i.prototype._encodeTime=function(t,e){var r,n=new Date(t);return"gentime"===e?r=[o(n.getFullYear()),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):"utctime"===e?r=[o(n.getFullYear()%100),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+e+" time is not supported yet"),this._encodeStr(r,"octstr")},i.prototype._encodeNull=function(){return this._createEncoderBuffer("")},i.prototype._encodeInt=function(t,e){if("string"==typeof t){if(!e)return this.reporter.error("String int or enum given, but no values map");if(!e.hasOwnProperty(t))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(t));t=e[t]}if("number"!=typeof t&&!s.isBuffer(t)){var r=t.toArray();!t.sign&&128&r[0]&&r.unshift(0),t=new s(r)}if(s.isBuffer(t)){var n=t.length;0===t.length&&n++;var i=new s(n);return t.copy(i),0===t.length&&(i[0]=0),this._createEncoderBuffer(i)}if(t<128)return this._createEncoderBuffer(t);if(t<256)return this._createEncoderBuffer([0,t]);for(var n=1,o=t;o>=256;o>>=8)n++;for(var i=new Array(n),o=i.length-1;o>=0;o--)i[o]=255&t,t>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(new s(i))},i.prototype._encodeBool=function(t){return this._createEncoderBuffer(t?255:0)},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getEncoder("der").tree},i.prototype._skipDefault=function(t,e,r){var n,i=this._baseState;if(null===i.default)return!1;var o=t.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,e,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n<o.length;n++)if(o[n]!==i.defaultBuffer[n])return!1;return!0}},function(t,e,r){(function(e){function n(t,r,i,f){if(!(this instanceof n))return new n(t,r,i);a.call(this),this._finID=e.concat([i,new e([0,0,0,1])]),i=e.concat([i,new e([0,0,0,2])]),this._cipher=new o.AES(r),this._prev=new e(i.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,this._alen=0,this._len=0,i.copy(this._prev),this._mode=t;var u=new e(4);u.fill(0),this._ghash=new s(this._cipher.encryptBlock(u)),this._authTag=null,this._called=!1}function i(t,e){var r=0;t.length!==e.length&&r++;for(var n=Math.min(t.length,e.length),i=-1;++i<n;)r+=t[i]^e[i];return r}var o=r(107),a=r(109),f=r(2),s=r(591),u=r(72);f(n,a),t.exports=n,n.prototype._update=function(t){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=new e(r),r.fill(0),this._ghash.update(r))}this._called=!0;var n=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(n),this._len+=t.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=t;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&e.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},n.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length}}).call(e,r(1).Buffer)},function(t,e,r){function n(){return Object.keys(a)}var i=r(590);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv;var o=r(589);e.createDecipher=e.Decipher=o.createDecipher,e.createDecipheriv=e.Decipheriv=o.createDecipheriv;var a=r(152);e.listCiphers=e.getCiphers=n},function(t,e,r){var n=r(72);e.encrypt=function(t,e){var r=n(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},e.decrypt=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return n(i,r)}},function(t,e,r){(function(t){function n(e,r,n){var o=r.length,a=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:a]),a}var i=r(72);e.encrypt=function(e,r,i){for(var o,a=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){a=t.concat([a,n(e,r,i)]);break}o=e._cache.length,a=t.concat([a,n(e,r.slice(0,o),i)]),r=r.slice(o)}return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e,r){for(var i,o,a,f=-1,s=8,u=0;++f<s;)i=t._cipher.encryptBlock(t._prev),o=e&1<<7-f?128:0,a=i[0]^o,u+=(128&a)>>f%8,t._prev=n(t._prev,r?o:a);return u}function n(e,r){var n=e.length,i=-1,o=new t(e.length);for(e=t.concat([e,new t([r])]);++i<n;)o[i]=e[i]<<1|e[i+1]>>7;return o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(e,r,n){var i=e._cipher.encryptBlock(e._prev),o=i[0]^r;return e._prev=t.concat([e._prev.slice(1),new t([n?r:o])]),o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e){e.encrypt=function(t,e){return t._cipher.encryptBlock(e)},e.decrypt=function(t,e){return t._cipher.decryptBlock(e)}},function(t,e,r){(function(t){function n(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}var i=r(72);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,n(e)]);var o=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),i(r,o)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,a,f){return this instanceof n?(o.call(this),this._cipher=new i.AES(r),this._prev=new e(a.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,a.copy(this._prev),void(this._mode=t)):new n(t,r,a)}var i=r(107),o=r(109),a=r(2);a(n,o),t.exports=n,n.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},n.prototype._final=function(){this._cipher.scrub()}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){return new e(t.toRed(i.mont(r.modulus)).redPow(new i(r.publicExponent)).fromRed().toArray())}var i=r(70);t.exports=n}).call(e,r(1).Buffer)},function(t,e){t.exports=function(t,e){for(var r=t.length,n=-1;++n<r;)t[n]^=e[n];return t}},function(t,e,r){"use strict";function n(t){return this instanceof n?void i.call(this,t):new n(t)}t.exports=n;var i=r(154),o=r(73);o.inherits=r(74),o.inherits(n,i),n.prototype._transform=function(t,e,r){r(null,t)}},function(t,e,r){"use strict";(function(e){function n(t,e,r){return"function"==typeof t.prependListener?t.prependListener(e,r):void(t._events&&t._events[e]?O(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r))}function i(t,e){D=D||r(51),t=t||{},this.objectMode=!!t.objectMode,e instanceof D&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var n=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i,this.highWaterMark=~~this.highWaterMark,this.buffer=new z,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(U||(U=r(52).StringDecoder),this.decoder=new U(t.encoding),this.encoding=t.encoding)}function o(t){return D=D||r(51),this instanceof o?(this._readableState=new i(t,this),this.readable=!0,t&&"function"==typeof t.read&&(this._read=t.read),void R.call(this)):new o(t)}function a(t,e,r,n,i){var o=h(e,r);if(o)t.emit("error",o);else if(null===r)e.reading=!1,c(t,e);else if(e.objectMode||r&&r.length>0)if(e.ended&&!i){var a=new Error("stream.push() after EOF");t.emit("error",a)}else if(e.endEmitted&&i){var s=new Error("stream.unshift() after end event");t.emit("error",s)}else{var u;!e.decoder||i||n||(r=e.decoder.write(r),u=!e.objectMode&&0===r.length),i||(e.reading=!1),u||(e.flowing&&0===e.length&&!e.sync?(t.emit("data",r),t.read(0)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&d(t))),p(t,e)}else i||(e.reading=!1);return f(e)}function f(t){return!t.ended&&(t.needReadable||t.length<t.highWaterMark||0===t.length)}function s(t){return t>=q?t=q:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function u(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=s(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function h(t,e){var r=null;return T.isBuffer(e)||"string"==typeof e||null===e||void 0===e||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function c(t,e){if(!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,d(t)}}function d(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(L("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?B(l,t):l(t))}function l(t){L("emit readable"),t.emit("readable"),w(t)}function p(t,e){e.readingMore||(e.readingMore=!0,B(b,t,e))}function b(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length<e.highWaterMark&&(L("maybeReadMore read 0"),t.read(0),r!==e.length);)r=e.length;e.readingMore=!1}function v(t){return function(){var e=t._readableState;L("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&P(t,"data")&&(e.flowing=!0,w(t))}}function y(t){L("readable nexttick read 0"),t.read(0)}function m(t,e){e.resumeScheduled||(e.resumeScheduled=!0,B(g,t,e))}function g(t,e){e.reading||(L("resume read 0"),t.read(0)),e.resumeScheduled=!1,e.awaitDrain=0,t.emit("resume"),w(t),e.flowing&&!e.reading&&t.read(0)}function w(t){var e=t._readableState;for(L("flow",e.flowing);e.flowing&&null!==t.read(););}function _(t,e){if(0===e.length)return null;var r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=M(t,e.buffer,e.decoder),r}function M(t,e,r){var n;return t<e.head.data.length?(n=e.head.data.slice(0,t),e.head.data=e.head.data.slice(t)):n=t===e.head.data.length?e.shift():r?S(t,e):E(t,e),n}function S(t,e){var r=e.head,n=1,i=r.data;for(t-=i.length;r=r.next;){var o=r.data,a=t>o.length?o.length:t;if(i+=a===o.length?o:o.slice(0,t),t-=a,0===t){a===o.length?(++n,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++n}return e.length-=n,i}function E(t,e){var r=j.allocUnsafe(t),n=e.head,i=1;for(n.data.copy(r),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(r,r.length-t,0,a),t-=a,0===t){a===o.length?(++i,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++i}return e.length-=i,r}function A(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,B(k,e,t))}function k(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function x(t,e){for(var r=0,n=t.length;r<n;r++)e(t[r],r)}function I(t,e){for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}t.exports=o;var B=r(157),O=r(597);o.ReadableState=i;var R,P=(r(110).EventEmitter,function(t,e){return t.listeners(e).length});!function(){try{R=r(31)}catch(t){}finally{R||(R=r(110).EventEmitter)}}();var T=r(1).Buffer,j=r(156),C=r(73);C.inherits=r(74);var N=r(612),L=void 0;L=N&&N.debuglog?N.debuglog("stream"):function(){};var U,z=r(596);C.inherits(o,R);var D,D;o.prototype.push=function(t,e){var r=this._readableState;return r.objectMode||"string"!=typeof t||(e=e||r.defaultEncoding,e!==r.encoding&&(t=j.from(t,e),e="")),a(this,r,t,e,!1)},o.prototype.unshift=function(t){var e=this._readableState;return a(this,e,t,"",!0)},o.prototype.isPaused=function(){return this._readableState.flowing===!1},o.prototype.setEncoding=function(t){return U||(U=r(52).StringDecoder),this._readableState.decoder=new U(t),this._readableState.encoding=t,this};var q=8388608;o.prototype.read=function(t){L("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return L("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?A(this):d(this),null;if(t=u(t,e),0===t&&e.ended)return 0===e.length&&A(this),null;var n=e.needReadable;L("need readable",n),(0===e.length||e.length-t<e.highWaterMark)&&(n=!0,L("length less than watermark",n)),e.ended||e.reading?(n=!1,L("reading or ended",n)):n&&(L("do read"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=u(r,e)));var i;return i=t>0?_(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&A(this)),null!==i&&this.emit("data",i),i},o.prototype._read=function(t){this.emit("error",new Error("not implemented"))},o.prototype.pipe=function(t,r){function i(t){L("onunpipe"),t===d&&a()}function o(){L("onend"),t.end()}function a(){L("cleanup"),t.removeListener("close",u),t.removeListener("finish",h),t.removeListener("drain",y),t.removeListener("error",s),t.removeListener("unpipe",i),d.removeListener("end",o),d.removeListener("end",a),d.removeListener("data",f),m=!0,!l.awaitDrain||t._writableState&&!t._writableState.needDrain||y()}function f(e){L("ondata"),g=!1;var r=t.write(e);!1!==r||g||((1===l.pipesCount&&l.pipes===t||l.pipesCount>1&&I(l.pipes,t)!==-1)&&!m&&(L("false write response, pause",d._readableState.awaitDrain),d._readableState.awaitDrain++,g=!0),d.pause())}function s(e){L("onerror",e),c(),t.removeListener("error",s),0===P(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",h),c()}function h(){L("onfinish"),t.removeListener("close",u),c()}function c(){L("unpipe"),d.unpipe(t)}var d=this,l=this._readableState;switch(l.pipesCount){case 0:l.pipes=t;break;case 1:l.pipes=[l.pipes,t];break;default:l.pipes.push(t)}l.pipesCount+=1,L("pipe count=%d opts=%j",l.pipesCount,r);var p=(!r||r.end!==!1)&&t!==e.stdout&&t!==e.stderr,b=p?o:a;l.endEmitted?B(b):d.once("end",b),t.on("unpipe",i);var y=v(d);t.on("drain",y);var m=!1,g=!1;return d.on("data",f),n(t,"error",s),t.once("close",u),t.once("finish",h),t.emit("pipe",d),l.flowing||(L("pipe resume"),d.resume()),t},o.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var r=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i<n;i++)r[i].emit("unpipe",this);return this}var o=I(e.pipes,t);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit("unpipe",this),this)},o.prototype.on=function(t,e){var r=R.prototype.on.call(this,t,e);if("data"===t)this._readableState.flowing!==!1&&this.resume();else if("readable"===t){var n=this._readableState;n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.emittedReadable=!1,n.reading?n.length&&d(this,n):B(y,this))}return r},o.prototype.addListener=o.prototype.on,o.prototype.resume=function(){var t=this._readableState;return t.flowing||(L("resume"),t.flowing=!0,m(this,t)),this},o.prototype.pause=function(){return L("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(L("pause"),this._readableState.flowing=!1,this.emit("pause")),this},o.prototype.wrap=function(t){var e=this._readableState,r=!1,n=this;t.on("end",function(){if(L("wrapped end"),e.decoder&&!e.ended){var t=e.decoder.end();t&&t.length&&n.push(t)}n.push(null)}),t.on("data",function(i){if(L("wrapped data"),e.decoder&&(i=e.decoder.write(i)),(!e.objectMode||null!==i&&void 0!==i)&&(e.objectMode||i&&i.length)){var o=n.push(i);o||(r=!0,t.pause())}});for(var i in t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));var o=["error","close","destroy","pause","resume"];return x(o,function(e){t.on(e,n.emit.bind(n,e))}),n._read=function(e){L("wrapped _read",e),r&&(r=!1,t.resume())},n},o._fromList=_}).call(e,r(26))},function(module,exports,__webpack_require__){function Context(){}var indexOf=__webpack_require__(607),Object_keys=function(t){if(Object.keys)return Object.keys(t);var e=[];for(var r in t)e.push(r);return e},forEach=function(t,e){if(t.forEach)return t.forEach(e);for(var r=0;r<t.length;r++)e(t[r],r,t)},defineProp=function(){try{return Object.defineProperty({},"_",{}),function(t,e,r){Object.defineProperty(t,e,{writable:!0,enumerable:!1,
configurable:!0,value:r})}}catch(t){return function(t,e,r){t[e]=r}}}(),globals=["Array","Boolean","Date","Error","EvalError","Function","Infinity","JSON","Math","NaN","Number","Object","RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","eval","isFinite","isNaN","parseFloat","parseInt","undefined","unescape"];Context.prototype={};var Script=exports.Script=function(t){return this instanceof Script?void(this.code=t):new Script(t)};Script.prototype.runInContext=function(t){if(!(t instanceof Context))throw new TypeError("needs a 'context' argument.");var e=document.createElement("iframe");e.style||(e.style={}),e.style.display="none",document.body.appendChild(e);var r=e.contentWindow,n=r.eval,i=r.execScript;!n&&i&&(i.call(r,"null"),n=r.eval),forEach(Object_keys(t),function(e){r[e]=t[e]}),forEach(globals,function(e){t[e]&&(r[e]=t[e])});var o=Object_keys(r),a=n.call(r,this.code);return forEach(Object_keys(r),function(e){(e in t||indexOf(o,e)===-1)&&(t[e]=r[e])}),forEach(globals,function(e){e in t||defineProp(t,e,r[e])}),document.body.removeChild(e),a},Script.prototype.runInThisContext=function(){return eval(this.code)},Script.prototype.runInNewContext=function(t){var e=Script.createContext(t),r=this.runInContext(e);return forEach(Object_keys(e),function(r){t[r]=e[r]}),r},forEach(Object_keys(Script.prototype),function(t){exports[t]=Script[t]=function(e){var r=Script(e);return r[t].apply(r,[].slice.call(arguments,1))}}),exports.createScript=function(t){return exports.Script(t)},exports.createContext=Script.createContext=function(t){var e=new Context;return"object"==typeof t&&forEach(Object_keys(t),function(r){e[r]=t[r]}),e}},function(t,e,r){"use strict";(function(e){var n=r(75),i=r(63),o=r(115),a=r(264),f=r(263),s=r(266),u=r(265),h=r(262),c=r(116),d=new e(0),l=function(t){var e=n.fromUri(t);return e.validate()},p=function(t,r,n){if("undefined"==typeof n&&(n=d),!e.isBuffer(n))throw new Error("Message must be provided as a Buffer");var o=i.fromUri(t),a=o.getConditionUri();if(a!==r)throw new Error("Fulfillment does not match condition (expected: "+r+", actual: "+a+")");return o.validate(n)},b=function(t){var e=i.fromUri(t);return e.getConditionUri()};o.registerType(a),o.registerType(f),o.registerType(s),o.registerType(u),o.registerType(h),t.exports={Condition:n,Fulfillment:i,TypeRegistry:o,PreimageSha256:a,RsaSha256:u,PrefixSha256:f,ThresholdSha256:s,Ed25519:h,validateCondition:l,validateFulfillment:p,fulfillmentToCondition:b,base64url:c,fromConditionUri:n.fromUri.bind(n),fromConditionBinary:n.fromBinary.bind(n),fromFulfillmentUri:i.fromUri.bind(i),fromFulfillmentBinary:i.fromBinary.bind(i)}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(t){function e(t,e,r){t[e]||Object[n](t,e,{writable:!0,configurable:!0,value:r})}if(r(461),r(268),r(269),t._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");t._babelPolyfill=!0;var n="defineProperty";e(String.prototype,"padLeft","".padStart),e(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function(t){[][t]&&e(Array,t,Function.call.bind([][t]))})}).call(e,r(39))},function(t,e,r){var n=r(111),i=r(112),o=r(255),a=r(256);t.exports={Reader:o,Writer:a};for(var f in i)i.hasOwnProperty(f)&&(t.exports[f]=i[f]);for(var s in n)n.hasOwnProperty(s)&&(t.exports[s]=n[s])},function(t,e,r){(function(e){function n(t){if(!t||!e.isBuffer(t))throw new TypeError("data must be a node Buffer");this._buf=t,this._size=t.length,this._len=0,this._offset=0}var i=r(202),o=r(112),a=r(111),f=a.newInvalidAsn1Error;Object.defineProperty(n.prototype,"length",{enumerable:!0,get:function(){return this._len}}),Object.defineProperty(n.prototype,"offset",{enumerable:!0,get:function(){return this._offset}}),Object.defineProperty(n.prototype,"remain",{get:function(){return this._size-this._offset}}),Object.defineProperty(n.prototype,"buffer",{get:function(){return this._buf.slice(this._offset)}}),n.prototype.readByte=function(t){if(this._size-this._offset<1)return null;var e=255&this._buf[this._offset];return t||(this._offset+=1),e},n.prototype.peek=function(){return this.readByte(!0)},n.prototype.readLength=function(t){if(void 0===t&&(t=this._offset),t>=this._size)return null;var e=255&this._buf[t++];if(null===e)return null;if(128==(128&e)){if(e&=127,0==e)throw f("Indefinite length not supported");if(e>4)throw f("encoding too long");if(this._size-t<e)return null;this._len=0;for(var r=0;r<e;r++)this._len=(this._len<<8)+(255&this._buf[t++])}else this._len=e;return t},n.prototype.readSequence=function(t){var e=this.peek();if(null===e)return null;if(void 0!==t&&t!==e)throw f("Expected 0x"+t.toString(16)+": got 0x"+e.toString(16));var r=this.readLength(this._offset+1);return null===r?null:(this._offset=r,e)},n.prototype.readInt=function(){return this._readTag(o.Integer)},n.prototype.readBoolean=function(){return 0!==this._readTag(o.Boolean)},n.prototype.readEnumeration=function(){return this._readTag(o.Enumeration)},n.prototype.readString=function(t,r){t||(t=o.OctetString);var n=this.peek();if(null===n)return null;if(n!==t)throw f("Expected 0x"+t.toString(16)+": got 0x"+n.toString(16));var i=this.readLength(this._offset+1);if(null===i)return null;if(this.length>this._size-i)return null;if(this._offset=i,0===this.length)return r?new e(0):"";var a=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,r?a:a.toString("utf8")},n.prototype.readOID=function(t){t||(t=o.OID);var e=this.readString(t,!0);if(null===e)return null;for(var r=[],n=0,i=0;i<e.length;i++){var a=255&e[i];n<<=7,n+=127&a,0==(128&a)&&(r.push(n),n=0)}return n=r.shift(),r.unshift(n%40),r.unshift(n/40>>0),r.join(".")},n.prototype._readTag=function(t){i.ok(void 0!==t);var e=this.peek();if(null===e)return null;if(e!==t)throw f("Expected 0x"+t.toString(16)+": got 0x"+e.toString(16));var r=this.readLength(this._offset+1);if(null===r)return null;if(this.length>4)throw f("Integer too long: "+this.length);if(this.length>this._size-r)return null;this._offset=r;for(var n=this._buf[this._offset],o=0,a=0;a<this.length;a++)o<<=8,o|=255&this._buf[this._offset++];return 128==(128&n)&&4!==a&&(o-=1<<8*a),o>>0},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,e){o.ok(t),o.equal(typeof t,"object"),o.ok(e),o.equal(typeof e,"object");var r=Object.getOwnPropertyNames(t);return r.forEach(function(r){if(!e[r]){var n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n)}}),e}function i(t){t=n(s,t||{}),this._buf=new e(t.size||1024),this._size=this._buf.length,this._offset=0,this._options=t,this._seq=[]}var o=r(202),a=r(112),f=r(111),s=(f.newInvalidAsn1Error,{size:1024,growthFactor:8});Object.defineProperty(i.prototype,"buffer",{get:function(){if(this._seq.length)throw new InvalidAsn1Error(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),i.prototype.writeByte=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=t},i.prototype.writeInt=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");"number"!=typeof e&&(e=a.Integer);for(var r=4;(0===(4286578688&t)||(4286578688&t)===-8388608)&&r>1;)r--,t<<=8;if(r>4)throw new InvalidAsn1Error("BER ints cannot be > 0xffffffff");for(this._ensure(2+r),this._buf[this._offset++]=e,this._buf[this._offset++]=r;r-- >0;)this._buf[this._offset++]=(4278190080&t)>>>24,t<<=8},i.prototype.writeNull=function(){this.writeByte(a.Null),this.writeByte(0)},i.prototype.writeEnumeration=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");return"number"!=typeof e&&(e=a.Enumeration),this.writeInt(t,e)},i.prototype.writeBoolean=function(t,e){if("boolean"!=typeof t)throw new TypeError("argument must be a Boolean");"number"!=typeof e&&(e=a.Boolean),this._ensure(3),this._buf[this._offset++]=e,this._buf[this._offset++]=1,this._buf[this._offset++]=t?255:0},i.prototype.writeString=function(t,r){if("string"!=typeof t)throw new TypeError("argument must be a string (was: "+typeof t+")");"number"!=typeof r&&(r=a.OctetString);var n=e.byteLength(t);this.writeByte(r),this.writeLength(n),n&&(this._ensure(n),this._buf.write(t,this._offset),this._offset+=n)},i.prototype.writeBuffer=function(t,r){if("number"!=typeof r)throw new TypeError("tag must be a number");if(!e.isBuffer(t))throw new TypeError("argument must be a buffer");this.writeByte(r),this.writeLength(t.length),this._ensure(t.length),t.copy(this._buf,this._offset,0,t.length),this._offset+=t.length},i.prototype.writeStringArray=function(t){if(!t instanceof Array)throw new TypeError("argument must be an Array[String]");var e=this;t.forEach(function(t){e.writeString(t)})},i.prototype.writeOID=function(t,e){function r(t,e){e<128?t.push(e):e<16384?(t.push(e>>>7|128),t.push(127&e)):e<2097152?(t.push(e>>>14|128),t.push(255&(e>>>7|128)),t.push(127&e)):e<268435456?(t.push(e>>>21|128),t.push(255&(e>>>14|128)),t.push(255&(e>>>7|128)),t.push(127&e)):(t.push(255&(e>>>28|128)),t.push(255&(e>>>21|128)),t.push(255&(e>>>14|128)),t.push(255&(e>>>7|128)),t.push(127&e))}if("string"!=typeof t)throw new TypeError("argument must be a string");if("number"!=typeof e&&(e=a.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(t))throw new Error("argument is not a valid OID string");var n=t.split("."),i=[];i.push(40*parseInt(n[0],10)+parseInt(n[1],10)),n.slice(2).forEach(function(t){r(i,parseInt(t,10))});var o=this;this._ensure(2+i.length),this.writeByte(e),this.writeLength(i.length),i.forEach(function(t){o.writeByte(t)})},i.prototype.writeLength=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");if(this._ensure(4),t<=127)this._buf[this._offset++]=t;else if(t<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=t;else if(t<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t;else{if(!(t<=16777215))throw new InvalidAsn1ERror("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=t>>16,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t}},i.prototype.startSequence=function(t){"number"!=typeof t&&(t=a.Sequence|a.Constructor),this.writeByte(t),this._seq.push(this._offset),this._ensure(3),this._offset+=3},i.prototype.endSequence=function(){var t=this._seq.pop(),e=t+3,r=this._offset-e;if(r<=127)this._shift(e,r,-2),this._buf[t]=r;else if(r<=255)this._shift(e,r,-1),this._buf[t]=129,this._buf[t+1]=r;else if(r<=65535)this._buf[t]=130,this._buf[t+1]=r>>8,this._buf[t+2]=r;else{if(!(r<=16777215))throw new InvalidAsn1Error("Sequence too long");this._shift(e,r,1),this._buf[t]=131,this._buf[t+1]=r>>16,this._buf[t+2]=r>>8,this._buf[t+3]=r}},i.prototype._shift=function(t,e,r){o.ok(void 0!==t),o.ok(void 0!==e),o.ok(r),this._buf.copy(this._buf,t+r,t,t+e),this._offset+=r},i.prototype._ensure=function(t){if(o.ok(t),this._size-this._offset<t){var r=this._size*this._options.growthFactor;r-this._offset<t&&(r+=t);var n=new e(r);this._buf.copy(n,0,0,this._offset),this._buf=n,this._size=r}},t.exports=i}).call(e,r(1).Buffer)},function(t,e,r){var n=r(254);t.exports={Ber:n,BerReader:n.Reader,BerWriter:n.Writer}},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(93),a=r(114),f=function(){function t(e){n(this,t),e=e||{},this.hashAlgorithm=e.hashAlgorithm||"sha256",this.hashLength=a.getLength(this.hashAlgorithm),this.saltLength=this.hashLength}return i(t,[{key:"generate",value:function(t,r){for(var n=new e(r),i=Math.ceil(r/this.hashLength),a=0;a<i;a++){var f=new e(4);f.writeInt32BE(a,0);var s=o.createHash(this.hashAlgorithm).update(t).update(f).digest();s.copy(n,a*this.hashLength)}return n}}]),t}();t.exports=f}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(93),a=r(258),f=r(267),s=r(114),u=function(){function t(e){n(this,t),e=e||{},this.hashAlgorithm=e.hashAlgorithm||"sha256",this.hashLength=s.getLength(this.hashAlgorithm),this.saltLength=this.hashLength}return i(t,[{key:"encode",value:function(t,r){var n=Math.ceil(r/8),i=o.createHash(this.hashAlgorithm).update(t).digest();if(n<this.hashLength+this.saltLength+2)throw new Error("Encoding error: RSA modulus is too small for "+this.hashAlgorithm);var s=o.randomBytes(this.saltLength),u=o.createHash(this.hashAlgorithm).update(new e(8).fill(0)).update(i).update(s).digest(),h=e.concat([new e(n-this.saltLength-this.hashLength-2).fill(0),new e([1]),s]),c=new a({hashAlgorithm:this.hashAlgorithm}),d=c.generate(u,n-this.hashLength-1),l=f(h,d);return l[0]&=255>>>8*n-r,e.concat([l,u,new e([188])])}},{key:"verify",value:function(t,r,n){var i=Math.ceil(n/8),s=o.createHash(this.hashAlgorithm).update(t).digest();if(i<this.hashLength+this.saltLength+2)return!1;if(188!==r[r.length-1])return!1;var u=i-this.hashLength-1,h=r.slice(0,u),c=r.slice(u,u+this.hashLength),d=255>>>8*i-n;if(h[0]&~d)return!1;var l=new a({hashAlgorithm:this.hashAlgorithm}),p=l.generate(c,i-this.hashLength-1),b=f(h,p);b[0]&=d;for(var v=i-this.hashLength-this.saltLength-2,y=0;y<v;y++)if(0!==b[y])return!1;if(1!==b[v])return!1;var m=b.slice(b.length-this.saltLength),g=o.createHash(this.hashAlgorithm).update(new e(8).fill(0)).update(s).update(m).digest();return 0===e.compare(c,g)}}]),t}();u.EMPTY_BUFFER=new e(0),t.exports=u}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(93),a=r(464),f=r(259),s=r(161),u=function(){function t(e){n(this,t),e=e||{},this.hashAlgorithm=e.hashAlgorithm||"sha256",this.pss=new f({hashAlgorithm:this.hashAlgorithm})}return i(t,[{key:"sign",value:function(r,n){var i=s.modulusFromPrivateKey(r),f=i[0].toString(2).length,u=8*(i.length-1)+f,h=this.pss.encode(n,u-1),c=h.length<i.length?e.concat([t.ZERO_BYTE,h]):h;return o.privateEncrypt({key:r,padding:a.RSA_NO_PADDING},c)}},{key:"verify",value:function(t,e,r){var n=s.modulusToPem(t),i=o.publicDecrypt({key:n,padding:a.RSA_NO_PADDING},r),f=t[0].toString(2).length,u=8*(t.length-1)+f,h=u%8===1?i.slice(1):i;return this.pss.verify(e,h,u-1)}}]),t}();u.ZERO_BYTE=new e([0]),t.exports=u}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(488),s=r(63),u=r(53),h=r(160),c=void 0;try{c=r(462)}catch(t){}var d=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.publicKey=null,t.signature=null,t}return o(r,t),a(r,[{key:"setPublicKey",value:function(t){if(!e.isBuffer(t))throw new TypeError("Public key must be a Buffer, was: "+t);if(32!==t.length)throw new Error("Public key must be 32 bytes, was: "+t.length);this.publicKey=t}},{key:"setSignature",value:function(t){if(!e.isBuffer(t))throw new TypeError("Signature must be a Buffer, was: "+t);if(64!==t.length)throw new Error("Signature must be 64 bytes, was: "+t.length);this.signature=t}},{key:"sign",value:function(t,r){if(!e.isBuffer(t))throw new u("Message must be a Buffer");if(!e.isBuffer(r))throw new TypeError("Private key must be a Buffer, was: "+r);if(32!==r.length)throw new Error("Private key must be 32 bytes, was: "+r.length);if(c){var n=c.MakeKeypair(r);this.setPublicKey(n.publicKey),this.signature=c.Sign(t,n)}else{var i=f.sign.keyPair.fromSeed(r);this.setPublicKey(new e(i.publicKey)),this.signature=new e(f.sign.detached(t,i.secretKey))}}},{key:"generateHash",value:function(){if(!this.publicKey)throw new u("Requires a public key");return this.publicKey}},{key:"parsePayload",value:function(t){this.setPublicKey(t.readOctetString(r.PUBKEY_LENGTH)),this.setSignature(t.readOctetString(r.SIGNATURE_LENGTH))}},{key:"writePayload",value:function(t){t.writeOctetString(this.publicKey,r.PUBKEY_LENGTH),t.writeOctetString(this.signature,r.SIGNATURE_LENGTH)}},{key:"calculateMaxFulfillmentLength",value:function(){return r.FULFILLMENT_LENGTH}},{key:"validate",value:function(t){if(!e.isBuffer(t))throw new TypeError("Message must be a Buffer");var r=void 0;if(r=c?c.Verify(t,this.signature,this.publicKey):f.sign.detached.verify(t,this.signature,this.publicKey),r!==!0)throw new h("Invalid ed25519 signature");return!0}}]),r}(s);d.TYPE_ID=4,d.FEATURE_BITMASK=32,d.PUBKEY_LENGTH=32,d.SIGNATURE_LENGTH=64,d.FULFILLMENT_LENGTH=d.PUBKEY_LENGTH+d.SIGNATURE_LENGTH,t.exports=d}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,r,n)}if("value"in i)return i.value;var a=i.get;if(void 0!==a)return a.call(n)},s=r(75),u=r(63),h=r(76),c=r(90),d=r(53),l=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.subcondition=null,t}return o(r,t),a(r,[{key:"setSubcondition",value:function(t){if("string"==typeof t)t=s.fromUri(t);else if(!(t instanceof s))throw new Error("Subconditions must be URIs or objects of type Condition");this.subcondition=t}},{key:"setSubfulfillment",value:function(t){if("string"==typeof t)t=u.fromUri(t);else if(!(t instanceof u))throw new Error("Subfulfillments must be objects of type Fulfillment");this.subcondition=t}},{key:"setPrefix",value:function(t){if(!e.isBuffer(t))throw new TypeError("Prefix must be a Buffer, was: "+t);this.prefix=t}},{key:"getBitmask",value:function(){return f(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"getBitmask",this).call(this)|this.subcondition.getBitmask()}},{key:"writeHashPayload",value:function(t){if(!this.subcondition)throw new d("Requires subcondition");t.writeVarOctetString(this.prefix),t.write(this.subcondition instanceof s?this.subcondition.serializeBinary():this.subcondition.getConditionBinary())}},{key:"calculateMaxFulfillmentLength",value:function(){var t=this.subcondition instanceof s?this.subcondition.getMaxFulfillmentLength():this.subcondition.getCondition().getMaxFulfillmentLength(),e=new c;return e.writeVarOctetString(this.prefix),e.skip(t),e.getSize()}},{key:"parsePayload",value:function(t){this.setPrefix(t.readVarOctetString()),this.setSubfulfillment(u.fromBinary(t))}},{key:"writePayload",value:function(t){if(!(this.subcondition instanceof u))throw new Error("Subcondition must be fulfilled");t.writeVarOctetString(this.prefix),t.write(this.subcondition.serializeBinary())}},{key:"validate",value:function(t){if(!(this.subcondition instanceof u))throw new Error("Subcondition is not a fulfillment");if(!e.isBuffer(t))throw new Error("Message must be provided as a Buffer, was: "+t);return this.subcondition.validate(e.concat([this.prefix,t]))}}]),r}(h);l.TYPE_ID=1,l.FEATURE_BITMASK=5,l.prototype.setSubconditionUri=l.prototype.setSubcondition,l.prototype.setSubfulfillmentUri=l.prototype.setSubfulfillment,t.exports=l}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(76),s=r(53),u=function(t){function r(){return n(this,r),i(this,(r.__proto__||Object.getPrototypeOf(r)).apply(this,arguments))}return o(r,t),a(r,[{key:"writeHashPayload",value:function(t){if(!this.preimage)throw new s("Could not calculate hash, no preimage provided");t.write(this.preimage)}},{key:"setPreimage",value:function(t){if(!e.isBuffer(t))throw new TypeError("Preimage must be a buffer, was: "+t);this.preimage=t}},{key:"parsePayload",value:function(t,e){this.setPreimage(t.read(e))}},{key:"writePayload",value:function(t){if(!this.preimage)throw new s("Preimage must be specified");t.write(this.preimage)}},{key:"validate",value:function(t){return!0}}]),r}(f);u.TYPE_ID=0,u.FEATURE_BITMASK=3,t.exports=u}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(260),s=r(161),u=r(76),h=r(90),c=r(53),d=r(160),l=new f,p=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.modulus=null,t.signature=null,t}return o(r,t),a(r,[{key:"writeCommonHeader",value:function(t){if(!this.modulus)throw new c("Requires a public modulus");t.writeVarOctetString(this.modulus)}},{key:"setPublicModulus",value:function(t){if(!e.isBuffer(t))throw new TypeError("Modulus must be a buffer, was: "+t);if(0===t[0])throw new Error("Modulus may not contain leading zeros");if(t.length>512||t.length<128)throw new Error("Modulus must be between 128 bytes (1017 bits) and 512 bytes (4096 bits), was: "+t.length+" bytes");this.modulus=t}},{key:"setSignature",value:function(t){if(!e.isBuffer(t))throw new TypeError("Signature must be a buffer, was: "+t);this.signature=t}},{key:"sign",value:function(t,e){this.modulus||this.setPublicModulus(s.modulusFromPrivateKey(e)),this.signature=l.sign(e,t)}},{key:"writeHashPayload",value:function(t){this.writeCommonHeader(t)}},{key:"parsePayload",value:function(t){this.setPublicModulus(t.readVarOctetString()),this.setSignature(t.readVarOctetString())}},{key:"writePayload",value:function(t){if(!this.signature)throw new c("Requires a signature");this.writeCommonHeader(t),t.writeVarOctetString(this.signature)}},{key:"calculateMaxFulfillmentLength",value:function(){var t=new h;if(!this.modulus)throw new c("Requires a public modulus");return this.writeCommonHeader(t),t.writeVarOctetString(this.modulus),t.getSize()}},{key:"validate",value:function(t){if(!e.isBuffer(t))throw new Error("Message must be provided as a Buffer, was: "+t);var r=l.verify(this.modulus,t,this.signature);if(!r)throw new d("Invalid RSA signature");return!0}}]),r}(u);p.TYPE_ID=3,p.FEATURE_BITMASK=17,t.exports=p}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,r,n)}if("value"in i)return i.value;var a=i.get;if(void 0!==a)return a.call(n)},s=r(75),u=r(63),h=r(76),c=r(90),d=r(91),l=r(53),p=r(113),b=r(162),v=new e(0),y="condition",m="fulfillment",g=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.threshold=null,t.subconditions=[],t}return o(r,t),a(r,[{key:"addSubcondition",value:function(t,e){if("string"==typeof t)t=s.fromUri(t);else if(!(t instanceof s))throw new Error("Subconditions must be URIs or objects of type Condition");if("undefined"==typeof e)e=1;else if(!b(e)||e<1)throw new TypeError("Invalid weight, not an integer: "+e);this.subconditions.push({type:y,body:t,weight:e})}},{key:"addSubfulfillment",value:function(t,e){if("string"==typeof t)t=u.fromUri(t);else if(!(t instanceof u))throw new Error("Subfulfillments must be URIs or objects of type Fulfillment");if("undefined"==typeof e)e=1;else if(!b(e))throw new Error("Invalid weight, not an integer: "+e);this.subconditions.push({type:m,body:t,weight:e})}},{key:"setThreshold",value:function(t){if(!b(t)||t<1)throw new TypeError("Threshold must be a integer greater than zero, was: "+t);this.threshold=t}},{key:"getBitmask",value:function(){var t=f(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"getBitmask",this).call(this),e=!0,n=!1,i=void 0;try{for(var o,a=this.subconditions[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){var s=o.value;t|=s.body.getBitmask()}}catch(t){n=!0,i=t}finally{try{!e&&a.return&&a.return()}finally{if(n)throw i}}return t}},{key:"writeHashPayload",value:function(t){if(!this.subconditions.length)throw new l("Requires subconditions");var e=this.subconditions.map(function(t){var e=new d;return e.writeVarUInt(t.weight),e.write(t.type===m?t.body.getConditionBinary():t.body.serializeBinary()),e.getBuffer()}),r=this.constructor.sortBuffers(e);t.writeUInt32(this.threshold),t.writeVarUInt(r.length),r.forEach(function(e){return t.write(e)})}},{key:"calculateMaxFulfillmentLength",value:function(){var t=this,e=0,r=this.subconditions.map(function(r){var n=t.constructor.predictSubconditionLength(r),i=t.constructor.predictSubfulfillmentLength(r);return e+=n,{weight:r.weight,size:i-n}}).sort(function(t,e){return e.weight-t.weight}),n=e+this.constructor.calculateWorstCaseLength(this.threshold,r);if(n===-(1/0))throw new l("Insufficient subconditions/weights to meet the threshold");var i=new c;return i.writeUInt32(this.threshold),i.writeVarUInt(this.subconditions.length),this.subconditions.forEach(function(t){i.writeUInt8(),1!==t.weight&&i.writeUInt32(t.weight)}),i.skip(n),i.getSize()}},{key:"parsePayload",value:function(t){this.setThreshold(t.readVarUInt());for(var e=t.readVarUInt(),r=0;r<e;r++){var n=t.readVarUInt(),i=t.readVarOctetString(),o=t.readVarOctetString();if(i.length&&o.length)throw new p("Subconditions may not provide both subcondition and fulfillment.");if(i.length)this.addSubfulfillment(u.fromBinary(i),n);else{if(!o.length)throw new p("Subconditions must provide either subcondition or fulfillment.");this.addSubcondition(s.fromBinary(o),n)}}}},{key:"writePayload",value:function(t){var e=this.subconditions.map(function(t,e){return t.type===m?Object.assign({},t,{index:e,size:t.body.serializeBinary().length,omitSize:t.body.getConditionBinary().length}):null}).filter(Boolean),r=this.constructor.calculateSmallestValidFulfillmentSet(this.threshold,e).set,n=this.subconditions.map(function(t,e){return t.type===m&&r.indexOf(e)===-1?Object.assign({},t,{type:y,body:t.body.getCondition()}):t}),i=n.map(function(t){var e=new d;return e.writeVarUInt(t.weight),e.writeVarOctetString(t.type===m?t.body.serializeBinary():v),e.writeVarOctetString(t.type===y?t.body.serializeBinary():v),e.getBuffer()}),o=this.constructor.sortBuffers(i);t.writeVarUInt(this.threshold),t.writeVarUInt(o.length),o.forEach(t.write.bind(t))}},{key:"validate",value:function(t){var e=this.subconditions.filter(function(t){return t.type===m}),r=1/0,n=e.reduce(function(t,e){return r=Math.min(r,e.weight),t+e.weight},0);if(n<this.threshold)throw new Error("Threshold not met");if(this.threshold+r<=n)throw new Error("Fulfillment is not minimal");return e.every(function(e){return e.body.validate(t)})}}],[{key:"predictSubconditionLength",value:function(t){return t.type===m?t.body.getConditionBinary().length:t.body.serializeBinary().length}},{key:"predictSubfulfillmentLength",
value:function(t){var e=t.type===m?t.body.getCondition().getMaxFulfillmentLength():t.body.getMaxFulfillmentLength(),r=new c;return r.writeUInt16(),r.writeVarOctetString({length:e}),r.getSize()}},{key:"calculateWorstCaseLength",value:function(t,e,r){if(r=r||0,t<=0)return 0;if(r<e.length){var n=e[r];return Math.max(n.size+this.calculateWorstCaseLength(t-n.weight,e,r+1),this.calculateWorstCaseLength(t,e,r+1))}return-(1/0)}},{key:"calculateSmallestValidFulfillmentSet",value:function(t,e,r){if(r=r||{index:0,size:0,set:[]},t<=0)return{size:r.size,set:r.set};if(r.index<e.length){var n=e[r.index],i=this.calculateSmallestValidFulfillmentSet(t-n.weight,e,{size:r.size+n.size,index:r.index+1,set:r.set.concat(n.index)}),o=this.calculateSmallestValidFulfillmentSet(t,e,{size:r.size+n.omitSize,index:r.index+1,set:r.set});return i.size<o.size?i:o}return{size:1/0}}},{key:"sortBuffers",value:function(t){return t.slice().sort(function(t,r){return t.length!==r.length?t.length-r.length:e.compare(t,r)})}}]),r}(h);g.TYPE_ID=2,g.FEATURE_BITMASK=9,g.prototype.addSubconditionUri=g.prototype.addSubcondition,g.prototype.addSubfulfillmentUri=g.prototype.addSubfulfillment,t.exports=g}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function r(t,r){if(!e.isBuffer(t)||!e.isBuffer(r))throw new Error("Arguments must be buffers");if(t.length!==r.length)throw new Error("Buffers must be the same length");for(var n=new e(t.length),i=0;i<t.length;i++)n[i]=t[i]^r[i];return n}t.exports=r}).call(e,r(1).Buffer)},function(t,e,r){(function(e,r){!function(e){"use strict";function n(t,e,r,n){var i=Object.create((e||o).prototype),a=new p(n||[]);return i._invoke=c(t,r,a),i}function i(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function o(){}function a(){}function f(){}function s(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function u(t){this.arg=t}function h(t){function e(r,n,o,a){var f=i(t[r],t,n);if("throw"!==f.type){var s=f.arg,h=s.value;return h instanceof u?Promise.resolve(h.arg).then(function(t){e("next",t,o,a)},function(t){e("throw",t,o,a)}):Promise.resolve(h).then(function(t){s.value=t,o(s)},a)}a(f.arg)}function n(t,r){function n(){return new Promise(function(n,i){e(t,r,n,i)})}return o=o?o.then(n,n):n()}"object"==typeof r&&r.domain&&(e=r.domain.bind(e));var o;this._invoke=n}function c(t,e,r){var n=E;return function(o,a){if(n===k)throw new Error("Generator is already running");if(n===x){if("throw"===o)throw a;return v()}for(;;){var f=r.delegate;if(f){if("return"===o||"throw"===o&&f.iterator[o]===y){r.delegate=null;var s=f.iterator.return;if(s){var u=i(s,f.iterator,a);if("throw"===u.type){o="throw",a=u.arg;continue}}if("return"===o)continue}var u=i(f.iterator[o],f.iterator,a);if("throw"===u.type){r.delegate=null,o="throw",a=u.arg;continue}o="next",a=y;var h=u.arg;if(!h.done)return n=A,h;r[f.resultName]=h.value,r.next=f.nextLoc,r.delegate=null}if("next"===o)r.sent=r._sent=a;else if("throw"===o){if(n===E)throw n=x,a;r.dispatchException(a)&&(o="next",a=y)}else"return"===o&&r.abrupt("return",a);n=k;var u=i(t,e,r);if("normal"===u.type){n=r.done?x:A;var h={value:u.arg,done:r.done};if(u.arg!==I)return h;r.delegate&&"next"===o&&(a=y)}else"throw"===u.type&&(n=x,o="throw",a=u.arg)}}}function d(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function l(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(d,this),this.reset(!0)}function b(t){if(t){var e=t[w];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,n=function e(){for(;++r<t.length;)if(m.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=y,e.done=!0,e};return n.next=n}}return{next:v}}function v(){return{value:y,done:!0}}var y,m=Object.prototype.hasOwnProperty,g="function"==typeof Symbol?Symbol:{},w=g.iterator||"@@iterator",_=g.toStringTag||"@@toStringTag",M="object"==typeof t,S=e.regeneratorRuntime;if(S)return void(M&&(t.exports=S));S=e.regeneratorRuntime=M?t.exports:{},S.wrap=n;var E="suspendedStart",A="suspendedYield",k="executing",x="completed",I={},B=f.prototype=o.prototype;a.prototype=B.constructor=f,f.constructor=a,f[_]=a.displayName="GeneratorFunction",S.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===a||"GeneratorFunction"===(e.displayName||e.name))},S.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,f):(t.__proto__=f,_ in t||(t[_]="GeneratorFunction")),t.prototype=Object.create(B),t},S.awrap=function(t){return new u(t)},s(h.prototype),S.async=function(t,e,r,i){var o=new h(n(t,e,r,i));return S.isGeneratorFunction(e)?o:o.next().then(function(t){return t.done?t.value:o.next()})},s(B),B[w]=function(){return this},B[_]="Generator",B.toString=function(){return"[object Generator]"},S.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},S.values=b,p.prototype={constructor:p,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=y,this.done=!1,this.delegate=null,this.tryEntries.forEach(l),!t)for(var e in this)"t"===e.charAt(0)&&m.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=y)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){function e(e,n){return o.type="throw",o.arg=t,r.next=e,!!n}if(this.done)throw t;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],o=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var a=m.call(i,"catchLoc"),f=m.call(i,"finallyLoc");if(a&&f){if(this.prev<i.catchLoc)return e(i.catchLoc,!0);if(this.prev<i.finallyLoc)return e(i.finallyLoc)}else if(a){if(this.prev<i.catchLoc)return e(i.catchLoc,!0)}else{if(!f)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return e(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&m.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=t,o.arg=e,i?this.next=i.finallyLoc:this.complete(o),I},complete:function(t,e){if("throw"===t.type)throw t.arg;"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=t.arg,this.next="end"):"normal"===t.type&&e&&(this.next=e)},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),l(r),I}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;l(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:b(t),resultName:e,nextLoc:r},I}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:this)}).call(e,r(39),r(26))},function(t,e,r){r(290),t.exports=r(32).RegExp.escape},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(77);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e,r){var n=r(270);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,r){var n=r(77),i=r(165).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(165),i=r(163),o=r(272),a=r(275),f="prototype",s=function(t,e,r){var u,h,c,d=t&s.F,l=t&s.G,p=t&s.S,b=t&s.P,v=t&s.B,y=t&s.W,m=l?i:i[e]||(i[e]={}),g=m[f],w=l?n:p?n[e]:(n[e]||{})[f];l&&(r=e);for(u in r)h=!d&&w&&void 0!==w[u],h&&u in m||(c=h?w[u]:r[u],m[u]=l&&"function"!=typeof w[u]?r[u]:v&&h?o(c,n):y&&w[u]==c?function(t){var e=function(e,r,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,r)}return new t(e,r,n)}return t.apply(this,arguments)};return e[f]=t[f],e}(c):b&&"function"==typeof c?o(Function.call,c):c,b&&((m.virtual||(m.virtual={}))[u]=c,t&s.R&&g&&!g[u]&&a(g,u,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,e,r){var n=r(278),i=r(279);t.exports=r(117)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){t.exports=!r(117)&&!r(164)(function(){return 7!=Object.defineProperty(r(273)("div"),"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(77),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,r){var n=r(271),i=r(276),o=r(280),a=Object.defineProperty;e.f=r(117)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,r){var n=r(77);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,r){var n=r(274);n(n.S,"Number",{isInteger:r(277)})},function(t,e,r){var n=r(6),i=r(126),o=r(7)("species");t.exports=function(t){var e;return i(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!i(e.prototype)||(e=void 0),n(e)&&(e=e[o],null===e&&(e=void 0))),void 0===e?Array:e}},function(t,e,r){var n=r(282);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(3),i=r(29),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),t!=o)}},function(t,e,r){var n=r(44),i=r(86),o=r(66);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var a,f=r(t),s=o.f,u=0;f.length>u;)s.call(t,a=f[u++])&&e.push(a);return e}},function(t,e,r){var n=r(44),i=r(17);t.exports=function(t,e){for(var r,o=i(t),a=n(o),f=a.length,s=0;f>s;)if(o[r=a[s++]]===e)return r}},function(t,e,r){"use strict";var n=r(288),i=r(82),o=r(13);t.exports=function(){for(var t=o(this),e=arguments.length,r=Array(e),a=0,f=n._,s=!1;e>a;)(r[a]=arguments[a++])===f&&(s=!0);return function(){var n,o=this,a=arguments.length,u=0,h=0;if(!s&&!a)return i(t,r,o);if(n=r.slice(),s)for(;e>u;u++)n[u]===f&&(n[u]=arguments[h++]);for(;a>h;)n.push(arguments[h++]);return i(t,n,o)}}},function(t,e,r){t.exports=r(4)},function(t,e){t.exports=function(t,e){var r=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,r)}}},function(t,e,r){var n=r(0),i=r(289)(/[\\^$*+?.()|[\]{}]/g,"\\$&");n(n.S,"RegExp",{escape:function(t){return i(t)}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(167)}),r(54)("copyWithin")},function(t,e,r){"use strict";var n=r(0),i=r(27)(4);n(n.P+n.F*!r(25)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(118)}),r(54)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(2);n(n.P+n.F*!r(25)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",a=!0;o in[]&&Array(1)[o](function(){a=!1}),n(n.P+n.F*a,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(54)(o)},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o="find",a=!0;o in[]&&Array(1)[o](function(){a=!1}),n(n.P+n.F*a,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(54)(o)},function(t,e,r){"use strict";var n=r(0),i=r(27)(0),o=r(25)([].forEach,!0);n(n.P+n.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(33),i=r(0),o=r(11),a=r(176),f=r(125),s=r(10),u=r(119),h=r(142);i(i.S+i.F*!r(84)(function(t){Array.from(t)}),"Array",{from:function(t){var e,r,i,c,d=o(t),l="function"==typeof this?this:Array,p=arguments.length,b=p>1?arguments[1]:void 0,v=void 0!==b,y=0,m=h(d);if(v&&(b=n(b,p>2?arguments[2]:void 0,2)),void 0==m||l==Array&&f(m))for(e=s(d.length),r=new l(e);e>y;y++)u(r,y,v?b(d[y],y):d[y]);else for(c=m.call(d),r=new l;!(i=c.next()).done;y++)u(r,y,v?a(c,b,[i.value,y],!0):i.value);return r.length=y,r}})},function(t,e,r){"use strict";var n=r(0),i=r(78)(!1),o=[].indexOf,a=!!o&&1/[1].indexOf(1,-0)<0;n(n.P+n.F*(a||!r(25)(o)),"Array",{indexOf:function(t){return a?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(126)})},function(t,e,r){"use strict";var n=r(0),i=r(17),o=[].join;n(n.P+n.F*(r(65)!=Object||!r(25)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},function(t,e,r){"use strict";var n=r(0),i=r(17),o=r(38),a=r(10),f=[].lastIndexOf,s=!!f&&1/[1].lastIndexOf(1,-0)<0;n(n.P+n.F*(s||!r(25)(f)),"Array",{lastIndexOf:function(t){if(s)return f.apply(this,arguments)||0;var e=i(this),r=a(e.length),n=r-1;for(arguments.length>1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},function(t,e,r){"use strict";var n=r(0),i=r(27)(1);n(n.P+n.F*!r(25)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(0),i=r(119);n(n.S+n.F*r(5)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},function(t,e,r){"use strict";var n=r(0),i=r(169);n(n.P+n.F*!r(25)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(169);n(n.P+n.F*!r(25)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},function(t,e,r){"use strict";var n=r(0),i=r(123),o=r(23),a=r(47),f=r(10),s=[].slice;n(n.P+n.F*r(5)(function(){i&&s.call(i)}),"Array",{slice:function(t,e){var r=f(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return s.call(this,t,e);for(var i=a(t,r),u=a(e,r),h=f(u-i),c=Array(h),d=0;d<h;d++)c[d]="String"==n?this.charAt(i+d):this[i+d];return c}})},function(t,e,r){"use strict";var n=r(0),i=r(27)(3);n(n.P+n.F*!r(25)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(0),i=r(13),o=r(11),a=r(5),f=[].sort,s=[1,2,3];n(n.P+n.F*(a(function(){s.sort(void 0)})||!a(function(){s.sort(null)})||!r(25)(f)),"Array",{sort:function(t){return void 0===t?f.call(o(this)):f.call(o(this),i(t))}})},function(t,e,r){r(46)("Array")},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(5),o=Date.prototype.getTime,a=function(t){return t>9?t:"0"+t};n(n.P+n.F*(i(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!i(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+a(t.getUTCMonth()+1)+"-"+a(t.getUTCDate())+"T"+a(t.getUTCHours())+":"+a(t.getUTCMinutes())+":"+a(t.getUTCSeconds())+"."+(r>99?r:"0"+a(r))+"Z"}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(29);n(n.P+n.F*r(5)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},function(t,e,r){var n=r(7)("toPrimitive"),i=Date.prototype;n in i||r(14)(i,n,r(284))},function(t,e,r){var n=Date.prototype,i="Invalid Date",o="toString",a=n[o],f=n.getTime;new Date(NaN)+""!=i&&r(15)(n,o,function(){var t=f.call(this);return t===t?a.call(this):i})},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(170)})},function(t,e,r){"use strict";var n=r(6),i=r(21),o=r(7)("hasInstance"),a=Function.prototype;o in a||r(9).f(a,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(9).f,i=r(37),o=r(12),a=Function.prototype,f=/^\s*function ([^ (]*)/,s="name",u=Object.isExtensible||function(){return!0};s in a||r(8)&&n(a,s,{configurable:!0,get:function(){try{var t=this,e=(""+t).match(f)[1];return o(t,s)||!u(t)||n(t,s,i(5,e)),e}catch(t){return""}}})},function(t,e,r){var n=r(0),i=r(178),o=Math.sqrt,a=Math.acosh;n(n.S+n.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},function(t,e,r){function n(t){return isFinite(t=+t)&&0!=t?t<0?-n(-t):Math.log(t+Math.sqrt(t*t+1)):t}var i=r(0),o=Math.asinh;i(i.S+i.F*!(o&&1/o(0)>0),"Math",{asinh:n})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,e,r){var n=r(0),i=r(130);n(n.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},function(t,e,r){var n=r(0),i=r(129);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0),i=r(130),o=Math.pow,a=o(2,-52),f=o(2,-23),s=o(2,127)*(2-f),u=o(2,-126),h=function(t){return t+1/a-1/a};n(n.S,"Math",{fround:function(t){var e,r,n=Math.abs(t),o=i(t);return n<u?o*h(n/u/f)*u*f:(e=(1+f/a)*n,r=e-(e-n),r>s||r!=r?o*(1/0):o*r)}})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function(t,e){for(var r,n,o=0,a=0,f=arguments.length,s=0;a<f;)r=i(arguments[a++]),s<r?(n=s/r,o=o*n*n+1,s=r):r>0?(n=r/s,o+=n*n):o+=r;return s===1/0?1/0:s*Math.sqrt(o)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(5)(function(){return i(4294967295,5)!=-5||2!=i.length}),"Math",{imul:function(t,e){var r=65535,n=+t,i=+e,o=r&n,a=r&i;return 0|o*a+((r&n>>>16)*a+o*(r&i>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(178)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(130)})},function(t,e,r){var n=r(0),i=r(129),o=Math.exp;n(n.S+n.F*r(5)(function(){return!Math.sinh(-2e-17)!=-2e-17}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(129),o=Math.exp;n(n.S,"Math",{tanh:function(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,e,r){"use strict";var n=r(4),i=r(12),o=r(23),a=r(124),f=r(29),s=r(5),u=r(43).f,h=r(20).f,c=r(9).f,d=r(58).trim,l="Number",p=n[l],b=p,v=p.prototype,y=o(r(42)(v))==l,m="trim"in String.prototype,g=function(t){var e=f(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():d(e,3);var r,n,i,o=e.charCodeAt(0);if(43===o||45===o){if(r=e.charCodeAt(2),88===r||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var a,s=e.slice(2),u=0,h=s.length;u<h;u++)if(a=s.charCodeAt(u),a<48||a>i)return NaN;return parseInt(s,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var e=arguments.length<1?0:t,r=this;return r instanceof p&&(y?s(function(){v.valueOf.call(r)}):o(r)!=l)?a(new b(g(e)),r,p):g(e)};for(var w,_=r(8)?u(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),M=0;_.length>M;M++)i(b,w=_[M])&&!i(p,w)&&c(p,w,h(b,w));p.prototype=v,v.constructor=p,r(15)(n,l,p)}},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(4).isFinite;n(n.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(175)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function(t){return t!=t}})},function(t,e,r){var n=r(0),i=r(175),o=Math.abs;n(n.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(185);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(186);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){"use strict";var n=r(0),i=r(38),o=r(166),a=r(137),f=1..toFixed,s=Math.floor,u=[0,0,0,0,0,0],h="Number.toFixed: incorrect invocation!",c="0",d=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*u[r],u[r]=n%1e7,n=s(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=u[e],u[e]=s(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var r=String(u[t]);e=""===e?r:e+a.call(c,7-r.length)+r}return e},b=function(t,e,r){return 0===e?r:e%2===1?b(t,e-1,r*t):b(t*t,e/2,r)},v=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e};n(n.P+n.F*(!!f&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(5)(function(){f.call({})})),"Number",{toFixed:function(t){var e,r,n,f,s=o(this,h),u=i(t),y="",m=c;if(u<0||u>20)throw RangeError(h);if(s!=s)return"NaN";if(s<=-1e21||s>=1e21)return String(s);if(s<0&&(y="-",s=-s),s>1e-21)if(e=v(s*b(2,69,1))-69,r=e<0?s*b(2,-e,1):s/b(2,e,1),r*=4503599627370496,e=52-e,e>0){for(d(0,r),n=u;n>=7;)d(1e7,0),n-=7;for(d(b(10,n,1),0),n=e-1;n>=23;)l(1<<23),n-=23;l(1<<n),d(1,1),l(2),m=p()}else d(0,r),d(1<<-e,0),m=p()+a.call(c,u);return u>0?(f=m.length,m=y+(f<=u?"0."+a.call(c,u-f)+m:m.slice(0,f-u)+"."+m.slice(f-u))):m=y+m,m}})},function(t,e,r){"use strict";var n=r(0),i=r(5),o=r(166),a=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==a.call(1,void 0)})||!i(function(){a.call({})})),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?a.call(e):a.call(e,t)}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(179)})},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(42)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(180)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(6),i=r(36).onFreeze;r(28)("freeze",function(t){return function(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(17),i=r(20).f;r(28)("getOwnPropertyDescriptor",function(){return function(t,e){return i(n(t),e)}})},function(t,e,r){r(28)("getOwnPropertyNames",function(){return r(181).f})},function(t,e,r){var n=r(11),i=r(21);r(28)("getPrototypeOf",function(){return function(t){return i(n(t))}})},function(t,e,r){var n=r(6);r(28)("isExtensible",function(t){return function(e){return!!n(e)&&(!t||t(e))}})},function(t,e,r){var n=r(6);r(28)("isFrozen",function(t){return function(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(6);r(28)("isSealed",function(t){return function(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(187)})},function(t,e,r){var n=r(11),i=r(44);r(28)("keys",function(){return function(t){return i(n(t))}})},function(t,e,r){var n=r(6),i=r(36).onFreeze;r(28)("preventExtensions",function(t){return function(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(6),i=r(36).onFreeze;r(28)("seal",function(t){return function(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(132).set})},function(t,e,r){"use strict";var n=r(64),i={};i[r(7)("toStringTag")]="z",i+""!="[object z]"&&r(15)(Object.prototype,"toString",function(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0),i=r(185);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){var n=r(0),i=r(186);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){"use strict";var n,i,o,a=r(41),f=r(4),s=r(33),u=r(64),h=r(0),c=r(6),d=r(13),l=r(40),p=r(55),b=r(134),v=r(139).set,y=r(131)(),m="Promise",g=f.TypeError,w=f.process,_=f[m],w=f.process,M="process"==u(w),S=function(){},E=!!function(){try{var t=_.resolve(1),e=(t.constructor={})[r(7)("species")]=function(t){t(S,S)};return(M||"function"==typeof PromiseRejectionEvent)&&t.then(S)instanceof e}catch(t){}}(),A=function(t,e){return t===e||t===_&&e===o},k=function(t){var e;return!(!c(t)||"function"!=typeof(e=t.then))&&e},x=function(t){return A(_,t)?new I(t):new i(t)},I=i=function(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw g("Bad Promise constructor");e=t,r=n}),this.resolve=d(e),this.reject=d(r)},B=function(t){try{t()}catch(t){return{error:t}}},O=function(t,e){if(!t._n){t._n=!0;var r=t._c;y(function(){for(var n=t._v,i=1==t._s,o=0,a=function(e){var r,o,a=i?e.ok:e.fail,f=e.resolve,s=e.reject,u=e.domain;try{a?(i||(2==t._h&&T(t),t._h=1),a===!0?r=n:(u&&u.enter(),r=a(n),u&&u.exit()),r===e.promise?s(g("Promise-chain cycle")):(o=k(r))?o.call(r,f,s):f(r)):s(n)}catch(t){s(t)}};r.length>o;)a(r[o++]);t._c=[],t._n=!1,e&&!t._h&&R(t)})}},R=function(t){v.call(f,function(){var e,r,n,i=t._v;if(P(t)&&(e=B(function(){M?w.emit("unhandledRejection",i,t):(r=f.onunhandledrejection)?r({promise:t,reason:i}):(n=f.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=M||P(t)?2:1),t._a=void 0,e)throw e.error})},P=function(t){if(1==t._h)return!1;for(var e,r=t._a||t._c,n=0;r.length>n;)if(e=r[n++],e.fail||!P(e.promise))return!1;return!0},T=function(t){v.call(f,function(){var e;M?w.emit("rejectionHandled",t):(e=f.onrejectionhandled)&&e({promise:t,reason:t._v})})},j=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),O(e,!0))},C=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw g("Promise can't be resolved itself");(e=k(t))?y(function(){var n={_w:r,_d:!1};try{e.call(t,s(C,n,1),s(j,n,1))}catch(t){j.call(n,t)}}):(r._v=t,r._s=1,O(r,!1))}catch(t){j.call({_w:r,_d:!1},t)}}};E||(_=function(t){l(this,_,m,"_h"),d(t),n.call(this);try{t(s(C,this,1),s(j,this,1))}catch(t){j.call(this,t)}},n=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},n.prototype=r(45)(_.prototype,{then:function(t,e){var r=x(b(this,_));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=M?w.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&O(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),I=function(){var t=new n;this.promise=t,this.resolve=s(C,t,1),this.reject=s(j,t,1)}),h(h.G+h.W+h.F*!E,{Promise:_}),r(57)(_,m),r(46)(m),o=r(32)[m],h(h.S+h.F*!E,m,{reject:function(t){var e=x(this),r=e.reject;return r(t),e.promise}}),h(h.S+h.F*(a||!E),m,{resolve:function(t){if(t instanceof _&&A(t.constructor,this))return t;var e=x(this),r=e.resolve;return r(t),e.promise}}),h(h.S+h.F*!(E&&r(84)(function(t){_.all(t).catch(S)})),m,{all:function(t){var e=this,r=x(e),n=r.resolve,i=r.reject,o=B(function(){var r=[],o=0,a=1;p(t,!1,function(t){var f=o++,s=!1;r.push(void 0),a++,e.resolve(t).then(function(t){s||(s=!0,r[f]=t,--a||n(r))},i)}),--a||n(r)});return o&&i(o.error),r.promise},race:function(t){var e=this,r=x(e),n=r.reject,i=B(function(){p(t,!1,function(t){e.resolve(t).then(r.resolve,n)})});return i&&n(i.error),r.promise}})},function(t,e,r){var n=r(0),i=r(13),o=r(3),a=(r(4).Reflect||{}).apply,f=Function.apply;n(n.S+n.F*!r(5)(function(){a(function(){})}),"Reflect",{apply:function(t,e,r){var n=i(t),s=o(r);return a?a(n,e,s):f.call(n,e,s)}})},function(t,e,r){var n=r(0),i=r(42),o=r(13),a=r(3),f=r(6),s=r(5),u=r(170),h=(r(4).Reflect||{}).construct,c=s(function(){function t(){}return!(h(function(){},[],t)instanceof t)}),d=!s(function(){h(function(){})});n(n.S+n.F*(c||d),"Reflect",{construct:function(t,e){o(t),a(e);var r=arguments.length<3?t:o(arguments[2]);if(d&&!c)return h(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(u.apply(t,n))}var s=r.prototype,l=i(f(s)?s:Object.prototype),p=Function.apply.call(t,l,e);return f(p)?p:l}})},function(t,e,r){var n=r(9),i=r(0),o=r(3),a=r(29);i(i.S+i.F*r(5)(function(){Reflect.defineProperty(n.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,r){o(t),e=a(e,!0),o(r);try{return n.f(t,e,r),!0}catch(t){return!1}}})},function(t,e,r){var n=r(0),i=r(20).f,o=r(3);n(n.S,"Reflect",{deleteProperty:function(t,e){var r=i(o(t),e);return!(r&&!r.configurable)&&delete t[e]}})},function(t,e,r){"use strict";var n=r(0),i=r(3),o=function(t){this._t=i(t),this._i=0;var e,r=this._k=[];for(e in t)r.push(e)};r(127)(o,"Object",function(){var t,e=this,r=e._k;do if(e._i>=r.length)return{value:void 0,done:!0};while(!((t=r[e._i++])in e._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function(t){return new o(t)}})},function(t,e,r){var n=r(20),i=r(0),o=r(3);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return n.f(o(t),e)}})},function(t,e,r){var n=r(0),i=r(21),o=r(3);n(n.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},function(t,e,r){function n(t,e){var r,f,h=arguments.length<3?t:arguments[2];return u(t)===h?t[e]:(r=i.f(t,e))?a(r,"value")?r.value:void 0!==r.get?r.get.call(h):void 0:s(f=o(t))?n(f,e,h):void 0}var i=r(20),o=r(21),a=r(12),f=r(0),s=r(6),u=r(3);f(f.S,"Reflect",{get:n})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function(t,e){return e in t}})},function(t,e,r){var n=r(0),i=r(3),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(184)})},function(t,e,r){var n=r(0),i=r(3),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},function(t,e,r){var n=r(0),i=r(132);i&&n(n.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},function(t,e,r){function n(t,e,r){var s,d,l=arguments.length<4?t:arguments[3],p=o.f(h(t),e);if(!p){if(c(d=a(t)))return n(d,e,r,l);p=u(0)}return f(p,"value")?!(p.writable===!1||!c(l))&&(s=o.f(l,e)||u(0),s.value=r,i.f(l,e,s),!0):void 0!==p.set&&(p.set.call(l,r),!0)}var i=r(9),o=r(20),a=r(21),f=r(12),s=r(0),u=r(37),h=r(3),c=r(6);s(s.S,"Reflect",{set:n})},function(t,e,r){var n=r(4),i=r(124),o=r(9).f,a=r(43).f,f=r(83),s=r(81),u=n.RegExp,h=u,c=u.prototype,d=/a/g,l=/a/g,p=new u(d)!==d;if(r(8)&&(!p||r(5)(function(){return l[r(7)("match")]=!1,u(d)!=d||u(l)==l||"/a/i"!=u(d,"i")}))){u=function(t,e){var r=this instanceof u,n=f(t),o=void 0===e;return!r&&n&&t.constructor===u&&o?t:i(p?new h(n&&!o?t.source:t,e):h((n=t instanceof u)?t.source:t,n&&o?s.call(t):e),r?this:c,u)};for(var b=(function(t){t in u||o(u,t,{configurable:!0,get:function(){return h[t]},set:function(e){h[t]=e}})}),v=a(h),y=0;v.length>y;)b(v[y++]);c.constructor=u,u.prototype=c,r(15)(n,"RegExp",u)}r(46)("RegExp")},function(t,e,r){r(80)("match",1,function(t,e,r){return[function(r){"use strict";var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},r]})},function(t,e,r){
r(80)("replace",2,function(t,e,r){return[function(n,i){"use strict";var o=t(this),a=void 0==n?void 0:n[e];return void 0!==a?a.call(n,o,i):r.call(String(o),n,i)},r]})},function(t,e,r){r(80)("search",1,function(t,e,r){return[function(r){"use strict";var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},r]})},function(t,e,r){r(80)("split",2,function(t,e,n){"use strict";var i=r(83),o=n,a=[].push,f="split",s="length",u="lastIndex";if("c"=="abbc"[f](/(b)*/)[1]||4!="test"[f](/(?:)/,-1)[s]||2!="ab"[f](/(?:ab)*/)[s]||4!="."[f](/(.?)(.?)/)[s]||"."[f](/()()/)[s]>1||""[f](/.?/)[s]){var h=void 0===/()??/.exec("")[1];n=function(t,e){var r=String(this);if(void 0===t&&0===e)return[];if(!i(t))return o.call(r,t,e);var n,f,c,d,l,p=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),v=0,y=void 0===e?4294967295:e>>>0,m=new RegExp(t.source,b+"g");for(h||(n=new RegExp("^"+m.source+"$(?!\\s)",b));(f=m.exec(r))&&(c=f.index+f[0][s],!(c>v&&(p.push(r.slice(v,f.index)),!h&&f[s]>1&&f[0].replace(n,function(){for(l=1;l<arguments[s]-2;l++)void 0===arguments[l]&&(f[l]=void 0)}),f[s]>1&&f.index<r[s]&&a.apply(p,f.slice(1)),d=f[0][s],v=c,p[s]>=y)));)m[u]===f.index&&m[u]++;return v===r[s]?!d&&m.test("")||p.push(""):p.push(r.slice(v)),p[s]>y?p.slice(0,y):p}}else"0"[f](void 0,0)[s]&&(n=function(t,e){return void 0===t&&0===e?[]:o.call(this,t,e)});return[function(r,i){var o=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,o,i):n.call(String(o),r,i)},n]})},function(t,e,r){"use strict";r(191);var n=r(3),i=r(81),o=r(8),a="toString",f=/./[a],s=function(t){r(15)(RegExp.prototype,a,t,!0)};r(5)(function(){return"/a/b"!=f.call({source:"a",flags:"b"})})?s(function(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):f.name!=a&&s(function(){return f.call(this)})},function(t,e,r){"use strict";r(16)("anchor",function(t){return function(e){return t(this,"a","name",e)}})},function(t,e,r){"use strict";r(16)("big",function(t){return function(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(16)("blink",function(t){return function(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(16)("bold",function(t){return function(){return t(this,"b","","")}})},function(t,e,r){"use strict";var n=r(0),i=r(135)(!1);n(n.P,"String",{codePointAt:function(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(136),a="endsWith",f=""[a];n(n.P+n.F*r(122)(a),"String",{endsWith:function(t){var e=o(this,t,a),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),s=void 0===r?n:Math.min(i(r),n),u=String(t);return f?f.call(e,u,s):e.slice(s-u.length,s)===u}})},function(t,e,r){"use strict";r(16)("fixed",function(t){return function(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(16)("fontcolor",function(t){return function(e){return t(this,"font","color",e)}})},function(t,e,r){"use strict";r(16)("fontsize",function(t){return function(e){return t(this,"font","size",e)}})},function(t,e,r){var n=r(0),i=r(47),o=String.fromCharCode,a=String.fromCodePoint;n(n.S+n.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,a=0;n>a;){if(e=+arguments[a++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(((e-=65536)>>10)+55296,e%1024+56320))}return r.join("")}})},function(t,e,r){"use strict";var n=r(0),i=r(136),o="includes";n(n.P+n.F*r(122)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){"use strict";r(16)("italics",function(t){return function(){return t(this,"i","","")}})},function(t,e,r){"use strict";var n=r(135)(!0);r(128)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,r=this._i;return r>=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";r(16)("link",function(t){return function(e){return t(this,"a","href",e)}})},function(t,e,r){var n=r(0),i=r(17),o=r(10);n(n.S,"String",{raw:function(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,a=[],f=0;r>f;)a.push(String(e[f++])),f<n&&a.push(String(arguments[f]));return a.join("")}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(137)})},function(t,e,r){"use strict";r(16)("small",function(t){return function(){return t(this,"small","","")}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(136),a="startsWith",f=""[a];n(n.P+n.F*r(122)(a),"String",{startsWith:function(t){var e=o(this,t,a),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return f?f.call(e,n,r):e.slice(r,r+n.length)===n}})},function(t,e,r){"use strict";r(16)("strike",function(t){return function(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(16)("sub",function(t){return function(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(16)("sup",function(t){return function(){return t(this,"sup","","")}})},function(t,e,r){"use strict";r(58)("trim",function(t){return function(){return t(this,3)}})},function(t,e,r){"use strict";var n=r(4),i=r(12),o=r(8),a=r(0),f=r(15),s=r(36).KEY,u=r(5),h=r(87),c=r(57),d=r(48),l=r(7),p=r(189),b=r(141),v=r(286),y=r(285),m=r(126),g=r(3),w=r(17),_=r(29),M=r(37),S=r(42),E=r(181),A=r(20),k=r(9),x=r(44),I=A.f,B=k.f,O=E.f,R=n.Symbol,P=n.JSON,T=P&&P.stringify,j="prototype",C=l("_hidden"),N=l("toPrimitive"),L={}.propertyIsEnumerable,U=h("symbol-registry"),z=h("symbols"),D=h("op-symbols"),q=Object[j],F="function"==typeof R,K=n.QObject,G=!K||!K[j]||!K[j].findChild,V=o&&u(function(){return 7!=S(B({},"a",{get:function(){return B(this,"a",{value:7}).a}})).a})?function(t,e,r){var n=I(q,e);n&&delete q[e],B(t,e,r),n&&t!==q&&B(q,e,n)}:B,H=function(t){var e=z[t]=S(R[j]);return e._k=t,e},X=F&&"symbol"==typeof R.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof R},Y=function(t,e,r){return t===q&&Y(D,e,r),g(t),e=_(e,!0),g(r),i(z,e)?(r.enumerable?(i(t,C)&&t[C][e]&&(t[C][e]=!1),r=S(r,{enumerable:M(0,!1)})):(i(t,C)||B(t,C,M(1,{})),t[C][e]=!0),V(t,e,r)):B(t,e,r)},W=function(t,e){g(t);for(var r,n=y(e=w(e)),i=0,o=n.length;o>i;)Y(t,r=n[i++],e[r]);return t},Z=function(t,e){return void 0===e?S(t):W(S(t),e)},J=function(t){var e=L.call(this,t=_(t,!0));return!(this===q&&i(z,t)&&!i(D,t))&&(!(e||!i(this,t)||!i(z,t)||i(this,C)&&this[C][t])||e)},$=function(t,e){if(t=w(t),e=_(e,!0),t!==q||!i(z,e)||i(D,e)){var r=I(t,e);return!r||!i(z,e)||i(t,C)&&t[C][e]||(r.enumerable=!0),r}},Q=function(t){for(var e,r=O(w(t)),n=[],o=0;r.length>o;)i(z,e=r[o++])||e==C||e==s||n.push(e);return n},tt=function(t){for(var e,r=t===q,n=O(r?D:w(t)),o=[],a=0;n.length>a;)!i(z,e=n[a++])||r&&!i(q,e)||o.push(z[e]);return o};F||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(r){this===q&&e.call(D,r),i(this,C)&&i(this[C],t)&&(this[C][t]=!1),V(this,t,M(1,r))};return o&&G&&V(q,t,{configurable:!0,set:e}),H(t)},f(R[j],"toString",function(){return this._k}),A.f=$,k.f=Y,r(43).f=E.f=Q,r(66).f=J,r(86).f=tt,o&&!r(41)&&f(q,"propertyIsEnumerable",J,!0),p.f=function(t){return H(l(t))}),a(a.G+a.W+a.F*!F,{Symbol:R});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;et.length>rt;)l(et[rt++]);for(var et=x(l.store),rt=0;et.length>rt;)b(et[rt++]);a(a.S+a.F*!F,"Symbol",{for:function(t){return i(U,t+="")?U[t]:U[t]=R(t)},keyFor:function(t){if(X(t))return v(U,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){G=!0},useSimple:function(){G=!1}}),a(a.S+a.F*!F,"Object",{create:Z,defineProperty:Y,defineProperties:W,getOwnPropertyDescriptor:$,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),P&&a(a.S+a.F*(!F||u(function(){var t=R();return"[null]"!=T([t])||"{}"!=T({a:t})||"{}"!=T(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!X(t)){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);return e=n[1],"function"==typeof e&&(r=e),!r&&m(e)||(e=function(t,e){if(r&&(e=r.call(this,t,e)),!X(e))return e}),n[1]=e,T.apply(P,n)}}}),R[j][N]||r(14)(R[j],N,R[j].valueOf),c(R,"Symbol"),c(Math,"Math",!0),c(n.JSON,"JSON",!0)},function(t,e,r){"use strict";var n=r(0),i=r(88),o=r(140),a=r(3),f=r(47),s=r(10),u=r(6),h=r(4).ArrayBuffer,c=r(134),d=o.ArrayBuffer,l=o.DataView,p=i.ABV&&h.isView,b=d.prototype.slice,v=i.VIEW,y="ArrayBuffer";n(n.G+n.W+n.F*(h!==d),{ArrayBuffer:d}),n(n.S+n.F*!i.CONSTR,y,{isView:function(t){return p&&p(t)||u(t)&&v in t}}),n(n.P+n.U+n.F*r(5)(function(){return!new d(2).slice(1,void 0).byteLength}),y,{slice:function(t,e){if(void 0!==b&&void 0===e)return b.call(a(this),t);for(var r=a(this).byteLength,n=f(t,r),i=f(void 0===e?r:e,r),o=new(c(this,d))(s(i-n)),u=new l(this),h=new l(o),p=0;n<i;)h.setUint8(p++,u.getUint8(n++));return o}}),r(46)(y)},function(t,e,r){var n=r(0);n(n.G+n.W+n.F*!r(88).ABV,{DataView:r(140).DataView})},function(t,e,r){r(35)("Float32",4,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Float64",8,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Int16",2,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Int32",4,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Int8",1,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint16",2,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint32",4,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint8",1,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint8",1,function(t){return function(e,r,n){return t(this,e,r,n)}},!0)},function(t,e,r){"use strict";var n=r(173);r(79)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return n.def(this,t,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(78)(!0);n(n.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(54)("includes")},function(t,e,r){var n=r(0),i=r(131)(),o=r(4).process,a="process"==r(23)(o);n(n.G,{asap:function(t){var e=a&&o.domain;i(e?e.bind(t):t)}})},function(t,e,r){var n=r(0),i=r(23);n(n.S,"Error",{isError:function(t){return"Error"===i(t)}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(172)("Map")})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function(t,e,r,n){var i=t>>>0,o=e>>>0,a=r>>>0;return o+(n>>>0)+((i&a|(i|a)&~(i+a>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,a=i&r,f=n>>16,s=i>>16,u=(f*a>>>0)+(o*a>>>16);return f*s+(u>>16)+((o*s>>>0)+(u&r)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function(t,e,r,n){var i=t>>>0,o=e>>>0,a=r>>>0;return o-(n>>>0)-((~i&a|~(i^a)&i-a>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,a=i&r,f=n>>>16,s=i>>>16,u=(f*a>>>0)+(o*a>>>16);return f*s+(u>>>16)+((o*s>>>0)+(u&r)>>>16)}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(13),a=r(9);r(8)&&n(n.P+r(85),"Object",{__defineGetter__:function(t,e){a.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(13),a=r(9);r(8)&&n(n.P+r(85),"Object",{__defineSetter__:function(t,e){a.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){var n=r(0),i=r(183)(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},function(t,e,r){var n=r(0),i=r(184),o=r(17),a=r(20),f=r(119);n(n.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,r=o(t),n=a.f,s=i(r),u={},h=0;s.length>h;)f(u,e=s[h++],n(r,e));return u}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(29),a=r(21),f=r(20).f;r(8)&&n(n.P+r(85),"Object",{__lookupGetter__:function(t){var e,r=i(this),n=o(t,!0);do if(e=f(r,n))return e.get;while(r=a(r))}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(29),a=r(21),f=r(20).f;r(8)&&n(n.P+r(85),"Object",{__lookupSetter__:function(t){var e,r=i(this),n=o(t,!0);do if(e=f(r,n))return e.set;while(r=a(r))}})},function(t,e,r){var n=r(0),i=r(183)(!1);n(n.S,"Object",{values:function(t){return i(t)}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(32),a=r(131)(),f=r(7)("observable"),s=r(13),u=r(3),h=r(40),c=r(45),d=r(14),l=r(55),p=l.RETURN,b=function(t){return null==t?void 0:s(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},g=function(t,e){u(t),this._c=void 0,this._o=t,t=new w(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:s(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};g.prototype=c({},{unsubscribe:function(){m(this)}});var w=function(t){this._s=t};w.prototype=c({},{next:function(t){var e=this._s;if(!y(e)){var r=e._o;try{var n=b(r.next);if(n)return n.call(r,t)}catch(t){try{m(e)}finally{throw t}}}},error:function(t){var e=this._s;if(y(e))throw t;var r=e._o;e._o=void 0;try{var n=b(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{v(e)}finally{throw t}}return v(e),t},complete:function(t){var e=this._s;if(!y(e)){var r=e._o;e._o=void 0;try{var n=b(r.complete);t=n?n.call(r,t):void 0}catch(t){try{v(e)}finally{throw t}}return v(e),t}}});var _=function(t){h(this,_,"Observable","_f")._f=s(t)};c(_.prototype,{subscribe:function(t){return new g(t,this._f)},forEach:function(t){var e=this;return new(o.Promise||i.Promise)(function(r,n){s(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})})}}),c(_,{from:function(t){var e="function"==typeof this?this:_,r=b(u(t)[f]);if(r){var n=u(r.call(t));return n.constructor===e?n:new e(function(t){return n.subscribe(t)})}return new e(function(e){var r=!1;return a(function(){if(!r){try{if(l(t,!1,function(t){if(e.next(t),r)return p})===p)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}}),function(){r=!0}})},of:function(){for(var t=0,e=arguments.length,r=Array(e);t<e;)r[t]=arguments[t++];return new("function"==typeof this?this:_)(function(t){var e=!1;return a(function(){if(!e){for(var n=0;n<r.length;++n)if(t.next(r[n]),e)return;t.complete()}}),function(){e=!0}})}}),d(_.prototype,f,function(){return this}),n(n.G,{Observable:_}),r(46)("Observable")},function(t,e,r){var n=r(34),i=r(3),o=n.key,a=n.set;n.exp({defineMetadata:function(t,e,r,n){a(t,e,i(r),o(n))}})},function(t,e,r){var n=r(34),i=r(3),o=n.key,a=n.map,f=n.store;n.exp({deleteMetadata:function(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=a(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var s=f.get(e);return s.delete(r),!!s.size||f.delete(e)}})},function(t,e,r){var n=r(192),i=r(168),o=r(34),a=r(3),f=r(21),s=o.keys,u=o.key,h=function(t,e){var r=s(t,e),o=f(t);if(null===o)return r;var a=h(o,e);return a.length?r.length?i(new n(r.concat(a))):a:r};o.exp({getMetadataKeys:function(t){return h(a(t),arguments.length<2?void 0:u(arguments[1]))}})},function(t,e,r){var n=r(34),i=r(3),o=r(21),a=n.has,f=n.get,s=n.key,u=function(t,e,r){var n=a(t,e,r);if(n)return f(t,e,r);var i=o(e);return null!==i?u(t,i,r):void 0};n.exp({getMetadata:function(t,e){return u(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=n.keys,a=n.key;n.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:a(arguments[1]))}})},function(t,e,r){var n=r(34),i=r(3),o=n.get,a=n.key;n.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=r(21),a=n.has,f=n.key,s=function(t,e,r){var n=a(t,e,r);if(n)return!0;var i=o(e);return null!==i&&s(t,i,r)};n.exp({hasMetadata:function(t,e){return s(t,i(e),arguments.length<3?void 0:f(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=n.has,a=n.key;n.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=r(13),a=n.key,f=n.set;n.exp({metadata:function(t,e){return function(r,n){f(t,e,(void 0!==n?i:o)(r),a(n))}}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(172)("Set")})},function(t,e,r){"use strict";var n=r(0),i=r(135)(!0);n(n.P,"String",{at:function(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(24),o=r(10),a=r(83),f=r(81),s=RegExp.prototype,u=function(t,e){this._r=t,this._s=e};r(127)(u,"RegExp String",function(){var t=this._r.exec(this._s);return{value:t,done:null===t}}),n(n.P,"String",{matchAll:function(t){if(i(this),!a(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in s?String(t.flags):f.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new u(n,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(188);n(n.P,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";var n=r(0),i=r(188);n(n.P,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";r(58)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(58)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},function(t,e,r){r(141)("asyncIterator")},function(t,e,r){r(141)("observable")},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(4)})},function(t,e,r){for(var n=r(143),i=r(15),o=r(4),a=r(14),f=r(56),s=r(7),u=s("iterator"),h=s("toStringTag"),c=f.Array,d=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var p,b=d[l],v=o[b],y=v&&v.prototype;if(y){y[u]||a(y,u,c),y[h]||a(y,h,b),f[b]=c;for(p in n)y[p]||i(y,p,n[p],!0)}}},function(t,e,r){var n=r(0),i=r(139);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){var n=r(4),i=r(0),o=r(82),a=r(287),f=n.navigator,s=!!f&&/MSIE .\./.test(f.userAgent),u=function(t){return s?function(e,r){return t(o(a,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),r)}:t};i(i.G+i.B+i.F*s,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){r(410),r(349),r(351),r(350),r(353),r(355),r(360),r(354),r(352),r(362),r(361),r(357),r(358),r(356),r(348),r(359),r(363),r(364),r(316),r(318),r(317),r(366),r(365),r(336),r(346),r(347),r(337),r(338),r(339),r(340),r(341),r(342),r(343),r(344),r(345),r(319),r(320),r(321),r(322),r(323),r(324),r(325),r(326),r(327),r(328),r(329),r(330),r(331),r(332),r(333),r(334),r(335),r(397),r(402),r(409),r(400),r(392),r(393),r(398),r(403),r(405),r(388),r(389),r(390),r(391),r(394),r(395),r(396),r(399),r(401),r(404),r(406),r(407),r(408),r(311),r(313),r(312),r(315),r(314),r(300),r(298),r(304),r(301),r(307),r(309),r(297),r(303),r(294),r(308),r(292),r(306),r(305),r(299),r(302),r(291),r(293),r(296),r(295),r(310),r(143),r(382),r(387),r(191),r(383),r(384),r(385),r(386),r(367),r(190),r(192),r(193),r(422),r(411),r(412),r(417),r(420),r(421),r(415),r(418),r(416),r(419),r(413),r(414),r(368),r(369),r(370),r(371),r(372),r(375),r(373),r(374),r(376),r(377),r(378),r(379),r(381),r(380),r(423),r(449),r(452),r(451),r(453),r(454),r(450),r(455),r(456),r(434),r(437),r(433),r(431),r(432),r(435),r(436),r(426),r(448),r(457),r(425),r(427),r(429),r(428),r(430),r(439),r(440),r(442),r(441),r(444),r(443),r(445),r(446),r(447),r(424),r(438),r(460),r(459),r(458),t.exports=r(32)},function(t,e,r){t.exports=r(463)("ed25519")},function(t,e,r){(function(n,i){function o(t){"string"==typeof t?t={bindings:t}:t||(t={}),t.__proto__=c,t.module_root||(t.module_root=e.getRoot(e.getFileName())),".node"!=f.extname(t.bindings)&&(t.bindings+=".node");for(var r,n,i,o=[],a=0,u=t.try.length;a<u;a++){r=s.apply(null,t.try[a].map(function(e){return t[e]||e})),o.push(r);try{return n=t.path?!function(){var t=new Error('Cannot find module "."');throw t.code="MODULE_NOT_FOUND",t}():!function(){var t=new Error('Cannot find module "."');throw t.code="MODULE_NOT_FOUND",t}(),t.path||(n.path=r),n}catch(t){if(!/not find/i.test(t.message))throw t}}throw i=new Error("Could not locate the bindings file. Tried:\n"+o.map(function(e){return t.arrow+e}).join("\n")),i.tries=o,i}var a=r(489),f=r(594),s=f.join,u=f.dirname,h=a.existsSync||f.existsSync,c={arrow:n.env.NODE_BINDINGS_ARROW||" → ",compiled:n.env.NODE_BINDINGS_COMPILED_DIR||"compiled",platform:n.platform,arch:n.arch,version:n.versions.node,bindings:"bindings.node",try:[["module_root","build","bindings"],["module_root","build","Debug","bindings"],["module_root","build","Release","bindings"],["module_root","out","Debug","bindings"],["module_root","Debug","bindings"],["module_root","out","Release","bindings"],["module_root","Release","bindings"],["module_root","build","default","bindings"],["module_root","compiled","version","platform","arch","bindings"]]};t.exports=e=o,e.getFileName=function(t){var e,r=Error.prepareStackTrace,n=Error.stackTraceLimit,o={};return Error.stackTraceLimit=10,Error.prepareStackTrace=function(r,n){for(var o=0,a=n.length;o<a;o++)if(e=n[o].getFileName(),e!==i){if(!t)return;if(e!==t)return}},Error.captureStackTrace(o),o.stack,Error.prepareStackTrace=r,Error.stackTraceLimit=n,e},e.getRoot=function(t){for(var e,r=u(t);;){if("."===r&&(r=n.cwd()),h(s(r,"package.json"))||h(s(r,"node_modules")))return r;if(e===r)throw new Error('Could not find module root given file: "'+t+'". Do you have a `package.json` file? ');e=r,r=s(r,"..")}}}).call(e,r(26),"/index.js")},function(t,e){t.exports={O_RDONLY:0,O_WRONLY:1,O_RDWR:2,S_IFMT:61440,S_IFREG:32768,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960,S_IFSOCK:49152,O_CREAT:512,O_EXCL:2048,O_NOCTTY:131072,O_TRUNC:1024,O_APPEND:8,O_DIRECTORY:1048576,O_NOFOLLOW:256,O_SYNC:128,O_SYMLINK:2097152,O_NONBLOCK:4,S_IRWXU:448,S_IRUSR:256,S_IWUSR:128,S_IXUSR:64,S_IRWXG:56,S_IRGRP:32,S_IWGRP:16,S_IXGRP:8,S_IRWXO:7,S_IROTH:4,S_IWOTH:2,S_IXOTH:1,E2BIG:7,EACCES:13,EADDRINUSE:48,EADDRNOTAVAIL:49,EAFNOSUPPORT:47,EAGAIN:35,EALREADY:37,EBADF:9,EBADMSG:94,EBUSY:16,ECANCELED:89,ECHILD:10,ECONNABORTED:53,ECONNREFUSED:61,ECONNRESET:54,EDEADLK:11,EDESTADDRREQ:39,EDOM:33,EDQUOT:69,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:65,EIDRM:90,EILSEQ:92,EINPROGRESS:36,EINTR:4,EINVAL:22,EIO:5,EISCONN:56,EISDIR:21,ELOOP:62,EMFILE:24,EMLINK:31,EMSGSIZE:40,EMULTIHOP:95,ENAMETOOLONG:63,ENETDOWN:50,ENETRESET:52,ENETUNREACH:51,ENFILE:23,ENOBUFS:55,ENODATA:96,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:77,ENOLINK:97,ENOMEM:12,ENOMSG:91,ENOPROTOOPT:42,ENOSPC:28,ENOSR:98,ENOSTR:99,ENOSYS:78,ENOTCONN:57,ENOTDIR:20,ENOTEMPTY:66,ENOTSOCK:38,ENOTSUP:45,ENOTTY:25,ENXIO:6,EOPNOTSUPP:102,EOVERFLOW:84,EPERM:1,EPIPE:32,EPROTO:100,EPROTONOSUPPORT:43,EPROTOTYPE:41,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:70,ETIME:101,ETIMEDOUT:60,ETXTBSY:26,EWOULDBLOCK:35,EXDEV:18,SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGILL:4,SIGTRAP:5,SIGABRT:6,SIGIOT:6,SIGBUS:10,SIGFPE:8,SIGKILL:9,SIGUSR1:30,SIGSEGV:11,SIGUSR2:31,SIGPIPE:13,SIGALRM:14,SIGTERM:15,SIGCHLD:20,SIGCONT:19,SIGSTOP:17,SIGTSTP:18,SIGTTIN:21,SIGTTOU:22,SIGURG:16,SIGXCPU:24,SIGXFSZ:25,SIGVTALRM:26,SIGPROF:27,SIGWINCH:28,SIGIO:23,SIGSYS:12,SSL_OP_ALL:2147486719,SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION:262144,SSL_OP_CIPHER_SERVER_PREFERENCE:4194304,SSL_OP_CISCO_ANYCONNECT:32768,SSL_OP_COOKIE_EXCHANGE:8192,SSL_OP_CRYPTOPRO_TLSEXT_BUG:2147483648,SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS:2048,SSL_OP_EPHEMERAL_RSA:0,SSL_OP_LEGACY_SERVER_CONNECT:4,SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER:32,SSL_OP_MICROSOFT_SESS_ID_BUG:1,SSL_OP_MSIE_SSLV2_RSA_PADDING:0,SSL_OP_NETSCAPE_CA_DN_BUG:536870912,SSL_OP_NETSCAPE_CHALLENGE_BUG:2,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG:1073741824,SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG:8,SSL_OP_NO_COMPRESSION:131072,SSL_OP_NO_QUERY_MTU:4096,SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION:65536,SSL_OP_NO_SSLv2:16777216,SSL_OP_NO_SSLv3:33554432,SSL_OP_NO_TICKET:16384,SSL_OP_NO_TLSv1:67108864,SSL_OP_NO_TLSv1_1:268435456,SSL_OP_NO_TLSv1_2:134217728,SSL_OP_PKCS1_CHECK_1:0,SSL_OP_PKCS1_CHECK_2:0,SSL_OP_SINGLE_DH_USE:1048576,SSL_OP_SINGLE_ECDH_USE:524288,SSL_OP_SSLEAY_080_CLIENT_DH_BUG:128,SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG:0,SSL_OP_TLS_BLOCK_PADDING_BUG:512,SSL_OP_TLS_D5_BUG:256,SSL_OP_TLS_ROLLBACK_BUG:8388608,ENGINE_METHOD_DSA:2,ENGINE_METHOD_DH:4,ENGINE_METHOD_RAND:8,ENGINE_METHOD_ECDH:16,ENGINE_METHOD_ECDSA:32,ENGINE_METHOD_CIPHERS:64,ENGINE_METHOD_DIGESTS:128,ENGINE_METHOD_STORE:256,ENGINE_METHOD_PKEY_METHS:512,ENGINE_METHOD_PKEY_ASN1_METHS:1024,ENGINE_METHOD_ALL:65535,ENGINE_METHOD_NONE:0,DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6,F_OK:0,R_OK:4,W_OK:2,X_OK:1,UV_UDP_REUSEADDR:4}},function(t,e){t.exports={name:"elliptic",version:"6.3.2",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"cbace4683a4a548dc0306ef36756151a20299cd5",_id:"elliptic@6.3.2",_shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",_from:"elliptic@>=6.0.0 <7.0.0",_npmVersion:"3.10.3",_nodeVersion:"6.3.0",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",tarball:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],_npmOperationalInternal:{host:"packages-16-east.internal.npmjs.com",tmp:"tmp/elliptic-6.3.2.tgz_1473938837205_0.3108903462998569"},directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"}},function(t,e){t.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},function(t,e){t.exports={name:"elliptic",version:"6.3.2",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"cbace4683a4a548dc0306ef36756151a20299cd5",_id:"elliptic@6.3.2",_shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",_from:"elliptic@>=6.0.0 <7.0.0",_npmVersion:"3.10.3",_nodeVersion:"6.3.0",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",tarball:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],_npmOperationalInternal:{host:"packages-16-east.internal.npmjs.com",tmp:"tmp/elliptic-6.3.2.tgz_1473938837205_0.3108903462998569"},directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"}},function(t,e){t.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},function(t,e){t.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(195),f=function(t){function e(){return n(this,e),i(this,Object.getPrototypeOf(e).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(195),f=function(t){function e(){return n(this,e),i(this,Object.getPrototypeOf(e).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(196),a=function(){function t(){n(this,t),this.size=0}return i(t,[{key:"writeUInt",value:function(t,e){this.size+=e}},{key:"writeVarUInt",value:function(t){if(e.isBuffer(t))return void this.writeVarOctetString(t);if(!o(t))throw new Error("UInt must be an integer");if(t<0)throw new Error("UInt must be positive");var r=Math.ceil(t.toString(2).length/8);this.writeVarOctetString({length:r})}},{key:"writeOctetString",value:function(t,e){this.skip(e)}},{key:"writeVarOctetString",value:function(t){if(this.skip(1),t.length>127){var e=Math.ceil(t.length.toString(2).length/8);this.skip(e)}this.skip(t.length)}},{key:"write",value:function(t){this.size+=t.length}},{key:"skip",value:function(t){this.size+=t}},{key:"getSize",value:function(){return this.size}}]),t}();[1,2,4,8].forEach(function(t){a.prototype["writeUInt"+8*t]=function(e){return this.writeUInt(e,t)}}),t.exports=a}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(471),a=r(470),f=function(){function t(e){n(this,t),this.buffer=e,this.cursor=0,this.bookmarks=[]}return i(t,[{key:"bookmark",value:function(){this.bookmarks.push(this.cursor)}},{key:"restore",value:function(){this.cursor=this.bookmarks.pop()}},{key:"ensureAvailable",value:function(t){if(this.buffer.length<this.cursor+t)throw new o("Tried to read "+t+" bytes, but only "+(this.buffer.length-this.cursor)+" bytes available")}},{key:"readUInt",value:function(t){var e=this.peekUInt(t);return this.cursor+=t,e}},{key:"peekUInt",value:function(e){if(0===e)return 0;if(e<0)throw new Error("Tried to read integer with negative length (provided: "+e+")");if(e>t.MAX_INT_BYTES)throw new Error("Tried to read too large integer (requested: "+e+", max: "+t.MAX_INT_BYTES+")");this.ensureAvailable(e);var r=this.buffer.readUIntBE(this.cursor,e);return r}},{key:"skipUInt",value:function(t){this.skip(t)}},{key:"readUInt64",value:function(){return[this.readUInt32(),this.readUInt32()]}},{key:"peekUInt64",value:function(){this.bookmark();var t=this.readUInt64();return this.restore(),t}},{key:"skipUInt64",value:function(){this.skip(8)}},{key:"readVarUInt",value:function(){var e=this.readVarOctetString();if(e.length>t.MAX_INT_BYTES)throw new a("UInt of length "+e.length+" too large to parse as integer (max: "+t.MAX_INT_BYTES+")");if(0===e.length)throw new a("UInt of length 0 is invalid");return e.readUIntBE(0,e.length)}},{key:"peekVarUInt",value:function(){this.bookmark();var t=this.readVarUInt();return this.restore(),t}},{key:"skipVarUInt",value:function(){this.skipVarOctetString()}},{key:"readOctetString",value:function(t){return this.read(t)}},{key:"peekOctetString",value:function(t){return this.peek(t)}},{key:"skipOctetString",value:function(t){return this.skip(t)}},{key:"readLengthPrefix",value:function(){var e=this.readUInt8();if(e&t.HIGH_BIT){var r=e&t.LOWER_SEVEN_BITS,n=this.readUInt(r),i=Math.max(128,1<<8*(r-1));if(n<i)throw new a("Length prefix encoding is not canonical: "+n+" encoded in "+r+" bytes");return n}return e}},{key:"readVarOctetString",value:function(){var t=this.readLengthPrefix();return this.read(t)}},{key:"peekVarOctetString",value:function(){this.bookmark();var t=this.readVarOctetString();return this.restore(),t}},{key:"skipVarOctetString",value:function(){var t=this.readLengthPrefix();return this.skip(t)}},{key:"read",value:function(t){this.ensureAvailable(t);var e=this.buffer.slice(this.cursor,this.cursor+t);return this.cursor+=t,e}},{key:"peek",value:function(t){return this.ensureAvailable(t),this.buffer.slice(this.cursor,this.cursor+t)}},{key:"skip",value:function(t){this.ensureAvailable(t),this.cursor+=t}}],[{key:"from",value:function(r){if(e.isBuffer(r))return new t(r);if(r instanceof t)return new t(r.buffer.slice(r.cursor));throw new Error("Reader must be given a Buffer")}}]),t}();f.HIGH_BIT=128,f.LOWER_SEVEN_BITS=127,f.MAX_INT_BYTES=6,["read","peek","skip"].forEach(function(t){[1,2,4].forEach(function(e){f.prototype[t+"UInt"+8*e]=function(){return this[t+"UInt"](e)}})}),t.exports=f}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(196),a=function(){function t(){n(this,t),this.components=[]}return i(t,[{key:"writeUInt",value:function(t,r){if(!o(t))throw new Error("UInt must be an integer");if(t<0)throw new Error("UInt must be positive");if(r<=0)throw new Error("UInt length must be greater than zero");if(t.toString(2).length>8*r)throw new Error("UInt "+t+" does not fit in "+r+" bytes");var n=new e(r);n.writeUIntBE(t,0,r),this.write(n)}},{key:"writeVarUInt",value:function(r){if(e.isBuffer(r))return void this.writeVarOctetString(r);if(!o(r))throw new Error("UInt must be an integer");if(r<0)throw new Error("UInt must be positive");if(r>t.MAX_SAFE_INTEGER)throw new Error("UInt is too large");var n=Math.ceil(r.toString(2).length/8),i=new e(n);i.writeUIntBE(r,0,n),this.writeVarOctetString(i)}},{key:"writeUInt64",value:function(e){if(o(e)&&e<=t.MAX_SAFE_INTEGER)return this.writeUInt32(Math.floor(e/4294967296)),void this.writeUInt32(4294967295&e);if(!Array.isArray(e)||2!==e.length||!o(e[0])||!o(e[1]))throw new TypeError("Expected 64-bit integer as an array of two 32-bit words");this.writeUInt32(e[0]),this.writeUInt32(e[1])}},{key:"writeOctetString",value:function(t,e){if(t.length!==e)throw new Error("Incorrect length for octet string (actual: "+t.length+", expected: "+e+")");this.write(t)}},{key:"writeVarOctetString",value:function(t){if(!e.isBuffer(t))throw new TypeError("Expects a buffer");var r=128;if(t.length<=127)this.writeUInt8(t.length);else{var n=Math.ceil(t.length.toString(2).length/8);this.writeUInt8(r|n),this.writeUInt(t.length,n)}this.write(t)}},{key:"write",value:function(t){this.components.push(t)}},{key:"getBuffer",value:function(){return e.concat(this.components)}}]),t}();a.MAX_SAFE_INTEGER=r(475),[1,2,4].forEach(function(t){a.prototype["writeUInt"+8*t]=function(e){this.writeUInt(e,t)}}),t.exports=a}).call(e,r(1).Buffer)},function(t,e,r){r(487),t.exports=9007199254740991},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(89);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e,r){var n=r(476);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,r){var n=r(89),i=r(200).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(483),i=r(484);t.exports=r(144)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){t.exports=!r(144)&&!r(199)(function(){return 7!=Object.defineProperty(r(479)("div"),"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(89),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,r){var n=r(477),i=r(481),o=r(485),a=Object.defineProperty;e.f=r(144)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,r){var n=r(89);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,r){var n=r(198);n(n.S,"Number",{isInteger:r(482)})},function(t,e,r){var n=r(198);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){!function(t){"use strict";function e(t,e,r,n){t[e]=r>>24&255,t[e+1]=r>>16&255,t[e+2]=r>>8&255,t[e+3]=255&r,t[e+4]=n>>24&255,t[e+5]=n>>16&255,t[e+6]=n>>8&255,t[e+7]=255&n}function n(t,e,r,n,i){var o,a=0;for(o=0;o<i;o++)a|=t[e+o]^r[n+o];return(1&a-1>>>8)-1}function i(t,e,r,i){return n(t,e,r,i,16)}function o(t,e,r,i){return n(t,e,r,i,32)}function a(t,e,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,f=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,s=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,u=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,h=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,l=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,b=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,v=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,y=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,m=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,g=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,M=a,S=f,E=s,A=u,k=h,x=c,I=d,B=l,O=p,R=b,P=v,T=y,j=m,C=g,N=w,L=0;L<20;L+=2)i=_+T|0,A^=i<<7|i>>>25,i=A+_|0,B^=i<<9|i>>>23,i=B+A|0,T^=i<<13|i>>>19,i=T+B|0,_^=i<<18|i>>>14,i=k+M|0,O^=i<<7|i>>>25,i=O+k|0,j^=i<<9|i>>>23,i=j+O|0,M^=i<<13|i>>>19,i=M+j|0,k^=i<<18|i>>>14,i=R+x|0,C^=i<<7|i>>>25,i=C+R|0,S^=i<<9|i>>>23,i=S+C|0,x^=i<<13|i>>>19,i=x+S|0,R^=i<<18|i>>>14,i=N+P|0,E^=i<<7|i>>>25,i=E+N|0,I^=i<<9|i>>>23,i=I+E|0,P^=i<<13|i>>>19,i=P+I|0,N^=i<<18|i>>>14,i=_+E|0,M^=i<<7|i>>>25,i=M+_|0,S^=i<<9|i>>>23,i=S+M|0,E^=i<<13|i>>>19,i=E+S|0,_^=i<<18|i>>>14,i=k+A|0,x^=i<<7|i>>>25,i=x+k|0,I^=i<<9|i>>>23,i=I+x|0,A^=i<<13|i>>>19,i=A+I|0,k^=i<<18|i>>>14,i=R+O|0,P^=i<<7|i>>>25,i=P+R|0,B^=i<<9|i>>>23,i=B+P|0,O^=i<<13|i>>>19,i=O+B|0,R^=i<<18|i>>>14,i=N+C|0,T^=i<<7|i>>>25,i=T+N|0,j^=i<<9|i>>>23,i=j+T|0,C^=i<<13|i>>>19,i=C+j|0,N^=i<<18|i>>>14;_=_+o|0,M=M+a|0,S=S+f|0,E=E+s|0,A=A+u|0,k=k+h|0,x=x+c|0,I=I+d|0,B=B+l|0,O=O+p|0,R=R+b|0,P=P+v|0,T=T+y|0,j=j+m|0,C=C+g|0,N=N+w|0,t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=M>>>0&255,t[5]=M>>>8&255,t[6]=M>>>16&255,t[7]=M>>>24&255,t[8]=S>>>0&255,t[9]=S>>>8&255,t[10]=S>>>16&255,t[11]=S>>>24&255,t[12]=E>>>0&255,t[13]=E>>>8&255,t[14]=E>>>16&255,t[15]=E>>>24&255,t[16]=A>>>0&255,t[17]=A>>>8&255,t[18]=A>>>16&255,t[19]=A>>>24&255,t[20]=k>>>0&255,t[21]=k>>>8&255,t[22]=k>>>16&255,t[23]=k>>>24&255,t[24]=x>>>0&255,t[25]=x>>>8&255,t[26]=x>>>16&255,t[27]=x>>>24&255,t[28]=I>>>0&255,t[29]=I>>>8&255,t[30]=I>>>16&255,t[31]=I>>>24&255,t[32]=B>>>0&255,t[33]=B>>>8&255,t[34]=B>>>16&255,t[35]=B>>>24&255,t[36]=O>>>0&255,t[37]=O>>>8&255,t[38]=O>>>16&255,t[39]=O>>>24&255,t[40]=R>>>0&255,t[41]=R>>>8&255,t[42]=R>>>16&255,t[43]=R>>>24&255,t[44]=P>>>0&255,t[45]=P>>>8&255,t[46]=P>>>16&255,t[47]=P>>>24&255,t[48]=T>>>0&255,t[49]=T>>>8&255,t[50]=T>>>16&255,t[51]=T>>>24&255,t[52]=j>>>0&255,t[53]=j>>>8&255,t[54]=j>>>16&255,t[55]=j>>>24&255,t[56]=C>>>0&255,t[57]=C>>>8&255,t[58]=C>>>16&255,t[59]=C>>>24&255,t[60]=N>>>0&255,t[61]=N>>>8&255,t[62]=N>>>16&255,t[63]=N>>>24&255}function f(t,e,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,f=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,s=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,u=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,h=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,l=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,b=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,v=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,y=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,m=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,g=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,M=a,S=f,E=s,A=u,k=h,x=c,I=d,B=l,O=p,R=b,P=v,T=y,j=m,C=g,N=w,L=0;L<20;L+=2)i=_+T|0,A^=i<<7|i>>>25,i=A+_|0,B^=i<<9|i>>>23,i=B+A|0,T^=i<<13|i>>>19,i=T+B|0,_^=i<<18|i>>>14,i=k+M|0,O^=i<<7|i>>>25,i=O+k|0,j^=i<<9|i>>>23,i=j+O|0,M^=i<<13|i>>>19,i=M+j|0,k^=i<<18|i>>>14,i=R+x|0,C^=i<<7|i>>>25,i=C+R|0,S^=i<<9|i>>>23,i=S+C|0,x^=i<<13|i>>>19,i=x+S|0,R^=i<<18|i>>>14,i=N+P|0,E^=i<<7|i>>>25,i=E+N|0,I^=i<<9|i>>>23,i=I+E|0,P^=i<<13|i>>>19,i=P+I|0,N^=i<<18|i>>>14,i=_+E|0,M^=i<<7|i>>>25,i=M+_|0,S^=i<<9|i>>>23,i=S+M|0,E^=i<<13|i>>>19,i=E+S|0,_^=i<<18|i>>>14,i=k+A|0,x^=i<<7|i>>>25,i=x+k|0,I^=i<<9|i>>>23,i=I+x|0,A^=i<<13|i>>>19,i=A+I|0,k^=i<<18|i>>>14,i=R+O|0,P^=i<<7|i>>>25,i=P+R|0,B^=i<<9|i>>>23,i=B+P|0,O^=i<<13|i>>>19,i=O+B|0,R^=i<<18|i>>>14,i=N+C|0,T^=i<<7|i>>>25,i=T+N|0,j^=i<<9|i>>>23,i=j+T|0,C^=i<<13|i>>>19,i=C+j|0,N^=i<<18|i>>>14;t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=k>>>0&255,t[5]=k>>>8&255,t[6]=k>>>16&255,t[7]=k>>>24&255,t[8]=R>>>0&255,t[9]=R>>>8&255,t[10]=R>>>16&255,t[11]=R>>>24&255,t[12]=N>>>0&255,t[13]=N>>>8&255,t[14]=N>>>16&255,t[15]=N>>>24&255,t[16]=x>>>0&255,t[17]=x>>>8&255,t[18]=x>>>16&255,t[19]=x>>>24&255,t[20]=I>>>0&255,t[21]=I>>>8&255,t[22]=I>>>16&255,t[23]=I>>>24&255,t[24]=B>>>0&255,t[25]=B>>>8&255,t[26]=B>>>16&255,t[27]=B>>>24&255,t[28]=O>>>0&255,t[29]=O>>>8&255,t[30]=O>>>16&255,t[31]=O>>>24&255}function s(t,e,r,n){a(t,e,r,n)}function u(t,e,r,n){f(t,e,r,n)}function h(t,e,r,n,i,o,a){var f,u,h=new Uint8Array(16),c=new Uint8Array(64);for(u=0;u<16;u++)h[u]=0;for(u=0;u<8;u++)h[u]=o[u];for(;i>=64;){for(s(c,h,a,dt),u=0;u<64;u++)t[e+u]=r[n+u]^c[u];for(f=1,u=8;u<16;u++)f=f+(255&h[u])|0,h[u]=255&f,f>>>=8;i-=64,e+=64,n+=64}if(i>0)for(s(c,h,a,dt),u=0;u<i;u++)t[e+u]=r[n+u]^c[u];return 0}function c(t,e,r,n,i){var o,a,f=new Uint8Array(16),u=new Uint8Array(64);for(a=0;a<16;a++)f[a]=0;for(a=0;a<8;a++)f[a]=n[a];for(;r>=64;){for(s(u,f,i,dt),a=0;a<64;a++)t[e+a]=u[a];for(o=1,a=8;a<16;a++)o=o+(255&f[a])|0,f[a]=255&o,o>>>=8;r-=64,e+=64}if(r>0)for(s(u,f,i,dt),a=0;a<r;a++)t[e+a]=u[a];return 0}function d(t,e,r,n,i){var o=new Uint8Array(32);u(o,n,i,dt);for(var a=new Uint8Array(8),f=0;f<8;f++)a[f]=n[f+16];return c(t,e,r,a,o)}function l(t,e,r,n,i,o,a){var f=new Uint8Array(32);u(f,o,a,dt);for(var s=new Uint8Array(8),c=0;c<8;c++)s[c]=o[c+16];return h(t,e,r,n,i,s,f)}function p(t,e,r,n,i,o){var a=new lt(o);return a.update(r,n,i),a.finish(t,e),0}function b(t,e,r,n,o,a){var f=new Uint8Array(16);return p(f,0,r,n,o,a),i(t,e,f,0)}function v(t,e,r,n,i){var o;if(r<32)return-1;for(l(t,0,e,0,r,n,i),p(t,16,t,32,r-32,t),o=0;o<16;o++)t[o]=0;return 0}function y(t,e,r,n,i){var o,a=new Uint8Array(32);if(r<32)return-1;if(d(a,0,32,n,i),0!==b(e,16,e,32,r-32,a))return-1;for(l(t,0,e,0,r,n,i),o=0;o<32;o++)t[o]=0;return 0}function m(t,e){var r;for(r=0;r<16;r++)t[r]=0|e[r]}function g(t){var e,r,n=1;for(e=0;e<16;e++)r=t[e]+n+65535,n=Math.floor(r/65536),t[e]=r-65536*n;t[0]+=n-1+37*(n-1)}function w(t,e,r){for(var n,i=~(r-1),o=0;o<16;o++)n=i&(t[o]^e[o]),t[o]^=n,e[o]^=n}function _(t,e){var r,n,i,o=tt(),a=tt();for(r=0;r<16;r++)a[r]=e[r];for(g(a),g(a),g(a),n=0;n<2;n++){for(o[0]=a[0]-65517,r=1;r<15;r++)o[r]=a[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),i=o[15]>>16&1,o[14]&=65535,w(a,o,1-i)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function M(t,e){var r=new Uint8Array(32),n=new Uint8Array(32);return _(r,t),_(n,e),o(r,0,n,0)}function S(t){var e=new Uint8Array(32);return _(e,t),1&e[0]}function E(t,e){var r;for(r=0;r<16;r++)t[r]=e[2*r]+(e[2*r+1]<<8);t[15]&=32767}function A(t,e,r){for(var n=0;n<16;n++)t[n]=e[n]+r[n]}function k(t,e,r){for(var n=0;n<16;n++)t[n]=e[n]-r[n]}function x(t,e,r){var n,i,o=0,a=0,f=0,s=0,u=0,h=0,c=0,d=0,l=0,p=0,b=0,v=0,y=0,m=0,g=0,w=0,_=0,M=0,S=0,E=0,A=0,k=0,x=0,I=0,B=0,O=0,R=0,P=0,T=0,j=0,C=0,N=r[0],L=r[1],U=r[2],z=r[3],D=r[4],q=r[5],F=r[6],K=r[7],G=r[8],V=r[9],H=r[10],X=r[11],Y=r[12],W=r[13],Z=r[14],J=r[15];n=e[0],o+=n*N,a+=n*L,f+=n*U,s+=n*z,u+=n*D,h+=n*q,c+=n*F,d+=n*K,l+=n*G,p+=n*V,b+=n*H,v+=n*X,y+=n*Y,m+=n*W,g+=n*Z,w+=n*J,n=e[1],a+=n*N,f+=n*L,s+=n*U,u+=n*z,h+=n*D,c+=n*q,d+=n*F,l+=n*K,p+=n*G,b+=n*V,v+=n*H,y+=n*X,m+=n*Y,g+=n*W,w+=n*Z,_+=n*J,n=e[2],f+=n*N,s+=n*L,u+=n*U,h+=n*z,c+=n*D,d+=n*q,l+=n*F,p+=n*K,b+=n*G,v+=n*V,y+=n*H,m+=n*X,g+=n*Y,w+=n*W,_+=n*Z,M+=n*J,n=e[3],s+=n*N,u+=n*L,h+=n*U,c+=n*z,d+=n*D,l+=n*q,p+=n*F,b+=n*K,v+=n*G,y+=n*V,m+=n*H,g+=n*X,w+=n*Y,_+=n*W,M+=n*Z,S+=n*J,n=e[4],u+=n*N,h+=n*L,c+=n*U,d+=n*z,l+=n*D,p+=n*q,b+=n*F,v+=n*K,y+=n*G,m+=n*V,g+=n*H,w+=n*X,_+=n*Y,M+=n*W,S+=n*Z,E+=n*J,n=e[5],h+=n*N,c+=n*L,d+=n*U,l+=n*z,p+=n*D,b+=n*q,v+=n*F,y+=n*K,m+=n*G,g+=n*V,w+=n*H,_+=n*X,M+=n*Y,S+=n*W,E+=n*Z,A+=n*J,n=e[6],c+=n*N,d+=n*L,l+=n*U,p+=n*z,b+=n*D,v+=n*q,y+=n*F,m+=n*K,g+=n*G,w+=n*V,_+=n*H,M+=n*X,S+=n*Y,E+=n*W,A+=n*Z,k+=n*J,n=e[7],d+=n*N,l+=n*L,p+=n*U,b+=n*z,v+=n*D,y+=n*q,m+=n*F,g+=n*K,w+=n*G,_+=n*V,M+=n*H,S+=n*X,E+=n*Y,A+=n*W,k+=n*Z,x+=n*J,n=e[8],l+=n*N,p+=n*L,b+=n*U,v+=n*z,y+=n*D,m+=n*q,g+=n*F,w+=n*K,_+=n*G,M+=n*V,S+=n*H,E+=n*X,A+=n*Y,k+=n*W,x+=n*Z,I+=n*J,n=e[9],p+=n*N,b+=n*L,v+=n*U,y+=n*z,m+=n*D,g+=n*q,w+=n*F,_+=n*K,M+=n*G,S+=n*V,E+=n*H,A+=n*X,k+=n*Y,x+=n*W,I+=n*Z,B+=n*J,n=e[10],b+=n*N,v+=n*L,y+=n*U,m+=n*z,g+=n*D,w+=n*q,_+=n*F,M+=n*K,S+=n*G,E+=n*V,A+=n*H,k+=n*X,x+=n*Y,I+=n*W,B+=n*Z,O+=n*J,n=e[11],v+=n*N,y+=n*L,m+=n*U,g+=n*z,w+=n*D,_+=n*q,M+=n*F,S+=n*K,E+=n*G,A+=n*V,k+=n*H,x+=n*X;I+=n*Y;B+=n*W,O+=n*Z,R+=n*J,n=e[12],y+=n*N,m+=n*L,g+=n*U,w+=n*z,_+=n*D,M+=n*q,S+=n*F,E+=n*K,A+=n*G,k+=n*V,x+=n*H,I+=n*X,B+=n*Y,O+=n*W,R+=n*Z,P+=n*J,n=e[13],m+=n*N,g+=n*L,w+=n*U,_+=n*z,M+=n*D,S+=n*q,E+=n*F,A+=n*K,k+=n*G,x+=n*V,I+=n*H,B+=n*X,O+=n*Y,R+=n*W,P+=n*Z,T+=n*J,n=e[14],g+=n*N,w+=n*L,_+=n*U,M+=n*z,S+=n*D,E+=n*q,A+=n*F,k+=n*K,x+=n*G,I+=n*V,B+=n*H,O+=n*X,R+=n*Y,P+=n*W,T+=n*Z,j+=n*J,n=e[15],w+=n*N,_+=n*L,M+=n*U,S+=n*z,E+=n*D,A+=n*q,k+=n*F,x+=n*K,I+=n*G,B+=n*V,O+=n*H,R+=n*X,P+=n*Y,T+=n*W,j+=n*Z,C+=n*J,o+=38*_,a+=38*M,f+=38*S,s+=38*E,u+=38*A,h+=38*k,c+=38*x,d+=38*I,l+=38*B,p+=38*O,b+=38*R,v+=38*P,y+=38*T,m+=38*j,g+=38*C,i=1,n=o+i+65535,i=Math.floor(n/65536),o=n-65536*i,n=a+i+65535,i=Math.floor(n/65536),a=n-65536*i,n=f+i+65535,i=Math.floor(n/65536),f=n-65536*i,n=s+i+65535,i=Math.floor(n/65536),s=n-65536*i,n=u+i+65535,i=Math.floor(n/65536),u=n-65536*i,n=h+i+65535,i=Math.floor(n/65536),h=n-65536*i,n=c+i+65535,i=Math.floor(n/65536),c=n-65536*i,n=d+i+65535,i=Math.floor(n/65536),d=n-65536*i,n=l+i+65535,i=Math.floor(n/65536),l=n-65536*i,n=p+i+65535,i=Math.floor(n/65536),p=n-65536*i,n=b+i+65535,i=Math.floor(n/65536),b=n-65536*i,n=v+i+65535,i=Math.floor(n/65536),v=n-65536*i,n=y+i+65535,i=Math.floor(n/65536),y=n-65536*i,n=m+i+65535,i=Math.floor(n/65536),m=n-65536*i,n=g+i+65535,i=Math.floor(n/65536),g=n-65536*i,n=w+i+65535,i=Math.floor(n/65536),w=n-65536*i,o+=i-1+37*(i-1),i=1,n=o+i+65535,i=Math.floor(n/65536),o=n-65536*i,n=a+i+65535,i=Math.floor(n/65536),a=n-65536*i,n=f+i+65535,i=Math.floor(n/65536),f=n-65536*i,n=s+i+65535,i=Math.floor(n/65536),s=n-65536*i,n=u+i+65535,i=Math.floor(n/65536),u=n-65536*i,n=h+i+65535,i=Math.floor(n/65536),h=n-65536*i,n=c+i+65535,i=Math.floor(n/65536),c=n-65536*i,n=d+i+65535,i=Math.floor(n/65536),d=n-65536*i,n=l+i+65535,i=Math.floor(n/65536),l=n-65536*i,n=p+i+65535,i=Math.floor(n/65536),p=n-65536*i,n=b+i+65535,i=Math.floor(n/65536),b=n-65536*i,n=v+i+65535,i=Math.floor(n/65536),v=n-65536*i,n=y+i+65535,i=Math.floor(n/65536),y=n-65536*i,n=m+i+65535,i=Math.floor(n/65536),m=n-65536*i,n=g+i+65535,i=Math.floor(n/65536),g=n-65536*i,n=w+i+65535,i=Math.floor(n/65536),w=n-65536*i,o+=i-1+37*(i-1),t[0]=o,t[1]=a,t[2]=f,t[3]=s,t[4]=u,t[5]=h,t[6]=c,t[7]=d,t[8]=l,t[9]=p,t[10]=b,t[11]=v,t[12]=y,t[13]=m;t[14]=g;t[15]=w}function I(t,e){x(t,e,e)}function B(t,e){var r,n=tt();for(r=0;r<16;r++)n[r]=e[r];for(r=253;r>=0;r--)I(n,n),2!==r&&4!==r&&x(n,n,e);for(r=0;r<16;r++)t[r]=n[r]}function O(t,e){var r,n=tt();for(r=0;r<16;r++)n[r]=e[r];for(r=250;r>=0;r--)I(n,n),1!==r&&x(n,n,e);for(r=0;r<16;r++)t[r]=n[r]}function R(t,e,r){var n,i,o=new Uint8Array(32),a=new Float64Array(80),f=tt(),s=tt(),u=tt(),h=tt(),c=tt(),d=tt();for(i=0;i<31;i++)o[i]=e[i];for(o[31]=127&e[31]|64,o[0]&=248,E(a,r),i=0;i<16;i++)s[i]=a[i],h[i]=f[i]=u[i]=0;for(f[0]=h[0]=1,i=254;i>=0;--i)n=o[i>>>3]>>>(7&i)&1,w(f,s,n),w(u,h,n),A(c,f,u),k(f,f,u),A(u,s,h),k(s,s,h),I(h,c),I(d,f),x(f,u,f),x(u,s,c),A(c,f,u),k(f,f,u),I(s,f),k(u,h,d),x(f,u,at),A(f,f,h),x(u,u,f),x(f,h,d),x(h,s,a),I(s,c),w(f,s,n),w(u,h,n);for(i=0;i<16;i++)a[i+16]=f[i],a[i+32]=u[i],a[i+48]=s[i],a[i+64]=h[i];var l=a.subarray(32),p=a.subarray(16);return B(l,l),x(p,p,l),_(t,p),0}function P(t,e){return R(t,e,nt)}function T(t,e){return et(e,32),P(t,e)}function j(t,e,r){var n=new Uint8Array(32);return R(n,r,e),u(t,rt,n,dt)}function C(t,e,r,n,i,o){var a=new Uint8Array(32);return j(a,i,o),pt(t,e,r,n,a)}function N(t,e,r,n,i,o){var a=new Uint8Array(32);return j(a,i,o),bt(t,e,r,n,a)}function L(t,e,r,n){for(var i,o,a,f,s,u,h,c,d,l,p,b,v,y,m,g,w,_,M,S,E,A,k,x,I,B,O=new Int32Array(16),R=new Int32Array(16),P=t[0],T=t[1],j=t[2],C=t[3],N=t[4],L=t[5],U=t[6],z=t[7],D=e[0],q=e[1],F=e[2],K=e[3],G=e[4],V=e[5],H=e[6],X=e[7],Y=0;n>=128;){for(M=0;M<16;M++)S=8*M+Y,O[M]=r[S+0]<<24|r[S+1]<<16|r[S+2]<<8|r[S+3],R[M]=r[S+4]<<24|r[S+5]<<16|r[S+6]<<8|r[S+7];for(M=0;M<80;M++)if(i=P,o=T,a=j,f=C,s=N,u=L,h=U,c=z,d=D,l=q,p=F,b=K,v=G,y=V,m=H,g=X,E=z,A=X,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=(N>>>14|G<<18)^(N>>>18|G<<14)^(G>>>9|N<<23),A=(G>>>14|N<<18)^(G>>>18|N<<14)^(N>>>9|G<<23),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=N&L^~N&U,A=G&V^~G&H,k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=vt[2*M],A=vt[2*M+1],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=O[M%16],A=R[M%16],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,w=65535&I|B<<16,_=65535&k|x<<16,E=w,A=_,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=(P>>>28|D<<4)^(D>>>2|P<<30)^(D>>>7|P<<25),A=(D>>>28|P<<4)^(P>>>2|D<<30)^(P>>>7|D<<25),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=P&T^P&j^T&j,A=D&q^D&F^q&F,k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,c=65535&I|B<<16,g=65535&k|x<<16,E=f,A=b,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=w,A=_,k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,f=65535&I|B<<16,b=65535&k|x<<16,T=i,j=o,C=a,N=f,L=s,U=u,z=h,P=c,q=d,F=l,K=p,G=b,V=v,H=y,X=m,D=g,M%16===15)for(S=0;S<16;S++)E=O[S],A=R[S],k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=O[(S+9)%16],A=R[(S+9)%16],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,w=O[(S+1)%16],_=R[(S+1)%16],E=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7,A=(_>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,w=O[(S+14)%16],_=R[(S+14)%16],E=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6,A=(_>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,O[S]=65535&I|B<<16,R[S]=65535&k|x<<16;E=P,A=D,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[0],A=e[0],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[0]=P=65535&I|B<<16,e[0]=D=65535&k|x<<16,E=T,A=q,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[1],A=e[1],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[1]=T=65535&I|B<<16,e[1]=q=65535&k|x<<16,E=j,A=F,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[2],A=e[2],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[2]=j=65535&I|B<<16,e[2]=F=65535&k|x<<16,E=C,A=K,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[3],A=e[3],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[3]=C=65535&I|B<<16,e[3]=K=65535&k|x<<16,E=N,A=G,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[4],A=e[4],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[4]=N=65535&I|B<<16,e[4]=G=65535&k|x<<16,E=L,A=V,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[5],A=e[5],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[5]=L=65535&I|B<<16,e[5]=V=65535&k|x<<16,E=U,A=H,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[6],A=e[6],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[6]=U=65535&I|B<<16,e[6]=H=65535&k|x<<16,E=z,A=X,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[7],A=e[7],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[7]=z=65535&I|B<<16,e[7]=X=65535&k|x<<16,Y+=128,n-=128}return n}function U(t,r,n){var i,o=new Int32Array(8),a=new Int32Array(8),f=new Uint8Array(256),s=n;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,a[0]=4089235720,a[1]=2227873595,a[2]=4271175723,a[3]=1595750129,a[4]=2917565137,a[5]=725511199,a[6]=4215389547,a[7]=327033209,L(o,a,r,n),n%=128,i=0;i<n;i++)f[i]=r[s-n+i];for(f[n]=128,n=256-128*(n<112?1:0),f[n-9]=0,e(f,n-8,s/536870912|0,s<<3),L(o,a,f,n),i=0;i<8;i++)e(t,8*i,o[i],a[i]);return 0}function z(t,e){var r=tt(),n=tt(),i=tt(),o=tt(),a=tt(),f=tt(),s=tt(),u=tt(),h=tt();k(r,t[1],t[0]),k(h,e[1],e[0]),x(r,r,h),A(n,t[0],t[1]),A(h,e[0],e[1]),x(n,n,h),x(i,t[3],e[3]),x(i,i,st),x(o,t[2],e[2]),A(o,o,o),k(a,n,r),k(f,o,i),A(s,o,i),A(u,n,r),x(t[0],a,f),x(t[1],u,s),x(t[2],s,f),x(t[3],a,u)}function D(t,e,r){var n;for(n=0;n<4;n++)w(t[n],e[n],r)}function q(t,e){var r=tt(),n=tt(),i=tt();B(i,e[2]),x(r,e[0],i),x(n,e[1],i),_(t,n),t[31]^=S(r)<<7}function F(t,e,r){var n,i;for(m(t[0],it),m(t[1],ot),m(t[2],ot),m(t[3],it),i=255;i>=0;--i)n=r[i/8|0]>>(7&i)&1,D(t,e,n),z(e,t),z(t,t),D(t,e,n)}function K(t,e){var r=[tt(),tt(),tt(),tt()];
m(r[0],ut),m(r[1],ht),m(r[2],ot),x(r[3],ut,ht),F(t,r,e)}function G(t,e,r){var n,i=new Uint8Array(64),o=[tt(),tt(),tt(),tt()];for(r||et(e,32),U(i,e,32),i[0]&=248,i[31]&=127,i[31]|=64,K(o,i),q(t,o),n=0;n<32;n++)e[n+32]=t[n];return 0}function V(t,e){var r,n,i,o;for(n=63;n>=32;--n){for(r=0,i=n-32,o=n-12;i<o;++i)e[i]+=r-16*e[n]*yt[i-(n-32)],r=e[i]+128>>8,e[i]-=256*r;e[i]+=r,e[n]=0}for(r=0,i=0;i<32;i++)e[i]+=r-(e[31]>>4)*yt[i],r=e[i]>>8,e[i]&=255;for(i=0;i<32;i++)e[i]-=r*yt[i];for(n=0;n<32;n++)e[n+1]+=e[n]>>8,t[n]=255&e[n]}function H(t){var e,r=new Float64Array(64);for(e=0;e<64;e++)r[e]=t[e];for(e=0;e<64;e++)t[e]=0;V(t,r)}function X(t,e,r,n){var i,o,a=new Uint8Array(64),f=new Uint8Array(64),s=new Uint8Array(64),u=new Float64Array(64),h=[tt(),tt(),tt(),tt()];U(a,n,32),a[0]&=248,a[31]&=127,a[31]|=64;var c=r+64;for(i=0;i<r;i++)t[64+i]=e[i];for(i=0;i<32;i++)t[32+i]=a[32+i];for(U(s,t.subarray(32),r+32),H(s),K(h,s),q(t,h),i=32;i<64;i++)t[i]=n[i];for(U(f,t,r+64),H(f),i=0;i<64;i++)u[i]=0;for(i=0;i<32;i++)u[i]=s[i];for(i=0;i<32;i++)for(o=0;o<32;o++)u[i+o]+=f[i]*a[o];return V(t.subarray(32),u),c}function Y(t,e){var r=tt(),n=tt(),i=tt(),o=tt(),a=tt(),f=tt(),s=tt();return m(t[2],ot),E(t[1],e),I(i,t[1]),x(o,i,ft),k(i,i,t[2]),A(o,t[2],o),I(a,o),I(f,a),x(s,f,a),x(r,s,i),x(r,r,o),O(r,r),x(r,r,i),x(r,r,o),x(r,r,o),x(t[0],r,o),I(n,t[0]),x(n,n,o),M(n,i)&&x(t[0],t[0],ct),I(n,t[0]),x(n,n,o),M(n,i)?-1:(S(t[0])===e[31]>>7&&k(t[0],it,t[0]),x(t[3],t[0],t[1]),0)}function W(t,e,r,n){var i,a,f=new Uint8Array(32),s=new Uint8Array(64),u=[tt(),tt(),tt(),tt()],h=[tt(),tt(),tt(),tt()];if(a=-1,r<64)return-1;if(Y(h,n))return-1;for(i=0;i<r;i++)t[i]=e[i];for(i=0;i<32;i++)t[i+32]=n[i];if(U(s,t,r),H(s),F(u,h,s),K(h,e.subarray(32)),z(u,h),q(f,u),r-=64,o(e,0,f,0)){for(i=0;i<r;i++)t[i]=0;return-1}for(i=0;i<r;i++)t[i]=e[i+64];return a=r}function Z(t,e){if(t.length!==mt)throw new Error("bad key size");if(e.length!==gt)throw new Error("bad nonce size")}function J(t,e){if(t.length!==Et)throw new Error("bad public key size");if(e.length!==At)throw new Error("bad secret key size")}function $(){var t,e;for(e=0;e<arguments.length;e++)if("[object Uint8Array]"!==(t=Object.prototype.toString.call(arguments[e])))throw new TypeError("unexpected type "+t+", use Uint8Array")}function Q(t){for(var e=0;e<t.length;e++)t[e]=0}var tt=function(t){var e,r=new Float64Array(16);if(t)for(e=0;e<t.length;e++)r[e]=t[e];return r},et=function(){throw new Error("no PRNG")},rt=new Uint8Array(16),nt=new Uint8Array(32);nt[0]=9;var it=tt(),ot=tt([1]),at=tt([56129,1]),ft=tt([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),st=tt([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),ut=tt([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),ht=tt([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),ct=tt([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]),dt=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]),lt=function(t){this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.leftover=0,this.fin=0;var e,r,n,i,o,a,f,s;e=255&t[0]|(255&t[1])<<8,this.r[0]=8191&e,r=255&t[2]|(255&t[3])<<8,this.r[1]=8191&(e>>>13|r<<3),n=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(r>>>10|n<<6),i=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(n>>>7|i<<9),o=255&t[8]|(255&t[9])<<8,this.r[4]=255&(i>>>4|o<<12),this.r[5]=o>>>1&8190,a=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(o>>>14|a<<2),f=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(a>>>11|f<<5),s=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(f>>>8|s<<8),this.r[9]=s>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};lt.prototype.blocks=function(t,e,r){for(var n,i,o,a,f,s,u,h,c,d,l,p,b,v,y,m,g,w,_,M=this.fin?0:2048,S=this.h[0],E=this.h[1],A=this.h[2],k=this.h[3],x=this.h[4],I=this.h[5],B=this.h[6],O=this.h[7],R=this.h[8],P=this.h[9],T=this.r[0],j=this.r[1],C=this.r[2],N=this.r[3],L=this.r[4],U=this.r[5],z=this.r[6],D=this.r[7],q=this.r[8],F=this.r[9];r>=16;)n=255&t[e+0]|(255&t[e+1])<<8,S+=8191&n,i=255&t[e+2]|(255&t[e+3])<<8,E+=8191&(n>>>13|i<<3),o=255&t[e+4]|(255&t[e+5])<<8,A+=8191&(i>>>10|o<<6),a=255&t[e+6]|(255&t[e+7])<<8,k+=8191&(o>>>7|a<<9),f=255&t[e+8]|(255&t[e+9])<<8,x+=8191&(a>>>4|f<<12),I+=f>>>1&8191,s=255&t[e+10]|(255&t[e+11])<<8,B+=8191&(f>>>14|s<<2),u=255&t[e+12]|(255&t[e+13])<<8,O+=8191&(s>>>11|u<<5),h=255&t[e+14]|(255&t[e+15])<<8,R+=8191&(u>>>8|h<<8),P+=h>>>5|M,c=0,d=c,d+=S*T,d+=E*(5*F),d+=A*(5*q),d+=k*(5*D),d+=x*(5*z),c=d>>>13,d&=8191,d+=I*(5*U),d+=B*(5*L),d+=O*(5*N),d+=R*(5*C),d+=P*(5*j),c+=d>>>13,d&=8191,l=c,l+=S*j,l+=E*T,l+=A*(5*F),l+=k*(5*q),l+=x*(5*D),c=l>>>13,l&=8191,l+=I*(5*z),l+=B*(5*U),l+=O*(5*L),l+=R*(5*N),l+=P*(5*C),c+=l>>>13,l&=8191,p=c,p+=S*C,p+=E*j,p+=A*T,p+=k*(5*F),p+=x*(5*q),c=p>>>13,p&=8191,p+=I*(5*D),p+=B*(5*z),p+=O*(5*U),p+=R*(5*L),p+=P*(5*N),c+=p>>>13,p&=8191,b=c,b+=S*N,b+=E*C,b+=A*j,b+=k*T,b+=x*(5*F),c=b>>>13,b&=8191,b+=I*(5*q),b+=B*(5*D),b+=O*(5*z),b+=R*(5*U),b+=P*(5*L),c+=b>>>13,b&=8191,v=c,v+=S*L,v+=E*N,v+=A*C,v+=k*j,v+=x*T,c=v>>>13,v&=8191,v+=I*(5*F),v+=B*(5*q),v+=O*(5*D),v+=R*(5*z),v+=P*(5*U),c+=v>>>13,v&=8191,y=c,y+=S*U,y+=E*L,y+=A*N,y+=k*C,y+=x*j,c=y>>>13,y&=8191,y+=I*T,y+=B*(5*F),y+=O*(5*q),y+=R*(5*D),y+=P*(5*z),c+=y>>>13,y&=8191,m=c,m+=S*z,m+=E*U,m+=A*L,m+=k*N,m+=x*C,c=m>>>13,m&=8191,m+=I*j,m+=B*T,m+=O*(5*F),m+=R*(5*q),m+=P*(5*D),c+=m>>>13,m&=8191,g=c,g+=S*D,g+=E*z,g+=A*U,g+=k*L,g+=x*N,c=g>>>13,g&=8191,g+=I*C,g+=B*j,g+=O*T,g+=R*(5*F),g+=P*(5*q),c+=g>>>13,g&=8191,w=c,w+=S*q,w+=E*D,w+=A*z,w+=k*U,w+=x*L,c=w>>>13,w&=8191,w+=I*N,w+=B*C,w+=O*j,w+=R*T,w+=P*(5*F),c+=w>>>13,w&=8191,_=c,_+=S*F,_+=E*q,_+=A*D,_+=k*z,_+=x*U,c=_>>>13,_&=8191,_+=I*L,_+=B*N,_+=O*C,_+=R*j,_+=P*T,c+=_>>>13,_&=8191,c=(c<<2)+c|0,c=c+d|0,d=8191&c,c>>>=13,l+=c,S=d,E=l,A=p,k=b,x=v,I=y,B=m,O=g,R=w,P=_,e+=16,r-=16;this.h[0]=S,this.h[1]=E,this.h[2]=A,this.h[3]=k,this.h[4]=x,this.h[5]=I,this.h[6]=B,this.h[7]=O,this.h[8]=R,this.h[9]=P},lt.prototype.finish=function(t,e){var r,n,i,o,a=new Uint16Array(10);if(this.leftover){for(o=this.leftover,this.buffer[o++]=1;o<16;o++)this.buffer[o]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,o=2;o<10;o++)this.h[o]+=r,r=this.h[o]>>>13,this.h[o]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,a[0]=this.h[0]+5,r=a[0]>>>13,a[0]&=8191,o=1;o<10;o++)a[o]=this.h[o]+r,r=a[o]>>>13,a[o]&=8191;for(a[9]-=8192,n=(1^r)-1,o=0;o<10;o++)a[o]&=n;for(n=~n,o=0;o<10;o++)this.h[o]=this.h[o]&n|a[o];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,o=1;o<8;o++)i=(this.h[o]+this.pad[o]|0)+(i>>>16)|0,this.h[o]=65535&i;t[e+0]=this.h[0]>>>0&255,t[e+1]=this.h[0]>>>8&255,t[e+2]=this.h[1]>>>0&255,t[e+3]=this.h[1]>>>8&255,t[e+4]=this.h[2]>>>0&255,t[e+5]=this.h[2]>>>8&255,t[e+6]=this.h[3]>>>0&255,t[e+7]=this.h[3]>>>8&255,t[e+8]=this.h[4]>>>0&255,t[e+9]=this.h[4]>>>8&255,t[e+10]=this.h[5]>>>0&255,t[e+11]=this.h[5]>>>8&255,t[e+12]=this.h[6]>>>0&255,t[e+13]=this.h[6]>>>8&255,t[e+14]=this.h[7]>>>0&255,t[e+15]=this.h[7]>>>8&255},lt.prototype.update=function(t,e,r){var n,i;if(this.leftover){for(i=16-this.leftover,i>r&&(i=r),n=0;n<i;n++)this.buffer[this.leftover+n]=t[e+n];if(r-=i,e+=i,this.leftover+=i,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(r>=16&&(i=r-r%16,this.blocks(t,e,i),e+=i,r-=i),r){for(n=0;n<r;n++)this.buffer[this.leftover+n]=t[e+n];this.leftover+=r}};var pt=v,bt=y,vt=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],yt=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),mt=32,gt=24,wt=32,_t=16,Mt=32,St=32,Et=32,At=32,kt=32,xt=gt,It=wt,Bt=_t,Ot=64,Rt=32,Pt=64,Tt=32,jt=64;t.lowlevel={crypto_core_hsalsa20:u,crypto_stream_xor:l,crypto_stream:d,crypto_stream_salsa20_xor:h,crypto_stream_salsa20:c,crypto_onetimeauth:p,crypto_onetimeauth_verify:b,crypto_verify_16:i,crypto_verify_32:o,crypto_secretbox:v,crypto_secretbox_open:y,crypto_scalarmult:R,crypto_scalarmult_base:P,crypto_box_beforenm:j,crypto_box_afternm:pt,crypto_box:C,crypto_box_open:N,crypto_box_keypair:T,crypto_hash:U,crypto_sign:X,crypto_sign_keypair:G,crypto_sign_open:W,crypto_secretbox_KEYBYTES:mt,crypto_secretbox_NONCEBYTES:gt,crypto_secretbox_ZEROBYTES:wt,crypto_secretbox_BOXZEROBYTES:_t,crypto_scalarmult_BYTES:Mt,crypto_scalarmult_SCALARBYTES:St,crypto_box_PUBLICKEYBYTES:Et,crypto_box_SECRETKEYBYTES:At,crypto_box_BEFORENMBYTES:kt,crypto_box_NONCEBYTES:xt,crypto_box_ZEROBYTES:It,crypto_box_BOXZEROBYTES:Bt,crypto_sign_BYTES:Ot,crypto_sign_PUBLICKEYBYTES:Rt,crypto_sign_SECRETKEYBYTES:Pt,crypto_sign_SEEDBYTES:Tt,crypto_hash_BYTES:jt},t.util||(t.util={},t.util.decodeUTF8=t.util.encodeUTF8=t.util.encodeBase64=t.util.decodeBase64=function(){throw new Error("nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js")}),t.randomBytes=function(t){var e=new Uint8Array(t);return et(e,t),e},t.secretbox=function(t,e,r){$(t,e,r),Z(r,e);for(var n=new Uint8Array(wt+t.length),i=new Uint8Array(n.length),o=0;o<t.length;o++)n[o+wt]=t[o];return v(i,n,n.length,e,r),i.subarray(_t)},t.secretbox.open=function(t,e,r){$(t,e,r),Z(r,e);for(var n=new Uint8Array(_t+t.length),i=new Uint8Array(n.length),o=0;o<t.length;o++)n[o+_t]=t[o];return!(n.length<32)&&(0===y(i,n,n.length,e,r)&&i.subarray(wt))},t.secretbox.keyLength=mt,t.secretbox.nonceLength=gt,t.secretbox.overheadLength=_t,t.scalarMult=function(t,e){if($(t,e),t.length!==St)throw new Error("bad n size");if(e.length!==Mt)throw new Error("bad p size");var r=new Uint8Array(Mt);return R(r,t,e),r},t.scalarMult.base=function(t){if($(t),t.length!==St)throw new Error("bad n size");var e=new Uint8Array(Mt);return P(e,t),e},t.scalarMult.scalarLength=St,t.scalarMult.groupElementLength=Mt,t.box=function(e,r,n,i){var o=t.box.before(n,i);return t.secretbox(e,r,o)},t.box.before=function(t,e){$(t,e),J(t,e);var r=new Uint8Array(kt);return j(r,t,e),r},t.box.after=t.secretbox,t.box.open=function(e,r,n,i){var o=t.box.before(n,i);return t.secretbox.open(e,r,o)},t.box.open.after=t.secretbox.open,t.box.keyPair=function(){var t=new Uint8Array(Et),e=new Uint8Array(At);return T(t,e),{publicKey:t,secretKey:e}},t.box.keyPair.fromSecretKey=function(t){if($(t),t.length!==At)throw new Error("bad secret key size");var e=new Uint8Array(Et);return P(e,t),{publicKey:e,secretKey:new Uint8Array(t)}},t.box.publicKeyLength=Et,t.box.secretKeyLength=At,t.box.sharedKeyLength=kt,t.box.nonceLength=xt,t.box.overheadLength=t.secretbox.overheadLength,t.sign=function(t,e){if($(t,e),e.length!==Pt)throw new Error("bad secret key size");var r=new Uint8Array(Ot+t.length);return X(r,t,t.length,e),r},t.sign.open=function(t,e){if(2!==arguments.length)throw new Error("nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?");if($(t,e),e.length!==Rt)throw new Error("bad public key size");var r=new Uint8Array(t.length),n=W(r,t,t.length,e);if(n<0)return null;for(var i=new Uint8Array(n),o=0;o<i.length;o++)i[o]=r[o];return i},t.sign.detached=function(e,r){for(var n=t.sign(e,r),i=new Uint8Array(Ot),o=0;o<i.length;o++)i[o]=n[o];return i},t.sign.detached.verify=function(t,e,r){if($(t,e,r),e.length!==Ot)throw new Error("bad signature size");if(r.length!==Rt)throw new Error("bad public key size");var n,i=new Uint8Array(Ot+t.length),o=new Uint8Array(Ot+t.length);for(n=0;n<Ot;n++)i[n]=e[n];for(n=0;n<t.length;n++)i[n+Ot]=t[n];return W(o,i,i.length,r)>=0},t.sign.keyPair=function(){var t=new Uint8Array(Rt),e=new Uint8Array(Pt);return G(t,e),{publicKey:t,secretKey:e}},t.sign.keyPair.fromSecretKey=function(t){if($(t),t.length!==Pt)throw new Error("bad secret key size");for(var e=new Uint8Array(Rt),r=0;r<e.length;r++)e[r]=t[32+r];return{publicKey:e,secretKey:new Uint8Array(t)}},t.sign.keyPair.fromSeed=function(t){if($(t),t.length!==Tt)throw new Error("bad seed size");for(var e=new Uint8Array(Rt),r=new Uint8Array(Pt),n=0;n<32;n++)r[n]=t[n];return G(e,r,!0),{publicKey:e,secretKey:r}},t.sign.publicKeyLength=Rt,t.sign.secretKeyLength=Pt,t.sign.seedLength=Tt,t.sign.signatureLength=Ot,t.hash=function(t){$(t);var e=new Uint8Array(jt);return U(e,t,t.length),e},t.hash.hashLength=jt,t.verify=function(t,e){return $(t,e),0!==t.length&&0!==e.length&&(t.length===e.length&&0===n(t,0,e,0,t.length))},t.setPRNG=function(t){et=t},function(){var e="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(e&&e.getRandomValues){var n=65536;t.setPRNG(function(t,r){var i,o=new Uint8Array(r);for(i=0;i<r;i+=n)e.getRandomValues(o.subarray(i,i+Math.min(r-i,n)));for(i=0;i<r;i++)t[i]=o[i];Q(o)})}else e=r(608),e&&e.randomBytes&&t.setPRNG(function(t,r){var n,i=e.randomBytes(r);for(n=0;n<r;n++)t[n]=i[n];Q(i)})}()}("undefined"!=typeof t&&t.exports?t.exports:self.nacl=self.nacl||{})},function(t,e){},function(t,e){"use strict";function r(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function n(t){return 3*t.length/4-r(t)}function i(t){var e,n,i,o,a,f,s=t.length;a=r(t),f=new h(3*s/4-a),i=a>0?s-4:s;var c=0;for(e=0,n=0;e<i;e+=4,n+=3)o=u[t.charCodeAt(e)]<<18|u[t.charCodeAt(e+1)]<<12|u[t.charCodeAt(e+2)]<<6|u[t.charCodeAt(e+3)],f[c++]=o>>16&255,f[c++]=o>>8&255,f[c++]=255&o;return 2===a?(o=u[t.charCodeAt(e)]<<2|u[t.charCodeAt(e+1)]>>4,f[c++]=255&o):1===a&&(o=u[t.charCodeAt(e)]<<10|u[t.charCodeAt(e+1)]<<4|u[t.charCodeAt(e+2)]>>2,f[c++]=o>>8&255,f[c++]=255&o),f}function o(t){return s[t>>18&63]+s[t>>12&63]+s[t>>6&63]+s[63&t]}function a(t,e,r){for(var n,i=[],a=e;a<r;a+=3)n=(t[a]<<16)+(t[a+1]<<8)+t[a+2],i.push(o(n));return i.join("")}function f(t){for(var e,r=t.length,n=r%3,i="",o=[],f=16383,u=0,h=r-n;u<h;u+=f)o.push(a(t,u,u+f>h?h:u+f));return 1===n?(e=t[r-1],i+=s[e>>2],i+=s[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=s[e>>10],i+=s[e>>4&63],i+=s[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=n,e.toByteArray=i,e.fromByteArray=f;for(var s=[],u=[],h="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,l=c.length;d<l;++d)s[d]=c[d],u[c.charCodeAt(d)]=d;u["-".charCodeAt(0)]=62,u["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,a,f=8*i-n-1,s=(1<<f)-1,u=s>>1,h=-7,c=r?i-1:0,d=r?-1:1,l=t[e+c];for(c+=d,o=l&(1<<-h)-1,l>>=-h,h+=f;h>0;o=256*o+t[e+c],c+=d,h-=8);for(a=o&(1<<-h)-1,o>>=-h,h+=n;h>0;a=256*a+t[e+c],c+=d,h-=8);if(0===o)o=1-u;else{if(o===s)return a?NaN:(l?-1:1)*(1/0);a+=Math.pow(2,n),o-=u}return(l?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,f,s,u=8*o-i-1,h=(1<<u)-1,c=h>>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(f=isNaN(e)?1:0,a=h):(a=Math.floor(Math.log(e)/Math.LN2),e*(s=Math.pow(2,-a))<1&&(a--,s*=2),e+=a+c>=1?d/s:d*Math.pow(2,1-c),e*s>=2&&(a++,s/=2),a+c>=h?(f=0,a=h):a+c>=1?(f=(e*s-1)*Math.pow(2,i),a+=c):(f=e*Math.pow(2,c-1)*Math.pow(2,i),a=0));i>=8;t[r+l]=255&f,l+=p,f/=256,i-=8);for(a=a<<i|f,u+=i;u>0;t[r+l]=255&a,l+=p,a/=256,u-=8);t[r+l-p]|=128*b}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){function n(t,e){var r,n;if(t=t.toLowerCase(),d[t])r=d[t].key,n=d[t].iv;else{if(!c[t])throw new TypeError("invalid suite type");r=8*c[t].key,n=c[t].iv}var i=s(e,!1,r,n);return o(t,i.key,i.iv)}function i(t,e){var r,n;if(t=t.toLowerCase(),d[t])r=d[t].key,n=d[t].iv;else{if(!c[t])throw new TypeError("invalid suite type");r=8*c[t].key,n=c[t].iv}var i=s(e,!1,r,n);return a(t,i.key,i.iv)}function o(t,e,r){if(t=t.toLowerCase(),d[t])return u.createCipheriv(t,e,r);if(c[t])return new h({key:e,iv:r,mode:t});throw new TypeError("invalid suite type")}function a(t,e,r){if(t=t.toLowerCase(),d[t])return u.createDecipheriv(t,e,r);if(c[t])return new h({key:e,iv:r,mode:t,decrypt:!0});throw new TypeError("invalid suite type")}function f(){return Object.keys(c).concat(u.getCiphers())}var s=r(146),u=r(494),h=r(498),c=r(499),d=r(95);e.createCipher=e.Cipher=n,e.createCipheriv=e.Cipheriv=o,e.createDecipher=e.Decipher=i,e.createDecipheriv=e.Decipheriv=a,e.listCiphers=e.getCiphers=f},function(t,e,r){function n(){return Object.keys(a)}var i=r(496);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv;var o=r(495);e.createDecipher=e.Decipher=o.createDecipher,e.createDecipheriv=e.Decipheriv=o.createDecipheriv;var a=r(95);e.listCiphers=e.getCiphers=n},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._last=void 0,this._cipher=new s.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(t){for(var e=t[15],r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}function a(e,r,i){var o=c[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(b[o.mode],r,i,!0):"auth"===o.type?new l(b[o.mode],r,i,!0):new n(b[o.mode],r,i)}function f(t,e){var r=c[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=p(e,!1,r.key,r.iv);return a(t,n.key,n.iv)}var s=r(94),u=r(97),h=r(2),c=r(95),d=r(210),l=r(203),p=r(146);h(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return o(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},i.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:r(208),CBC:r(204),CFB:r(205),CFB8:r(207),CFB1:r(206),OFB:r(209),CTR:r(96),GCM:r(96)};e.createDecipher=f,e.createDecipheriv=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(s.call(this),this._cache=new i,this._cipher=new f.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function a(t,e){var r=h[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(e,!1,r.key,r.iv);return o(t,n.key,n.iv)}var f=r(94),s=r(97),u=r(2),h=r(95),c=r(146),d=r(210),l=r(203);u(n,s),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if("10101010101010101010101010101010"!==t.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++n<e;)r.writeUInt8(e,n);var i=t.concat([this.cache,r]);return i};var p={ECB:r(208),CBC:r(204),CFB:r(205),CFB8:r(207),CFB1:r(206),OFB:r(209),CTR:r(96),GCM:r(96)};e.createCipheriv=o,e.createCipher=a}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){this.h=t,this.state=new e(16),this.state.fill(0),this.cache=new e("")}function n(t){return[t.readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)]}function i(t){t=t.map(o);var r=new e(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r}function o(t){var e,r;return e=t>s||t<0?(r=Math.abs(t)%s,t<0?s-r:r):t}function a(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}var f=new e(16);f.fill(0),t.exports=r,r.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},r.prototype._multiply=function(){for(var t,e,r,o=n(this.h),f=[0,0,0,0],s=-1;++s<128;){for(e=0!==(this.state[~~(s/8)]&1<<7-s%8),e&&(f=a(f,o)),r=0!==(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(f)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype.final=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,f],16)),this.ghash(i([0,t,0,r])),this.state};var s=Math.pow(2,32)}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this);var r,n=t.mode.toLowerCase(),o=f[n];r=t.decrypt?"decrypt":"encrypt";var a=t.key;"des-ede"!==n&&"des-ede-cbc"!==n||(a=e.concat([a,a.slice(0,8)]));var s=t.iv;this._des=o.create({key:a,iv:s,type:r})}var i=r(500),o=r(145),a=r(2),f={"des-ede3-cbc":o.CBC.instantiate(o.EDE),"des-ede3":o.EDE,"des-ede-cbc":o.CBC.instantiate(o.EDE),"des-ede":o.EDE,"des-cbc":o.CBC.instantiate(o.DES),"des-ecb":o.DES};f.des=f["des-cbc"],f.des3=f["des-ede3-cbc"],t.exports=n,a(n,i),n.prototype._update=function(t){return new e(this._des.update(t))},n.prototype._final=function(){return new e(this._des.final())}}).call(e,r(1).Buffer)},function(t,e){e["des-ecb"]={key:8,iv:0},e["des-cbc"]=e.des={key:8,iv:8},e["des-ede3-cbc"]=e.des3={key:24,iv:8},e["des-ede3"]={key:24,iv:0},e["des-ede-cbc"]={key:16,iv:8},e["des-ede"]={key:16,iv:0}},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t){o.equal(t.length,8,"Invalid IV length"),this.iv=new Array(8);for(var e=0;e<this.iv.length;e++)this.iv[e]=t[e]}function i(t){function e(e){t.call(this,e),this._cbcInit()}a(e,t);for(var r=Object.keys(f),n=0;n<r.length;n++){var i=r[n];e.prototype[i]=f[i]}return e.create=function(t){return new e(t)},e}var o=r(98),a=r(2),f={};e.instantiate=i,f._cbcInit=function(){var t=new n(this.options.iv);this._cbcState=t},f._update=function(t,e,r,n){var i=this._cbcState,o=this.constructor.super_.prototype,a=i.iv;if("encrypt"===this.type){for(var f=0;f<this.blockSize;f++)a[f]^=t[e+f];o._update.call(this,a,0,r,n);for(var f=0;f<this.blockSize;f++)a[f]=r[n+f]}else{o._update.call(this,t,e,r,n);for(var f=0;f<this.blockSize;f++)r[n+f]^=a[f];for(var f=0;f<this.blockSize;f++)a[f]=t[e+f]}}},function(t,e,r){"use strict";function n(t){this.options=t,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}var i=r(98);t.exports=n,n.prototype._init=function(){},n.prototype.update=function(t){return 0===t.length?[]:"decrypt"===this.type?this._updateDecrypt(t):this._updateEncrypt(t)},n.prototype._buffer=function(t,e){for(var r=Math.min(this.buffer.length-this.bufferOff,t.length-e),n=0;n<r;n++)this.buffer[this.bufferOff+n]=t[e+n];return this.bufferOff+=r,r},n.prototype._flushBuffer=function(t,e){return this._update(this.buffer,0,t,e),this.bufferOff=0,this.blockSize},n.prototype._updateEncrypt=function(t){var e=0,r=0,n=(this.bufferOff+t.length)/this.blockSize|0,i=new Array(n*this.blockSize);0!==this.bufferOff&&(e+=this._buffer(t,e),this.bufferOff===this.buffer.length&&(r+=this._flushBuffer(i,r)));for(var o=t.length-(t.length-e)%this.blockSize;e<o;e+=this.blockSize)this._update(t,e,i,r),r+=this.blockSize;for(;e<t.length;e++,this.bufferOff++)this.buffer[this.bufferOff]=t[e];return i},n.prototype._updateDecrypt=function(t){for(var e=0,r=0,n=Math.ceil((this.bufferOff+t.length)/this.blockSize)-1,i=new Array(n*this.blockSize);n>0;n--)e+=this._buffer(t,e),r+=this._flushBuffer(i,r);return e+=this._buffer(t,e),i},n.prototype.final=function(t){var e;t&&(e=this.update(t));var r;return r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),e?e.concat(r):r},n.prototype._pad=function(t,e){if(0===e)return!1;for(;e<t.length;)t[e++]=0;return!0},n.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var t=new Array(this.blockSize);return this._update(this.buffer,0,t,0),t},n.prototype._unpad=function(t){return t},n.prototype._finalDecrypt=function(){i.equal(this.bufferOff,this.blockSize,"Not enough data to decrypt");var t=new Array(this.blockSize);return this._flushBuffer(t,0),this._unpad(t)}},function(t,e,r){"use strict";function n(){this.tmp=new Array(2),this.keys=null}function i(t){u.call(this,t);var e=new n;this._desState=e,this.deriveKeys(e,t.key)}var o=r(98),a=r(2),f=r(145),s=f.utils,u=f.Cipher;a(i,u),t.exports=i,i.create=function(t){return new i(t)};var h=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];i.prototype.deriveKeys=function(t,e){t.keys=new Array(32),o.equal(e.length,this.blockSize,"Invalid key length");var r=s.readUInt32BE(e,0),n=s.readUInt32BE(e,4);s.pc1(r,n,t.tmp,0),r=t.tmp[0],n=t.tmp[1];for(var i=0;i<t.keys.length;i+=2){var a=h[i>>>1];r=s.r28shl(r,a),n=s.r28shl(n,a),s.pc2(r,n,t.keys,i)}},i.prototype._update=function(t,e,r,n){var i=this._desState,o=s.readUInt32BE(t,e),a=s.readUInt32BE(t,e+4);s.ip(o,a,i.tmp,0),o=i.tmp[0],a=i.tmp[1],"encrypt"===this.type?this._encrypt(i,o,a,i.tmp,0):this._decrypt(i,o,a,i.tmp,0),o=i.tmp[0],a=i.tmp[1],s.writeUInt32BE(r,o,n),s.writeUInt32BE(r,a,n+4)},i.prototype._pad=function(t,e){for(var r=t.length-e,n=e;n<t.length;n++)t[n]=r;return!0},i.prototype._unpad=function(t){for(var e=t[t.length-1],r=t.length-e;r<t.length;r++)o.equal(t[r],e);return t.slice(0,t.length-e)},i.prototype._encrypt=function(t,e,r,n,i){for(var o=e,a=r,f=0;f<t.keys.length;f+=2){var u=t.keys[f],h=t.keys[f+1];s.expand(a,t.tmp,0),u^=t.tmp[0],h^=t.tmp[1];var c=s.substitute(u,h),d=s.permute(c),l=a;a=(o^d)>>>0,o=l}s.rip(a,o,n,i)},i.prototype._decrypt=function(t,e,r,n,i){for(var o=r,a=e,f=t.keys.length-2;f>=0;f-=2){var u=t.keys[f],h=t.keys[f+1];s.expand(o,t.tmp,0),u^=t.tmp[0],h^=t.tmp[1];var c=s.substitute(u,h),d=s.permute(c),l=o;o=(a^d)>>>0,a=l}s.rip(o,a,n,i)}},function(t,e,r){"use strict";function n(t,e){o.equal(e.length,24,"Invalid key length");var r=e.slice(0,8),n=e.slice(8,16),i=e.slice(16,24);"encrypt"===t?this.ciphers=[u.create({type:"encrypt",key:r}),u.create({type:"decrypt",key:n}),u.create({type:"encrypt",key:i})]:this.ciphers=[u.create({type:"decrypt",key:i}),u.create({type:"encrypt",key:n}),u.create({type:"decrypt",key:r})]}function i(t){s.call(this,t);var e=new n(this.type,this.options.key);this._edeState=e}var o=r(98),a=r(2),f=r(145),s=f.Cipher,u=f.DES;a(i,s),t.exports=i,i.create=function(t){return new i(t)},i.prototype._update=function(t,e,r,n){var i=this._edeState;i.ciphers[0]._update(t,e,r,n),i.ciphers[1]._update(r,n,r,n),i.ciphers[2]._update(r,n,r,n)},i.prototype._pad=u.prototype._pad,i.prototype._unpad=u.prototype._unpad},function(t,e){"use strict";e.readUInt32BE=function(t,e){var r=t[0+e]<<24|t[1+e]<<16|t[2+e]<<8|t[3+e];return r>>>0},e.writeUInt32BE=function(t,e,r){t[0+r]=e>>>24,t[1+r]=e>>>16&255,t[2+r]=e>>>8&255,t[3+r]=255&e},e.ip=function(t,e,r,n){for(var i=0,o=0,a=6;a>=0;a-=2){for(var f=0;f<=24;f+=8)i<<=1,i|=e>>>f+a&1;for(var f=0;f<=24;f+=8)i<<=1,i|=t>>>f+a&1}for(var a=6;a>=0;a-=2){for(var f=1;f<=25;f+=8)o<<=1,o|=e>>>f+a&1;for(var f=1;f<=25;f+=8)o<<=1,o|=t>>>f+a&1}r[n+0]=i>>>0,r[n+1]=o>>>0},e.rip=function(t,e,r,n){for(var i=0,o=0,a=0;a<4;a++)for(var f=24;f>=0;f-=8)i<<=1,i|=e>>>f+a&1,i<<=1,i|=t>>>f+a&1;for(var a=4;a<8;a++)for(var f=24;f>=0;f-=8)o<<=1,o|=e>>>f+a&1,o<<=1,o|=t>>>f+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},e.pc1=function(t,e,r,n){for(var i=0,o=0,a=7;a>=5;a--){
for(var f=0;f<=24;f+=8)i<<=1,i|=e>>f+a&1;for(var f=0;f<=24;f+=8)i<<=1,i|=t>>f+a&1}for(var f=0;f<=24;f+=8)i<<=1,i|=e>>f+a&1;for(var a=1;a<=3;a++){for(var f=0;f<=24;f+=8)o<<=1,o|=e>>f+a&1;for(var f=0;f<=24;f+=8)o<<=1,o|=t>>f+a&1}for(var f=0;f<=24;f+=8)o<<=1,o|=t>>f+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},e.r28shl=function(t,e){return t<<e&268435455|t>>>28-e};var r=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];e.pc2=function(t,e,n,i){for(var o=0,a=0,f=r.length>>>1,s=0;s<f;s++)o<<=1,o|=t>>>r[s]&1;for(var s=f;s<r.length;s++)a<<=1,a|=e>>>r[s]&1;n[i+0]=o>>>0,n[i+1]=a>>>0},e.expand=function(t,e,r){var n=0,i=0;n=(1&t)<<5|t>>>27;for(var o=23;o>=15;o-=4)n<<=6,n|=t>>>o&63;for(var o=11;o>=3;o-=4)i|=t>>>o&63,i<<=6;i|=(31&t)<<1|t>>>31,e[r+0]=n>>>0,e[r+1]=i>>>0};var n=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];e.substitute=function(t,e){for(var r=0,i=0;i<4;i++){var o=t>>>18-6*i&63,a=n[64*i+o];r<<=4,r|=a}for(var i=0;i<4;i++){var o=e>>>18-6*i&63,a=n[256+64*i+o];r<<=4,r|=a}return r>>>0};var i=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];e.permute=function(t){for(var e=0,r=0;r<i.length;r++)e<<=1,e|=t>>>i[r]&1;return e>>>0},e.padSplit=function(t,e,r){for(var n=t.toString(2);n.length<e;)n="0"+n;for(var i=[],o=0;o<e;o+=r)i.push(n.slice(o,o+r));return i.join(" ")}},function(t,e,r){(function(e){function n(t){c.Writable.call(this);var e=l[t];if(!e)throw new Error("Unknown message digest");this._hashType=e.hash,this._hash=s(e.hash),this._tag=e.id,this._signType=e.sign}function i(t){c.Writable.call(this);var e=l[t];if(!e)throw new Error("Unknown message digest");this._hash=s(e.hash),this._tag=e.id,this._signType=e.sign}function o(t){return new n(t)}function a(t){return new i(t)}var f=r(211),s=r(59),u=r(2),h=r(542),c=r(31),d=r(543),l={};Object.keys(f).forEach(function(t){l[t]=l[t.toLowerCase()]=f[t]}),u(n,c.Writable),n.prototype._write=function(t,e,r){this._hash.update(t),r()},n.prototype.update=function(t,r){return"string"==typeof t&&(t=new e(t,r)),this._hash.update(t),this},n.prototype.sign=function(t,r){this.end();var n=this._hash.digest(),i=h(e.concat([this._tag,n]),t,this._hashType,this._signType);return r?i.toString(r):i},u(i,c.Writable),i.prototype._write=function(t,e,r){this._hash.update(t),r()},i.prototype.update=function(t,r){return"string"==typeof t&&(t=new e(t,r)),this._hash.update(t),this},i.prototype.verify=function(t,r,n){"string"==typeof r&&(r=new e(r,n)),this.end();var i=this._hash.digest();return d(r,e.concat([this._tag,i]),t,this._signType)},t.exports={Sign:o,Verify:a,createSign:o,createVerify:a}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){var e=o(t),r=e.toRed(a.mont(t.modulus)).redPow(new a(t.publicExponent)).fromRed();return{blinder:r,unblinder:e.invm(t.modulus)}}function i(t,r){var i=n(r),o=r.modulus.byteLength(),f=(a.mont(r.modulus),new a(t).mul(i.blinder).umod(r.modulus)),s=f.toRed(a.mont(r.prime1)),u=f.toRed(a.mont(r.prime2)),h=r.coefficient,c=r.prime1,d=r.prime2,l=s.redPow(r.exponent1),p=u.redPow(r.exponent2);l=l.fromRed(),p=p.fromRed();var b=l.isub(p).imul(h).umod(c);return b.imul(d),p.iadd(b),new e(p.imul(i.unblinder).umod(r.modulus).toArray(!1,o))}function o(t){for(var e=t.modulus.byteLength(),r=new a(f(e));r.cmp(t.modulus)>=0||!r.umod(t.prime1)||!r.umod(t.prime2);)r=new a(f(e));return r}var a=r(18),f=r(61);t.exports=i,i.getr=o}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){this.type=t,this.p=new o(e.p,16),this.red=e.prime?o.red(e.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=e.n&&new o(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function i(t,e){this.curve=t,this.type=e,this.precomputed=null}var o=r(18),a=r(19),f=a.utils,s=f.getNAF,u=f.getJSF,h=f.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(t,e){h(t.precomputed);var r=t._getDoubles(),n=s(e,1),i=(1<<r.step+1)-(r.step%2===0?2:1);i/=3;for(var o=[],a=0;a<n.length;a+=r.step){for(var f=0,e=a+r.step-1;e>=a;e--)f=(f<<1)+n[e];o.push(f)}for(var u=this.jpoint(null,null,null),c=this.jpoint(null,null,null),d=i;d>0;d--){for(var a=0;a<o.length;a++){var f=o[a];f===d?c=c.mixedAdd(r.points[a]):f===-d&&(c=c.mixedAdd(r.points[a].neg()))}u=u.add(c)}return u.toP()},n.prototype._wnafMul=function(t,e){var r=4,n=t._getNAFPoints(r);r=n.wnd;for(var i=n.points,o=s(e,r),a=this.jpoint(null,null,null),f=o.length-1;f>=0;f--){for(var e=0;f>=0&&0===o[f];f--)e++;if(f>=0&&e++,a=a.dblp(e),f<0)break;var u=o[f];h(0!==u),a="affine"===t.type?u>0?a.mixedAdd(i[u-1>>1]):a.mixedAdd(i[-u-1>>1].neg()):u>0?a.add(i[u-1>>1]):a.add(i[-u-1>>1].neg())}return"affine"===t.type?a.toP():a},n.prototype._wnafMulAdd=function(t,e,r,n,i){for(var o=this._wnafT1,a=this._wnafT2,f=this._wnafT3,h=0,c=0;c<n;c++){var d=e[c],l=d._getNAFPoints(t);o[c]=l.wnd,a[c]=l.points}for(var c=n-1;c>=1;c-=2){var p=c-1,b=c;if(1===o[p]&&1===o[b]){var v=[e[p],null,null,e[b]];0===e[p].y.cmp(e[b].y)?(v[1]=e[p].add(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg())):0===e[p].y.cmp(e[b].y.redNeg())?(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].add(e[b].neg())):(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],m=u(r[p],r[b]);h=Math.max(m[0].length,h),f[p]=new Array(h),f[b]=new Array(h);for(var g=0;g<h;g++){var w=0|m[0][g],_=0|m[1][g];f[p][g]=y[3*(w+1)+(_+1)],f[b][g]=0,a[p]=v}}else f[p]=s(r[p],o[p]),f[b]=s(r[b],o[b]),h=Math.max(f[p].length,h),h=Math.max(f[b].length,h)}for(var M=this.jpoint(null,null,null),S=this._wnafT4,c=h;c>=0;c--){for(var E=0;c>=0;){for(var A=!0,g=0;g<n;g++)S[g]=0|f[g][c],0!==S[g]&&(A=!1);if(!A)break;E++,c--}if(c>=0&&E++,M=M.dblp(E),c<0)break;for(var g=0;g<n;g++){var d,k=S[g];0!==k&&(k>0?d=a[g][k-1>>1]:k<0&&(d=a[g][-k-1>>1].neg()),M="affine"===d.type?M.mixedAdd(d):M.add(d))}}for(var c=0;c<n;c++)a[c]=null;return i?M:M.toP()},n.BasePoint=i,i.prototype.eq=function(){throw new Error("Not implemented")},i.prototype.validate=function(){return this.curve.validate(this)},n.prototype.decodePoint=function(t,e){t=f.toArray(t,e);var r=this.p.byteLength();if((4===t[0]||6===t[0]||7===t[0])&&t.length-1===2*r){6===t[0]?h(t[t.length-1]%2===0):7===t[0]&&h(t[t.length-1]%2===1);var n=this.point(t.slice(1,1+r),t.slice(1+r,1+2*r));return n}if((2===t[0]||3===t[0])&&t.length-1===r)return this.pointFromX(t.slice(1,1+r),3===t[0]);throw new Error("Unknown point format")},i.prototype.encodeCompressed=function(t){return this.encode(t,!0)},i.prototype._encode=function(t){var e=this.curve.p.byteLength(),r=this.getX().toArray("be",e);return t?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",e))},i.prototype.encode=function(t,e){return f.encode(this._encode(e),t)},i.prototype.precompute=function(t){if(this.precomputed)return this;var e={doubles:null,naf:null,beta:null};return e.naf=this._getNAFPoints(8),e.doubles=this._getDoubles(4,t),e.beta=this._getBeta(),this.precomputed=e,this},i.prototype._hasDoubles=function(t){if(!this.precomputed)return!1;var e=this.precomputed.doubles;return!!e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)},i.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i<e;i+=t){for(var o=0;o<t;o++)n=n.dbl();r.push(n)}return{step:t,points:r}},i.prototype._getNAFPoints=function(t){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var e=[this],r=(1<<t)-1,n=1===r?null:this.dbl(),i=1;i<r;i++)e[i]=e[i-1].add(n);return{wnd:t,points:e}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(t){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}},function(t,e,r){"use strict";function n(t){this.twisted=1!==(0|t.a),this.mOneA=this.twisted&&(0|t.a)===-1,this.extended=this.mOneA,u.call(this,"edwards",t),this.a=new f(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new f(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new f(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|t.c)}function i(t,e,r,n,i){u.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new f(e,16),this.y=new f(r,16),this.z=n?new f(n,16):this.curve.one,this.t=i&&new f(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=r(99),a=r(19),f=r(18),s=r(2),u=o.base,h=a.utils.assert;s(n,u),t.exports=n,n.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},n.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},n.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},n.prototype.pointFromX=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=n.redMul(i.redInvm()),a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var s=a.fromRed().isOdd();return(e&&!s||!e&&s)&&(a=a.redNeg()),this.point(t,a)},n.prototype.pointFromY=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.one),i=r.redMul(this.d).redAdd(this.one),o=n.redMul(i.redInvm());if(0===o.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return a.isOdd()!==e&&(a=a.redNeg()),this.point(a,t)},n.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},s(i,u.BasePoint),n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},n.prototype.point=function(t,e,r,n){return new i(this,t,e,r,n)},i.fromJSON=function(t,e){return new i(t,e[0],e[1],e[2])},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),a=o.redSub(r),f=n.redSub(e),s=i.redMul(a),u=o.redMul(f),h=i.redMul(f),c=a.redMul(o);return this.curve.point(s,u,c,h)},i.prototype._projDbl=function(){var t,e,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=this.curve._mulA(i),f=a.redAdd(o);if(this.zOne)t=n.redSub(i).redSub(o).redMul(f.redSub(this.curve.two)),e=f.redMul(a.redSub(o)),r=f.redSqr().redSub(f).redSub(f);else{var s=this.z.redSqr(),u=f.redSub(s).redISub(s);t=n.redSub(i).redISub(o).redMul(u),e=f.redMul(a.redSub(o)),r=f.redMul(u)}}else{var a=i.redAdd(o),s=this.curve._mulC(this.c.redMul(this.z)).redSqr(),u=a.redSub(s).redSub(s);t=this.curve._mulC(n.redISub(a)).redMul(u),e=this.curve._mulC(a).redMul(i.redISub(o)),r=a.redMul(u)}return this.curve.point(t,e,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),a=i.redSub(n),f=i.redAdd(n),s=r.redAdd(e),u=o.redMul(a),h=f.redMul(s),c=o.redMul(s),d=a.redMul(f);return this.curve.point(u,h,d,c)},i.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),a=this.y.redMul(t.y),f=this.curve.d.redMul(o).redMul(a),s=i.redSub(f),u=i.redAdd(f),h=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(a),c=n.redMul(s).redMul(h);return this.curve.twisted?(e=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=s.redMul(u)):(e=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(s).redMul(u)),this.curve.point(c,e,r)},i.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},i.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},i.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},i.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},i.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}return!1},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},function(t,e,r){"use strict";function n(t){s.call(this,"mont",t),this.a=new a(t.a,16).toRed(this.red),this.b=new a(t.b,16).toRed(this.red),this.i4=new a(4).toRed(this.red).redInvm(),this.two=new a(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function i(t,e,r){s.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new a(e,16),this.z=new a(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var o=r(99),a=r(18),f=r(2),s=o.base,u=r(19),h=u.utils;f(n,s),t.exports=n,n.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e),i=n.redSqrt();return 0===i.redSqr().cmp(n)},f(i,s.BasePoint),n.prototype.decodePoint=function(t,e){return this.point(h.toArray(t,e),1)},n.prototype.point=function(t,e){return new i(this,t,e)},n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},i.prototype.precompute=function(){},i.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},i.fromJSON=function(t,e){return new i(t,e[0],e[1]||t.one)},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},i.prototype.dbl=function(){var t=this.x.redAdd(this.z),e=t.redSqr(),r=this.x.redSub(this.z),n=r.redSqr(),i=e.redSub(n),o=e.redMul(n),a=i.redMul(n.redAdd(this.curve.a24.redMul(i)));return this.curve.point(o,a)},i.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z),a=o.redMul(r),f=i.redMul(n),s=e.z.redMul(a.redAdd(f).redSqr()),u=e.x.redMul(a.redISub(f).redSqr());return this.curve.point(s,u)},i.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==e.cmpn(0);e.iushrn(1))o.push(e.andln(1));for(var a=o.length-1;a>=0;a--)0===o[a]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},i.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},i.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";function n(t){h.call(this,"short",t),this.a=new s(t.a,16).toRed(this.red),this.b=new s(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(t,e,r,n){h.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(e,16),this.y=new s(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(t,e,r,n){h.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(e,16),this.y=new s(r,16),this.z=new s(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var a=r(99),f=r(19),s=r(18),u=r(2),h=a.base,c=f.utils.assert;u(n,h),t.exports=n,n.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new s(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=n[0].cmp(n[1])<0?n[0]:n[1],e=e.toRed(this.red)}if(t.lambda)r=new s(t.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(e))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}var o;return o=t.basis?t.basis.map(function(t){return{a:new s(t.a,16),b:new s(t.b,16)}}):this._getEndoBasis(r),{beta:e,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:s.mont(t),r=new s(2).toRed(e).redInvm(),n=r.redNeg(),i=new s(3).toRed(e).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),a=n.redSub(i).fromRed();return[o,a]},n.prototype._getEndoBasis=function(t){for(var e,r,n,i,o,a,f,u,h,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=t,l=this.n.clone(),p=new s(1),b=new s(0),v=new s(0),y=new s(1),m=0;0!==d.cmpn(0);){var g=l.div(d);u=l.sub(g.mul(d)),h=v.sub(g.mul(p));var w=y.sub(g.mul(b));if(!n&&u.cmp(c)<0)e=f.neg(),r=p,n=u.neg(),i=h;else if(n&&2===++m)break;f=u,l=d,d=u,v=p,p=h,y=b,b=w}o=u.neg(),a=h;var _=n.sqr().add(i.sqr()),M=o.sqr().add(a.sqr());return M.cmp(_)>=0&&(o=e,a=r),n.negative&&(n=n.neg(),i=i.neg()),o.negative&&(o=o.neg(),a=a.neg()),[{a:n,b:i},{a:o,b:a}]},n.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),a=i.mul(r.a),f=o.mul(n.a),s=i.mul(r.b),u=o.mul(n.b),h=t.sub(a).sub(f),c=s.add(u).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(t,e){t=new s(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},n.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o<t.length;o++){var a=this._endoSplit(e[o]),f=t[o],s=f._getBeta();a.k1.negative&&(a.k1.ineg(),f=f.neg(!0)),a.k2.negative&&(a.k2.ineg(),s=s.neg(!0)),n[2*o]=f,n[2*o+1]=s,i[2*o]=a.k1,i[2*o+1]=a.k2}for(var u=this._wnafMulAdd(1,n,i,2*o,r),h=0;h<2*o;h++)n[h]=null,i[h]=null;return u},u(i,h.BasePoint),n.prototype.point=function(t,e,r){return new i(this,t,e,r)},n.prototype.pointFromJSON=function(t,e){return i.fromJSON(this,t,e)},i.prototype._getBeta=function(){if(this.curve.endo){var t=this.precomputed;if(t&&t.beta)return t.beta;var e=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(t){var r=this.curve,n=function(t){return r.point(t.x.redMul(r.endo.beta),t.y)};t.beta=e,e.precomputed={beta:null,naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(n)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(n)}}}return e}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(t,e,r){function n(e){return t.point(e[0],e[1],r)}"string"==typeof e&&(e=JSON.parse(e));var i=t.point(e[0],e[1],r);if(!e[2])return i;var o=e[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(t){return t=new s(t,16),this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},i.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},i.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var t=this.curve.jpoint(this.x,this.y,this.curve.one);return t},u(o,h.BasePoint),n.prototype.jpoint=function(t,e,r){return new o(this,t,e,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),f=n.redSub(i),s=o.redSub(a);if(0===f.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=f.redSqr(),h=u.redMul(f),c=n.redMul(u),d=s.redSqr().redIAdd(h).redISub(c).redISub(c),l=s.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(t.z).redMul(f);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),a=r.redSub(n),f=i.redSub(o);if(0===a.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=a.redSqr(),u=s.redMul(a),h=r.redMul(s),c=f.redSqr().redIAdd(u).redISub(h).redISub(h),d=f.redMul(h.redISub(c)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,a=this.y,f=this.z,s=f.redSqr().redSqr(),u=a.redAdd(a),r=0;r<t;r++){var h=o.redSqr(),c=u.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(s)),p=o.redMul(c),b=l.redSqr().redISub(p.redAdd(p)),v=p.redISub(b),y=l.redMul(v);y=y.redIAdd(y).redISub(d);var m=u.redMul(f);r+1<t&&(s=s.redMul(d)),o=b,f=m,u=y}return this.curve.jpoint(o,u.redMul(i),f)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n),s=f.redSqr().redISub(a).redISub(a),u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),t=s,e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),b=p.redSqr(),v=d.redIAdd(d);v=v.redIAdd(v),v=v.redIAdd(v),t=b.redISub(l).redISub(l),e=p.redMul(l.redISub(t)).redISub(v),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(t,e,r)},o.prototype._threeDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),s=f.redSqr().redISub(a).redISub(a);t=s;var u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var b=p.redAdd(p);t=l.redSqr().redISub(b),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var v=c.redSqr();v=v.redIAdd(v),v=v.redIAdd(v),v=v.redIAdd(v),e=l.redMul(p.redISub(t)).redISub(v)}return this.curve.jpoint(t,e,r)},o.prototype._dbl=function(){var t=this.curve.a,e=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=e.redSqr(),a=r.redSqr(),f=o.redAdd(o).redIAdd(o).redIAdd(t.redMul(i)),s=e.redAdd(e);s=s.redIAdd(s);var u=s.redMul(a),h=f.redSqr().redISub(u.redAdd(u)),c=u.redISub(h),d=a.redSqr();d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=f.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr(),n=e.redSqr(),i=t.redAdd(t).redIAdd(t),o=i.redSqr(),a=this.x.redAdd(e).redSqr().redISub(t).redISub(n);a=a.redIAdd(a),a=a.redAdd(a).redIAdd(a),a=a.redISub(o);var f=a.redSqr(),s=n.redIAdd(n);s=s.redIAdd(s),s=s.redIAdd(s),s=s.redIAdd(s);var u=i.redIAdd(a).redSqr().redISub(o).redISub(f).redISub(s),h=e.redMul(u);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(f).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(u.redMul(s.redISub(u)).redISub(a.redMul(f)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(a).redSqr().redISub(r).redISub(f);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(t,e){return t=new s(t,e),this.curve._wnafMul(this,t)},o.prototype.eq=function(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;var e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;var n=e.redMul(this.z),i=r.redMul(t.z);return 0===this.y.redMul(i).redISub(t.y.redMul(n)).cmpn(0)},o.prototype.eqXToP=function(t){var e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;for(var n=t.clone(),i=this.curve.redN.redMul(e);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}return!1},o.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";function n(t){"short"===t.type?this.curve=new f.curve.short(t):"edwards"===t.type?this.curve=new f.curve.edwards(t):this.curve=new f.curve.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function i(t,e){Object.defineProperty(o,t,{configurable:!0,enumerable:!0,get:function(){var r=new n(e);return Object.defineProperty(o,t,{configurable:!0,enumerable:!0,value:r}),r}})}var o=e,a=r(49),f=r(19),s=f.utils.assert;o.PresetCurve=n,i("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),i("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),i("p256",{
type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),i("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),i("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),i("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["9"]}),i("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var u;try{u=r(520)}catch(t){u=void 0}i("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",u]})},function(t,e,r){"use strict";function n(t){return this instanceof n?("string"==typeof t&&(f(o.curves.hasOwnProperty(t),"Unknown curve "+t),t=o.curves[t]),t instanceof o.curves.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),void(this.hash=t.hash||t.curve.hash)):new n(t)}var i=r(18),o=r(19),a=o.utils,f=a.assert,s=r(514),u=r(515);t.exports=n,n.prototype.keyPair=function(t){return new s(this,t)},n.prototype.keyFromPrivate=function(t,e){return s.fromPrivate(this,t,e)},n.prototype.keyFromPublic=function(t,e){return s.fromPublic(this,t,e)},n.prototype.genKeyPair=function(t){t||(t={});for(var e=new o.hmacDRBG({hash:this.hash,pers:t.pers,entropy:t.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var a=new i(e.generate(r));if(!(a.cmp(n)>0))return a.iaddn(1),this.keyFromPrivate(a)}},n.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},n.prototype.sign=function(t,e,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new i(t,16));for(var a=this.n.byteLength(),f=e.getPrivate().toArray("be",a),s=t.toArray("be",a),h=new o.hmacDRBG({hash:this.hash,entropy:f,nonce:s,pers:n.pers,persEnc:n.persEnc}),c=this.n.sub(new i(1)),d=0;!0;d++){var l=n.k?n.k(d):new i(h.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(c)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),v=b.umod(this.n);if(0!==v.cmpn(0)){var y=l.invm(this.n).mul(v.mul(e.getPrivate()).iadd(t));if(y=y.umod(this.n),0!==y.cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==b.cmp(v)?2:0);return n.canonical&&y.cmp(this.nh)>0&&(y=this.n.sub(y),m^=1),new u({r:v,s:y,recoveryParam:m})}}}}}},n.prototype.verify=function(t,e,r,n){t=this._truncateToN(new i(t,16)),r=this.keyFromPublic(r,n),e=new u(e,"hex");var o=e.r,a=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var f=a.invm(this.n),s=f.mul(t).umod(this.n),h=f.mul(o).umod(this.n);if(!this.curve._maxwellTrick){var c=this.g.mulAdd(s,r.getPublic(),h);return!c.isInfinity()&&0===c.getX().umod(this.n).cmp(o)}var c=this.g.jmulAdd(s,r.getPublic(),h);return!c.isInfinity()&&c.eqXToP(o)},n.prototype.recoverPubKey=function(t,e,r,n){f((3&r)===r,"The recovery param is more than two bits"),e=new u(e,n);var o=this.n,a=new i(t),s=e.r,h=e.s,c=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var l=e.r.invm(o),p=o.sub(a).mul(l).umod(o),b=h.mul(l).umod(o);return this.g.mulAdd(p,s,b)},n.prototype.getKeyRecoveryParam=function(t,e,r,n){if(e=new u(e,n),null!==e.recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";function n(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}var i=r(18);t.exports=n,n.fromPublic=function(t,e,r){return e instanceof n?e:new n(t,{pub:e,pubEnc:r})},n.fromPrivate=function(t,e,r){return e instanceof n?e:new n(t,{priv:e,privEnc:r})},n.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},n.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(t,e){this.priv=new i(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(t,e){return t.x||t.y?void(this.pub=this.ec.curve.point(t.x,t.y)):void(this.pub=this.ec.curve.decodePoint(t,e))},n.prototype.derive=function(t){return t.mul(this.priv).getX()},n.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},n.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},n.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(t,e,r){"use strict";function n(t,e){return t instanceof n?t:void(this._importDER(t,e)||(c(t.r&&t.s,"Signature without r or s"),this.r=new s(t.r,16),this.s=new s(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam))}function i(){this.place=0}function o(t,e){var r=t[e.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=e.place;o<n;o++,a++)i<<=8,i|=t[a];return e.place=a,i}function a(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)}function f(t,e){if(e<128)return void t.push(e);var r=1+(Math.log(e)/Math.LN2>>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}var s=r(18),u=r(19),h=u.utils,c=h.assert;t.exports=n,n.prototype._importDER=function(t,e){t=h.toArray(t,e);var r=new i;if(48!==t[r.place++])return!1;var n=o(t,r);if(n+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var a=o(t,r),f=t.slice(r.place,a+r.place);if(r.place+=a,2!==t[r.place++])return!1;var u=o(t,r);if(t.length!==u+r.place)return!1;var c=t.slice(r.place,u+r.place);return 0===f[0]&&128&f[1]&&(f=f.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new s(f),this.s=new s(c),this.recoveryParam=null,!0},n.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=a(e),r=a(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];f(n,e.length),n=n.concat(e),n.push(2),f(n,r.length);var i=n.concat(r),o=[48];return f(o,i.length),o=o.concat(i),h.encode(o,t)}},function(t,e,r){"use strict";function n(t){if(f("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof n))return new n(t);var t=o.curves[t].curve;this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}var i=r(49),o=r(19),a=o.utils,f=a.assert,s=a.parseBytes,u=r(517),h=r(518);t.exports=n,n.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},n.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S()),a=e.R().add(n.pub().mul(i));return a.eq(o)},n.prototype.hashInt=function(){for(var t=this.hash(),e=0;e<arguments.length;e++)t.update(arguments[e]);return a.intFromLE(t.digest()).umod(this.curve.n)},n.prototype.keyFromPublic=function(t){return u.fromPublic(this,t)},n.prototype.keyFromSecret=function(t){return u.fromSecret(this,t)},n.prototype.makeSignature=function(t){return t instanceof h?t:new h(this,t)},n.prototype.encodePoint=function(t){var e=t.getY().toArray("le",this.encodingLength);return e[this.encodingLength-1]|=t.getX().isOdd()?128:0,e},n.prototype.decodePoint=function(t){t=a.parseBytes(t);var e=t.length-1,r=t.slice(0,e).concat(t[e]&-129),n=0!==(128&t[e]),i=a.intFromLE(r);return this.curve.pointFromY(i,n)},n.prototype.encodeInt=function(t){return t.toArray("le",this.encodingLength)},n.prototype.decodeInt=function(t){return a.intFromLE(t)},n.prototype.isPoint=function(t){return t instanceof this.pointClass}},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,this._secret=f(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=f(e.pub)}var i=r(19),o=i.utils,a=o.assert,f=o.parseBytes,s=o.cachedProperty;n.fromPublic=function(t,e){return e instanceof n?e:new n(t,{pub:e})},n.fromSecret=function(t,e){return e instanceof n?e:new n(t,{secret:e})},n.prototype.secret=function(){return this._secret},s(n,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),s(n,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),s(n,"privBytes",function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,n=e.slice(0,t.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n}),s(n,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),s(n,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),s(n,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),n.prototype.sign=function(t){return a(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},n.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},n.prototype.getSecret=function(t){return a(this._secret,"KeyPair is public only"),o.encode(this.secret(),t)},n.prototype.getPublic=function(t){return o.encode(this.pubBytes(),t)},t.exports=n},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,"object"!=typeof e&&(e=u(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),f(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof i&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}var i=r(18),o=r(19),a=o.utils,f=a.assert,s=a.cachedProperty,u=a.parseBytes;s(n,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),s(n,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),s(n,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),s(n,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),n.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},n.prototype.toHex=function(){return a.encode(this.toBytes(),"hex").toUpperCase()},t.exports=n},function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=a.toArray(t.entropy,t.entropyEnc),r=a.toArray(t.nonce,t.nonceEnc),i=a.toArray(t.pers,t.persEnc);f(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}var i=r(49),o=r(19),a=o.utils,f=a.assert;t.exports=n,n.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i<this.V.length;i++)this.K[i]=0,this.V[i]=1;this._update(n),this.reseed=1,this.reseedInterval=281474976710656},n.prototype._hmac=function(){return new i.hmac(this.hash,this.K)},n.prototype._update=function(t){var e=this._hmac().update(this.V).update([0]);t&&(e=e.update(t)),this.K=e.digest(),this.V=this._hmac().update(this.V).digest(),t&&(this.K=this._hmac().update(this.V).update([1]).update(t).digest(),this.V=this._hmac().update(this.V).digest())},n.prototype.reseed=function(t,e,r,n){"string"!=typeof e&&(n=r,r=e,e=null),t=a.toBuffer(t,e),r=a.toBuffer(r,n),f(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this.reseed=1},n.prototype.generate=function(t,e,r,n){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=a.toArray(r,n),this._update(r));for(var i=[];i.length<t;)this.V=this._hmac().update(this.V).digest(),i=i.concat(this.V);var o=i.slice(0,t);return this._update(r),this.reseed++,a.encode(o,e)}},function(t,e){t.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]
}}},function(t,e,r){"use strict";function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t){for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}return r}function i(t){return 1===t.length?"0"+t:t}function o(t){for(var e="",r=0;r<t.length;r++)e+=i(t[r].toString(16));return e}function a(t,e){for(var r=[],n=1<<e+1,i=t.clone();i.cmpn(1)>=0;){var o;if(i.isOdd()){var a=i.andln(n-1);o=a>(n>>1)-1?(n>>1)-a:a,i.isubn(o)}else o=0;r.push(o);for(var f=0!==i.cmpn(0)&&0===i.andln(n-1)?e+1:1,s=1;s<f;s++)r.push(0);i.iushrn(f)}return r}function f(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n=0,i=0;t.cmpn(-n)>0||e.cmpn(-i)>0;){var o=t.andln(3)+n&3,a=e.andln(3)+i&3;3===o&&(o=-1),3===a&&(a=-1);var f;if(0===(1&o))f=0;else{var s=t.andln(7)+n&7;f=3!==s&&5!==s||2!==a?o:-o}r[0].push(f);var u;if(0===(1&a))u=0;else{var s=e.andln(7)+i&7;u=3!==s&&5!==s||2!==o?a:-a}r[1].push(u),2*n===f+1&&(n=1-n),2*i===u+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r}function s(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}}function u(t){return"string"==typeof t?c.toArray(t,"hex"):t}function h(t){return new d(t,"hex","le")}var c=e,d=r(18);c.assert=function(t,e){if(!t)throw new Error(e||"Assertion failed")},c.toArray=n,c.zero2=i,c.toHex=o,c.encode=function(t,e){return"hex"===e?o(t):t},c.getNAF=a,c.getJSF=f,c.cachedProperty=s,c.parseBytes=u,c.intFromLE=h},function(t,e,r){function n(t){this.rand=t}var i;if(t.exports=function(t){return i||(i=new n(null)),i.generate(t)},t.exports.Rand=n,n.prototype.generate=function(t){return this._rand(t)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.crypto.getRandomValues(e),e}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.msCrypto.getRandomValues(e),e}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=r(609);n.prototype._rand=function(t){return o.randomBytes(t)}}catch(t){n.prototype._rand=function(t){for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e}}},function(t,e,r){function n(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var i=r(49),o=i.utils,a=o.assert;e.BlockHash=n,n.prototype.update=function(t,e){if(t=o.toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=o.join32(t,0,t.length-r,this.endian);for(var n=0;n<t.length;n+=this._delta32)this._update(t,n,n+this._delta32)}return this},n.prototype.digest=function(t){return this.update(this._pad()),a(null===this.pending),this._digest(t)},n.prototype._pad=function(){var t=this.pendingTotal,e=this._delta8,r=e-(t+this.padLength)%e,n=new Array(r+this.padLength);n[0]=128;for(var i=1;i<r;i++)n[i]=0;if(t<<=3,"big"===this.endian){for(var o=8;o<this.padLength;o++)n[i++]=0;n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=t>>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else{n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0;for(var o=8;o<this.padLength;o++)n[i++]=0}return n}},function(t,e,r){function n(t,e,r){return this instanceof n?(this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,void this._init(o.toArray(e,r))):new n(t,e,r)}var i=r(49),o=i.utils,a=o.assert;t.exports=n,n.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),a(t.length<=this.blockSize);for(var e=t.length;e<this.blockSize;e++)t.push(0);for(var e=0;e<t.length;e++)t[e]^=54;this.inner=(new this.Hash).update(t);for(var e=0;e<t.length;e++)t[e]^=106;this.outer=(new this.Hash).update(t)},n.prototype.update=function(t,e){return this.inner.update(t,e),this},n.prototype.digest=function(t){return this.outer.update(this.inner.digest()),this.outer.digest(t)}},function(t,e,r){function n(){return this instanceof n?(l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.endian="little")):new n}function i(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}function o(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function a(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}var f=r(49),s=f.utils,u=s.rotl32,h=s.sum32,c=s.sum32_3,d=s.sum32_4,l=f.common.BlockHash;s.inherits(n,l),e.ripemd160=n,n.blockSize=512,n.outSize=160,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.h[0],n=this.h[1],f=this.h[2],s=this.h[3],l=this.h[4],m=r,g=n,w=f,_=s,M=l,S=0;S<80;S++){var E=h(u(d(r,i(S,n,f,s),t[p[S]+e],o(S)),v[S]),l);r=l,l=s,s=u(f,10),f=n,n=E,E=h(u(d(m,i(79-S,g,w,_),t[b[S]+e],a(S)),y[S]),M),m=M,M=_,_=u(w,10),w=g,g=E}E=c(this.h[1],f,_),this.h[1]=c(this.h[2],s,M),this.h[2]=c(this.h[3],l,m),this.h[3]=c(this.h[4],r,g),this.h[4]=c(this.h[0],n,w),this.h[0]=E},n.prototype._digest=function(t){return"hex"===t?s.toHex32(this.h,"little"):s.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],b=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],v=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],y=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(t,e,r){function n(){return this instanceof n?(X.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Y,void(this.W=new Array(64))):new n}function i(){return this instanceof i?(n.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new i}function o(){return this instanceof o?(X.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=W,void(this.W=new Array(160))):new o}function a(){return this instanceof a?(o.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new a}function f(){return this instanceof f?(X.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new f}function s(t,e,r){return t&e^~t&r}function u(t,e,r){return t&e^t&r^e&r}function h(t,e,r){return t^e^r}function c(t){return R(t,2)^R(t,13)^R(t,22)}function d(t){return R(t,6)^R(t,11)^R(t,25)}function l(t){return R(t,7)^R(t,18)^t>>>3}function p(t){return R(t,17)^R(t,19)^t>>>10}function b(t,e,r,n){return 0===t?s(e,r,n):1===t||3===t?h(e,r,n):2===t?u(e,r,n):void 0}function v(t,e,r,n,i,o){var a=t&r^~t&i;return a<0&&(a+=4294967296),a}function y(t,e,r,n,i,o){var a=e&n^~e&o;return a<0&&(a+=4294967296),a}function m(t,e,r,n,i,o){var a=t&r^t&i^r&i;return a<0&&(a+=4294967296),a}function g(t,e,r,n,i,o){var a=e&n^e&o^n&o;return a<0&&(a+=4294967296),a}function w(t,e){var r=N(t,e,28),n=N(e,t,2),i=N(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function _(t,e){var r=L(t,e,28),n=L(e,t,2),i=L(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function M(t,e){var r=N(t,e,14),n=N(t,e,18),i=N(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function S(t,e){var r=L(t,e,14),n=L(t,e,18),i=L(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function E(t,e){var r=N(t,e,1),n=N(t,e,8),i=U(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function A(t,e){var r=L(t,e,1),n=L(t,e,8),i=z(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function k(t,e){var r=N(t,e,19),n=N(e,t,29),i=U(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}function x(t,e){var r=L(t,e,19),n=L(e,t,29),i=z(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}var I=r(49),B=I.utils,O=B.assert,R=B.rotr32,P=B.rotl32,T=B.sum32,j=B.sum32_4,C=B.sum32_5,N=B.rotr64_hi,L=B.rotr64_lo,U=B.shr64_hi,z=B.shr64_lo,D=B.sum64,q=B.sum64_hi,F=B.sum64_lo,K=B.sum64_4_hi,G=B.sum64_4_lo,V=B.sum64_5_hi,H=B.sum64_5_lo,X=I.common.BlockHash,Y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],W=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];B.inherits(n,X),e.sha256=n,n.blockSize=512,n.outSize=256,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=j(p(r[n-2]),r[n-7],l(r[n-15]),r[n-16]);var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],h=this.h[4],b=this.h[5],v=this.h[6],y=this.h[7];O(this.k.length===r.length);for(var n=0;n<r.length;n++){var m=C(y,d(h),s(h,b,v),this.k[n],r[n]),g=T(c(i),u(i,o,a));y=v,v=b,b=h,h=T(f,m),f=a,a=o,o=i,i=T(m,g)}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],h),this.h[5]=T(this.h[5],b),this.h[6]=T(this.h[6],v),this.h[7]=T(this.h[7],y)},n.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(i,n),e.sha224=i,i.blockSize=512,i.outSize=224,i.hmacStrength=192,i.padLength=64,i.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,7),"big"):B.split32(this.h.slice(0,7),"big")},B.inherits(o,X),e.sha512=o,o.blockSize=1024,o.outSize=512,o.hmacStrength=192,o.padLength=128,o.prototype._prepareBlock=function(t,e){for(var r=this.W,n=0;n<32;n++)r[n]=t[e+n];for(;n<r.length;n+=2){var i=k(r[n-4],r[n-3]),o=x(r[n-4],r[n-3]),a=r[n-14],f=r[n-13],s=E(r[n-30],r[n-29]),u=A(r[n-30],r[n-29]),h=r[n-32],c=r[n-31];r[n]=K(i,o,a,f,s,u,h,c),r[n+1]=G(i,o,a,f,s,u,h,c)}},o.prototype._update=function(t,e){this._prepareBlock(t,e);var r=this.W,n=this.h[0],i=this.h[1],o=this.h[2],a=this.h[3],f=this.h[4],s=this.h[5],u=this.h[6],h=this.h[7],c=this.h[8],d=this.h[9],l=this.h[10],p=this.h[11],b=this.h[12],E=this.h[13],A=this.h[14],k=this.h[15];O(this.k.length===r.length);for(var x=0;x<r.length;x+=2){var I=A,B=k,R=M(c,d),P=S(c,d),T=v(c,d,l,p,b,E),j=y(c,d,l,p,b,E),C=this.k[x],N=this.k[x+1],L=r[x],U=r[x+1],z=V(I,B,R,P,T,j,C,N,L,U),K=H(I,B,R,P,T,j,C,N,L,U),I=w(n,i),B=_(n,i),R=m(n,i,o,a,f,s),P=g(n,i,o,a,f,s),G=q(I,B,R,P),X=F(I,B,R,P);A=b,k=E,b=l,E=p,l=c,p=d,c=q(u,h,z,K),d=F(h,h,z,K),u=f,h=s,f=o,s=a,o=n,a=i,n=q(z,K,G,X),i=F(z,K,G,X)}D(this.h,0,n,i),D(this.h,2,o,a),D(this.h,4,f,s),D(this.h,6,u,h),D(this.h,8,c,d),D(this.h,10,l,p),D(this.h,12,b,E),D(this.h,14,A,k)},o.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(a,o),e.sha384=a,a.blockSize=1024,a.outSize=384,a.hmacStrength=192,a.padLength=128,a.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,12),"big"):B.split32(this.h.slice(0,12),"big")},B.inherits(f,X),e.sha1=f,f.blockSize=512,f.outSize=160,f.hmacStrength=80,f.padLength=64,f.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=P(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);for(var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],s=this.h[4],n=0;n<r.length;n++){var u=~~(n/20),h=C(P(i,5),b(u,o,a,f),s,r[n],Z[u]);s=f,f=a,a=P(o,30),o=i,i=h}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],s)},f.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")}},function(t,e,r){function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}else for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}function i(t){for(var e="",r=0;r<t.length;r++)e+=f(t[r].toString(16));return e}function o(t){var e=t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24;return e>>>0}function a(t,e){for(var r="",n=0;n<t.length;n++){var i=t[n];"little"===e&&(i=o(i)),r+=s(i.toString(16))}return r}function f(t){return 1===t.length?"0"+t:t}function s(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}function u(t,e,r,n){var i=r-e;y(i%4===0);for(var o=new Array(i/4),a=0,f=e;a<o.length;a++,f+=4){var s;s="big"===n?t[f]<<24|t[f+1]<<16|t[f+2]<<8|t[f+3]:t[f+3]<<24|t[f+2]<<16|t[f+1]<<8|t[f],o[a]=s>>>0}return o}function h(t,e){for(var r=new Array(4*t.length),n=0,i=0;n<t.length;n++,i+=4){var o=t[n];"big"===e?(r[i]=o>>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r}function c(t,e){return t>>>e|t<<32-e}function d(t,e){return t<<e|t>>>32-e}function l(t,e){return t+e>>>0}function p(t,e,r){return t+e+r>>>0}function b(t,e,r,n){return t+e+r+n>>>0}function v(t,e,r,n,i){return t+e+r+n+i>>>0}function y(t,e){if(!t)throw new Error(e||"Assertion failed")}function m(t,e,r,n){var i=t[e],o=t[e+1],a=n+o>>>0,f=(a<n?1:0)+r+i;t[e]=f>>>0,t[e+1]=a}function g(t,e,r,n){var i=e+n>>>0,o=(i<e?1:0)+t+r;return o>>>0}function w(t,e,r,n){var i=e+n;return i>>>0}function _(t,e,r,n,i,o,a,f){var s=0,u=e;u=u+n>>>0,s+=u<e?1:0,u=u+o>>>0,s+=u<o?1:0,u=u+f>>>0,s+=u<f?1:0;var h=t+r+i+a+s;return h>>>0}function M(t,e,r,n,i,o,a,f){var s=e+n+o+f;return s>>>0}function S(t,e,r,n,i,o,a,f,s,u){var h=0,c=e;c=c+n>>>0,h+=c<e?1:0,c=c+o>>>0,h+=c<o?1:0,c=c+f>>>0,h+=c<f?1:0,c=c+u>>>0,h+=c<u?1:0;var d=t+r+i+a+s+h;return d>>>0}function E(t,e,r,n,i,o,a,f,s,u){var h=e+n+o+f+u;return h>>>0}function A(t,e,r){var n=e<<32-r|t>>>r;return n>>>0}function k(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}function x(t,e,r){return t>>>r}function I(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}var B=e,O=r(2);B.toArray=n,B.toHex=i,B.htonl=o,B.toHex32=a,B.zero2=f,B.zero8=s,B.join32=u,B.split32=h,B.rotr32=c,B.rotl32=d,B.sum32=l,B.sum32_3=p,B.sum32_4=b,B.sum32_5=v,B.assert=y,B.inherits=O,e.sum64=m,e.sum64_hi=g,e.sum64_lo=w,e.sum64_4_hi=_,e.sum64_4_lo=M,e.sum64_5_hi=S,e.sum64_5_lo=E,e.rotr64_hi=A,e.rotr64_lo=k,e.shr64_hi=x,e.shr64_lo=I},function(t,e,r){var n=r(100),i=n.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});e.RSAPrivateKey=i;var o=n.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});e.RSAPublicKey=o;var a=n.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(f),this.key("subjectPublicKey").bitstr())});e.PublicKey=a;var f=n.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())}),s=n.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(f),this.key("subjectPrivateKey").octstr())});e.PrivateKey=s;var u=n.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});e.EncryptedPrivateKey=u;var h=n.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});e.DSAPrivateKey=h,e.DSAparam=n.define("DSAparam",function(){this.int()});var c=n.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(d),this.key("publicKey").optional().explicit(1).bitstr())});e.ECPrivateKey=c;var d=n.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});e.signature=n.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},function(t,e,r){(function(e){var n=/Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m,i=/^-----BEGIN (.*) KEY-----\r?\n/m,o=/^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m,a=r(148),f=r(219);t.exports=function(t,r){var s,u=t.toString(),h=u.match(n);if(h){var c="aes"+h[1],d=new e(h[2],"hex"),l=new e(h[3].replace(/\r?\n/g,""),"base64"),p=a(r,d.slice(0,8),parseInt(h[1],10)).key,b=[],v=f.createDecipheriv(c,p,d);b.push(v.update(l)),b.push(v.final()),s=e.concat(b)}else{var y=u.match(o);s=new e(y[2].replace(/\r?\n/g,""),"base64")}var m=u.match(i)[1]+" KEY";return{tag:m,data:s}}}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){this.name=t,this.body=e,this.decoders={},this.encoders={}}var i=r(100),o=r(2),a=e;a.define=function(t,e){return new n(t,e)},n.prototype._createNamed=function(t){var e;try{e=r(251).runInThisContext("(function "+this.name+"(entity) {\n this._initNamed(entity);\n})")}catch(t){e=function(t){this._initNamed(t)}}return o(e,t),e.prototype._initNamed=function(e){t.call(this,e)},new e(this)},n.prototype._getDecoder=function(t){return t=t||"der",this.decoders.hasOwnProperty(t)||(this.decoders[t]=this._createNamed(i.decoders[t])),this.decoders[t]},n.prototype.decode=function(t,e,r){return this._getDecoder(e).decode(t,r)},n.prototype._getEncoder=function(t){return t=t||"der",this.encoders.hasOwnProperty(t)||(this.encoders[t]=this._createNamed(i.encoders[t])),this.encoders[t]},n.prototype.encode=function(t,e,r){return this._getEncoder(e).encode(t,r)}},function(t,e,r){function n(t,e){var r={};this._baseState=r,r.enc=t,r.parent=e||null,r.children=null,r.tag=null,r.args=null,r.reverseArgs=null,r.choice=null,r.optional=!1,r.any=!1,r.obj=!1,r.use=null,r.useDecoder=null,r.key=null,r.default=null,r.explicit=null,r.implicit=null,r.contains=null,r.parent||(r.children=[],this._wrap())}var i=r(68).Reporter,o=r(68).EncoderBuffer,a=r(68).DecoderBuffer,f=r(538),s=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],u=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(s),h=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];t.exports=n;var c=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];n.prototype.clone=function(){var t=this._baseState,e={};c.forEach(function(r){e[r]=t[r]});var r=new this.constructor(e.parent);return r._baseState=e,r},n.prototype._wrap=function(){var t=this._baseState;u.forEach(function(e){this[e]=function(){var r=new this.constructor(this);return t.children.push(r),r[e].apply(r,arguments)}},this)},n.prototype._init=function(t){var e=this._baseState;f(null===e.parent),t.call(this),e.children=e.children.filter(function(t){return t._baseState.parent===this},this),f.equal(e.children.length,1,"Root node can have only one child")},n.prototype._useArgs=function(t){var e=this._baseState,r=t.filter(function(t){return t instanceof this.constructor},this);t=t.filter(function(t){return!(t instanceof this.constructor)},this),0!==r.length&&(f(null===e.children),e.children=r,r.forEach(function(t){t._baseState.parent=this},this)),0!==t.length&&(f(null===e.args),e.args=t,e.reverseArgs=t.map(function(t){if("object"!=typeof t||t.constructor!==Object)return t;var e={};return Object.keys(t).forEach(function(r){r==(0|r)&&(r|=0);var n=t[r];e[n]=r}),e}))},h.forEach(function(t){n.prototype[t]=function(){var e=this._baseState;throw new Error(t+" not implemented for encoding: "+e.enc)}}),s.forEach(function(t){n.prototype[t]=function(){var e=this._baseState,r=Array.prototype.slice.call(arguments);return f(null===e.tag),e.tag=t,this._useArgs(r),this}}),n.prototype.use=function(t){var e=this._baseState;return f(null===e.use),e.use=t,this},n.prototype.optional=function(){var t=this._baseState;return t.optional=!0,this},n.prototype.def=function(t){var e=this._baseState;return f(null===e.default),e.default=t,e.optional=!0,this},n.prototype.explicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.explicit=t,this},n.prototype.implicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.implicit=t,this},n.prototype.obj=function(){var t=this._baseState,e=Array.prototype.slice.call(arguments);return t.obj=!0,0!==e.length&&this._useArgs(e),this},n.prototype.key=function(t){var e=this._baseState;return f(null===e.key),e.key=t,this},n.prototype.any=function(){var t=this._baseState;return t.any=!0,this},n.prototype.choice=function(t){var e=this._baseState;return f(null===e.choice),e.choice=t,this._useArgs(Object.keys(t).map(function(e){return t[e]})),this},n.prototype.contains=function(t){var e=this._baseState;return f(null===e.use),e.contains=t,this},n.prototype._decode=function(t,e){var r=this._baseState;if(null===r.parent)return t.wrapResult(r.children[0]._decode(t,e));var n=r.default,i=!0,o=null;if(null!==r.key&&(o=t.enterKey(r.key)),r.optional){var f=null;if(null!==r.explicit?f=r.explicit:null!==r.implicit?f=r.implicit:null!==r.tag&&(f=r.tag),null!==f||r.any){if(i=this._peekTag(t,f,r.any),t.isError(i))return i}else{var s=t.save();try{null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),i=!0}catch(t){i=!1}t.restore(s)}}var u;if(r.obj&&i&&(u=t.enterObject()),i){if(null!==r.explicit){var h=this._decodeTag(t,r.explicit);if(t.isError(h))return h;t=h}var c=t.offset;if(null===r.use&&null===r.choice){if(r.any)var s=t.save();var d=this._decodeTag(t,null!==r.implicit?r.implicit:r.tag,r.any);if(t.isError(d))return d;r.any?n=t.raw(s):t=d}if(e&&e.track&&null!==r.tag&&e.track(t.path(),c,t.length,"tagged"),e&&e.track&&null!==r.tag&&e.track(t.path(),t.offset,t.length,"content"),n=r.any?n:null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),t.isError(n))return n;if(r.any||null!==r.choice||null===r.children||r.children.forEach(function(r){r._decode(t,e)}),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){var l=new a(n);n=this._getUse(r.contains,t._reporterState.obj)._decode(l,e)}}return r.obj&&i&&(n=t.leaveObject(u)),null===r.key||null===n&&i!==!0?null!==o&&t.exitKey(o):t.leaveKey(o,r.key,n),n},n.prototype._decodeGeneric=function(t,e,r){var n=this._baseState;return"seq"===t||"set"===t?null:"seqof"===t||"setof"===t?this._decodeList(e,t,n.args[0],r):/str$/.test(t)?this._decodeStr(e,t,r):"objid"===t&&n.args?this._decodeObjid(e,n.args[0],n.args[1],r):"objid"===t?this._decodeObjid(e,null,null,r):"gentime"===t||"utctime"===t?this._decodeTime(e,t,r):"null_"===t?this._decodeNull(e,r):"bool"===t?this._decodeBool(e,r):"int"===t||"enum"===t?this._decodeInt(e,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,e._reporterState.obj)._decode(e,r):e.error("unknown tag: "+t)},n.prototype._getUse=function(t,e){var r=this._baseState;return r.useDecoder=this._use(t,e),f(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},n.prototype._decodeChoice=function(t,e){var r=this._baseState,n=null,i=!1;return Object.keys(r.choice).some(function(o){var a=t.save(),f=r.choice[o];try{var s=f._decode(t,e);if(t.isError(s))return!1;n={type:o,value:s},i=!0}catch(e){return t.restore(a),!1}return!0},this),i?n:t.error("Choice not matched")},n.prototype._createEncoderBuffer=function(t){return new o(t,this.reporter)},n.prototype._encode=function(t,e,r){var n=this._baseState;if(null===n.default||n.default!==t){var i=this._encodeValue(t,e,r);if(void 0!==i&&!this._skipDefault(i,e,r))return i}},n.prototype._encodeValue=function(t,e,r){var n=this._baseState;if(null===n.parent)return n.children[0]._encode(t,e||new i);var o=null;if(this.reporter=e,n.optional&&void 0===t){if(null===n.default)return;t=n.default}var a=null,f=!1;if(n.any)o=this._createEncoderBuffer(t);else if(n.choice)o=this._encodeChoice(t,e);else if(n.contains)a=this._getUse(n.contains,r)._encode(t,e),f=!0;else if(n.children)a=n.children.map(function(r){if("null_"===r._baseState.tag)return r._encode(null,e,t);if(null===r._baseState.key)return e.error("Child should have a key");var n=e.enterKey(r._baseState.key);if("object"!=typeof t)return e.error("Child expected, but input is not object");var i=r._encode(t[r._baseState.key],e,t);return e.leaveKey(n),i},this).filter(function(t){return t}),a=this._createEncoderBuffer(a);else if("seqof"===n.tag||"setof"===n.tag){if(!n.args||1!==n.args.length)return e.error("Too many args for : "+n.tag);if(!Array.isArray(t))return e.error("seqof/setof, but data is not Array");var s=this.clone();s._baseState.implicit=null,a=this._createEncoderBuffer(t.map(function(r){var n=this._baseState;return this._getUse(n.args[0],t)._encode(r,e)},s))}else null!==n.use?o=this._getUse(n.use,r)._encode(t,e):(a=this._encodePrimitive(n.tag,t),f=!0);var o;if(!n.any&&null===n.choice){var u=null!==n.implicit?n.implicit:n.tag,h=null===n.implicit?"universal":"context";null===u?null===n.use&&e.error("Tag could be ommited only for .use()"):null===n.use&&(o=this._encodeComposite(u,f,h,a))}return null!==n.explicit&&(o=this._encodeComposite(n.explicit,!1,"context",o)),o},n.prototype._encodeChoice=function(t,e){var r=this._baseState,n=r.choice[t.type];return n||f(!1,t.type+" not found in "+JSON.stringify(Object.keys(r.choice))),n._encode(t.value,e)},n.prototype._encodePrimitive=function(t,e){var r=this._baseState;if(/str$/.test(t))return this._encodeStr(e,t);if("objid"===t&&r.args)return this._encodeObjid(e,r.reverseArgs[0],r.args[1]);if("objid"===t)return this._encodeObjid(e,null,null);if("gentime"===t||"utctime"===t)return this._encodeTime(e,t);if("null_"===t)return this._encodeNull();if("int"===t||"enum"===t)return this._encodeInt(e,r.args&&r.reverseArgs[0]);if("bool"===t)return this._encodeBool(e);throw new Error("Unsupported tag: "+t)},n.prototype._isNumstr=function(t){return/^[0-9 ]*$/.test(t)},n.prototype._isPrintstr=function(t){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(t)}},function(t,e,r){function n(t){this._reporterState={obj:null,path:[],options:t||{},errors:[]}}function i(t,e){this.path=t,this.rethrow(e)}var o=r(2);e.Reporter=n,n.prototype.isError=function(t){return t instanceof i},n.prototype.save=function(){var t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},n.prototype.restore=function(t){var e=this._reporterState;e.obj=t.obj,e.path=e.path.slice(0,t.pathLen)},n.prototype.enterKey=function(t){return this._reporterState.path.push(t)},n.prototype.exitKey=function(t){var e=this._reporterState;e.path=e.path.slice(0,t-1)},n.prototype.leaveKey=function(t,e,r){var n=this._reporterState;this.exitKey(t),null!==n.obj&&(n.obj[e]=r)},n.prototype.path=function(){return this._reporterState.path.join("/")},n.prototype.enterObject=function(){var t=this._reporterState,e=t.obj;return t.obj={},e},n.prototype.leaveObject=function(t){var e=this._reporterState,r=e.obj;return e.obj=t,r},n.prototype.error=function(t){var e,r=this._reporterState,n=t instanceof i;if(e=n?t:new i(r.path.map(function(t){return"["+JSON.stringify(t)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw e;return n||r.errors.push(e),e},n.prototype.wrapResult=function(t){var e=this._reporterState;return e.options.partial?{result:this.isError(t)?null:t,errors:e.errors}:t},o(i,Error),i.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(t){this.stack=t.stack}return this}},function(t,e,r){var n=r(215);e.tagClass={0:"universal",1:"application",2:"context",3:"private"},e.tagClassByName=n._reverse(e.tagClass),e.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",
21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},e.tagByName=n._reverse(e.tag)},function(t,e,r){var n=e;n.der=r(216),n.pem=r(535)},function(t,e,r){function n(t){a.call(this,t),this.enc="pem"}var i=r(2),o=r(1).Buffer,a=r(216);i(n,a),t.exports=n,n.prototype.decode=function(t,e){for(var r=t.toString().split(/[\r\n]+/g),n=e.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,f=-1,s=-1,u=0;u<r.length;u++){var h=r[u].match(i);if(null!==h&&h[2]===n){if(f!==-1){if("END"!==h[1])break;s=u;break}if("BEGIN"!==h[1])break;f=u}}if(f===-1||s===-1)throw new Error("PEM section not found for: "+n);var c=r.slice(f+1,s).join("");c.replace(/[^a-z0-9\+\/=]+/gi,"");var d=new o(c,"base64");return a.prototype.decode.call(this,d,e)}},function(t,e,r){var n=e;n.der=r(217),n.pem=r(537)},function(t,e,r){function n(t){o.call(this,t),this.enc="pem"}var i=r(2),o=r(217);i(n,o),t.exports=n,n.prototype.encode=function(t,e){for(var r=o.prototype.encode.call(this,t),n=r.toString("base64"),i=["-----BEGIN "+e.label+"-----"],a=0;a<n.length;a+=64)i.push(n.slice(a,a+64));return i.push("-----END "+e.label+"-----"),i.join("\n")}},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._last=void 0,this._cipher=new s.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(t){for(var e=t[15],r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}function a(e,r,i){var o=c[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(b[o.mode],r,i,!0):"auth"===o.type?new l(b[o.mode],r,i,!0):new n(b[o.mode],r,i)}function f(t,e){var r=c[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=p(e,!1,r.key,r.iv);return a(t,n.key,n.iv)}var s=r(101),u=r(103),h=r(2),c=r(147),d=r(226),l=r(218),p=r(148);h(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return o(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},i.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:r(224),CBC:r(220),CFB:r(221),CFB8:r(223),CFB1:r(222),OFB:r(225),CTR:r(102),GCM:r(102)};e.createDecipher=f,e.createDecipheriv=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(s.call(this),this._cache=new i,this._cipher=new f.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function a(t,e){var r=h[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(e,!1,r.key,r.iv);return o(t,n.key,n.iv)}var f=r(101),s=r(103),u=r(2),h=r(147),c=r(148),d=r(226),l=r(218);u(n,s),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if("10101010101010101010101010101010"!==t.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++n<e;)r.writeUInt8(e,n);var i=t.concat([this.cache,r]);return i};var p={ECB:r(224),CBC:r(220),CFB:r(221),CFB8:r(223),CFB1:r(222),OFB:r(225),CTR:r(102),GCM:r(102)};e.createCipheriv=o,e.createCipher=a}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){this.h=t,this.state=new e(16),this.state.fill(0),this.cache=new e("")}function n(t){return[t.readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)]}function i(t){t=t.map(o);var r=new e(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r}function o(t){var e,r;return e=t>s||t<0?(r=Math.abs(t)%s,t<0?s-r:r):t}function a(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}var f=new e(16);f.fill(0),t.exports=r,r.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},r.prototype._multiply=function(){for(var t,e,r,o=n(this.h),f=[0,0,0,0],s=-1;++s<128;){for(e=0!==(this.state[~~(s/8)]&1<<7-s%8),e&&(f=a(f,o)),r=0!==(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(f)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype.final=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,f],16)),this.ghash(i([0,t,0,r])),this.state};var s=Math.pow(2,32)}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,e,r,n){var a=v(e);if(a.curve){if("ecdsa"!==n)throw new Error("wrong private key type");return i(t,a)}if("dsa"===a.type){if("dsa"!==n)throw new Error("wrong private key type");return o(t,a,r)}if("rsa"!==n)throw new Error("wrong private key type");for(var f=a.modulus.byteLength(),s=[0,1];t.length+s.length+1<f;)s.push(255);s.push(0);for(var u=-1;++u<t.length;)s.push(t[u]);var h=l(s,a);return h}function i(t,r){var n=p[r.curve.join(".")];if(!n)throw new Error("unknown curve "+r.curve.join("."));var i=new m(n),o=i.genKeyPair();o._importPrivate(r.privateKey);var a=o.sign(t);return new e(a.toDER())}function o(t,e,r){for(var n,i=e.params.priv_key,o=e.params.p,u=e.params.q,d=e.params.g,l=new y(0),p=s(t,u).mod(u),b=!1,v=f(i,u,t,r);b===!1;)n=h(u,v,r),l=c(d,n,o,u),b=n.invm(u).imul(p.add(i.mul(l))).mod(u),b.cmpn(0)||(b=!1,l=new y(0));return a(l,b)}function a(t,r){t=t.toArray(),r=r.toArray(),128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r));var n=t.length+r.length+4,i=[48,n,2,t.length];return i=i.concat(t,[2,r.length],r),new e(i)}function f(t,r,n,i){if(t=new e(t.toArray()),t.length<r.byteLength()){var o=new e(r.byteLength()-t.length);o.fill(0),t=e.concat([o,t])}var a=n.length,f=u(n,r),s=new e(a);s.fill(1);var h=new e(a);return h.fill(0),h=d(i,h).update(s).update(new e([0])).update(t).update(f).digest(),s=d(i,h).update(s).digest(),h=d(i,h).update(s).update(new e([1])).update(t).update(f).digest(),s=d(i,h).update(s).digest(),{k:h,v:s}}function s(t,e){var r=new y(t),n=(t.length<<3)-e.bitLength();return n>0&&r.ishrn(n),r}function u(t,r){t=s(t,r),t=t.mod(r);var n=new e(t.toArray());if(n.length<r.byteLength()){var i=new e(r.byteLength()-n.length);i.fill(0),n=e.concat([i,n])}return n}function h(t,r,n){var i,o;do{for(i=new e("");8*i.length<t.bitLength();)r.v=d(n,r.k).update(r.v).digest(),i=e.concat([i,r.v]);o=s(i,t),r.k=d(n,r.k).update(r.v).update(new e([0])).digest(),r.v=d(n,r.k).update(r.v).digest()}while(o.cmp(t)!==-1);return o}function c(t,e,r,n){return t.toRed(y.mont(r)).redPow(e).fromRed().mod(n)}var d=r(149),l=r(507),p=r(212),b=r(19),v=r(213),y=r(18),m=b.ec;t.exports=n,t.exports.getKey=f,t.exports.makeKey=h}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,n,a){var f=u(n);if("ec"===f.type){if("ecdsa"!==a)throw new Error("wrong public key type");return i(t,r,f)}if("dsa"===f.type){if("dsa"!==a)throw new Error("wrong public key type");return o(t,r,f)}if("rsa"!==a)throw new Error("wrong public key type");for(var s=f.modulus.byteLength(),c=[1],d=0;r.length+c.length+2<s;)c.push(255),d++;c.push(0);for(var l=-1;++l<r.length;)c.push(r[l]);c=new e(c);var p=h.mont(f.modulus);t=new h(t).toRed(p),t=t.redPow(new h(f.publicExponent)),t=new e(t.fromRed().toArray());var b=0;for(d<8&&(b=1),s=Math.min(t.length,c.length),t.length!==c.length&&(b=1),l=-1;++l<s;)b|=t[l]^c[l];return 0===b}function i(t,e,r){var n=f[r.data.algorithm.curve.join(".")];if(!n)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var i=new c(n),o=r.data.subjectPrivateKey.data;return i.verify(e,t,o)}function o(t,e,r){var n=r.data.p,i=r.data.q,o=r.data.g,f=r.data.pub_key,s=u.signature.decode(t,"der"),c=s.s,d=s.r;a(c,i),a(d,i);var l=h.mont(n),p=c.invm(i),b=o.toRed(l).redPow(new h(e).mul(p).mod(i)).fromRed().mul(f.toRed(l).redPow(d.mul(p).mod(i)).fromRed()).mod(n).mod(i);return!b.cmp(d)}function a(t,e){if(t.cmpn(0)<=0)throw new Error("invalid sig");if(t.cmp(e)>=e)throw new Error("invalid sig")}var f=r(212),s=r(19),u=r(213),h=r(18),c=s.ec;t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){this.curveType=f[t],this.curveType||(this.curveType={name:t}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}function i(t,r,n){Array.isArray(t)||(t=t.toArray());var i=new e(t);if(n&&i.length<n){var o=new e(n-i.length);o.fill(0),i=e.concat([o,i])}return r?i.toString(r):i}var o=r(22),a=r(30);t.exports=function(t){return new n(t)};var f={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};f.p224=f.secp224r1,f.p256=f.secp256r1=f.prime256v1,f.p192=f.secp192r1=f.prime192v1,f.p384=f.secp384r1,f.p521=f.secp521r1,n.prototype.generateKeys=function(t,e){return this.keys=this.curve.genKeyPair(),this.getPublicKey(t,e)},n.prototype.computeSecret=function(t,r,n){r=r||"utf8",e.isBuffer(t)||(t=new e(t,r));var o=this.curve.keyFromPublic(t).getPublic(),a=o.mul(this.keys.getPrivate()).getX();return i(a,n,this.curveType.byteLength)},n.prototype.getPublicKey=function(t,e){var r=this.keys.getPublic("compressed"===e,!0);return"hybrid"===e&&(r[r.length-1]%2?r[0]=7:r[0]=6),i(r,t)},n.prototype.getPrivateKey=function(t){return i(this.keys.getPrivate(),t)},n.prototype.setPublicKey=function(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this.keys._importPublic(t),this},n.prototype.setPrivateKey=function(t,r){r=r||"utf8",e.isBuffer(t)||(t=new e(t,r));var n=new a(t);return n=n.toString(16),this.keys._importPrivate(n),this}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){this.type=t,this.p=new o(e.p,16),this.red=e.prime?o.red(e.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=e.n&&new o(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function i(t,e){this.curve=t,this.type=e,this.precomputed=null}var o=r(30),a=r(22),f=a.utils,s=f.getNAF,u=f.getJSF,h=f.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(t,e){h(t.precomputed);var r=t._getDoubles(),n=s(e,1),i=(1<<r.step+1)-(r.step%2===0?2:1);i/=3;for(var o=[],a=0;a<n.length;a+=r.step){for(var f=0,e=a+r.step-1;e>=a;e--)f=(f<<1)+n[e];o.push(f)}for(var u=this.jpoint(null,null,null),c=this.jpoint(null,null,null),d=i;d>0;d--){for(var a=0;a<o.length;a++){var f=o[a];f===d?c=c.mixedAdd(r.points[a]):f===-d&&(c=c.mixedAdd(r.points[a].neg()))}u=u.add(c)}return u.toP()},n.prototype._wnafMul=function(t,e){var r=4,n=t._getNAFPoints(r);r=n.wnd;for(var i=n.points,o=s(e,r),a=this.jpoint(null,null,null),f=o.length-1;f>=0;f--){for(var e=0;f>=0&&0===o[f];f--)e++;if(f>=0&&e++,a=a.dblp(e),f<0)break;var u=o[f];h(0!==u),a="affine"===t.type?u>0?a.mixedAdd(i[u-1>>1]):a.mixedAdd(i[-u-1>>1].neg()):u>0?a.add(i[u-1>>1]):a.add(i[-u-1>>1].neg())}return"affine"===t.type?a.toP():a},n.prototype._wnafMulAdd=function(t,e,r,n,i){for(var o=this._wnafT1,a=this._wnafT2,f=this._wnafT3,h=0,c=0;c<n;c++){var d=e[c],l=d._getNAFPoints(t);o[c]=l.wnd,a[c]=l.points}for(var c=n-1;c>=1;c-=2){var p=c-1,b=c;if(1===o[p]&&1===o[b]){var v=[e[p],null,null,e[b]];0===e[p].y.cmp(e[b].y)?(v[1]=e[p].add(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg())):0===e[p].y.cmp(e[b].y.redNeg())?(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].add(e[b].neg())):(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],m=u(r[p],r[b]);h=Math.max(m[0].length,h),f[p]=new Array(h),f[b]=new Array(h);for(var g=0;g<h;g++){var w=0|m[0][g],_=0|m[1][g];f[p][g]=y[3*(w+1)+(_+1)],f[b][g]=0,a[p]=v}}else f[p]=s(r[p],o[p]),f[b]=s(r[b],o[b]),h=Math.max(f[p].length,h),h=Math.max(f[b].length,h)}for(var M=this.jpoint(null,null,null),S=this._wnafT4,c=h;c>=0;c--){for(var E=0;c>=0;){for(var A=!0,g=0;g<n;g++)S[g]=0|f[g][c],0!==S[g]&&(A=!1);if(!A)break;E++,c--}if(c>=0&&E++,M=M.dblp(E),c<0)break;for(var g=0;g<n;g++){var d,k=S[g];0!==k&&(k>0?d=a[g][k-1>>1]:k<0&&(d=a[g][-k-1>>1].neg()),M="affine"===d.type?M.mixedAdd(d):M.add(d))}}for(var c=0;c<n;c++)a[c]=null;return i?M:M.toP()},n.BasePoint=i,i.prototype.eq=function(){throw new Error("Not implemented")},i.prototype.validate=function(){return this.curve.validate(this)},n.prototype.decodePoint=function(t,e){t=f.toArray(t,e);var r=this.p.byteLength();if((4===t[0]||6===t[0]||7===t[0])&&t.length-1===2*r){6===t[0]?h(t[t.length-1]%2===0):7===t[0]&&h(t[t.length-1]%2===1);var n=this.point(t.slice(1,1+r),t.slice(1+r,1+2*r));return n}if((2===t[0]||3===t[0])&&t.length-1===r)return this.pointFromX(t.slice(1,1+r),3===t[0]);throw new Error("Unknown point format")},i.prototype.encodeCompressed=function(t){return this.encode(t,!0)},i.prototype._encode=function(t){var e=this.curve.p.byteLength(),r=this.getX().toArray("be",e);return t?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",e))},i.prototype.encode=function(t,e){return f.encode(this._encode(e),t)},i.prototype.precompute=function(t){if(this.precomputed)return this;var e={doubles:null,naf:null,beta:null};return e.naf=this._getNAFPoints(8),e.doubles=this._getDoubles(4,t),e.beta=this._getBeta(),this.precomputed=e,this},i.prototype._hasDoubles=function(t){if(!this.precomputed)return!1;var e=this.precomputed.doubles;return!!e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)},i.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i<e;i+=t){for(var o=0;o<t;o++)n=n.dbl();r.push(n)}return{step:t,points:r}},i.prototype._getNAFPoints=function(t){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var e=[this],r=(1<<t)-1,n=1===r?null:this.dbl(),i=1;i<r;i++)e[i]=e[i-1].add(n);return{wnd:t,points:e}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(t){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}},function(t,e,r){"use strict";function n(t){this.twisted=1!==(0|t.a),this.mOneA=this.twisted&&(0|t.a)===-1,this.extended=this.mOneA,u.call(this,"edwards",t),this.a=new f(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new f(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new f(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|t.c)}function i(t,e,r,n,i){u.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new f(e,16),this.y=new f(r,16),this.z=n?new f(n,16):this.curve.one,this.t=i&&new f(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=r(104),a=r(22),f=r(30),s=r(2),u=o.base,h=a.utils.assert;s(n,u),t.exports=n,n.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},n.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},n.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},n.prototype.pointFromX=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=n.redMul(i.redInvm()),a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var s=a.fromRed().isOdd();return(e&&!s||!e&&s)&&(a=a.redNeg()),this.point(t,a)},n.prototype.pointFromY=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.one),i=r.redMul(this.d).redAdd(this.one),o=n.redMul(i.redInvm());if(0===o.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return a.isOdd()!==e&&(a=a.redNeg()),this.point(a,t)},n.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},s(i,u.BasePoint),n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},n.prototype.point=function(t,e,r,n){return new i(this,t,e,r,n)},i.fromJSON=function(t,e){return new i(t,e[0],e[1],e[2])},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),a=o.redSub(r),f=n.redSub(e),s=i.redMul(a),u=o.redMul(f),h=i.redMul(f),c=a.redMul(o);return this.curve.point(s,u,c,h)},i.prototype._projDbl=function(){var t,e,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=this.curve._mulA(i),f=a.redAdd(o);if(this.zOne)t=n.redSub(i).redSub(o).redMul(f.redSub(this.curve.two)),e=f.redMul(a.redSub(o)),r=f.redSqr().redSub(f).redSub(f);else{var s=this.z.redSqr(),u=f.redSub(s).redISub(s);t=n.redSub(i).redISub(o).redMul(u),e=f.redMul(a.redSub(o)),r=f.redMul(u)}}else{var a=i.redAdd(o),s=this.curve._mulC(this.c.redMul(this.z)).redSqr(),u=a.redSub(s).redSub(s);t=this.curve._mulC(n.redISub(a)).redMul(u),e=this.curve._mulC(a).redMul(i.redISub(o)),r=a.redMul(u)}return this.curve.point(t,e,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),a=i.redSub(n),f=i.redAdd(n),s=r.redAdd(e),u=o.redMul(a),h=f.redMul(s),c=o.redMul(s),d=a.redMul(f);return this.curve.point(u,h,d,c)},i.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),a=this.y.redMul(t.y),f=this.curve.d.redMul(o).redMul(a),s=i.redSub(f),u=i.redAdd(f),h=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(a),c=n.redMul(s).redMul(h);return this.curve.twisted?(e=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=s.redMul(u)):(e=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(s).redMul(u)),this.curve.point(c,e,r)},i.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},i.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},i.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},i.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},i.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}return!1},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},function(t,e,r){"use strict";function n(t){s.call(this,"mont",t),this.a=new a(t.a,16).toRed(this.red),this.b=new a(t.b,16).toRed(this.red),this.i4=new a(4).toRed(this.red).redInvm(),this.two=new a(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function i(t,e,r){s.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new a(e,16),this.z=new a(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var o=r(104),a=r(30),f=r(2),s=o.base,u=r(22),h=u.utils;f(n,s),t.exports=n,n.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e),i=n.redSqrt();return 0===i.redSqr().cmp(n)},f(i,s.BasePoint),n.prototype.decodePoint=function(t,e){return this.point(h.toArray(t,e),1)},n.prototype.point=function(t,e){return new i(this,t,e)},n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},i.prototype.precompute=function(){},i.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},i.fromJSON=function(t,e){return new i(t,e[0],e[1]||t.one)},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},i.prototype.dbl=function(){var t=this.x.redAdd(this.z),e=t.redSqr(),r=this.x.redSub(this.z),n=r.redSqr(),i=e.redSub(n),o=e.redMul(n),a=i.redMul(n.redAdd(this.curve.a24.redMul(i)));return this.curve.point(o,a)},i.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z),a=o.redMul(r),f=i.redMul(n),s=e.z.redMul(a.redAdd(f).redSqr()),u=e.x.redMul(a.redISub(f).redSqr());return this.curve.point(s,u)},i.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==e.cmpn(0);e.iushrn(1))o.push(e.andln(1));for(var a=o.length-1;a>=0;a--)0===o[a]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},i.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},i.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";function n(t){h.call(this,"short",t),this.a=new s(t.a,16).toRed(this.red),this.b=new s(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(t,e,r,n){h.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(e,16),this.y=new s(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(t,e,r,n){h.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(e,16),this.y=new s(r,16),this.z=new s(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var a=r(104),f=r(22),s=r(30),u=r(2),h=a.base,c=f.utils.assert;u(n,h),t.exports=n,n.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new s(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=n[0].cmp(n[1])<0?n[0]:n[1],e=e.toRed(this.red)}if(t.lambda)r=new s(t.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(e))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}var o;return o=t.basis?t.basis.map(function(t){return{a:new s(t.a,16),b:new s(t.b,16)}}):this._getEndoBasis(r),{beta:e,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:s.mont(t),r=new s(2).toRed(e).redInvm(),n=r.redNeg(),i=new s(3).toRed(e).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),a=n.redSub(i).fromRed();return[o,a]},n.prototype._getEndoBasis=function(t){for(var e,r,n,i,o,a,f,u,h,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=t,l=this.n.clone(),p=new s(1),b=new s(0),v=new s(0),y=new s(1),m=0;0!==d.cmpn(0);){var g=l.div(d);u=l.sub(g.mul(d)),h=v.sub(g.mul(p));var w=y.sub(g.mul(b));if(!n&&u.cmp(c)<0)e=f.neg(),r=p,n=u.neg(),i=h;else if(n&&2===++m)break;f=u,l=d,d=u,v=p,p=h,y=b,b=w}o=u.neg(),a=h;var _=n.sqr().add(i.sqr()),M=o.sqr().add(a.sqr());return M.cmp(_)>=0&&(o=e,a=r),n.negative&&(n=n.neg(),i=i.neg()),o.negative&&(o=o.neg(),a=a.neg()),[{a:n,b:i},{a:o,b:a}]},n.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),a=i.mul(r.a),f=o.mul(n.a),s=i.mul(r.b),u=o.mul(n.b),h=t.sub(a).sub(f),c=s.add(u).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(t,e){t=new s(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},n.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o<t.length;o++){var a=this._endoSplit(e[o]),f=t[o],s=f._getBeta();a.k1.negative&&(a.k1.ineg(),f=f.neg(!0)),a.k2.negative&&(a.k2.ineg(),s=s.neg(!0)),n[2*o]=f,n[2*o+1]=s,i[2*o]=a.k1,i[2*o+1]=a.k2}for(var u=this._wnafMulAdd(1,n,i,2*o,r),h=0;h<2*o;h++)n[h]=null,i[h]=null;return u},u(i,h.BasePoint),n.prototype.point=function(t,e,r){return new i(this,t,e,r)},n.prototype.pointFromJSON=function(t,e){return i.fromJSON(this,t,e)},i.prototype._getBeta=function(){if(this.curve.endo){var t=this.precomputed;if(t&&t.beta)return t.beta;var e=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(t){var r=this.curve,n=function(t){return r.point(t.x.redMul(r.endo.beta),t.y)};t.beta=e,e.precomputed={beta:null,naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(n)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(n)}}}return e}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(t,e,r){function n(e){return t.point(e[0],e[1],r)}"string"==typeof e&&(e=JSON.parse(e));var i=t.point(e[0],e[1],r);if(!e[2])return i;var o=e[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(t){return t=new s(t,16),this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},i.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},i.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var t=this.curve.jpoint(this.x,this.y,this.curve.one);return t},
u(o,h.BasePoint),n.prototype.jpoint=function(t,e,r){return new o(this,t,e,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),f=n.redSub(i),s=o.redSub(a);if(0===f.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=f.redSqr(),h=u.redMul(f),c=n.redMul(u),d=s.redSqr().redIAdd(h).redISub(c).redISub(c),l=s.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(t.z).redMul(f);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),a=r.redSub(n),f=i.redSub(o);if(0===a.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=a.redSqr(),u=s.redMul(a),h=r.redMul(s),c=f.redSqr().redIAdd(u).redISub(h).redISub(h),d=f.redMul(h.redISub(c)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,a=this.y,f=this.z,s=f.redSqr().redSqr(),u=a.redAdd(a),r=0;r<t;r++){var h=o.redSqr(),c=u.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(s)),p=o.redMul(c),b=l.redSqr().redISub(p.redAdd(p)),v=p.redISub(b),y=l.redMul(v);y=y.redIAdd(y).redISub(d);var m=u.redMul(f);r+1<t&&(s=s.redMul(d)),o=b,f=m,u=y}return this.curve.jpoint(o,u.redMul(i),f)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n),s=f.redSqr().redISub(a).redISub(a),u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),t=s,e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),b=p.redSqr(),v=d.redIAdd(d);v=v.redIAdd(v),v=v.redIAdd(v),t=b.redISub(l).redISub(l),e=p.redMul(l.redISub(t)).redISub(v),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(t,e,r)},o.prototype._threeDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),s=f.redSqr().redISub(a).redISub(a);t=s;var u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var b=p.redAdd(p);t=l.redSqr().redISub(b),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var v=c.redSqr();v=v.redIAdd(v),v=v.redIAdd(v),v=v.redIAdd(v),e=l.redMul(p.redISub(t)).redISub(v)}return this.curve.jpoint(t,e,r)},o.prototype._dbl=function(){var t=this.curve.a,e=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=e.redSqr(),a=r.redSqr(),f=o.redAdd(o).redIAdd(o).redIAdd(t.redMul(i)),s=e.redAdd(e);s=s.redIAdd(s);var u=s.redMul(a),h=f.redSqr().redISub(u.redAdd(u)),c=u.redISub(h),d=a.redSqr();d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=f.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr(),n=e.redSqr(),i=t.redAdd(t).redIAdd(t),o=i.redSqr(),a=this.x.redAdd(e).redSqr().redISub(t).redISub(n);a=a.redIAdd(a),a=a.redAdd(a).redIAdd(a),a=a.redISub(o);var f=a.redSqr(),s=n.redIAdd(n);s=s.redIAdd(s),s=s.redIAdd(s),s=s.redIAdd(s);var u=i.redIAdd(a).redSqr().redISub(o).redISub(f).redISub(s),h=e.redMul(u);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(f).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(u.redMul(s.redISub(u)).redISub(a.redMul(f)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(a).redSqr().redISub(r).redISub(f);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(t,e){return t=new s(t,e),this.curve._wnafMul(this,t)},o.prototype.eq=function(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;var e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;var n=e.redMul(this.z),i=r.redMul(t.z);return 0===this.y.redMul(i).redISub(t.y.redMul(n)).cmpn(0)},o.prototype.eqXToP=function(t){var e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;for(var n=t.clone(),i=this.curve.redN.redMul(e);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}return!1},o.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";function n(t){"short"===t.type?this.curve=new f.curve.short(t):"edwards"===t.type?this.curve=new f.curve.edwards(t):this.curve=new f.curve.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function i(t,e){Object.defineProperty(o,t,{configurable:!0,enumerable:!0,get:function(){var r=new n(e);return Object.defineProperty(o,t,{configurable:!0,enumerable:!0,value:r}),r}})}var o=e,a=r(50),f=r(22),s=f.utils.assert;o.PresetCurve=n,i("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),i("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),i("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),i("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),i("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),i("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["9"]}),i("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var u;try{u=r(557)}catch(t){u=void 0}i("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",u]})},function(t,e,r){"use strict";function n(t){return this instanceof n?("string"==typeof t&&(f(o.curves.hasOwnProperty(t),"Unknown curve "+t),t=o.curves[t]),t instanceof o.curves.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),void(this.hash=t.hash||t.curve.hash)):new n(t)}var i=r(30),o=r(22),a=o.utils,f=a.assert,s=r(551),u=r(552);t.exports=n,n.prototype.keyPair=function(t){return new s(this,t)},n.prototype.keyFromPrivate=function(t,e){return s.fromPrivate(this,t,e)},n.prototype.keyFromPublic=function(t,e){return s.fromPublic(this,t,e)},n.prototype.genKeyPair=function(t){t||(t={});for(var e=new o.hmacDRBG({hash:this.hash,pers:t.pers,entropy:t.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var a=new i(e.generate(r));if(!(a.cmp(n)>0))return a.iaddn(1),this.keyFromPrivate(a)}},n.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},n.prototype.sign=function(t,e,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new i(t,16));for(var a=this.n.byteLength(),f=e.getPrivate().toArray("be",a),s=t.toArray("be",a),h=new o.hmacDRBG({hash:this.hash,entropy:f,nonce:s,pers:n.pers,persEnc:n.persEnc}),c=this.n.sub(new i(1)),d=0;!0;d++){var l=n.k?n.k(d):new i(h.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(c)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),v=b.umod(this.n);if(0!==v.cmpn(0)){var y=l.invm(this.n).mul(v.mul(e.getPrivate()).iadd(t));if(y=y.umod(this.n),0!==y.cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==b.cmp(v)?2:0);return n.canonical&&y.cmp(this.nh)>0&&(y=this.n.sub(y),m^=1),new u({r:v,s:y,recoveryParam:m})}}}}}},n.prototype.verify=function(t,e,r,n){t=this._truncateToN(new i(t,16)),r=this.keyFromPublic(r,n),e=new u(e,"hex");var o=e.r,a=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var f=a.invm(this.n),s=f.mul(t).umod(this.n),h=f.mul(o).umod(this.n);if(!this.curve._maxwellTrick){var c=this.g.mulAdd(s,r.getPublic(),h);return!c.isInfinity()&&0===c.getX().umod(this.n).cmp(o)}var c=this.g.jmulAdd(s,r.getPublic(),h);return!c.isInfinity()&&c.eqXToP(o)},n.prototype.recoverPubKey=function(t,e,r,n){f((3&r)===r,"The recovery param is more than two bits"),e=new u(e,n);var o=this.n,a=new i(t),s=e.r,h=e.s,c=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var l=e.r.invm(o),p=o.sub(a).mul(l).umod(o),b=h.mul(l).umod(o);return this.g.mulAdd(p,s,b)},n.prototype.getKeyRecoveryParam=function(t,e,r,n){if(e=new u(e,n),null!==e.recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";function n(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}var i=r(30);t.exports=n,n.fromPublic=function(t,e,r){return e instanceof n?e:new n(t,{pub:e,pubEnc:r})},n.fromPrivate=function(t,e,r){return e instanceof n?e:new n(t,{priv:e,privEnc:r})},n.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},n.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(t,e){this.priv=new i(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(t,e){return t.x||t.y?void(this.pub=this.ec.curve.point(t.x,t.y)):void(this.pub=this.ec.curve.decodePoint(t,e))},n.prototype.derive=function(t){return t.mul(this.priv).getX()},n.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},n.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},n.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(t,e,r){"use strict";function n(t,e){return t instanceof n?t:void(this._importDER(t,e)||(c(t.r&&t.s,"Signature without r or s"),this.r=new s(t.r,16),this.s=new s(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam))}function i(){this.place=0}function o(t,e){var r=t[e.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=e.place;o<n;o++,a++)i<<=8,i|=t[a];return e.place=a,i}function a(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)}function f(t,e){if(e<128)return void t.push(e);var r=1+(Math.log(e)/Math.LN2>>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}var s=r(30),u=r(22),h=u.utils,c=h.assert;t.exports=n,n.prototype._importDER=function(t,e){t=h.toArray(t,e);var r=new i;if(48!==t[r.place++])return!1;var n=o(t,r);if(n+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var a=o(t,r),f=t.slice(r.place,a+r.place);if(r.place+=a,2!==t[r.place++])return!1;var u=o(t,r);if(t.length!==u+r.place)return!1;var c=t.slice(r.place,u+r.place);return 0===f[0]&&128&f[1]&&(f=f.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new s(f),this.s=new s(c),this.recoveryParam=null,!0},n.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=a(e),r=a(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];f(n,e.length),n=n.concat(e),n.push(2),f(n,r.length);var i=n.concat(r),o=[48];return f(o,i.length),o=o.concat(i),h.encode(o,t)}},function(t,e,r){"use strict";function n(t){if(f("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof n))return new n(t);var t=o.curves[t].curve;this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}var i=r(50),o=r(22),a=o.utils,f=a.assert,s=a.parseBytes,u=r(554),h=r(555);t.exports=n,n.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},n.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S()),a=e.R().add(n.pub().mul(i));return a.eq(o)},n.prototype.hashInt=function(){for(var t=this.hash(),e=0;e<arguments.length;e++)t.update(arguments[e]);return a.intFromLE(t.digest()).umod(this.curve.n)},n.prototype.keyFromPublic=function(t){return u.fromPublic(this,t)},n.prototype.keyFromSecret=function(t){return u.fromSecret(this,t)},n.prototype.makeSignature=function(t){return t instanceof h?t:new h(this,t)},n.prototype.encodePoint=function(t){var e=t.getY().toArray("le",this.encodingLength);return e[this.encodingLength-1]|=t.getX().isOdd()?128:0,e},n.prototype.decodePoint=function(t){t=a.parseBytes(t);var e=t.length-1,r=t.slice(0,e).concat(t[e]&-129),n=0!==(128&t[e]),i=a.intFromLE(r);return this.curve.pointFromY(i,n)},n.prototype.encodeInt=function(t){return t.toArray("le",this.encodingLength)},n.prototype.decodeInt=function(t){return a.intFromLE(t)},n.prototype.isPoint=function(t){return t instanceof this.pointClass}},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,this._secret=f(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=f(e.pub)}var i=r(22),o=i.utils,a=o.assert,f=o.parseBytes,s=o.cachedProperty;n.fromPublic=function(t,e){return e instanceof n?e:new n(t,{pub:e})},n.fromSecret=function(t,e){return e instanceof n?e:new n(t,{secret:e})},n.prototype.secret=function(){return this._secret},s(n,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),s(n,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),s(n,"privBytes",function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,n=e.slice(0,t.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n}),s(n,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),s(n,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),s(n,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),n.prototype.sign=function(t){return a(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},n.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},n.prototype.getSecret=function(t){return a(this._secret,"KeyPair is public only"),o.encode(this.secret(),t)},n.prototype.getPublic=function(t){return o.encode(this.pubBytes(),t)},t.exports=n},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,"object"!=typeof e&&(e=u(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),f(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof i&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}var i=r(30),o=r(22),a=o.utils,f=a.assert,s=a.cachedProperty,u=a.parseBytes;s(n,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),s(n,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),s(n,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),s(n,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),n.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},n.prototype.toHex=function(){return a.encode(this.toBytes(),"hex").toUpperCase()},t.exports=n},function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=a.toArray(t.entropy,t.entropyEnc),r=a.toArray(t.nonce,t.nonceEnc),i=a.toArray(t.pers,t.persEnc);f(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}var i=r(50),o=r(22),a=o.utils,f=a.assert;t.exports=n,n.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i<this.V.length;i++)this.K[i]=0,this.V[i]=1;this._update(n),this.reseed=1,this.reseedInterval=281474976710656},n.prototype._hmac=function(){return new i.hmac(this.hash,this.K)},n.prototype._update=function(t){var e=this._hmac().update(this.V).update([0]);t&&(e=e.update(t)),this.K=e.digest(),this.V=this._hmac().update(this.V).digest(),t&&(this.K=this._hmac().update(this.V).update([1]).update(t).digest(),this.V=this._hmac().update(this.V).digest())},n.prototype.reseed=function(t,e,r,n){"string"!=typeof e&&(n=r,r=e,e=null),t=a.toBuffer(t,e),r=a.toBuffer(r,n),f(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this.reseed=1},n.prototype.generate=function(t,e,r,n){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=a.toArray(r,n),this._update(r));for(var i=[];i.length<t;)this.V=this._hmac().update(this.V).digest(),i=i.concat(this.V);var o=i.slice(0,t);return this._update(r),this.reseed++,a.encode(o,e)}},function(t,e){t.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]
}}},function(t,e,r){"use strict";function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t){for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}return r}function i(t){return 1===t.length?"0"+t:t}function o(t){for(var e="",r=0;r<t.length;r++)e+=i(t[r].toString(16));return e}function a(t,e){for(var r=[],n=1<<e+1,i=t.clone();i.cmpn(1)>=0;){var o;if(i.isOdd()){var a=i.andln(n-1);o=a>(n>>1)-1?(n>>1)-a:a,i.isubn(o)}else o=0;r.push(o);for(var f=0!==i.cmpn(0)&&0===i.andln(n-1)?e+1:1,s=1;s<f;s++)r.push(0);i.iushrn(f)}return r}function f(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n=0,i=0;t.cmpn(-n)>0||e.cmpn(-i)>0;){var o=t.andln(3)+n&3,a=e.andln(3)+i&3;3===o&&(o=-1),3===a&&(a=-1);var f;if(0===(1&o))f=0;else{var s=t.andln(7)+n&7;f=3!==s&&5!==s||2!==a?o:-o}r[0].push(f);var u;if(0===(1&a))u=0;else{var s=e.andln(7)+i&7;u=3!==s&&5!==s||2!==o?a:-a}r[1].push(u),2*n===f+1&&(n=1-n),2*i===u+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r}function s(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}}function u(t){return"string"==typeof t?c.toArray(t,"hex"):t}function h(t){return new d(t,"hex","le")}var c=e,d=r(30);c.assert=function(t,e){if(!t)throw new Error(e||"Assertion failed")},c.toArray=n,c.zero2=i,c.toHex=o,c.encode=function(t,e){return"hex"===e?o(t):t},c.getNAF=a,c.getJSF=f,c.cachedProperty=s,c.parseBytes=u,c.intFromLE=h},function(t,e,r){function n(t){this.rand=t}var i;if(t.exports=function(t){return i||(i=new n(null)),i.generate(t)},t.exports.Rand=n,n.prototype.generate=function(t){return this._rand(t)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.crypto.getRandomValues(e),e}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.msCrypto.getRandomValues(e),e}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=r(610);n.prototype._rand=function(t){return o.randomBytes(t)}}catch(t){n.prototype._rand=function(t){for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e}}},function(t,e,r){function n(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var i=r(50),o=i.utils,a=o.assert;e.BlockHash=n,n.prototype.update=function(t,e){if(t=o.toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=o.join32(t,0,t.length-r,this.endian);for(var n=0;n<t.length;n+=this._delta32)this._update(t,n,n+this._delta32)}return this},n.prototype.digest=function(t){return this.update(this._pad()),a(null===this.pending),this._digest(t)},n.prototype._pad=function(){var t=this.pendingTotal,e=this._delta8,r=e-(t+this.padLength)%e,n=new Array(r+this.padLength);n[0]=128;for(var i=1;i<r;i++)n[i]=0;if(t<<=3,"big"===this.endian){for(var o=8;o<this.padLength;o++)n[i++]=0;n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=t>>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else{n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0;for(var o=8;o<this.padLength;o++)n[i++]=0}return n}},function(t,e,r){function n(t,e,r){return this instanceof n?(this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,void this._init(o.toArray(e,r))):new n(t,e,r)}var i=r(50),o=i.utils,a=o.assert;t.exports=n,n.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),a(t.length<=this.blockSize);for(var e=t.length;e<this.blockSize;e++)t.push(0);for(var e=0;e<t.length;e++)t[e]^=54;this.inner=(new this.Hash).update(t);for(var e=0;e<t.length;e++)t[e]^=106;this.outer=(new this.Hash).update(t)},n.prototype.update=function(t,e){return this.inner.update(t,e),this},n.prototype.digest=function(t){return this.outer.update(this.inner.digest()),this.outer.digest(t)}},function(t,e,r){function n(){return this instanceof n?(l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.endian="little")):new n}function i(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}function o(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function a(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}var f=r(50),s=f.utils,u=s.rotl32,h=s.sum32,c=s.sum32_3,d=s.sum32_4,l=f.common.BlockHash;s.inherits(n,l),e.ripemd160=n,n.blockSize=512,n.outSize=160,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.h[0],n=this.h[1],f=this.h[2],s=this.h[3],l=this.h[4],m=r,g=n,w=f,_=s,M=l,S=0;S<80;S++){var E=h(u(d(r,i(S,n,f,s),t[p[S]+e],o(S)),v[S]),l);r=l,l=s,s=u(f,10),f=n,n=E,E=h(u(d(m,i(79-S,g,w,_),t[b[S]+e],a(S)),y[S]),M),m=M,M=_,_=u(w,10),w=g,g=E}E=c(this.h[1],f,_),this.h[1]=c(this.h[2],s,M),this.h[2]=c(this.h[3],l,m),this.h[3]=c(this.h[4],r,g),this.h[4]=c(this.h[0],n,w),this.h[0]=E},n.prototype._digest=function(t){return"hex"===t?s.toHex32(this.h,"little"):s.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],b=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],v=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],y=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(t,e,r){function n(){return this instanceof n?(X.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Y,void(this.W=new Array(64))):new n}function i(){return this instanceof i?(n.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new i}function o(){return this instanceof o?(X.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=W,void(this.W=new Array(160))):new o}function a(){return this instanceof a?(o.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new a}function f(){return this instanceof f?(X.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new f}function s(t,e,r){return t&e^~t&r}function u(t,e,r){return t&e^t&r^e&r}function h(t,e,r){return t^e^r}function c(t){return R(t,2)^R(t,13)^R(t,22)}function d(t){return R(t,6)^R(t,11)^R(t,25)}function l(t){return R(t,7)^R(t,18)^t>>>3}function p(t){return R(t,17)^R(t,19)^t>>>10}function b(t,e,r,n){return 0===t?s(e,r,n):1===t||3===t?h(e,r,n):2===t?u(e,r,n):void 0}function v(t,e,r,n,i,o){var a=t&r^~t&i;return a<0&&(a+=4294967296),a}function y(t,e,r,n,i,o){var a=e&n^~e&o;return a<0&&(a+=4294967296),a}function m(t,e,r,n,i,o){var a=t&r^t&i^r&i;return a<0&&(a+=4294967296),a}function g(t,e,r,n,i,o){var a=e&n^e&o^n&o;return a<0&&(a+=4294967296),a}function w(t,e){var r=N(t,e,28),n=N(e,t,2),i=N(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function _(t,e){var r=L(t,e,28),n=L(e,t,2),i=L(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function M(t,e){var r=N(t,e,14),n=N(t,e,18),i=N(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function S(t,e){var r=L(t,e,14),n=L(t,e,18),i=L(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function E(t,e){var r=N(t,e,1),n=N(t,e,8),i=U(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function A(t,e){var r=L(t,e,1),n=L(t,e,8),i=z(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function k(t,e){var r=N(t,e,19),n=N(e,t,29),i=U(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}function x(t,e){var r=L(t,e,19),n=L(e,t,29),i=z(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}var I=r(50),B=I.utils,O=B.assert,R=B.rotr32,P=B.rotl32,T=B.sum32,j=B.sum32_4,C=B.sum32_5,N=B.rotr64_hi,L=B.rotr64_lo,U=B.shr64_hi,z=B.shr64_lo,D=B.sum64,q=B.sum64_hi,F=B.sum64_lo,K=B.sum64_4_hi,G=B.sum64_4_lo,V=B.sum64_5_hi,H=B.sum64_5_lo,X=I.common.BlockHash,Y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],W=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];B.inherits(n,X),e.sha256=n,n.blockSize=512,n.outSize=256,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=j(p(r[n-2]),r[n-7],l(r[n-15]),r[n-16]);var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],h=this.h[4],b=this.h[5],v=this.h[6],y=this.h[7];O(this.k.length===r.length);for(var n=0;n<r.length;n++){var m=C(y,d(h),s(h,b,v),this.k[n],r[n]),g=T(c(i),u(i,o,a));y=v,v=b,b=h,h=T(f,m),f=a,a=o,o=i,i=T(m,g)}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],h),this.h[5]=T(this.h[5],b),this.h[6]=T(this.h[6],v),this.h[7]=T(this.h[7],y)},n.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(i,n),e.sha224=i,i.blockSize=512,i.outSize=224,i.hmacStrength=192,i.padLength=64,i.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,7),"big"):B.split32(this.h.slice(0,7),"big")},B.inherits(o,X),e.sha512=o,o.blockSize=1024,o.outSize=512,o.hmacStrength=192,o.padLength=128,o.prototype._prepareBlock=function(t,e){for(var r=this.W,n=0;n<32;n++)r[n]=t[e+n];for(;n<r.length;n+=2){var i=k(r[n-4],r[n-3]),o=x(r[n-4],r[n-3]),a=r[n-14],f=r[n-13],s=E(r[n-30],r[n-29]),u=A(r[n-30],r[n-29]),h=r[n-32],c=r[n-31];r[n]=K(i,o,a,f,s,u,h,c),r[n+1]=G(i,o,a,f,s,u,h,c)}},o.prototype._update=function(t,e){this._prepareBlock(t,e);var r=this.W,n=this.h[0],i=this.h[1],o=this.h[2],a=this.h[3],f=this.h[4],s=this.h[5],u=this.h[6],h=this.h[7],c=this.h[8],d=this.h[9],l=this.h[10],p=this.h[11],b=this.h[12],E=this.h[13],A=this.h[14],k=this.h[15];O(this.k.length===r.length);for(var x=0;x<r.length;x+=2){var I=A,B=k,R=M(c,d),P=S(c,d),T=v(c,d,l,p,b,E),j=y(c,d,l,p,b,E),C=this.k[x],N=this.k[x+1],L=r[x],U=r[x+1],z=V(I,B,R,P,T,j,C,N,L,U),K=H(I,B,R,P,T,j,C,N,L,U),I=w(n,i),B=_(n,i),R=m(n,i,o,a,f,s),P=g(n,i,o,a,f,s),G=q(I,B,R,P),X=F(I,B,R,P);A=b,k=E,b=l,E=p,l=c,p=d,c=q(u,h,z,K),d=F(h,h,z,K),u=f,h=s,f=o,s=a,o=n,a=i,n=q(z,K,G,X),i=F(z,K,G,X)}D(this.h,0,n,i),D(this.h,2,o,a),D(this.h,4,f,s),D(this.h,6,u,h),D(this.h,8,c,d),D(this.h,10,l,p),D(this.h,12,b,E),D(this.h,14,A,k)},o.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(a,o),e.sha384=a,a.blockSize=1024,a.outSize=384,a.hmacStrength=192,a.padLength=128,a.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,12),"big"):B.split32(this.h.slice(0,12),"big")},B.inherits(f,X),e.sha1=f,f.blockSize=512,f.outSize=160,f.hmacStrength=80,f.padLength=64,f.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=P(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);for(var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],s=this.h[4],n=0;n<r.length;n++){var u=~~(n/20),h=C(P(i,5),b(u,o,a,f),s,r[n],Z[u]);s=f,f=a,a=P(o,30),o=i,i=h}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],s)},f.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")}},function(t,e,r){function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}else for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}function i(t){for(var e="",r=0;r<t.length;r++)e+=f(t[r].toString(16));return e}function o(t){var e=t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24;return e>>>0}function a(t,e){for(var r="",n=0;n<t.length;n++){var i=t[n];"little"===e&&(i=o(i)),r+=s(i.toString(16))}return r}function f(t){return 1===t.length?"0"+t:t}function s(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}function u(t,e,r,n){var i=r-e;y(i%4===0);for(var o=new Array(i/4),a=0,f=e;a<o.length;a++,f+=4){var s;s="big"===n?t[f]<<24|t[f+1]<<16|t[f+2]<<8|t[f+3]:t[f+3]<<24|t[f+2]<<16|t[f+1]<<8|t[f],o[a]=s>>>0}return o}function h(t,e){for(var r=new Array(4*t.length),n=0,i=0;n<t.length;n++,i+=4){var o=t[n];"big"===e?(r[i]=o>>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r}function c(t,e){return t>>>e|t<<32-e}function d(t,e){return t<<e|t>>>32-e}function l(t,e){return t+e>>>0}function p(t,e,r){return t+e+r>>>0}function b(t,e,r,n){return t+e+r+n>>>0}function v(t,e,r,n,i){return t+e+r+n+i>>>0}function y(t,e){if(!t)throw new Error(e||"Assertion failed")}function m(t,e,r,n){var i=t[e],o=t[e+1],a=n+o>>>0,f=(a<n?1:0)+r+i;t[e]=f>>>0,t[e+1]=a}function g(t,e,r,n){var i=e+n>>>0,o=(i<e?1:0)+t+r;return o>>>0}function w(t,e,r,n){var i=e+n;return i>>>0}function _(t,e,r,n,i,o,a,f){var s=0,u=e;u=u+n>>>0,s+=u<e?1:0,u=u+o>>>0,s+=u<o?1:0,u=u+f>>>0,s+=u<f?1:0;var h=t+r+i+a+s;return h>>>0}function M(t,e,r,n,i,o,a,f){var s=e+n+o+f;return s>>>0}function S(t,e,r,n,i,o,a,f,s,u){var h=0,c=e;c=c+n>>>0,h+=c<e?1:0,c=c+o>>>0,h+=c<o?1:0,c=c+f>>>0,h+=c<f?1:0,c=c+u>>>0,h+=c<u?1:0;var d=t+r+i+a+s+h;return d>>>0}function E(t,e,r,n,i,o,a,f,s,u){var h=e+n+o+f+u;return h>>>0}function A(t,e,r){var n=e<<32-r|t>>>r;return n>>>0}function k(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}function x(t,e,r){return t>>>r}function I(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}var B=e,O=r(2);B.toArray=n,B.toHex=i,B.htonl=o,B.toHex32=a,B.zero2=f,B.zero8=s,B.join32=u,B.split32=h,B.rotr32=c,B.rotl32=d,B.sum32=l,B.sum32_3=p,B.sum32_4=b,B.sum32_5=v,B.assert=y,B.inherits=O,e.sum64=m,e.sum64_hi=g,e.sum64_lo=w,e.sum64_4_hi=_,e.sum64_4_lo=M,e.sum64_5_hi=S,e.sum64_5_lo=E,e.rotr64_hi=A,e.rotr64_lo=k,e.shr64_hi=x,e.shr64_lo=I},function(t,e,r){"use strict";(function(t){function r(e,r){if(e.length%o!==0){var n=e.length+(o-e.length%o);e=t.concat([e,a],n)}for(var i=[],f=r?e.readInt32BE:e.readInt32LE,s=0;s<e.length;s+=o)i.push(f.call(e,s));return i}function n(e,r,n){for(var i=new t(r),o=n?i.writeInt32BE:i.writeInt32LE,a=0;a<e.length;a++)o.call(i,e[a],4*a,!0);return i}function i(e,i,o,a){t.isBuffer(e)||(e=new t(e));var s=i(r(e,a),e.length*f);return n(s,o,a)}var o=4,a=new t(o);a.fill(0);var f=8;e.hash=i}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){for(var e=[],r=0,n=0;r<t.length;r++,n+=8)e[n>>>5]|=t[r]<<24-n%32;return e}function n(t){for(var e=[],r=0;r<32*t.length;r+=8)e.push(t[r>>>5]>>>24-r%32&255);return e}function i(t,e,r){for(var n=0;n<16;n++){var i=r+n,c=e[i];e[i]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var m,g,w,_,M,S,E,A,k,x;S=m=t[0],E=g=t[1],A=w=t[2],k=_=t[3],x=M=t[4];var I;for(n=0;n<80;n+=1)I=m+e[r+d[n]]|0,I+=n<16?o(g,w,_)+v[0]:n<32?a(g,w,_)+v[1]:n<48?f(g,w,_)+v[2]:n<64?s(g,w,_)+v[3]:u(g,w,_)+v[4],I|=0,I=h(I,p[n]),I=I+M|0,m=M,M=_,_=h(w,10),w=g,g=I,I=S+e[r+l[n]]|0,I+=n<16?u(E,A,k)+y[0]:n<32?s(E,A,k)+y[1]:n<48?f(E,A,k)+y[2]:n<64?a(E,A,k)+y[3]:o(E,A,k)+y[4],I|=0,I=h(I,b[n]),I=I+x|0,S=x,x=k,k=h(A,10),A=E,E=I;I=t[1]+w+k|0,t[1]=t[2]+_+x|0,t[2]=t[3]+M+S|0,t[3]=t[4]+m+E|0,t[4]=t[0]+g+A|0,t[0]=I}function o(t,e,r){return t^e^r}function a(t,e,r){return t&e|~t&r}function f(t,e,r){return(t|~e)^r}function s(t,e,r){return t&r|e&~r}function u(t,e,r){return t^(e|~r)}function h(t,e){return t<<e|t>>>32-e}function c(t){var o=[1732584193,4023233417,2562383102,271733878,3285377520];"string"==typeof t&&(t=new e(t,"utf8"));var a=r(t),f=8*t.length,s=8*t.length;a[f>>>5]|=128<<24-f%32,a[(f+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8);for(var u=0;u<a.length;u+=16)i(o,a,u);for(u=0;u<5;u++){var h=o[u];o[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}var c=n(o);return new e(c)}/** @preserve
(c) 2012 by Cédric Mesnil. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
var d=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],l=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],p=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],v=[0,1518500249,1859775393,2400959708,2840853838],y=[1352829926,1548603684,1836072691,2053994217,0];t.exports=c}).call(e,r(1).Buffer)},function(t,e,r){var e=t.exports=function(t){t=t.toLowerCase();var r=e[t];if(!r)throw new Error(t+" is not supported (we accept pull requests)");return new r};e.sha=r(569),e.sha1=r(570),e.sha224=r(571),e.sha256=r(227),e.sha384=r(572),e.sha512=r(228)},function(t,e,r){(function(e){function n(){this.init(),this._w=h,s.call(this,64,56)}function i(t){return t<<5|t>>>27}function o(t){return t<<30|t>>>2}function a(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}var f=r(2),s=r(60),u=[1518500249,1859775393,-1894007588,-899497514],h=new Array(80);f(n,s),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._a,n=0|this._b,f=0|this._c,s=0|this._d,h=0|this._e,c=0;c<16;++c)e[c]=t.readInt32BE(4*c);for(;c<80;++c)e[c]=e[c-3]^e[c-8]^e[c-14]^e[c-16];for(var d=0;d<80;++d){var l=~~(d/20),p=i(r)+a(l,n,f,s)+h+e[d]+u[l]|0;h=s,s=f,f=o(n),n=r,r=p}this._a=r+this._a|0,this._b=n+this._b|0,this._c=f+this._c|0,this._d=s+this._d|0,this._e=h+this._e|0},n.prototype._hash=function(){var t=new e(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=c,u.call(this,64,56)}function i(t){return t<<1|t>>>31}function o(t){return t<<5|t>>>27}function a(t){return t<<30|t>>>2}function f(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}var s=r(2),u=r(60),h=[1518500249,1859775393,-1894007588,-899497514],c=new Array(80);s(n,u),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._a,n=0|this._b,s=0|this._c,u=0|this._d,c=0|this._e,d=0;d<16;++d)e[d]=t.readInt32BE(4*d);for(;d<80;++d)e[d]=i(e[d-3]^e[d-8]^e[d-14]^e[d-16]);for(var l=0;l<80;++l){var p=~~(l/20),b=o(r)+f(p,n,s,u)+c+e[l]+h[p]|0;c=u,u=s,s=a(n),n=r,r=b}this._a=r+this._a|0,this._b=n+this._b|0,this._c=s+this._c|0,this._d=u+this._d|0,this._e=c+this._e|0},n.prototype._hash=function(){var t=new e(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=f,a.call(this,64,56)}var i=r(2),o=r(227),a=r(60),f=new Array(64);i(n,o),n.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},n.prototype._hash=function(){var t=new e(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=f,a.call(this,128,112)}var i=r(2),o=r(228),a=r(60),f=new Array(160);i(n,o),n.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},n.prototype._hash=function(){function t(t,e,n){r.writeInt32BE(t,n),r.writeInt32BE(e,n+4)}var r=new e(48);return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),r},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e){var r=new t(a[e].prime,"hex"),n=new t(a[e].gen,"hex");return new f(r,n)}function i(e,r,n,a){return t.isBuffer(r)||void 0===s[r]?i(e,"binary",r,n):(r=r||"binary",a=a||"binary",n=n||new t([2]),t.isBuffer(n)||(n=new t(n,a)),"number"==typeof e?new f(o(e,n),n,!0):(t.isBuffer(e)||(e=new t(e,r)),new f(e,n,!0)))}var o=r(229),a=r(468),f=r(574),s={binary:!0,hex:!0,base64:!0};e.DiffieHellmanGroup=e.createDiffieHellmanGroup=e.getDiffieHellman=n,e.createDiffieHellman=e.DiffieHellman=i}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._pub=new s(t),this}function i(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._priv=new s(t),this}function o(t,e){var r=e.toString("hex"),n=[r,t.toString(16)].join("_");if(n in m)return m[n];var i=0;if(t.isEven()||!v.simpleSieve||!v.fermatTest(t)||!h.test(t))return i+=1,i+="02"===r||"05"===r?8:4,m[n]=i,i;h.test(t.shrn(1))||(i+=2);var o;switch(r){case"02":t.mod(c).cmp(d)&&(i+=8);break;case"05":o=t.mod(l),o.cmp(p)&&o.cmp(b)&&(i+=8);break;default:i+=4}return m[n]=i,i}function a(t,e,r){this.setGenerator(e),this.__prime=new s(t),this._prime=s.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=n,this.setPrivateKey=i):this._primeCode=8}function f(t,r){var n=new e(t.toArray());return r?n.toString(r):n}var s=r(150),u=r(230),h=new u,c=new s(24),d=new s(11),l=new s(10),p=new s(3),b=new s(7),v=r(229),y=r(61);t.exports=a;var m={};Object.defineProperty(a.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=o(this.__prime,this.__gen)),this._primeCode}}),a.prototype.generateKeys=function(){return this._priv||(this._priv=new s(y(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},a.prototype.computeSecret=function(t){t=new s(t),t=t.toRed(this._prime);var r=t.redPow(this._priv).fromRed(),n=new e(r.toArray()),i=this.getPrime();if(n.length<i.length){var o=new e(i.length-n.length);o.fill(0),n=e.concat([o,n])}return n},a.prototype.getPublicKey=function(t){return f(this._pub,t)},a.prototype.getPrivateKey=function(t){return f(this._priv,t)},a.prototype.getPrime=function(t){return f(this.__prime,t)},a.prototype.getGenerator=function(t){return f(this._gen,t)},a.prototype.setGenerator=function(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this.__gen=t,this._gen=new s(t),this}}).call(e,r(1).Buffer)},function(t,e,r){function n(t){this.rand=t}var i;if(t.exports=function(t){return i||(i=new n(null)),i.generate(t)},t.exports.Rand=n,n.prototype.generate=function(t){return this._rand(t)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.crypto.getRandomValues(e),e}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.msCrypto.getRandomValues(e),e}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=r(611);n.prototype._rand=function(t){return o.randomBytes(t)}}catch(t){n.prototype._rand=function(t){for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e}}},function(t,e){var r=Math.pow(2,30)-1;t.exports=function(t,e){if("number"!=typeof t)throw new TypeError("Iterations not a number");if(t<0)throw new TypeError("Bad iterations");if("number"!=typeof e)throw new TypeError("Key length not a number");if(e<0||e>r||e!==e)throw new TypeError("Bad key length")}},function(t,e,r){e.publicEncrypt=r(593),e.privateDecrypt=r(592),e.privateEncrypt=function(t,r){return e.publicEncrypt(t,r,!0)},e.publicDecrypt=function(t,r){return e.privateDecrypt(t,r,!0)}},function(t,e,r){var n=r(106),i=n.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});e.RSAPrivateKey=i;var o=n.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});e.RSAPublicKey=o;var a=n.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(f),this.key("subjectPublicKey").bitstr())});e.PublicKey=a;var f=n.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())}),s=n.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(f),this.key("subjectPrivateKey").octstr())});e.PrivateKey=s;var u=n.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});e.EncryptedPrivateKey=u;var h=n.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});e.DSAPrivateKey=h,e.DSAparam=n.define("DSAparam",function(){this.int()});var c=n.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(d),this.key("publicKey").optional().explicit(1).bitstr())});e.ECPrivateKey=c;var d=n.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});e.signature=n.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},function(t,e,r){(function(e){var n=/Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m,i=/^-----BEGIN (.*) KEY-----\r?\n/m,o=/^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m,a=r(153),f=r(239);t.exports=function(t,r){var s,u=t.toString(),h=u.match(n);if(h){var c="aes"+h[1],d=new e(h[2],"hex"),l=new e(h[3].replace(/\r?\n/g,""),"base64"),p=a(r,d.slice(0,8),parseInt(h[1],10)).key,b=[],v=f.createDecipheriv(c,p,d);b.push(v.update(l)),b.push(v.final()),s=e.concat(b)}else{var y=u.match(o);s=new e(y[2].replace(/\r?\n/g,""),"base64")}var m=u.match(i)[1]+" KEY";return{tag:m,data:s}}}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){this.name=t,this.body=e,this.decoders={},this.encoders={}}var i=r(106),o=r(2),a=e;a.define=function(t,e){return new n(t,e)},n.prototype._createNamed=function(t){var e;try{e=r(251).runInThisContext("(function "+this.name+"(entity) {\n this._initNamed(entity);\n})")}catch(t){e=function(t){this._initNamed(t)}}return o(e,t),e.prototype._initNamed=function(e){t.call(this,e)},new e(this)},n.prototype._getDecoder=function(t){return t=t||"der",this.decoders.hasOwnProperty(t)||(this.decoders[t]=this._createNamed(i.decoders[t])),this.decoders[t]},n.prototype.decode=function(t,e,r){return this._getDecoder(e).decode(t,r)},n.prototype._getEncoder=function(t){return t=t||"der",this.encoders.hasOwnProperty(t)||(this.encoders[t]=this._createNamed(i.encoders[t])),this.encoders[t]},n.prototype.encode=function(t,e,r){return this._getEncoder(e).encode(t,r)}},function(t,e,r){function n(t,e){var r={};this._baseState=r,r.enc=t,r.parent=e||null,r.children=null,r.tag=null,r.args=null,r.reverseArgs=null,r.choice=null,r.optional=!1,r.any=!1,r.obj=!1,r.use=null,r.useDecoder=null,r.key=null,r.default=null,r.explicit=null,r.implicit=null,r.contains=null,r.parent||(r.children=[],this._wrap())}var i=r(71).Reporter,o=r(71).EncoderBuffer,a=r(71).DecoderBuffer,f=r(588),s=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],u=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(s),h=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];t.exports=n;var c=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];n.prototype.clone=function(){var t=this._baseState,e={};c.forEach(function(r){e[r]=t[r]});var r=new this.constructor(e.parent);return r._baseState=e,r},n.prototype._wrap=function(){var t=this._baseState;u.forEach(function(e){this[e]=function(){var r=new this.constructor(this);return t.children.push(r),r[e].apply(r,arguments)}},this)},n.prototype._init=function(t){var e=this._baseState;f(null===e.parent),t.call(this),e.children=e.children.filter(function(t){return t._baseState.parent===this},this),f.equal(e.children.length,1,"Root node can have only one child")},n.prototype._useArgs=function(t){var e=this._baseState,r=t.filter(function(t){return t instanceof this.constructor},this);t=t.filter(function(t){return!(t instanceof this.constructor)},this),0!==r.length&&(f(null===e.children),e.children=r,r.forEach(function(t){t._baseState.parent=this},this)),0!==t.length&&(f(null===e.args),e.args=t,e.reverseArgs=t.map(function(t){if("object"!=typeof t||t.constructor!==Object)return t;var e={};return Object.keys(t).forEach(function(r){r==(0|r)&&(r|=0);var n=t[r];e[n]=r}),e}))},h.forEach(function(t){n.prototype[t]=function(){var e=this._baseState;throw new Error(t+" not implemented for encoding: "+e.enc)}}),s.forEach(function(t){n.prototype[t]=function(){var e=this._baseState,r=Array.prototype.slice.call(arguments);return f(null===e.tag),e.tag=t,this._useArgs(r),this}}),n.prototype.use=function(t){var e=this._baseState;return f(null===e.use),e.use=t,this},n.prototype.optional=function(){var t=this._baseState;return t.optional=!0,this},n.prototype.def=function(t){var e=this._baseState;return f(null===e.default),e.default=t,e.optional=!0,this},n.prototype.explicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.explicit=t,this},n.prototype.implicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.implicit=t,this},n.prototype.obj=function(){var t=this._baseState,e=Array.prototype.slice.call(arguments);return t.obj=!0,0!==e.length&&this._useArgs(e),this},n.prototype.key=function(t){var e=this._baseState;return f(null===e.key),e.key=t,this},n.prototype.any=function(){var t=this._baseState;return t.any=!0,this},n.prototype.choice=function(t){var e=this._baseState;return f(null===e.choice),e.choice=t,this._useArgs(Object.keys(t).map(function(e){return t[e]})),this},n.prototype.contains=function(t){var e=this._baseState;return f(null===e.use),e.contains=t,this},n.prototype._decode=function(t,e){var r=this._baseState;if(null===r.parent)return t.wrapResult(r.children[0]._decode(t,e));var n=r.default,i=!0,o=null;if(null!==r.key&&(o=t.enterKey(r.key)),r.optional){var f=null;if(null!==r.explicit?f=r.explicit:null!==r.implicit?f=r.implicit:null!==r.tag&&(f=r.tag),null!==f||r.any){if(i=this._peekTag(t,f,r.any),t.isError(i))return i}else{var s=t.save();try{null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),i=!0}catch(t){i=!1}t.restore(s)}}var u;if(r.obj&&i&&(u=t.enterObject()),i){if(null!==r.explicit){var h=this._decodeTag(t,r.explicit);if(t.isError(h))return h;t=h}var c=t.offset;if(null===r.use&&null===r.choice){if(r.any)var s=t.save();var d=this._decodeTag(t,null!==r.implicit?r.implicit:r.tag,r.any);if(t.isError(d))return d;r.any?n=t.raw(s):t=d}if(e&&e.track&&null!==r.tag&&e.track(t.path(),c,t.length,"tagged"),e&&e.track&&null!==r.tag&&e.track(t.path(),t.offset,t.length,"content"),n=r.any?n:null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),t.isError(n))return n;if(r.any||null!==r.choice||null===r.children||r.children.forEach(function(r){r._decode(t,e)}),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){var l=new a(n);n=this._getUse(r.contains,t._reporterState.obj)._decode(l,e)}}return r.obj&&i&&(n=t.leaveObject(u)),null===r.key||null===n&&i!==!0?null!==o&&t.exitKey(o):t.leaveKey(o,r.key,n),n},n.prototype._decodeGeneric=function(t,e,r){var n=this._baseState;return"seq"===t||"set"===t?null:"seqof"===t||"setof"===t?this._decodeList(e,t,n.args[0],r):/str$/.test(t)?this._decodeStr(e,t,r):"objid"===t&&n.args?this._decodeObjid(e,n.args[0],n.args[1],r):"objid"===t?this._decodeObjid(e,null,null,r):"gentime"===t||"utctime"===t?this._decodeTime(e,t,r):"null_"===t?this._decodeNull(e,r):"bool"===t?this._decodeBool(e,r):"int"===t||"enum"===t?this._decodeInt(e,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,e._reporterState.obj)._decode(e,r):e.error("unknown tag: "+t)},n.prototype._getUse=function(t,e){var r=this._baseState;return r.useDecoder=this._use(t,e),f(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},n.prototype._decodeChoice=function(t,e){var r=this._baseState,n=null,i=!1;return Object.keys(r.choice).some(function(o){var a=t.save(),f=r.choice[o];try{var s=f._decode(t,e);if(t.isError(s))return!1;n={type:o,value:s},i=!0}catch(e){return t.restore(a),!1}return!0},this),i?n:t.error("Choice not matched")},n.prototype._createEncoderBuffer=function(t){return new o(t,this.reporter)},n.prototype._encode=function(t,e,r){var n=this._baseState;if(null===n.default||n.default!==t){var i=this._encodeValue(t,e,r);if(void 0!==i&&!this._skipDefault(i,e,r))return i}},n.prototype._encodeValue=function(t,e,r){var n=this._baseState;if(null===n.parent)return n.children[0]._encode(t,e||new i);var o=null;if(this.reporter=e,n.optional&&void 0===t){if(null===n.default)return;t=n.default}var a=null,f=!1;if(n.any)o=this._createEncoderBuffer(t);else if(n.choice)o=this._encodeChoice(t,e);else if(n.contains)a=this._getUse(n.contains,r)._encode(t,e),f=!0;else if(n.children)a=n.children.map(function(r){if("null_"===r._baseState.tag)return r._encode(null,e,t);if(null===r._baseState.key)return e.error("Child should have a key");var n=e.enterKey(r._baseState.key);if("object"!=typeof t)return e.error("Child expected, but input is not object");var i=r._encode(t[r._baseState.key],e,t);return e.leaveKey(n),i},this).filter(function(t){return t}),a=this._createEncoderBuffer(a);else if("seqof"===n.tag||"setof"===n.tag){if(!n.args||1!==n.args.length)return e.error("Too many args for : "+n.tag);if(!Array.isArray(t))return e.error("seqof/setof, but data is not Array");var s=this.clone();s._baseState.implicit=null,a=this._createEncoderBuffer(t.map(function(r){var n=this._baseState;return this._getUse(n.args[0],t)._encode(r,e)},s))}else null!==n.use?o=this._getUse(n.use,r)._encode(t,e):(a=this._encodePrimitive(n.tag,t),f=!0);var o;if(!n.any&&null===n.choice){var u=null!==n.implicit?n.implicit:n.tag,h=null===n.implicit?"universal":"context";null===u?null===n.use&&e.error("Tag could be ommited only for .use()"):null===n.use&&(o=this._encodeComposite(u,f,h,a))}return null!==n.explicit&&(o=this._encodeComposite(n.explicit,!1,"context",o)),o},n.prototype._encodeChoice=function(t,e){var r=this._baseState,n=r.choice[t.type];return n||f(!1,t.type+" not found in "+JSON.stringify(Object.keys(r.choice))),n._encode(t.value,e)},n.prototype._encodePrimitive=function(t,e){var r=this._baseState;if(/str$/.test(t))return this._encodeStr(e,t);if("objid"===t&&r.args)return this._encodeObjid(e,r.reverseArgs[0],r.args[1]);if("objid"===t)return this._encodeObjid(e,null,null);if("gentime"===t||"utctime"===t)return this._encodeTime(e,t);if("null_"===t)return this._encodeNull();if("int"===t||"enum"===t)return this._encodeInt(e,r.args&&r.reverseArgs[0]);if("bool"===t)return this._encodeBool(e);throw new Error("Unsupported tag: "+t)},n.prototype._isNumstr=function(t){return/^[0-9 ]*$/.test(t)},n.prototype._isPrintstr=function(t){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(t)}},function(t,e,r){function n(t){this._reporterState={obj:null,path:[],options:t||{},errors:[]}}function i(t,e){this.path=t,this.rethrow(e)}var o=r(2);e.Reporter=n,n.prototype.isError=function(t){return t instanceof i},n.prototype.save=function(){var t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},n.prototype.restore=function(t){var e=this._reporterState;e.obj=t.obj,e.path=e.path.slice(0,t.pathLen)},n.prototype.enterKey=function(t){return this._reporterState.path.push(t)},n.prototype.exitKey=function(t){var e=this._reporterState;e.path=e.path.slice(0,t-1)},n.prototype.leaveKey=function(t,e,r){var n=this._reporterState;this.exitKey(t),null!==n.obj&&(n.obj[e]=r)},n.prototype.path=function(){return this._reporterState.path.join("/")},n.prototype.enterObject=function(){var t=this._reporterState,e=t.obj;return t.obj={},e},n.prototype.leaveObject=function(t){var e=this._reporterState,r=e.obj;return e.obj=t,r},n.prototype.error=function(t){var e,r=this._reporterState,n=t instanceof i;if(e=n?t:new i(r.path.map(function(t){return"["+JSON.stringify(t)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw e;return n||r.errors.push(e),e},n.prototype.wrapResult=function(t){var e=this._reporterState;return e.options.partial?{result:this.isError(t)?null:t,errors:e.errors}:t},o(i,Error),i.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(t){this.stack=t.stack}return this}},function(t,e,r){var n=r(235);e.tagClass={0:"universal",1:"application",2:"context",3:"private"},e.tagClassByName=n._reverse(e.tagClass),e.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},e.tagByName=n._reverse(e.tag)},function(t,e,r){var n=e;n.der=r(236),n.pem=r(585)},function(t,e,r){function n(t){a.call(this,t),this.enc="pem"}var i=r(2),o=r(1).Buffer,a=r(236);i(n,a),t.exports=n,n.prototype.decode=function(t,e){for(var r=t.toString().split(/[\r\n]+/g),n=e.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,f=-1,s=-1,u=0;u<r.length;u++){var h=r[u].match(i);if(null!==h&&h[2]===n){if(f!==-1){if("END"!==h[1])break;s=u;break}if("BEGIN"!==h[1])break;f=u}}if(f===-1||s===-1)throw new Error("PEM section not found for: "+n);var c=r.slice(f+1,s).join("");c.replace(/[^a-z0-9\+\/=]+/gi,"");var d=new o(c,"base64");return a.prototype.decode.call(this,d,e)}},function(t,e,r){var n=e;n.der=r(237),n.pem=r(587)},function(t,e,r){function n(t){o.call(this,t),this.enc="pem"}var i=r(2),o=r(237);i(n,o),t.exports=n,n.prototype.encode=function(t,e){for(var r=o.prototype.encode.call(this,t),n=r.toString("base64"),i=["-----BEGIN "+e.label+"-----"],a=0;a<n.length;a+=64)i.push(n.slice(a,a+64));return i.push("-----END "+e.label+"-----"),i.join("\n")}},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._last=void 0,this._cipher=new s.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(t){for(var e=t[15],r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}function a(e,r,i){var o=c[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(b[o.mode],r,i,!0):"auth"===o.type?new l(b[o.mode],r,i,!0):new n(b[o.mode],r,i)}function f(t,e){var r=c[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=p(e,!1,r.key,r.iv);return a(t,n.key,n.iv)}var s=r(107),u=r(109),h=r(2),c=r(152),d=r(246),l=r(238),p=r(153);h(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return o(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},i.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:r(244),CBC:r(240),CFB:r(241),CFB8:r(243),CFB1:r(242),OFB:r(245),CTR:r(108),GCM:r(108)};e.createDecipher=f,e.createDecipheriv=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(s.call(this),this._cache=new i,this._cipher=new f.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function a(t,e){var r=h[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(e,!1,r.key,r.iv);return o(t,n.key,n.iv)}var f=r(107),s=r(109),u=r(2),h=r(152),c=r(153),d=r(246),l=r(238);u(n,s),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if("10101010101010101010101010101010"!==t.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++n<e;)r.writeUInt8(e,n);var i=t.concat([this.cache,r]);return i};var p={ECB:r(244),CBC:r(240),CFB:r(241),CFB8:r(243),CFB1:r(242),OFB:r(245),CTR:r(108),GCM:r(108)};e.createCipheriv=o,e.createCipher=a}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){this.h=t,this.state=new e(16),this.state.fill(0),this.cache=new e("")}function n(t){return[t.readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)]}function i(t){t=t.map(o);var r=new e(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r}function o(t){var e,r;return e=t>s||t<0?(r=Math.abs(t)%s,t<0?s-r:r):t}function a(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}var f=new e(16);f.fill(0),t.exports=r,r.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},r.prototype._multiply=function(){for(var t,e,r,o=n(this.h),f=[0,0,0,0],s=-1;++s<128;){for(e=0!==(this.state[~~(s/8)]&1<<7-s%8),e&&(f=a(f,o)),r=0!==(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(f)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype.final=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,f],16)),this.ghash(i([0,t,0,r])),this.state};var s=Math.pow(2,32)}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){var n=(t.modulus,t.modulus.byteLength()),i=(r.length,c("sha1").update(new e("")).digest()),a=i.length;if(0!==r[0])throw new Error("decryption error");var u=r.slice(1,a+1),h=r.slice(a+1),d=s(u,f(h,a)),l=s(h,f(d,n-a-1));if(o(i,l.slice(0,a)))throw new Error("decryption error");for(var p=a;0===l[p];)p++;if(1!==l[p++])throw new Error("decryption error");return l.slice(p)}function i(t,e,r){for(var n=e.slice(0,2),i=2,o=0;0!==e[i++];)if(i>=e.length){o++;break}var a=e.slice(2,i-1);e.slice(i-1,i);if(("0002"!==n.toString("hex")&&!r||"0001"!==n.toString("hex")&&r)&&o++,a.length<8&&o++,o)throw new Error("decryption error");return e.slice(i)}function o(t,r){t=new e(t),r=new e(r);var n=0,i=t.length;t.length!==r.length&&(n++,i=Math.min(t.length,r.length));for(var o=-1;++o<i;)n+=t[o]^r[o];return n}var a=r(233),f=r(231),s=r(248),u=r(70),h=r(232),c=r(59),d=r(247);t.exports=function(t,r,o){var f;f=t.padding?t.padding:o?1:4;var s=a(t),c=s.modulus.byteLength();if(r.length>c||new u(r).cmp(s.modulus)>=0)throw new Error("decryption error");var l;l=o?d(new u(r),s):h(r,s);var p=new e(c-l.length);if(p.fill(0),l=e.concat([p,l],c),4===f)return n(s,l);if(1===f)return i(s,l,o);if(3===f)return l;throw new Error("unknown padding")}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){var n=t.modulus.byteLength(),i=r.length,o=s("sha1").update(new e("")).digest(),a=o.length,d=2*a;if(i>n-d-2)throw new Error("message too long");var l=new e(n-i-d-2);l.fill(0);var p=n-a-1,b=f(a),v=h(e.concat([o,l,new e([1]),r],p),u(b,p)),y=h(b,u(v,a));return new c(e.concat([new e([0]),y,v],n))}function i(t,r,n){var i=r.length,a=t.modulus.byteLength();if(i>a-11)throw new Error("message too long");var f;return n?(f=new e(a-i-3),f.fill(255)):f=o(a-i-3),new c(e.concat([new e([0,n?1:2]),f,new e([0]),r],a))}function o(t,r){for(var n,i=new e(t),o=0,a=f(2*t),s=0;o<t;)s===a.length&&(a=f(2*t),s=0),n=a[s++],n&&(i[o++]=n);return i}var a=r(233),f=r(61),s=r(59),u=r(231),h=r(248),c=r(70),d=r(247),l=r(232);t.exports=function(t,e,r){var o;o=t.padding?t.padding:r?1:4;var f,s=a(t);if(4===o)f=n(s,e);else if(1===o)f=i(s,e,r);else{if(3!==o)throw new Error("unknown padding");if(f=new c(e),f.cmp(s.modulus)>=0)throw new Error("data too long for modulus")}return r?l(f,s):d(f,s)}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];"."===i?t.splice(n,1):".."===i?(t.splice(n,1),
r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],n=0;n<t.length;n++)e(t[n],n,t)&&r.push(t[n]);return r}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,o=function(t){return i.exec(t).slice(1)};e.resolve=function(){for(var e="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,i="/"===a.charAt(0))}return e=r(n(e.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+e||"."},e.normalize=function(t){var i=e.isAbsolute(t),o="/"===a(t,-1);return t=r(n(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&o&&(t+="/"),(i?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},e.relative=function(t,r){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var r=t.length-1;r>=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=e.resolve(t).substr(1),r=e.resolve(r).substr(1);for(var i=n(t.split("/")),o=n(r.split("/")),a=Math.min(i.length,o.length),f=a,s=0;s<a;s++)if(i[s]!==o[s]){f=s;break}for(var u=[],s=f;s<i.length;s++)u.push("..");return u=u.concat(o.slice(f)),u.join("/")},e.sep="/",e.delimiter=":",e.dirname=function(t){var e=o(t),r=e[0],n=e[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},e.basename=function(t,e){var r=o(t)[2];return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r},e.extname=function(t){return o(t)[3]};var a="b"==="ab".substr(-1)?function(t,e,r){return t.substr(e,r)}:function(t,e,r){return e<0&&(e=t.length+e),t.substr(e,r)}}).call(e,r(26))},function(t,e,r){t.exports=r(51)},function(t,e,r){"use strict";function n(){this.head=null,this.tail=null,this.length=0}var i=(r(1).Buffer,r(156));t.exports=n,n.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},n.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},n.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},n.prototype.clear=function(){this.head=this.tail=null,this.length=0},n.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r},n.prototype.concat=function(t){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var e=i.allocUnsafe(t>>>0),r=this.head,n=0;r;)r.data.copy(e,n),n+=r.data.length,r=r.next;return e}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){(function(e){function r(t,e){function r(){if(!i){if(n("throwDeprecation"))throw new Error(e);n("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(n("noDeprecation"))return t;var i=!1;return r}function n(t){try{if(!e.localStorage)return!1}catch(t){return!1}var r=e.localStorage[t];return null!=r&&"true"===String(r).toLowerCase()}t.exports=r}).call(e,r(39))},function(t,e,r){t.exports=r(249)},function(t,e,r){(function(n){var i=function(){try{return r(31)}catch(t){}}();e=t.exports=r(250),e.Stream=i||e,e.Readable=e,e.Writable=r(155),e.Duplex=r(51),e.Transform=r(154),e.PassThrough=r(249),!n.browser&&"disable"===n.env.READABLE_STREAM&&i&&(t.exports=i)}).call(e,r(26))},function(t,e,r){t.exports=r(154)},function(t,e,r){t.exports=r(155)},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},function(t,e,r){(function(t,n){function i(t,r){var n={seen:[],stylize:a};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),b(r)?n.showHidden=r:r&&e._extend(n,r),_(n.showHidden)&&(n.showHidden=!1),_(n.depth)&&(n.depth=2),_(n.colors)&&(n.colors=!1),_(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=o),s(n,t,n.depth)}function o(t,e){var r=i.styles[e];return r?"["+i.colors[r][0]+"m"+t+"["+i.colors[r][1]+"m":t}function a(t,e){return t}function f(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}function s(t,r,n){if(t.customInspect&&r&&k(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return g(i)||(i=s(t,i,n)),i}var o=u(t,r);if(o)return o;var a=Object.keys(r),b=f(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(r)),A(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(r);if(0===a.length){if(k(r)){var v=r.name?": "+r.name:"";return t.stylize("[Function"+v+"]","special")}if(M(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(E(r))return t.stylize(Date.prototype.toString.call(r),"date");if(A(r))return h(r)}var y="",m=!1,w=["{","}"];if(p(r)&&(m=!0,w=["[","]"]),k(r)){var _=r.name?": "+r.name:"";y=" [Function"+_+"]"}if(M(r)&&(y=" "+RegExp.prototype.toString.call(r)),E(r)&&(y=" "+Date.prototype.toUTCString.call(r)),A(r)&&(y=" "+h(r)),0===a.length&&(!m||0==r.length))return w[0]+y+w[1];if(n<0)return M(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special");t.seen.push(r);var S;return S=m?c(t,r,n,b,a):a.map(function(e){return d(t,r,n,b,e,m)}),t.seen.pop(),l(S,y,w)}function u(t,e){if(_(e))return t.stylize("undefined","undefined");if(g(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}return m(e)?t.stylize(""+e,"number"):b(e)?t.stylize(""+e,"boolean"):v(e)?t.stylize("null","null"):void 0}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function c(t,e,r,n,i){for(var o=[],a=0,f=e.length;a<f;++a)R(e,String(a))?o.push(d(t,e,r,n,String(a),!0)):o.push("");return i.forEach(function(i){i.match(/^\d+$/)||o.push(d(t,e,r,n,i,!0))}),o}function d(t,e,r,n,i,o){var a,f,u;if(u=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]},u.get?f=u.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):u.set&&(f=t.stylize("[Setter]","special")),R(n,i)||(a="["+i+"]"),f||(t.seen.indexOf(u.value)<0?(f=v(r)?s(t,u.value,null):s(t,u.value,r-1),f.indexOf("\n")>-1&&(f=o?f.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+f.split("\n").map(function(t){return" "+t}).join("\n"))):f=t.stylize("[Circular]","special")),_(a)){if(o&&i.match(/^\d+$/))return f;a=JSON.stringify(""+i),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=t.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=t.stylize(a,"string"))}return a+": "+f}function l(t,e,r){var n=0,i=t.reduce(function(t,e){return n++,e.indexOf("\n")>=0&&n++,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1]}function p(t){return Array.isArray(t)}function b(t){return"boolean"==typeof t}function v(t){return null===t}function y(t){return null==t}function m(t){return"number"==typeof t}function g(t){return"string"==typeof t}function w(t){return"symbol"==typeof t}function _(t){return void 0===t}function M(t){return S(t)&&"[object RegExp]"===I(t)}function S(t){return"object"==typeof t&&null!==t}function E(t){return S(t)&&"[object Date]"===I(t)}function A(t){return S(t)&&("[object Error]"===I(t)||t instanceof Error)}function k(t){return"function"==typeof t}function x(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t}function I(t){return Object.prototype.toString.call(t)}function B(t){return t<10?"0"+t.toString(10):t.toString(10)}function O(){var t=new Date,e=[B(t.getHours()),B(t.getMinutes()),B(t.getSeconds())].join(":");return[t.getDate(),C[t.getMonth()],e].join(" ")}function R(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var P=/%[sdj%]/g;e.format=function(t){if(!g(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(i(arguments[r]));return e.join(" ")}for(var r=1,n=arguments,o=n.length,a=String(t).replace(P,function(t){if("%%"===t)return"%";if(r>=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),f=n[r];r<o;f=n[++r])a+=v(f)||!S(f)?" "+f:" "+i(f);return a},e.deprecate=function(r,i){function o(){if(!a){if(n.throwDeprecation)throw new Error(i);n.traceDeprecation?console.trace(i):console.error(i),a=!0}return r.apply(this,arguments)}if(_(t.process))return function(){return e.deprecate(r,i).apply(this,arguments)};if(n.noDeprecation===!0)return r;var a=!1;return o};var T,j={};e.debuglog=function(t){if(_(T)&&(T=n.env.NODE_DEBUG||""),t=t.toUpperCase(),!j[t])if(new RegExp("\\b"+t+"\\b","i").test(T)){var r=n.pid;j[t]=function(){var n=e.format.apply(e,arguments);console.error("%s %d: %s",t,r,n)}}else j[t]=function(){};return j[t]},e.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=p,e.isBoolean=b,e.isNull=v,e.isNullOrUndefined=y,e.isNumber=m,e.isString=g,e.isSymbol=w,e.isUndefined=_,e.isRegExp=M,e.isObject=S,e.isDate=E,e.isError=A,e.isFunction=k,e.isPrimitive=x,e.isBuffer=r(605);var C=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];e.log=function(){console.log("%s - %s",O(),e.format.apply(e,arguments))},e.inherits=r(604),e._extend=function(t,e){if(!e||!S(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(e,r(39),r(26))},function(t,e){var r=[].indexOf;t.exports=function(t,e){if(r)return t.indexOf(e);for(var n=0;n<t.length;++n)if(t[n]===e)return n;return-1}},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e,r){r(253),t.exports=r(252)}])});
/***/ }),
/* 5 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = ccJsonify;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__);
/**
* @public
* Serializes a crypto-condition class (Condition or Fulfillment) into a BigchainDB-compatible JSON
* @param {cc.Fulfillment} fulfillment base58 encoded Ed25519 public key for the recipient of the Transaction
* @returns {object} Ed25519 Condition (that will need to wrapped in an Output)
*/
function ccJsonify(fulfillment) {
var conditionUri = void 0;
if ('getConditionUri' in fulfillment) conditionUri = fulfillment.getConditionUri();else if ('serializeUri' in fulfillment) conditionUri = fulfillment.serializeUri();
var jsonBody = {
'details': {},
'uri': conditionUri
};
if (fulfillment.getTypeId() === 0) {
jsonBody.details.type_id = 0;
jsonBody.details.bitmask = 3;
if ('preimage' in fulfillment) {
jsonBody.details.preimage = fulfillment.preimage.toString();
jsonBody.details.type = 'fulfillment';
}
}
if (fulfillment.getTypeId() === 2) return {
'details': {
'type_id': 2,
'type': 'fulfillment',
'bitmask': fulfillment.getBitmask(),
'threshold': fulfillment.threshold,
'subfulfillments': fulfillment.subconditions.map(function (subcondition) {
var subconditionJson = ccJsonify(subcondition.body);
subconditionJson.details.weight = 1;
return subconditionJson.details;
})
},
'uri': conditionUri
};
if (fulfillment.getTypeId() === 4) {
jsonBody.details.type_id = 4;
jsonBody.details.bitmask = 32;
if ('publicKey' in fulfillment) {
jsonBody.details.signature = null;
jsonBody.details.public_key = __WEBPACK_IMPORTED_MODULE_0_bs58___default.a.encode(fulfillment.publicKey);
jsonBody.details.type = 'fulfillment';
}
}
if ('hash' in fulfillment) {
jsonBody.details.hash = __WEBPACK_IMPORTED_MODULE_0_bs58___default.a.encode(fulfillment.hash);
jsonBody.details.max_fulfillment_length = fulfillment.maxFulfillmentLength;
jsonBody.details.type = 'condition';
}
return jsonBody;
}
/***/ }),
/* 6 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hashTransaction__ = __webpack_require__(41);
function makeTransactionTemplate() {
return {
'id': null,
'operation': null,
'outputs': [],
'inputs': [],
'metadata': null,
'asset': null,
'version': '0.9'
};
}
function makeTransaction(operation, asset) {
var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var outputs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var inputs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
var tx = makeTransactionTemplate();
tx.operation = operation;
tx.asset = asset;
tx.metadata = metadata;
tx.inputs = inputs;
tx.outputs = outputs;
// Hashing must be done after, as the hash is of the Transaction (up to now)
tx.id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__hashTransaction__["a" /* default */])(tx);
return tx;
}
/***/ }),
/* 7 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = serializeTransactionIntoCanonicalString;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__ = __webpack_require__(85);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_clone__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_clone__);
/**
* @public
* Canonically serializes a transaction into a string by sorting the keys
* @param {object} (transaction)
* @return {string} a canonically serialized Transaction
*/
function serializeTransactionIntoCanonicalString(transaction) {
// BigchainDB signs fulfillments by serializing transactions into a "canonical" format where
var tx = __WEBPACK_IMPORTED_MODULE_1_clone___default()(transaction);
// TODO: set fulfillments to null
// Sort the keys
return __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify___default()(tx, function (a, b) {
return a.key > b.key ? 1 : -1;
});
}
/***/ }),
/* 8 */
/***/ (function(module, exports) {
var core = module.exports = {version: '2.4.0'};
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(22)(function(){
return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
});
/***/ }),
/* 10 */
/***/ (function(module, exports) {
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
/***/ }),
/* 11 */
/***/ (function(module, exports) {
module.exports = function(it){
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(65)
, defined = __webpack_require__(59);
module.exports = function(it){
return IObject(defined(it));
};
/***/ }),
/* 13 */
/***/ (function(module, exports) {
// shim for using process in browser
var process = module.exports = {};
// cached from whatever global is present so that test runners that stub it
// don't break things. But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals. It's inside a
// function because try/catches deoptimize in certain engines.
var cachedSetTimeout;
var cachedClearTimeout;
function defaultSetTimout() {
throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
throw new Error('clearTimeout has not been defined');
}
(function () {
try {
if (typeof setTimeout === 'function') {
cachedSetTimeout = setTimeout;
} else {
cachedSetTimeout = defaultSetTimout;
}
} catch (e) {
cachedSetTimeout = defaultSetTimout;
}
try {
if (typeof clearTimeout === 'function') {
cachedClearTimeout = clearTimeout;
} else {
cachedClearTimeout = defaultClearTimeout;
}
} catch (e) {
cachedClearTimeout = defaultClearTimeout;
}
} ())
function runTimeout(fun) {
if (cachedSetTimeout === setTimeout) {
//normal enviroments in sane situations
return setTimeout(fun, 0);
}
// if setTimeout wasn't available but was latter defined
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
cachedSetTimeout = setTimeout;
return setTimeout(fun, 0);
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedSetTimeout(fun, 0);
} catch(e){
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedSetTimeout.call(null, fun, 0);
} catch(e){
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
return cachedSetTimeout.call(this, fun, 0);
}
}
}
function runClearTimeout(marker) {
if (cachedClearTimeout === clearTimeout) {
//normal enviroments in sane situations
return clearTimeout(marker);
}
// if clearTimeout wasn't available but was latter defined
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
cachedClearTimeout = clearTimeout;
return clearTimeout(marker);
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedClearTimeout(marker);
} catch (e){
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedClearTimeout.call(null, marker);
} catch (e){
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
return cachedClearTimeout.call(this, marker);
}
}
}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;
function cleanUpNextTick() {
if (!draining || !currentQueue) {
return;
}
draining = false;
if (currentQueue.length) {
queue = currentQueue.concat(queue);
} else {
queueIndex = -1;
}
if (queue.length) {
drainQueue();
}
}
function drainQueue() {
if (draining) {
return;
}
var timeout = runTimeout(cleanUpNextTick);
draining = true;
var len = queue.length;
while(len) {
currentQueue = queue;
queue = [];
while (++queueIndex < len) {
if (currentQueue) {
currentQueue[queueIndex].run();
}
}
queueIndex = -1;
len = queue.length;
}
currentQueue = null;
draining = false;
runClearTimeout(timeout);
}
process.nextTick = function (fun) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1) {
for (var i = 1; i < arguments.length; i++) {
args[i - 1] = arguments[i];
}
}
queue.push(new Item(fun, args));
if (queue.length === 1 && !draining) {
runTimeout(drainQueue);
}
};
// v8 likes predictible objects
function Item(fun, array) {
this.fun = fun;
this.array = array;
}
Item.prototype.run = function () {
this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};
function noop() {}
process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;
process.listeners = function (name) { return [] }
process.binding = function (name) {
throw new Error('process.binding is not supported');
};
process.cwd = function () { return '/' };
process.chdir = function (dir) {
throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };
/***/ }),
/* 14 */
/***/ (function(module, exports) {
var g;
// This works in non-strict mode
g = (function() {
return this;
})();
try {
// This works if eval is allowed (see CSP)
g = g || Function("return this")() || (1,eval)("this");
} catch(e) {
// This works if the window reference is available
if(typeof window === "object")
g = window;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/* 15 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = getStatus;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param tx_id
* @param API_PATH
*/
function getStatus(tx_id, API_PATH) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['statuses'], {
query: {
tx_id: tx_id
}
});
}
/***/ }),
/* 16 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = getTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param txId
* @param API_PATH
*/
function getTransaction(txId, API_PATH) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['transactions_detail'], {
urlTemplateSpec: {
txId: txId
}
});
}
/***/ }),
/* 17 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeInputTemplate;
function makeInputTemplate() {
var publicKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var fulfills = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var fulfillment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
return {
fulfillment: fulfillment,
fulfills: fulfills,
'owners_before': publicKeys
};
}
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(Buffer) {var clone = (function() {
'use strict';
function _instanceof(obj, type) {
return type != null && obj instanceof type;
}
var nativeMap;
try {
nativeMap = Map;
} catch(_) {
// maybe a reference error because no `Map`. Give it a dummy value that no
// value will ever be an instanceof.
nativeMap = function() {};
}
var nativeSet;
try {
nativeSet = Set;
} catch(_) {
nativeSet = function() {};
}
var nativePromise;
try {
nativePromise = Promise;
} catch(_) {
nativePromise = function() {};
}
/**
* Clones (copies) an Object using deep copying.
*
* This function supports circular references by default, but if you are certain
* there are no circular references in your object, you can save some CPU time
* by calling clone(obj, false).
*
* Caution: if `circular` is false and `parent` contains circular references,
* your program may enter an infinite loop and crash.
*
* @param `parent` - the object to be cloned
* @param `circular` - set to true if the object to be cloned may contain
* circular references. (optional - true by default)
* @param `depth` - set to a number if the object is only to be cloned to
* a particular depth. (optional - defaults to Infinity)
* @param `prototype` - sets the prototype to be used when cloning an object.
* (optional - defaults to parent prototype).
* @param `includeNonEnumerable` - set to true if the non-enumerable properties
* should be cloned as well. Non-enumerable properties on the prototype
* chain will be ignored. (optional - false by default)
*/
function clone(parent, circular, depth, prototype, includeNonEnumerable) {
if (typeof circular === 'object') {
depth = circular.depth;
prototype = circular.prototype;
includeNonEnumerable = circular.includeNonEnumerable;
circular = circular.circular;
}
// maintain two arrays for circular references, where corresponding parents
// and children have the same index
var allParents = [];
var allChildren = [];
var useBuffer = typeof Buffer != 'undefined';
if (typeof circular == 'undefined')
circular = true;
if (typeof depth == 'undefined')
depth = Infinity;
// recurse this function so we don't reset allParents and allChildren
function _clone(parent, depth) {
// cloning null always returns null
if (parent === null)
return null;
if (depth === 0)
return parent;
var child;
var proto;
if (typeof parent != 'object') {
return parent;
}
if (_instanceof(parent, nativeMap)) {
child = new nativeMap();
} else if (_instanceof(parent, nativeSet)) {
child = new nativeSet();
} else if (_instanceof(parent, nativePromise)) {
child = new nativePromise(function (resolve, reject) {
parent.then(function(value) {
resolve(_clone(value, depth - 1));
}, function(err) {
reject(_clone(err, depth - 1));
});
});
} else if (clone.__isArray(parent)) {
child = [];
} else if (clone.__isRegExp(parent)) {
child = new RegExp(parent.source, __getRegExpFlags(parent));
if (parent.lastIndex) child.lastIndex = parent.lastIndex;
} else if (clone.__isDate(parent)) {
child = new Date(parent.getTime());
} else if (useBuffer && Buffer.isBuffer(parent)) {
child = new Buffer(parent.length);
parent.copy(child);
return child;
} else if (_instanceof(parent, Error)) {
child = Object.create(parent);
} else {
if (typeof prototype == 'undefined') {
proto = Object.getPrototypeOf(parent);
child = Object.create(proto);
}
else {
child = Object.create(prototype);
proto = prototype;
}
}
if (circular) {
var index = allParents.indexOf(parent);
if (index != -1) {
return allChildren[index];
}
allParents.push(parent);
allChildren.push(child);
}
if (_instanceof(parent, nativeMap)) {
parent.forEach(function(value, key) {
var keyChild = _clone(key, depth - 1);
var valueChild = _clone(value, depth - 1);
child.set(keyChild, valueChild);
});
}
if (_instanceof(parent, nativeSet)) {
parent.forEach(function(value) {
var entryChild = _clone(value, depth - 1);
child.add(entryChild);
});
}
for (var i in parent) {
var attrs;
if (proto) {
attrs = Object.getOwnPropertyDescriptor(proto, i);
}
if (attrs && attrs.set == null) {
continue;
}
child[i] = _clone(parent[i], depth - 1);
}
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(parent);
for (var i = 0; i < symbols.length; i++) {
// Don't need to worry about cloning a symbol because it is a primitive,
// like a number or string.
var symbol = symbols[i];
var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);
if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
continue;
}
child[symbol] = _clone(parent[symbol], depth - 1);
if (!descriptor.enumerable) {
Object.defineProperty(child, symbol, {
enumerable: false
});
}
}
}
if (includeNonEnumerable) {
var allPropertyNames = Object.getOwnPropertyNames(parent);
for (var i = 0; i < allPropertyNames.length; i++) {
var propertyName = allPropertyNames[i];
var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);
if (descriptor && descriptor.enumerable) {
continue;
}
child[propertyName] = _clone(parent[propertyName], depth - 1);
Object.defineProperty(child, propertyName, {
enumerable: false
});
}
}
return child;
}
return _clone(parent, depth);
}
/**
* Simple flat clone using prototype, accepts only objects, usefull for property
* override on FLAT configuration object (no nested props).
*
* USE WITH CAUTION! This may not behave as you wish if you do not know how this
* works.
*/
clone.clonePrototype = function clonePrototype(parent) {
if (parent === null)
return null;
var c = function () {};
c.prototype = parent;
return new c();
};
// private utility functions
function __objToStr(o) {
return Object.prototype.toString.call(o);
}
clone.__objToStr = __objToStr;
function __isDate(o) {
return typeof o === 'object' && __objToStr(o) === '[object Date]';
}
clone.__isDate = __isDate;
function __isArray(o) {
return typeof o === 'object' && __objToStr(o) === '[object Array]';
}
clone.__isArray = __isArray;
function __isRegExp(o) {
return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
}
clone.__isRegExp = __isRegExp;
function __getRegExpFlags(re) {
var flags = '';
if (re.global) flags += 'g';
if (re.ignoreCase) flags += 'i';
if (re.multiline) flags += 'm';
return flags;
}
clone.__getRegExpFlags = __getRegExpFlags;
return clone;
})();
if (typeof module === 'object' && module.exports) {
module.exports = clone;
}
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(79);
module.exports = __webpack_require__(8).Object.entries;
/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {
// false -> Array#indexOf
// true -> Array#includes
var toIObject = __webpack_require__(12)
, toLength = __webpack_require__(75)
, toIndex = __webpack_require__(74);
module.exports = function(IS_INCLUDES){
return function($this, el, fromIndex){
var O = toIObject($this)
, length = toLength(O.length)
, index = toIndex(fromIndex, length)
, value;
// Array#includes uses SameValueZero equality algorithm
if(IS_INCLUDES && el != el)while(length > index){
value = O[index++];
if(value != value)return true;
// Array#toIndex ignores holes, Array#includes - not
} else for(;length > index; index++)if(IS_INCLUDES || index in O){
if(O[index] === el)return IS_INCLUDES || index || 0;
} return !IS_INCLUDES && -1;
};
};
/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {
var global = __webpack_require__(10)
, core = __webpack_require__(8)
, ctx = __webpack_require__(58)
, hide = __webpack_require__(63)
, PROTOTYPE = 'prototype';
var $export = function(type, name, source){
var IS_FORCED = type & $export.F
, IS_GLOBAL = type & $export.G
, IS_STATIC = type & $export.S
, IS_PROTO = type & $export.P
, IS_BIND = type & $export.B
, IS_WRAP = type & $export.W
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
, expProto = exports[PROTOTYPE]
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
, key, own, out;
if(IS_GLOBAL)source = name;
for(key in source){
// contains in native
own = !IS_FORCED && target && target[key] !== undefined;
if(own && key in exports)continue;
// export native or passed
out = own ? target[key] : source[key];
// prevent global pollution for namespaces
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
// bind timers to global for call from export context
: IS_BIND && own ? ctx(out, global)
// wrap global constructors for prevent change them in library
: IS_WRAP && target[key] == out ? (function(C){
var F = function(a, b, c){
if(this instanceof C){
switch(arguments.length){
case 0: return new C;
case 1: return new C(a);
case 2: return new C(a, b);
} return new C(a, b, c);
} return C.apply(this, arguments);
};
F[PROTOTYPE] = C[PROTOTYPE];
return F;
// make static versions for prototype methods
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
// export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
if(IS_PROTO){
(exports.virtual || (exports.virtual = {}))[key] = out;
// export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
}
}
};
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
$export.S = 4; // static
$export.P = 8; // proto
$export.B = 16; // bind
$export.W = 32; // wrap
$export.U = 64; // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;
/***/ }),
/* 22 */
/***/ (function(module, exports) {
module.exports = function(exec){
try {
return !!exec();
} catch(e){
return true;
}
};
/***/ }),
/* 23 */
/***/ (function(module, exports) {
// 7.1.4 ToInteger
var ceil = Math.ceil
, floor = Math.floor;
module.exports = function(it){
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(process, global) {/**
* [js-sha3]{@link https://github.com/emn178/js-sha3}
*
* @version 0.5.7
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2015-2016
* @license MIT
*/
/*jslint bitwise: true */
(function () {
'use strict';
var root = typeof window === 'object' ? window : {};
var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
if (NODE_JS) {
root = global;
}
var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;
var HEX_CHARS = '0123456789abcdef'.split('');
var SHAKE_PADDING = [31, 7936, 2031616, 520093696];
var KECCAK_PADDING = [1, 256, 65536, 16777216];
var PADDING = [6, 1536, 393216, 100663296];
var SHIFT = [0, 8, 16, 24];
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
var BITS = [224, 256, 384, 512];
var SHAKE_BITS = [128, 256];
var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];
var createOutputMethod = function (bits, padding, outputType) {
return function (message) {
return new Keccak(bits, padding, bits).update(message)[outputType]();
};
};
var createShakeOutputMethod = function (bits, padding, outputType) {
return function (message, outputBits) {
return new Keccak(bits, padding, outputBits).update(message)[outputType]();
};
};
var createMethod = function (bits, padding) {
var method = createOutputMethod(bits, padding, 'hex');
method.create = function () {
return new Keccak(bits, padding, bits);
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(bits, padding, type);
}
return method;
};
var createShakeMethod = function (bits, padding) {
var method = createShakeOutputMethod(bits, padding, 'hex');
method.create = function (outputBits) {
return new Keccak(bits, padding, outputBits);
};
method.update = function (message, outputBits) {
return method.create(outputBits).update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createShakeOutputMethod(bits, padding, type);
}
return method;
};
var algorithms = [
{name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},
{name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},
{name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}
];
var methods = {}, methodNames = [];
for (var i = 0; i < algorithms.length; ++i) {
var algorithm = algorithms[i];
var bits = algorithm.bits;
for (var j = 0; j < bits.length; ++j) {
var methodName = algorithm.name +'_' + bits[j];
methodNames.push(methodName);
methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);
}
}
function Keccak(bits, padding, outputBits) {
this.blocks = [];
this.s = [];
this.padding = padding;
this.outputBits = outputBits;
this.reset = true;
this.block = 0;
this.start = 0;
this.blockCount = (1600 - (bits << 1)) >> 5;
this.byteCount = this.blockCount << 2;
this.outputBlocks = outputBits >> 5;
this.extraBytes = (outputBits & 31) >> 3;
for (var i = 0; i < 50; ++i) {
this.s[i] = 0;
}
}
Keccak.prototype.update = function (message) {
var notString = typeof message !== 'string';
if (notString && message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
}
var length = message.length, blocks = this.blocks, byteCount = this.byteCount,
blockCount = this.blockCount, index = 0, s = this.s, i, code;
while (index < length) {
if (this.reset) {
this.reset = false;
blocks[0] = this.block;
for (i = 1; i < blockCount + 1; ++i) {
blocks[i] = 0;
}
}
if (notString) {
for (i = this.start; index < length && i < byteCount; ++index) {
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
}
} else {
for (i = this.start; index < length && i < byteCount; ++index) {
code = message.charCodeAt(index);
if (code < 0x80) {
blocks[i >> 2] |= code << SHIFT[i++ & 3];
} else if (code < 0x800) {
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else if (code < 0xd800 || code >= 0xe000) {
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
} else {
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
}
}
}
this.lastByteIndex = i;
if (i >= byteCount) {
this.start = i - byteCount;
this.block = blocks[blockCount];
for (i = 0; i < blockCount; ++i) {
s[i] ^= blocks[i];
}
f(s);
this.reset = true;
} else {
this.start = i;
}
}
return this;
};
Keccak.prototype.finalize = function () {
var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
blocks[i >> 2] |= this.padding[i & 3];
if (this.lastByteIndex === this.byteCount) {
blocks[0] = blocks[blockCount];
for (i = 1; i < blockCount + 1; ++i) {
blocks[i] = 0;
}
}
blocks[blockCount - 1] |= 0x80000000;
for (i = 0; i < blockCount; ++i) {
s[i] ^= blocks[i];
}
f(s);
};
Keccak.prototype.toString = Keccak.prototype.hex = function () {
this.finalize();
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
extraBytes = this.extraBytes, i = 0, j = 0;
var hex = '', block;
while (j < outputBlocks) {
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
block = s[i];
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
}
if (j % blockCount === 0) {
f(s);
i = 0;
}
}
if (extraBytes) {
block = s[i];
if (extraBytes > 0) {
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
}
if (extraBytes > 1) {
hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
}
if (extraBytes > 2) {
hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
}
}
return hex;
};
Keccak.prototype.arrayBuffer = function () {
this.finalize();
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
extraBytes = this.extraBytes, i = 0, j = 0;
var bytes = this.outputBits >> 3;
var buffer;
if (extraBytes) {
buffer = new ArrayBuffer((outputBlocks + 1) << 2);
} else {
buffer = new ArrayBuffer(bytes);
}
var array = new Uint32Array(buffer);
while (j < outputBlocks) {
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
array[j] = s[i];
}
if (j % blockCount === 0) {
f(s);
}
}
if (extraBytes) {
array[i] = s[i];
buffer = buffer.slice(0, bytes);
}
return buffer;
};
Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;
Keccak.prototype.digest = Keccak.prototype.array = function () {
this.finalize();
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
extraBytes = this.extraBytes, i = 0, j = 0;
var array = [], offset, block;
while (j < outputBlocks) {
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
offset = j << 2;
block = s[i];
array[offset] = block & 0xFF;
array[offset + 1] = (block >> 8) & 0xFF;
array[offset + 2] = (block >> 16) & 0xFF;
array[offset + 3] = (block >> 24) & 0xFF;
}
if (j % blockCount === 0) {
f(s);
}
}
if (extraBytes) {
offset = j << 2;
block = s[i];
if (extraBytes > 0) {
array[offset] = block & 0xFF;
}
if (extraBytes > 1) {
array[offset + 1] = (block >> 8) & 0xFF;
}
if (extraBytes > 2) {
array[offset + 2] = (block >> 16) & 0xFF;
}
}
return array;
};
var f = function (s) {
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
for (n = 0; n < 48; n += 2) {
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];
h = c8 ^ ((c2 << 1) | (c3 >>> 31));
l = c9 ^ ((c3 << 1) | (c2 >>> 31));
s[0] ^= h;
s[1] ^= l;
s[10] ^= h;
s[11] ^= l;
s[20] ^= h;
s[21] ^= l;
s[30] ^= h;
s[31] ^= l;
s[40] ^= h;
s[41] ^= l;
h = c0 ^ ((c4 << 1) | (c5 >>> 31));
l = c1 ^ ((c5 << 1) | (c4 >>> 31));
s[2] ^= h;
s[3] ^= l;
s[12] ^= h;
s[13] ^= l;
s[22] ^= h;
s[23] ^= l;
s[32] ^= h;
s[33] ^= l;
s[42] ^= h;
s[43] ^= l;
h = c2 ^ ((c6 << 1) | (c7 >>> 31));
l = c3 ^ ((c7 << 1) | (c6 >>> 31));
s[4] ^= h;
s[5] ^= l;
s[14] ^= h;
s[15] ^= l;
s[24] ^= h;
s[25] ^= l;
s[34] ^= h;
s[35] ^= l;
s[44] ^= h;
s[45] ^= l;
h = c4 ^ ((c8 << 1) | (c9 >>> 31));
l = c5 ^ ((c9 << 1) | (c8 >>> 31));
s[6] ^= h;
s[7] ^= l;
s[16] ^= h;
s[17] ^= l;
s[26] ^= h;
s[27] ^= l;
s[36] ^= h;
s[37] ^= l;
s[46] ^= h;
s[47] ^= l;
h = c6 ^ ((c0 << 1) | (c1 >>> 31));
l = c7 ^ ((c1 << 1) | (c0 >>> 31));
s[8] ^= h;
s[9] ^= l;
s[18] ^= h;
s[19] ^= l;
s[28] ^= h;
s[29] ^= l;
s[38] ^= h;
s[39] ^= l;
s[48] ^= h;
s[49] ^= l;
b0 = s[0];
b1 = s[1];
b32 = (s[11] << 4) | (s[10] >>> 28);
b33 = (s[10] << 4) | (s[11] >>> 28);
b14 = (s[20] << 3) | (s[21] >>> 29);
b15 = (s[21] << 3) | (s[20] >>> 29);
b46 = (s[31] << 9) | (s[30] >>> 23);
b47 = (s[30] << 9) | (s[31] >>> 23);
b28 = (s[40] << 18) | (s[41] >>> 14);
b29 = (s[41] << 18) | (s[40] >>> 14);
b20 = (s[2] << 1) | (s[3] >>> 31);
b21 = (s[3] << 1) | (s[2] >>> 31);
b2 = (s[13] << 12) | (s[12] >>> 20);
b3 = (s[12] << 12) | (s[13] >>> 20);
b34 = (s[22] << 10) | (s[23] >>> 22);
b35 = (s[23] << 10) | (s[22] >>> 22);
b16 = (s[33] << 13) | (s[32] >>> 19);
b17 = (s[32] << 13) | (s[33] >>> 19);
b48 = (s[42] << 2) | (s[43] >>> 30);
b49 = (s[43] << 2) | (s[42] >>> 30);
b40 = (s[5] << 30) | (s[4] >>> 2);
b41 = (s[4] << 30) | (s[5] >>> 2);
b22 = (s[14] << 6) | (s[15] >>> 26);
b23 = (s[15] << 6) | (s[14] >>> 26);
b4 = (s[25] << 11) | (s[24] >>> 21);
b5 = (s[24] << 11) | (s[25] >>> 21);
b36 = (s[34] << 15) | (s[35] >>> 17);
b37 = (s[35] << 15) | (s[34] >>> 17);
b18 = (s[45] << 29) | (s[44] >>> 3);
b19 = (s[44] << 29) | (s[45] >>> 3);
b10 = (s[6] << 28) | (s[7] >>> 4);
b11 = (s[7] << 28) | (s[6] >>> 4);
b42 = (s[17] << 23) | (s[16] >>> 9);
b43 = (s[16] << 23) | (s[17] >>> 9);
b24 = (s[26] << 25) | (s[27] >>> 7);
b25 = (s[27] << 25) | (s[26] >>> 7);
b6 = (s[36] << 21) | (s[37] >>> 11);
b7 = (s[37] << 21) | (s[36] >>> 11);
b38 = (s[47] << 24) | (s[46] >>> 8);
b39 = (s[46] << 24) | (s[47] >>> 8);
b30 = (s[8] << 27) | (s[9] >>> 5);
b31 = (s[9] << 27) | (s[8] >>> 5);
b12 = (s[18] << 20) | (s[19] >>> 12);
b13 = (s[19] << 20) | (s[18] >>> 12);
b44 = (s[29] << 7) | (s[28] >>> 25);
b45 = (s[28] << 7) | (s[29] >>> 25);
b26 = (s[38] << 8) | (s[39] >>> 24);
b27 = (s[39] << 8) | (s[38] >>> 24);
b8 = (s[48] << 14) | (s[49] >>> 18);
b9 = (s[49] << 14) | (s[48] >>> 18);
s[0] = b0 ^ (~b2 & b4);
s[1] = b1 ^ (~b3 & b5);
s[10] = b10 ^ (~b12 & b14);
s[11] = b11 ^ (~b13 & b15);
s[20] = b20 ^ (~b22 & b24);
s[21] = b21 ^ (~b23 & b25);
s[30] = b30 ^ (~b32 & b34);
s[31] = b31 ^ (~b33 & b35);
s[40] = b40 ^ (~b42 & b44);
s[41] = b41 ^ (~b43 & b45);
s[2] = b2 ^ (~b4 & b6);
s[3] = b3 ^ (~b5 & b7);
s[12] = b12 ^ (~b14 & b16);
s[13] = b13 ^ (~b15 & b17);
s[22] = b22 ^ (~b24 & b26);
s[23] = b23 ^ (~b25 & b27);
s[32] = b32 ^ (~b34 & b36);
s[33] = b33 ^ (~b35 & b37);
s[42] = b42 ^ (~b44 & b46);
s[43] = b43 ^ (~b45 & b47);
s[4] = b4 ^ (~b6 & b8);
s[5] = b5 ^ (~b7 & b9);
s[14] = b14 ^ (~b16 & b18);
s[15] = b15 ^ (~b17 & b19);
s[24] = b24 ^ (~b26 & b28);
s[25] = b25 ^ (~b27 & b29);
s[34] = b34 ^ (~b36 & b38);
s[35] = b35 ^ (~b37 & b39);
s[44] = b44 ^ (~b46 & b48);
s[45] = b45 ^ (~b47 & b49);
s[6] = b6 ^ (~b8 & b0);
s[7] = b7 ^ (~b9 & b1);
s[16] = b16 ^ (~b18 & b10);
s[17] = b17 ^ (~b19 & b11);
s[26] = b26 ^ (~b28 & b20);
s[27] = b27 ^ (~b29 & b21);
s[36] = b36 ^ (~b38 & b30);
s[37] = b37 ^ (~b39 & b31);
s[46] = b46 ^ (~b48 & b40);
s[47] = b47 ^ (~b49 & b41);
s[8] = b8 ^ (~b0 & b2);
s[9] = b9 ^ (~b1 & b3);
s[18] = b18 ^ (~b10 & b12);
s[19] = b19 ^ (~b11 & b13);
s[28] = b28 ^ (~b20 & b22);
s[29] = b29 ^ (~b21 & b23);
s[38] = b38 ^ (~b30 & b32);
s[39] = b39 ^ (~b31 & b33);
s[48] = b48 ^ (~b40 & b42);
s[49] = b49 ^ (~b41 & b43);
s[0] ^= RC[n];
s[1] ^= RC[n + 1];
}
};
if (COMMON_JS) {
module.exports = methods;
} else {
for (var i = 0; i < methodNames.length; ++i) {
root[methodNames[i]] = methods[methodNames[i]];
}
}
})();
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13), __webpack_require__(14)))
/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;/* globals window, exports, define */
(function(window) {
'use strict'
var re = {
not_string: /[^s]/,
not_bool: /[^t]/,
not_type: /[^T]/,
not_primitive: /[^v]/,
number: /[diefg]/,
numeric_arg: /[bcdiefguxX]/,
json: /[j]/,
not_json: /[^j]/,
text: /^[^\x25]+/,
modulo: /^\x25{2}/,
placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,
key: /^([a-z_][a-z_\d]*)/i,
key_access: /^\.([a-z_][a-z_\d]*)/i,
index_access: /^\[(\d+)\]/,
sign: /^[\+\-]/
}
function sprintf() {
var key = arguments[0], cache = sprintf.cache
if (!(cache[key])) {
cache[key] = sprintf.parse(key)
}
return sprintf.format.call(null, cache[key], arguments)
}
sprintf.format = function(parse_tree, argv) {
var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = ''
for (i = 0; i < tree_length; i++) {
node_type = get_type(parse_tree[i])
if (node_type === 'string') {
output[output.length] = parse_tree[i]
}
else if (node_type === 'array') {
match = parse_tree[i] // convenience purposes only
if (match[2]) { // keyword argument
arg = argv[cursor]
for (k = 0; k < match[2].length; k++) {
if (!arg.hasOwnProperty(match[2][k])) {
throw new Error(sprintf('[sprintf] property "%s" does not exist', match[2][k]))
}
arg = arg[match[2][k]]
}
}
else if (match[1]) { // positional argument (explicit)
arg = argv[match[1]]
}
else { // positional argument (implicit)
arg = argv[cursor++]
}
if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') {
arg = arg()
}
if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) {
throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg)))
}
if (re.number.test(match[8])) {
is_positive = arg >= 0
}
switch (match[8]) {
case 'b':
arg = parseInt(arg, 10).toString(2)
break
case 'c':
arg = String.fromCharCode(parseInt(arg, 10))
break
case 'd':
case 'i':
arg = parseInt(arg, 10)
break
case 'j':
arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0)
break
case 'e':
arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential()
break
case 'f':
arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)
break
case 'g':
arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg)
break
case 'o':
arg = arg.toString(8)
break
case 's':
arg = String(arg)
arg = (match[7] ? arg.substring(0, match[7]) : arg)
break
case 't':
arg = String(!!arg)
arg = (match[7] ? arg.substring(0, match[7]) : arg)
break
case 'T':
arg = get_type(arg)
arg = (match[7] ? arg.substring(0, match[7]) : arg)
break
case 'u':
arg = parseInt(arg, 10) >>> 0
break
case 'v':
arg = arg.valueOf()
arg = (match[7] ? arg.substring(0, match[7]) : arg)
break
case 'x':
arg = parseInt(arg, 10).toString(16)
break
case 'X':
arg = parseInt(arg, 10).toString(16).toUpperCase()
break
}
if (re.json.test(match[8])) {
output[output.length] = arg
}
else {
if (re.number.test(match[8]) && (!is_positive || match[3])) {
sign = is_positive ? '+' : '-'
arg = arg.toString().replace(re.sign, '')
}
else {
sign = ''
}
pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' '
pad_length = match[6] - (sign + arg).length
pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : ''
output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)
}
}
}
return output.join('')
}
sprintf.cache = Object.create(null)
sprintf.parse = function(fmt) {
var _fmt = fmt, match = [], parse_tree = [], arg_names = 0
while (_fmt) {
if ((match = re.text.exec(_fmt)) !== null) {
parse_tree[parse_tree.length] = match[0]
}
else if ((match = re.modulo.exec(_fmt)) !== null) {
parse_tree[parse_tree.length] = '%'
}
else if ((match = re.placeholder.exec(_fmt)) !== null) {
if (match[2]) {
arg_names |= 1
var field_list = [], replacement_field = match[2], field_match = []
if ((field_match = re.key.exec(replacement_field)) !== null) {
field_list[field_list.length] = field_match[1]
while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
if ((field_match = re.key_access.exec(replacement_field)) !== null) {
field_list[field_list.length] = field_match[1]
}
else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
field_list[field_list.length] = field_match[1]
}
else {
throw new SyntaxError("[sprintf] failed to parse named argument key")
}
}
}
else {
throw new SyntaxError("[sprintf] failed to parse named argument key")
}
match[2] = field_list
}
else {
arg_names |= 2
}
if (arg_names === 3) {
throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported")
}
parse_tree[parse_tree.length] = match
}
else {
throw new SyntaxError("[sprintf] unexpected placeholder")
}
_fmt = _fmt.substring(match[0].length)
}
return parse_tree
}
var vsprintf = function(fmt, argv, _argv) {
_argv = (argv || []).slice(0)
_argv.splice(0, 0, fmt)
return sprintf.apply(null, _argv)
}
/**
* helpers
*/
function get_type(variable) {
if (typeof variable === 'number') {
return 'number'
}
else if (typeof variable === 'string') {
return 'string'
}
else {
return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()
}
}
var preformattedPadding = {
'0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'],
' ': ['', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
'_': ['', '_', '__', '___', '____', '_____', '______', '_______'],
}
function str_repeat(input, multiplier) {
if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) {
return preformattedPadding[input][multiplier]
}
return Array(multiplier + 1).join(input)
}
/**
* export to either browser or node.js
*/
if (true) {
exports.sprintf = sprintf
exports.vsprintf = vsprintf
}
if (typeof window !== 'undefined') {
window.sprintf = sprintf
window.vsprintf = vsprintf
if (true) {
!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
return {
sprintf: sprintf,
vsprintf: vsprintf
}
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
}
}
})(typeof window === 'undefined' ? this : window);
/***/ }),
/* 26 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Ed25519Keypair__ = __webpack_require__(27);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Ed25519Keypair", function() { return __WEBPACK_IMPORTED_MODULE_0__Ed25519Keypair__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transaction__ = __webpack_require__(42);
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Transaction", function() { return __WEBPACK_IMPORTED_MODULE_1__transaction__; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connection__ = __webpack_require__(30);
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Connection", function() { return __WEBPACK_IMPORTED_MODULE_2__connection__; });
/***/ }),
/* 27 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = Ed25519Keypair;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl__ = __webpack_require__(92);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_tweetnacl__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_js_sha3__ = __webpack_require__(24);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_js_sha3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_js_sha3__);
/**
* @public
* @class Keypair Ed25519 keypair in base58 (as BigchainDB expects base58 keys)
* @type {Object}
* @param {number} [secret] A seed that will be used as a key derivation function
* @property {string} publicKey
* @property {string} privateKey
*/
function Ed25519Keypair(secret) {
var keyPair = void 0;
if (secret) {
// Quick and dirty: use key derivation function instead
var secretHash = __WEBPACK_IMPORTED_MODULE_2_js_sha3___default.a.sha3_256.create().update(secret).array();
keyPair = __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default.a.sign.keyPair.fromSeed(new Uint8Array(secretHash));
} else {
keyPair = __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default.a.sign.keyPair();
}
this.publicKey = __WEBPACK_IMPORTED_MODULE_0_bs58___default.a.encode(keyPair.publicKey);
// tweetnacl's generated secret key is the secret key + public key (resulting in a 64-byte buffer)
this.privateKey = __WEBPACK_IMPORTED_MODULE_0_bs58___default.a.encode(keyPair.secretKey.slice(0, 32));
}
/***/ }),
/* 28 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = baseRequest;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise__ = __webpack_require__(81);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_es6_promise__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill__ = __webpack_require__(82);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sprintf_js__ = __webpack_require__(25);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sprintf_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_sprintf_js__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__format_text__ = __webpack_require__(37);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__stringify_as_query_param__ = __webpack_require__(40);
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
var fetch = __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill___default()(__WEBPACK_IMPORTED_MODULE_0_es6_promise__["Promise"]);
/**
* imported from https://github.com/bigchaindb/js-utility-belt/
*
* Global fetch wrapper that adds some basic error handling and ease of use enhancements.
* Considers any non-2xx response as an error.
*
* For more information on fetch, see https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch.
*
* Expects fetch to already be available (either in a ES6 environment, bundled through webpack, or
* injected through a polyfill).
*
* @param {string} url Url to request. Can be specified as a sprintf format string (see
* https://github.com/alexei/sprintf.js) that will be resolved using
* `config.urlTemplateSpec`.
* @param {object} config Additional configuration, mostly passed to fetch as its 'init' config
* (see https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters).
* @param {*} config.jsonBody Json payload to the request. Will automatically be
* JSON.stringify()-ed and override `config.body`.
* @param {string|object} config.query Query parameter to append to the end of the url.
* If specified as an object, keys will be
* decamelized into snake case first.
* @param {*[]|object} config.urlTemplateSpec Format spec to use to expand the url (see sprintf).
* @param {*} config.* All other options are passed through to fetch.
*
* @return {Promise} Promise that will resolve with the response if its status was 2xx;
* otherwise rejects with the response
*/
function baseRequest(url) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var jsonBody = _ref.jsonBody,
query = _ref.query,
urlTemplateSpec = _ref.urlTemplateSpec,
fetchConfig = _objectWithoutProperties(_ref, ['jsonBody', 'query', 'urlTemplateSpec']);
var expandedUrl = url;
if (urlTemplateSpec != null) {
if (Array.isArray(urlTemplateSpec) && urlTemplateSpec.length) {
// Use vsprintf for the array call signature
expandedUrl = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_sprintf_js__["vsprintf"])(url, urlTemplateSpec);
} else if (urlTemplateSpec && (typeof urlTemplateSpec === 'undefined' ? 'undefined' : _typeof(urlTemplateSpec)) === 'object' && Object.keys(urlTemplateSpec).length) {
expandedUrl = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__format_text__["a" /* default */])(url, urlTemplateSpec);
} else if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line no-console
console.warn('Supplied urlTemplateSpec was not an array or object. Ignoring...');
}
}
if (query != null) {
if (typeof query === 'string') {
expandedUrl += query;
} else if (query && (typeof query === 'undefined' ? 'undefined' : _typeof(query)) === 'object') {
expandedUrl += __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__stringify_as_query_param__["a" /* default */])(query);
} else if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line no-console
console.warn('Supplied query was not a string or object. Ignoring...');
}
}
if (jsonBody != null) {
fetchConfig.body = JSON.stringify(jsonBody);
}
return fetch.fetch(expandedUrl, fetchConfig).then(function (res) {
// If status is not a 2xx (based on Response.ok), assume it's an error
// See https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch
if (!(res && res.ok)) {
throw res;
}
return res;
});
}
/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(13)))
/***/ }),
/* 29 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = getBlock;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param blockId
* @param API_PATH
*/
function getBlock(blockId, API_PATH) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['blocks_detail'], {
urlTemplateSpec: {
blockId: blockId
}
});
}
/***/ }),
/* 30 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getBlock__ = __webpack_require__(29);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getBlock", function() { return __WEBPACK_IMPORTED_MODULE_0__getBlock__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getTransaction__ = __webpack_require__(16);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getTransaction", function() { return __WEBPACK_IMPORTED_MODULE_1__getTransaction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__getStatus__ = __webpack_require__(15);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getStatus", function() { return __WEBPACK_IMPORTED_MODULE_2__getStatus__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__listBlocks__ = __webpack_require__(31);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listBlocks", function() { return __WEBPACK_IMPORTED_MODULE_3__listBlocks__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__listOutputs__ = __webpack_require__(32);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listOutputs", function() { return __WEBPACK_IMPORTED_MODULE_4__listOutputs__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__listTransactions__ = __webpack_require__(33);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listTransactions", function() { return __WEBPACK_IMPORTED_MODULE_5__listTransactions__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__listVotes__ = __webpack_require__(34);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listVotes", function() { return __WEBPACK_IMPORTED_MODULE_6__listVotes__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__pollStatusAndFetchTransaction__ = __webpack_require__(35);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pollStatusAndFetchTransaction", function() { return __WEBPACK_IMPORTED_MODULE_7__pollStatusAndFetchTransaction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__postTransaction__ = __webpack_require__(36);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "postTransaction", function() { return __WEBPACK_IMPORTED_MODULE_8__postTransaction__["a"]; });
/***/ }),
/* 31 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = listBlocks;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param tx_id
* @param status
* @param API_PATH
*/
function listBlocks(_ref, API_PATH) {
var tx_id = _ref.tx_id,
status = _ref.status;
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['blocks'], {
query: {
tx_id: tx_id,
status: status
}
});
}
/***/ }),
/* 32 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = listOutputs;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param public_key
* @param unspent
* @param API_PATH
* @param onlyJsonResponse
*/
function listOutputs(_ref, API_PATH) {
var public_key = _ref.public_key,
unspent = _ref.unspent;
var onlyJsonResponse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['outputs'], {
query: {
public_key: public_key,
unspent: unspent
}
}, onlyJsonResponse);
}
/***/ }),
/* 33 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = listTransactions;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param asset_id
* @param operation
* @param API_PATH
*/
function listTransactions(_ref, API_PATH) {
var asset_id = _ref.asset_id,
operation = _ref.operation;
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['transactions'], {
query: {
asset_id: asset_id,
operation: operation
}
});
}
/***/ }),
/* 34 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = listVotes;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
* @param block_id
* @param API_PATH
*/
function listVotes(block_id, API_PATH) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['votes'], {
query: {
block_id: block_id
}
});
}
/***/ }),
/* 35 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getTransaction__ = __webpack_require__(16);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getStatus__ = __webpack_require__(15);
/**
* @public
* @param tx_id
* @param API_PATH
* @return {Promise}
*/
/* harmony default export */ __webpack_exports__["a"] = (function (tx_id, API_PATH) {
return new Promise(function (resolve, reject) {
var timer = setInterval(function () {
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__getStatus__["a" /* default */])(tx_id, API_PATH).then(function (res) {
console.log('Fetched transaction status:', res);
if (res.status === 'valid') {
clearInterval(timer);
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getTransaction__["a" /* default */])(tx_id, API_PATH).then(function (res) {
console.log('Fetched transaction:', res);
resolve(res);
});
}
}).catch(function (err) {
clearInterval(timer);
reject(err);
});
}, 500);
});
});
/***/ }),
/* 36 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = postTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1);
/**
* @public
*
* @param transaction
* @param API_PATH
*/
function postTransaction(transaction, API_PATH) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['transactions'], {
method: 'POST',
jsonBody: transaction
});
}
/***/ }),
/* 37 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = formatText;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sprintf_js__ = __webpack_require__(25);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sprintf_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_sprintf_js__);
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
// Regexes taken from or inspired by sprintf-js
var Regex = {
TEMPLATE_LITERAL: /\${([^\)]+?)}/g,
KEY: /^([a-z_][a-z_\d]*)/i,
KEY_ACCESS: /^\.([a-z_][a-z_\d]*)/i,
INDEX_ACCESS: /^\[(\d+)\]/
};
/**
* imported from https://github.com/bigchaindb/js-utility-belt/
*
* Formats strings similarly to C's sprintf, with the addition of '${...}' formats.
*
* Makes a first pass replacing '${...}' formats before passing the expanded string and other
* arguments to sprintf-js. For more information on what sprintf can do, see
* https://github.com/alexei/sprintf.js.
*
* Examples:
* formatText('Hi there ${dimi}!', { dimi: 'Dimi' })
* => 'Hi there Dimi!'
*
* formatText('${database} is %(status)s', { database: 'BigchainDB', status: 'big' })
* => 'BigchainDB is big'
*
* Like sprintf-js, string interpolation for keywords and indexes is supported too:
* formatText('Berlin is best known for its ${berlin.topKnownFor[0].name}', {
* berlin: {
* topKnownFor: [{
* name: 'Currywurst'
* }, ...
* ]
* }
* })
* => 'Berlin is best known for its Currywurst'
*/
function formatText(s) {
var expandedFormatStr = s;
// Try to replace formats of the form '${...}' if named replacement fields are used
for (var _len = arguments.length, argv = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
argv[_key - 1] = arguments[_key];
}
if (s && argv.length === 1 && _typeof(argv[0]) === 'object') {
var templateSpecObj = argv[0];
expandedFormatStr = s.replace(Regex.TEMPLATE_LITERAL, function (match, replacement) {
var interpolationLeft = replacement;
/**
* Interpolation algorithm inspired by sprintf-js.
*
* Goes through the replacement string getting the left-most key or index to interpolate
* on each pass. `value` at each step holds the last interpolation result, `curMatch` is
* the current property match, and `interpolationLeft` is the portion of the replacement
* string still to be interpolated.
*
* It's useful to note that RegExp.exec() returns with an array holding:
* [0]: Full string matched
* [1+]: Matching groups
*
* And that in the regexes defined, the first matching group always corresponds to the
* property matched.
*/
var value = void 0;
var curMatch = Regex.KEY.exec(interpolationLeft);
if (curMatch !== null) {
value = templateSpecObj[curMatch[1]];
// Assigning in the conditionals here makes the code less bloated
/* eslint-disable no-cond-assign */
while ((interpolationLeft = interpolationLeft.substring(curMatch[0].length)) && value != null) {
if (curMatch = Regex.KEY_ACCESS.exec(interpolationLeft)) {
value = value[curMatch[1]];
} else if (curMatch = Regex.INDEX_ACCESS.exec(interpolationLeft)) {
value = value[curMatch[1]];
} else {
break;
}
}
/* eslint-enable no-cond-assign */
}
// If there's anything left to interpolate by the end then we've failed to interpolate
// the entire replacement string.
if (interpolationLeft.length) {
throw new SyntaxError('[formatText] failed to parse named argument key: ' + replacement);
}
return value;
});
}
return __WEBPACK_IMPORTED_MODULE_0_sprintf_js__["sprintf"].apply(undefined, [expandedFormatStr].concat(argv));
}
/***/ }),
/* 38 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = sanitize;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes__ = __webpack_require__(53);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries__ = __webpack_require__(19);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries__);
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
/**
* Abstraction for selectFromObject and omitFromObject for DRYness.
* Set isInclusion to true if the filter should be for including the filtered items (ie. selecting
* only them vs omitting only them).
*/
function filterFromObject(obj, filter) {
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
_ref$isInclusion = _ref.isInclusion,
isInclusion = _ref$isInclusion === undefined ? true : _ref$isInclusion;
if (filter && Array.isArray(filter)) {
return applyFilterOnObject(obj, isInclusion ? function (_, key) {
return __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default()(filter, key);
} : function (_, key) {
return !__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default()(filter, key);
});
} else if (filter && typeof filter === 'function') {
// Flip the filter fn's return if it's for inclusion
return applyFilterOnObject(obj, isInclusion ? filter : function () {
return !filter.apply(undefined, arguments);
});
} else {
throw new Error('The given filter is not an array or function. Exclude aborted');
}
}
/**
* Returns a filtered copy of the given object's own enumerable properties (no inherited
* properties), keeping any keys that pass the given filter function.
*/
function applyFilterOnObject(obj, filterFn) {
if (filterFn == null) {
return _extends({}, obj);
}
var filteredObj = {};
__WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries___default()(obj).forEach(function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
key = _ref3[0],
val = _ref3[1];
if (filterFn(val, key)) {
filteredObj[key] = val;
}
});
return filteredObj;
}
/**
* Similar to lodash's _.pick(), this returns a copy of the given object's
* own and inherited enumerable properties, selecting only the keys in
* the given array or whose value pass the given filter function.
* @param {object} obj Source object
* @param {array|function} filter Array of key names to select or function to invoke per iteration
* @return {object} The new object
*/
function selectFromObject(obj, filter) {
return filterFromObject(obj, filter);
}
/**
* Glorified selectFromObject. Takes an object and returns a filtered shallow copy that strips out
* any properties that are falsy (including coercions, ie. undefined, null, '', 0, ...).
* Does not modify the passed in object.
*
* @param {object} obj Javascript object
* @return {object} Sanitized Javascript object
*/
function sanitize(obj) {
return selectFromObject(obj, function (val) {
return !!val;
});
}
/***/ }),
/* 39 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = sha256Hash;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3__ = __webpack_require__(24);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_js_sha3__);
function sha256Hash(data) {
return __WEBPACK_IMPORTED_MODULE_0_js_sha3___default.a.sha3_256.create().update(data).hex();
}
/***/ }),
/* 40 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = stringifyAsQueryParam;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries__ = __webpack_require__(19);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_decamelize__ = __webpack_require__(80);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_decamelize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_decamelize__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_query_string__ = __webpack_require__(90);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_query_string___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_query_string__);
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* imported from https://github.com/bigchaindb/js-utility-belt/
*
* Takes a key-value dictionary (ie. object) and converts it to a query-parameter string that you
* can directly append into a URL.
*
* Extends queryString.stringify by allowing you to specify a `transform` function that will be
* invoked on each of the dictionary's keys before being stringified into the query-parameter
* string.
*
* By default `transform` is `decamelize`, so a dictionary of the form:
*
* {
* page: 1,
* pageSize: 10
* }
*
* will be converted to a string like:
*
* ?page=1&page_size=10
*
* @param {object} obj Query params dictionary
* @param {function} [transform=decamelize] Transform function for each of the param keys
* @return {string} Query param string
*/
function stringifyAsQueryParam(obj) {
var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : __WEBPACK_IMPORTED_MODULE_1_decamelize___default.a;
if (!obj || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || !Object.keys(obj).length) {
return '';
}
var transformedKeysObj = __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries___default()(obj).reduce(function (paramsObj, _ref) {
var _ref2 = _slicedToArray(_ref, 2),
key = _ref2[0],
value = _ref2[1];
paramsObj[transform(key)] = value;
return paramsObj;
}, {});
return '?' + __WEBPACK_IMPORTED_MODULE_2_query_string___default.a.stringify(transformedKeysObj);
}
/***/ }),
/* 41 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = hashTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__serializeTransactionIntoCanonicalString__ = __webpack_require__(7);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sha256Hash__ = __webpack_require__(39);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function hashTransaction(transaction) {
// Safely remove any tx id from the given transaction for hashing
var tx = _extends({}, transaction);
delete tx.id;
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__sha256Hash__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__serializeTransactionIntoCanonicalString__["a" /* default */])(tx));
}
/***/ }),
/* 42 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeEd25519Condition__ = __webpack_require__(44);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeEd25519Condition", function() { return __WEBPACK_IMPORTED_MODULE_0__makeEd25519Condition__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeSha256Condition__ = __webpack_require__(46);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeSha256Condition", function() { return __WEBPACK_IMPORTED_MODULE_1__makeSha256Condition__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__makeThresholdCondition__ = __webpack_require__(47);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeThresholdCondition", function() { return __WEBPACK_IMPORTED_MODULE_2__makeThresholdCondition__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__makeCreateTransaction__ = __webpack_require__(43);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeCreateTransaction", function() { return __WEBPACK_IMPORTED_MODULE_3__makeCreateTransaction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__makeOutput__ = __webpack_require__(45);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeOutput", function() { return __WEBPACK_IMPORTED_MODULE_4__makeOutput__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__makeTransaction__ = __webpack_require__(6);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeTransaction", function() { return __WEBPACK_IMPORTED_MODULE_5__makeTransaction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__makeTransferTransaction__ = __webpack_require__(48);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeTransferTransaction", function() { return __WEBPACK_IMPORTED_MODULE_6__makeTransferTransaction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__serializeTransactionIntoCanonicalString__ = __webpack_require__(7);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "serializeTransactionIntoCanonicalString", function() { return __WEBPACK_IMPORTED_MODULE_7__serializeTransactionIntoCanonicalString__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__signTransaction__ = __webpack_require__(49);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "signTransaction", function() { return __WEBPACK_IMPORTED_MODULE_8__signTransaction__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__utils_ccJsonLoad__ = __webpack_require__(50);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ccJsonLoad", function() { return __WEBPACK_IMPORTED_MODULE_9__utils_ccJsonLoad__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__utils_ccJsonify__ = __webpack_require__(5);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ccJsonify", function() { return __WEBPACK_IMPORTED_MODULE_10__utils_ccJsonify__["a"]; });
/***/ }),
/* 43 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeCreateTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(6);
/**
* @public
* Generate a `CREATE` transaction holding the `asset`, `metadata`, and `outputs`, to be signed by
* the `issuers`.
* @param {object} asset Created asset's data
* @param {object} metadata Metadata for the Transaction
* @param {object[]} outputs Array of Output objects to add to the Transaction.
* Think of these as the recipients of the asset after the transaction.
* For `CREATE` Transactions, this should usually just be a list of
* Outputs wrapping Ed25519 Conditions generated from the issuers' public
* keys (so that the issuers are the recipients of the created asset).
* @param {...string[]} issuers Public key of one or more issuers to the asset being created by this
* Transaction.
* Note: Each of the private keys corresponding to the given public
* keys MUST be used later (and in the same order) when signing the
* Transaction (`signTransaction()`).
* @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before
* sending it off!
*/
function makeCreateTransaction(asset, metadata, outputs) {
var assetDefinition = {
'data': asset || null
};
for (var _len = arguments.length, issuers = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
issuers[_key - 3] = arguments[_key];
}
var inputs = issuers.map(function (issuer) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__["a" /* default */])([issuer]);
});
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__makeTransaction__["a" /* default */])('CREATE', assetDefinition, metadata, outputs, inputs);
}
/***/ }),
/* 44 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeEd25519Condition;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_bs58__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_ccJsonify__ = __webpack_require__(5);
/**
* @public
* Create an Ed25519 Cryptocondition from an Ed25519 public key to put into an Output of a Transaction
* @param {string} publicKey base58 encoded Ed25519 public key for the recipient of the Transaction
* @param {boolean} [json=true] If true returns a json object otherwise a crypto-condition type
* @returns {object} Ed25519 Condition (that will need to wrapped in an Output)
*/
function makeEd25519Condition(publicKey) {
var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var publicKeyBuffer = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_1_bs58___default.a.decode(publicKey));
var ed25519Fulfillment = new __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default.a.Ed25519();
ed25519Fulfillment.setPublicKey(publicKeyBuffer);
if (json) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils_ccJsonify__["a" /* default */])(ed25519Fulfillment);
}
return ed25519Fulfillment;
}
/***/ }),
/* 45 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeOutput;
/**
* @public
* Create an Output from a Condition.
* Note: Assumes the given Condition was generated from a single public key (e.g. a Ed25519 Condition)
* @param {object} condition Condition (e.g. a Ed25519 Condition from `makeEd25519Condition()`)
* @param {number} amount Amount of the output
* @returns {object} An Output usable in a Transaction
*/
function makeOutput(condition) {
var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
return {
amount: JSON.stringify(amount),
condition: condition,
'public_keys': condition.details.hasOwnProperty('public_key') ? [condition.details.public_key] : []
};
}
/***/ }),
/* 46 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeSha256Condition;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_five_bells_condition__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_ccJsonify__ = __webpack_require__(5);
/**
* @public
* Create a Preimage-Sha256 Cryptocondition from a secret to put into an Output of a Transaction
* @param {string} preimage Preimage to be hashed and wrapped in a crypto-condition
* @param {boolean} [json=true] If true returns a json object otherwise a crypto-condition type
* @returns {object} Preimage-Sha256 Condition (that will need to wrapped in an Output)
*/
function makeSha256Condition(preimage) {
var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var sha256Fulfillment = new __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default.a.PreimageSha256();
sha256Fulfillment.preimage = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](preimage);
if (json) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils_ccJsonify__["a" /* default */])(sha256Fulfillment);
}
return sha256Fulfillment;
}
/***/ }),
/* 47 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeThresholdCondition;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_five_bells_condition__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_five_bells_condition__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_ccJsonify__ = __webpack_require__(5);
/**
* @public
* Create an Sha256 Threshold Cryptocondition from threshold to put into an Output of a Transaction
* @param {number} threshold
* @param {Array} [subconditions=[]]
* @param {boolean} [json=true] If true returns a json object otherwise a crypto-condition type
* @returns {object} Sha256 Threshold Condition (that will need to wrapped in an Output)
*/
function makeThresholdCondition(threshold) {
var subconditions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var json = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var thresholdCondition = new __WEBPACK_IMPORTED_MODULE_0_five_bells_condition___default.a.ThresholdSha256();
thresholdCondition.threshold = threshold;
subconditions.forEach(function (subcondition) {
// TODO: add support for Condition and URIs
thresholdCondition.addSubfulfillment(subcondition);
});
if (json) {
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils_ccJsonify__["a" /* default */])(thresholdCondition);
}
return thresholdCondition;
}
/***/ }),
/* 48 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransferTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(17);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(6);
/**
* @public
* Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills
* the `fulfilledOutputs` of `unspentTransaction`.
* @param {object} unspentTransaction Previous Transaction you have control over (i.e. can fulfill
* its Output Condition)
* @param {object} metadata Metadata for the Transaction
* @param {object[]} outputs Array of Output objects to add to the Transaction.
* Think of these as the recipients of the asset after the transaction.
* For `TRANSFER` Transactions, this should usually just be a list of
* Outputs wrapping Ed25519 Conditions generated from the public keys of
* the recipients.
* @param {...number} fulfilledOutputs Indices of the Outputs in `unspentTransaction` that this
* Transaction fulfills.
* Note that the public keys listed in the fulfilled Outputs
* must be used (and in the same order) to sign the Transaction
* (`signTransaction()`).
* @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before
* sending it off!
*/
function makeTransferTransaction(unspentTransaction, metadata, outputs) {
for (var _len = arguments.length, fulfilledOutputs = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
fulfilledOutputs[_key - 3] = arguments[_key];
}
var inputs = fulfilledOutputs.map(function (outputIndex) {
var fulfilledOutput = unspentTransaction.outputs[outputIndex];
var transactionLink = {
'output': outputIndex,
'txid': unspentTransaction.id
};
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__["a" /* default */])(fulfilledOutput.public_keys, transactionLink);
});
var assetLink = {
'id': unspentTransaction.operation === 'CREATE' ? unspentTransaction.id : unspentTransaction.asset.id
};
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__makeTransaction__["a" /* default */])('TRANSFER', assetLink, metadata, outputs, inputs);
}
/***/ }),
/* 49 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = signTransaction;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_bs58__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_clone__ = __webpack_require__(18);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_clone__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__serializeTransactionIntoCanonicalString__ = __webpack_require__(7);
/**
* @public
* Sign the given `transaction` with the given `privateKey`s, returning a new copy of `transaction`
* that's been signed.
* Note: Only generates Ed25519 Fulfillments. Thresholds and other types of Fulfillments are left as
* an exercise for the user.
* @param {object} transaction Transaction to sign. `transaction` is not modified.
* @param {...string} privateKeys Private keys associated with the issuers of the `transaction`.
* Looped through to iteratively sign any Input Fulfillments found in
* the `transaction`.
* @returns {object} The signed version of `transaction`.
*/
function signTransaction(transaction) {
for (var _len = arguments.length, privateKeys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
privateKeys[_key - 1] = arguments[_key];
}
var signedTx = __WEBPACK_IMPORTED_MODULE_3_clone___default()(transaction);
signedTx.inputs.forEach(function (input, index) {
var privateKey = privateKeys[index];
var privateKeyBuffer = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_1_bs58___default.a.decode(privateKey));
var serializedTransaction = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__serializeTransactionIntoCanonicalString__["a" /* default */])(transaction);
var ed25519Fulfillment = new __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default.a.Ed25519();
ed25519Fulfillment.sign(new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](serializedTransaction), privateKeyBuffer);
var fulfillmentUri = ed25519Fulfillment.serializeUri();
input.fulfillment = fulfillmentUri;
});
return signedTx;
}
/***/ }),
/* 50 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = ccJsonLoad;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_five_bells_condition__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_buffer__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_buffer__);
/**
* @public
* Loads a crypto-condition class (Fulfillment or Condition) from a BigchainDB JSON object
* @param {object} conditionJson
* @returns {cc.Condition} Ed25519 Condition (that will need to wrapped in an Output)
*/
function ccJsonLoad(conditionJson) {
if ('hash' in conditionJson) {
var condition = new __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default.a.Condition();
condition.type = conditionJson.type_id;
condition.bitmask = conditionJson.bitmask;
condition.hash = new __WEBPACK_IMPORTED_MODULE_2_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_0_bs58___default.a.decode(conditionJson.hash));
condition.maxFulfillmentLength = parseInt(conditionJson.max_fulfillment_length, 10);
return condition;
} else {
var fulfillment = void 0;
if (conditionJson.type_id === 2) {
fulfillment = new __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default.a.ThresholdSha256();
fulfillment.threshold = conditionJson.threshold;
conditionJson.subfulfillments.forEach(function (subfulfillment) {
subfulfillment = ccJsonLoad(subfulfillment);
if ('getConditionUri' in subfulfillment) fulfillment.addSubfulfillment(subfulfillment);else if ('serializeUri' in subfulfillment) fulfillment.addSubcondition(subfulfillment);
});
}
if (conditionJson.type_id === 0) {
fulfillment = new __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default.a.PreimageSha256();
fulfillment.preimage = new __WEBPACK_IMPORTED_MODULE_2_buffer__["Buffer"](conditionJson.preimage);
}
if (conditionJson.type_id === 4) {
fulfillment = new __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default.a.Ed25519();
fulfillment.publicKey = new __WEBPACK_IMPORTED_MODULE_2_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_0_bs58___default.a.decode(conditionJson.public_key));
if (conditionJson.signature) fulfillment.signature = new __WEBPACK_IMPORTED_MODULE_2_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_0_bs58___default.a.decode(conditionJson.signature));
}
return fulfillment;
}
}
/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(Buffer) {// base-x encoding
// Forked from https://github.com/cryptocoinjs/bs58
// Originally written by Mike Hearn for BitcoinJ
// Copyright (c) 2011 Google Inc
// Ported to JavaScript by Stefan Thomas
// Merged Buffer refactorings from base58-native by Stephen Pair
// Copyright (c) 2013 BitPay Inc
module.exports = function base (ALPHABET) {
var ALPHABET_MAP = {}
var BASE = ALPHABET.length
var LEADER = ALPHABET.charAt(0)
// pre-compute lookup table
for (var z = 0; z < ALPHABET.length; z++) {
var x = ALPHABET.charAt(z)
if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
ALPHABET_MAP[x] = z
}
function encode (source) {
if (source.length === 0) return ''
var digits = [0]
for (var i = 0; i < source.length; ++i) {
for (var j = 0, carry = source[i]; j < digits.length; ++j) {
carry += digits[j] << 8
digits[j] = carry % BASE
carry = (carry / BASE) | 0
}
while (carry > 0) {
digits.push(carry % BASE)
carry = (carry / BASE) | 0
}
}
var string = ''
// deal with leading zeros
for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
// convert digits to a string
for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
return string
}
function decodeUnsafe (string) {
if (string.length === 0) return new Buffer(0)
var bytes = [0]
for (var i = 0; i < string.length; i++) {
var value = ALPHABET_MAP[string[i]]
if (value === undefined) return
for (var j = 0, carry = value; j < bytes.length; ++j) {
carry += bytes[j] * BASE
bytes[j] = carry & 0xff
carry >>= 8
}
while (carry > 0) {
bytes.push(carry & 0xff)
carry >>= 8
}
}
// deal with leading zeros
for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
bytes.push(0)
}
return new Buffer(bytes.reverse())
}
function decode (string) {
var buffer = decodeUnsafe(string)
if (buffer) return buffer
throw new Error('Non-base' + BASE + ' character')
}
return {
encode: encode,
decodeUnsafe: decodeUnsafe,
decode: decode
}
}
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray
var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
lookup[i] = code[i]
revLookup[code.charCodeAt(i)] = i
}
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63
function placeHoldersCount (b64) {
var len = b64.length
if (len % 4 > 0) {
throw new Error('Invalid string. Length must be a multiple of 4')
}
// the number of equal signs (place holders)
// if there are two placeholders, than the two characters before it
// represent one byte
// if there is only one, then the three characters before it represent 2 bytes
// this is just a cheap hack to not do indexOf twice
return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
}
function byteLength (b64) {
// base64 is 4/3 + up to two characters of the original data
return b64.length * 3 / 4 - placeHoldersCount(b64)
}
function toByteArray (b64) {
var i, j, l, tmp, placeHolders, arr
var len = b64.length
placeHolders = placeHoldersCount(b64)
arr = new Arr(len * 3 / 4 - placeHolders)
// if there are placeholders, only get up to the last complete 4 chars
l = placeHolders > 0 ? len - 4 : len
var L = 0
for (i = 0, j = 0; i < l; i += 4, j += 3) {
tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
arr[L++] = (tmp >> 16) & 0xFF
arr[L++] = (tmp >> 8) & 0xFF
arr[L++] = tmp & 0xFF
}
if (placeHolders === 2) {
tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
arr[L++] = tmp & 0xFF
} else if (placeHolders === 1) {
tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
arr[L++] = (tmp >> 8) & 0xFF
arr[L++] = tmp & 0xFF
}
return arr
}
function tripletToBase64 (num) {
return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
}
function encodeChunk (uint8, start, end) {
var tmp
var output = []
for (var i = start; i < end; i += 3) {
tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
output.push(tripletToBase64(tmp))
}
return output.join('')
}
function fromByteArray (uint8) {
var tmp
var len = uint8.length
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
var output = ''
var parts = []
var maxChunkLength = 16383 // must be multiple of 3
// go through the array every three bytes, we'll deal with trailing stuff later
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
}
// pad the end with zeros, but make sure to not forget the extra bytes
if (extraBytes === 1) {
tmp = uint8[len - 1]
output += lookup[tmp >> 2]
output += lookup[(tmp << 4) & 0x3F]
output += '=='
} else if (extraBytes === 2) {
tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
output += lookup[tmp >> 10]
output += lookup[(tmp >> 4) & 0x3F]
output += lookup[(tmp << 2) & 0x3F]
output += '='
}
parts.push(output)
return parts.join('')
}
/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(78);
module.exports = __webpack_require__(8).Array.includes;
/***/ }),
/* 54 */
/***/ (function(module, exports) {
module.exports = function(it){
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
return it;
};
/***/ }),
/* 55 */
/***/ (function(module, exports) {
module.exports = function(){ /* empty */ };
/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(11);
module.exports = function(it){
if(!isObject(it))throw TypeError(it + ' is not an object!');
return it;
};
/***/ }),
/* 57 */
/***/ (function(module, exports) {
var toString = {}.toString;
module.exports = function(it){
return toString.call(it).slice(8, -1);
};
/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {
// optional / simple context binding
var aFunction = __webpack_require__(54);
module.exports = function(fn, that, length){
aFunction(fn);
if(that === undefined)return fn;
switch(length){
case 1: return function(a){
return fn.call(that, a);
};
case 2: return function(a, b){
return fn.call(that, a, b);
};
case 3: return function(a, b, c){
return fn.call(that, a, b, c);
};
}
return function(/* ...args */){
return fn.apply(that, arguments);
};
};
/***/ }),
/* 59 */
/***/ (function(module, exports) {
// 7.2.1 RequireObjectCoercible(argument)
module.exports = function(it){
if(it == undefined)throw TypeError("Can't call method on " + it);
return it;
};
/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(11)
, document = __webpack_require__(10).document
// in old IE typeof document.createElement is 'object'
, is = isObject(document) && isObject(document.createElement);
module.exports = function(it){
return is ? document.createElement(it) : {};
};
/***/ }),
/* 61 */
/***/ (function(module, exports) {
// IE 8- don't enum bug keys
module.exports = (
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
/***/ }),
/* 62 */
/***/ (function(module, exports) {
var hasOwnProperty = {}.hasOwnProperty;
module.exports = function(it, key){
return hasOwnProperty.call(it, key);
};
/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {
var dP = __webpack_require__(66)
, createDesc = __webpack_require__(71);
module.exports = __webpack_require__(9) ? function(object, key, value){
return dP.f(object, key, createDesc(1, value));
} : function(object, key, value){
object[key] = value;
return object;
};
/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = !__webpack_require__(9) && !__webpack_require__(22)(function(){
return Object.defineProperty(__webpack_require__(60)('div'), 'a', {get: function(){ return 7; }}).a != 7;
});
/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {
// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__(57);
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
return cof(it) == 'String' ? it.split('') : Object(it);
};
/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {
var anObject = __webpack_require__(56)
, IE8_DOM_DEFINE = __webpack_require__(64)
, toPrimitive = __webpack_require__(76)
, dP = Object.defineProperty;
exports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes){
anObject(O);
P = toPrimitive(P, true);
anObject(Attributes);
if(IE8_DOM_DEFINE)try {
return dP(O, P, Attributes);
} catch(e){ /* empty */ }
if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
if('value' in Attributes)O[P] = Attributes.value;
return O;
};
/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {
var has = __webpack_require__(62)
, toIObject = __webpack_require__(12)
, arrayIndexOf = __webpack_require__(20)(false)
, IE_PROTO = __webpack_require__(72)('IE_PROTO');
module.exports = function(object, names){
var O = toIObject(object)
, i = 0
, result = []
, key;
for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
// Don't enum bug & hidden keys
while(names.length > i)if(has(O, key = names[i++])){
~arrayIndexOf(result, key) || result.push(key);
}
return result;
};
/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {
// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__(67)
, enumBugKeys = __webpack_require__(61);
module.exports = Object.keys || function keys(O){
return $keys(O, enumBugKeys);
};
/***/ }),
/* 69 */
/***/ (function(module, exports) {
exports.f = {}.propertyIsEnumerable;
/***/ }),
/* 70 */
/***/ (function(module, exports, __webpack_require__) {
var getKeys = __webpack_require__(68)
, toIObject = __webpack_require__(12)
, isEnum = __webpack_require__(69).f;
module.exports = function(isEntries){
return function(it){
var O = toIObject(it)
, keys = getKeys(O)
, length = keys.length
, i = 0
, result = []
, key;
while(length > i)if(isEnum.call(O, key = keys[i++])){
result.push(isEntries ? [key, O[key]] : O[key]);
} return result;
};
};
/***/ }),
/* 71 */
/***/ (function(module, exports) {
module.exports = function(bitmap, value){
return {
enumerable : !(bitmap & 1),
configurable: !(bitmap & 2),
writable : !(bitmap & 4),
value : value
};
};
/***/ }),
/* 72 */
/***/ (function(module, exports, __webpack_require__) {
var shared = __webpack_require__(73)('keys')
, uid = __webpack_require__(77);
module.exports = function(key){
return shared[key] || (shared[key] = uid(key));
};
/***/ }),
/* 73 */
/***/ (function(module, exports, __webpack_require__) {
var global = __webpack_require__(10)
, SHARED = '__core-js_shared__'
, store = global[SHARED] || (global[SHARED] = {});
module.exports = function(key){
return store[key] || (store[key] = {});
};
/***/ }),
/* 74 */
/***/ (function(module, exports, __webpack_require__) {
var toInteger = __webpack_require__(23)
, max = Math.max
, min = Math.min;
module.exports = function(index, length){
index = toInteger(index);
return index < 0 ? max(index + length, 0) : min(index, length);
};
/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {
// 7.1.15 ToLength
var toInteger = __webpack_require__(23)
, min = Math.min;
module.exports = function(it){
return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};
/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {
// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__(11);
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function(it, S){
if(!isObject(it))return it;
var fn, val;
if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
throw TypeError("Can't convert object to primitive value");
};
/***/ }),
/* 77 */
/***/ (function(module, exports) {
var id = 0
, px = Math.random();
module.exports = function(key){
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// https://github.com/tc39/Array.prototype.includes
var $export = __webpack_require__(21)
, $includes = __webpack_require__(20)(true);
$export($export.P, 'Array', {
includes: function includes(el /*, fromIndex = 0 */){
return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
}
});
__webpack_require__(55)('includes');
/***/ }),
/* 79 */
/***/ (function(module, exports, __webpack_require__) {
// https://github.com/tc39/proposal-object-values-entries
var $export = __webpack_require__(21)
, $entries = __webpack_require__(70)(true);
$export($export.S, 'Object', {
entries: function entries(it){
return $entries(it);
}
});
/***/ }),
/* 80 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = function (str, sep) {
if (typeof str !== 'string') {
throw new TypeError('Expected a string');
}
sep = typeof sep === 'undefined' ? '_' : sep;
return str
.replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2')
.replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2')
.toLowerCase();
};
/***/ }),
/* 81 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(process, global) {var require;/*!
* @overview es6-promise - a tiny implementation of Promises/A+.
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
* @license Licensed under MIT license
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
* @version 4.1.0
*/
(function (global, factory) {
true ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.ES6Promise = factory());
}(this, (function () { 'use strict';
function objectOrFunction(x) {
return typeof x === 'function' || typeof x === 'object' && x !== null;
}
function isFunction(x) {
return typeof x === 'function';
}
var _isArray = undefined;
if (!Array.isArray) {
_isArray = function (x) {
return Object.prototype.toString.call(x) === '[object Array]';
};
} else {
_isArray = Array.isArray;
}
var isArray = _isArray;
var len = 0;
var vertxNext = undefined;
var customSchedulerFn = undefined;
var asap = function asap(callback, arg) {
queue[len] = callback;
queue[len + 1] = arg;
len += 2;
if (len === 2) {
// If len is 2, that means that we need to schedule an async flush.
// If additional callbacks are queued before the queue is flushed, they
// will be processed by this flush that we are scheduling.
if (customSchedulerFn) {
customSchedulerFn(flush);
} else {
scheduleFlush();
}
}
};
function setScheduler(scheduleFn) {
customSchedulerFn = scheduleFn;
}
function setAsap(asapFn) {
asap = asapFn;
}
var browserWindow = typeof window !== 'undefined' ? window : undefined;
var browserGlobal = browserWindow || {};
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';
// test for web worker but not in IE10
var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
// node
function useNextTick() {
// node version 0.10.x displays a deprecation warning when nextTick is used recursively
// see https://github.com/cujojs/when/issues/410 for details
return function () {
return process.nextTick(flush);
};
}
// vertx
function useVertxTimer() {
if (typeof vertxNext !== 'undefined') {
return function () {
vertxNext(flush);
};
}
return useSetTimeout();
}
function useMutationObserver() {
var iterations = 0;
var observer = new BrowserMutationObserver(flush);
var node = document.createTextNode('');
observer.observe(node, { characterData: true });
return function () {
node.data = iterations = ++iterations % 2;
};
}
// web worker
function useMessageChannel() {
var channel = new MessageChannel();
channel.port1.onmessage = flush;
return function () {
return channel.port2.postMessage(0);
};
}
function useSetTimeout() {
// Store setTimeout reference so es6-promise will be unaffected by
// other code modifying setTimeout (like sinon.useFakeTimers())
var globalSetTimeout = setTimeout;
return function () {
return globalSetTimeout(flush, 1);
};
}
var queue = new Array(1000);
function flush() {
for (var i = 0; i < len; i += 2) {
var callback = queue[i];
var arg = queue[i + 1];
callback(arg);
queue[i] = undefined;
queue[i + 1] = undefined;
}
len = 0;
}
function attemptVertx() {
try {
var r = require;
var vertx = __webpack_require__(93);
vertxNext = vertx.runOnLoop || vertx.runOnContext;
return useVertxTimer();
} catch (e) {
return useSetTimeout();
}
}
var scheduleFlush = undefined;
// Decide what async method to use to triggering processing of queued callbacks:
if (isNode) {
scheduleFlush = useNextTick();
} else if (BrowserMutationObserver) {
scheduleFlush = useMutationObserver();
} else if (isWorker) {
scheduleFlush = useMessageChannel();
} else if (browserWindow === undefined && "function" === 'function') {
scheduleFlush = attemptVertx();
} else {
scheduleFlush = useSetTimeout();
}
function then(onFulfillment, onRejection) {
var _arguments = arguments;
var parent = this;
var child = new this.constructor(noop);
if (child[PROMISE_ID] === undefined) {
makePromise(child);
}
var _state = parent._state;
if (_state) {
(function () {
var callback = _arguments[_state - 1];
asap(function () {
return invokeCallback(_state, child, callback, parent._result);
});
})();
} else {
subscribe(parent, child, onFulfillment, onRejection);
}
return child;
}
/**
`Promise.resolve` returns a promise that will become resolved with the
passed `value`. It is shorthand for the following:
```javascript
let promise = new Promise(function(resolve, reject){
resolve(1);
});
promise.then(function(value){
// value === 1
});
```
Instead of writing the above, your code now simply becomes the following:
```javascript
let promise = Promise.resolve(1);
promise.then(function(value){
// value === 1
});
```
@method resolve
@static
@param {Any} value value that the returned promise will be resolved with
Useful for tooling.
@return {Promise} a promise that will become fulfilled with the given
`value`
*/
function resolve(object) {
/*jshint validthis:true */
var Constructor = this;
if (object && typeof object === 'object' && object.constructor === Constructor) {
return object;
}
var promise = new Constructor(noop);
_resolve(promise, object);
return promise;
}
var PROMISE_ID = Math.random().toString(36).substring(16);
function noop() {}
var PENDING = void 0;
var FULFILLED = 1;
var REJECTED = 2;
var GET_THEN_ERROR = new ErrorObject();
function selfFulfillment() {
return new TypeError("You cannot resolve a promise with itself");
}
function cannotReturnOwn() {
return new TypeError('A promises callback cannot return that same promise.');
}
function getThen(promise) {
try {
return promise.then;
} catch (error) {
GET_THEN_ERROR.error = error;
return GET_THEN_ERROR;
}
}
function tryThen(then, value, fulfillmentHandler, rejectionHandler) {
try {
then.call(value, fulfillmentHandler, rejectionHandler);
} catch (e) {
return e;
}
}
function handleForeignThenable(promise, thenable, then) {
asap(function (promise) {
var sealed = false;
var error = tryThen(then, thenable, function (value) {
if (sealed) {
return;
}
sealed = true;
if (thenable !== value) {
_resolve(promise, value);
} else {
fulfill(promise, value);
}
}, function (reason) {
if (sealed) {
return;
}
sealed = true;
_reject(promise, reason);
}, 'Settle: ' + (promise._label || ' unknown promise'));
if (!sealed && error) {
sealed = true;
_reject(promise, error);
}
}, promise);
}
function handleOwnThenable(promise, thenable) {
if (thenable._state === FULFILLED) {
fulfill(promise, thenable._result);
} else if (thenable._state === REJECTED) {
_reject(promise, thenable._result);
} else {
subscribe(thenable, undefined, function (value) {
return _resolve(promise, value);
}, function (reason) {
return _reject(promise, reason);
});
}
}
function handleMaybeThenable(promise, maybeThenable, then$$) {
if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {
handleOwnThenable(promise, maybeThenable);
} else {
if (then$$ === GET_THEN_ERROR) {
_reject(promise, GET_THEN_ERROR.error);
GET_THEN_ERROR.error = null;
} else if (then$$ === undefined) {
fulfill(promise, maybeThenable);
} else if (isFunction(then$$)) {
handleForeignThenable(promise, maybeThenable, then$$);
} else {
fulfill(promise, maybeThenable);
}
}
}
function _resolve(promise, value) {
if (promise === value) {
_reject(promise, selfFulfillment());
} else if (objectOrFunction(value)) {
handleMaybeThenable(promise, value, getThen(value));
} else {
fulfill(promise, value);
}
}
function publishRejection(promise) {
if (promise._onerror) {
promise._onerror(promise._result);
}
publish(promise);
}
function fulfill(promise, value) {
if (promise._state !== PENDING) {
return;
}
promise._result = value;
promise._state = FULFILLED;
if (promise._subscribers.length !== 0) {
asap(publish, promise);
}
}
function _reject(promise, reason) {
if (promise._state !== PENDING) {
return;
}
promise._state = REJECTED;
promise._result = reason;
asap(publishRejection, promise);
}
function subscribe(parent, child, onFulfillment, onRejection) {
var _subscribers = parent._subscribers;
var length = _subscribers.length;
parent._onerror = null;
_subscribers[length] = child;
_subscribers[length + FULFILLED] = onFulfillment;
_subscribers[length + REJECTED] = onRejection;
if (length === 0 && parent._state) {
asap(publish, parent);
}
}
function publish(promise) {
var subscribers = promise._subscribers;
var settled = promise._state;
if (subscribers.length === 0) {
return;
}
var child = undefined,
callback = undefined,
detail = promise._result;
for (var i = 0; i < subscribers.length; i += 3) {
child = subscribers[i];
callback = subscribers[i + settled];
if (child) {
invokeCallback(settled, child, callback, detail);
} else {
callback(detail);
}
}
promise._subscribers.length = 0;
}
function ErrorObject() {
this.error = null;
}
var TRY_CATCH_ERROR = new ErrorObject();
function tryCatch(callback, detail) {
try {
return callback(detail);
} catch (e) {
TRY_CATCH_ERROR.error = e;
return TRY_CATCH_ERROR;
}
}
function invokeCallback(settled, promise, callback, detail) {
var hasCallback = isFunction(callback),
value = undefined,
error = undefined,
succeeded = undefined,
failed = undefined;
if (hasCallback) {
value = tryCatch(callback, detail);
if (value === TRY_CATCH_ERROR) {
failed = true;
error = value.error;
value.error = null;
} else {
succeeded = true;
}
if (promise === value) {
_reject(promise, cannotReturnOwn());
return;
}
} else {
value = detail;
succeeded = true;
}
if (promise._state !== PENDING) {
// noop
} else if (hasCallback && succeeded) {
_resolve(promise, value);
} else if (failed) {
_reject(promise, error);
} else if (settled === FULFILLED) {
fulfill(promise, value);
} else if (settled === REJECTED) {
_reject(promise, value);
}
}
function initializePromise(promise, resolver) {
try {
resolver(function resolvePromise(value) {
_resolve(promise, value);
}, function rejectPromise(reason) {
_reject(promise, reason);
});
} catch (e) {
_reject(promise, e);
}
}
var id = 0;
function nextId() {
return id++;
}
function makePromise(promise) {
promise[PROMISE_ID] = id++;
promise._state = undefined;
promise._result = undefined;
promise._subscribers = [];
}
function Enumerator(Constructor, input) {
this._instanceConstructor = Constructor;
this.promise = new Constructor(noop);
if (!this.promise[PROMISE_ID]) {
makePromise(this.promise);
}
if (isArray(input)) {
this._input = input;
this.length = input.length;
this._remaining = input.length;
this._result = new Array(this.length);
if (this.length === 0) {
fulfill(this.promise, this._result);
} else {
this.length = this.length || 0;
this._enumerate();
if (this._remaining === 0) {
fulfill(this.promise, this._result);
}
}
} else {
_reject(this.promise, validationError());
}
}
function validationError() {
return new Error('Array Methods must be provided an Array');
};
Enumerator.prototype._enumerate = function () {
var length = this.length;
var _input = this._input;
for (var i = 0; this._state === PENDING && i < length; i++) {
this._eachEntry(_input[i], i);
}
};
Enumerator.prototype._eachEntry = function (entry, i) {
var c = this._instanceConstructor;
var resolve$$ = c.resolve;
if (resolve$$ === resolve) {
var _then = getThen(entry);
if (_then === then && entry._state !== PENDING) {
this._settledAt(entry._state, i, entry._result);
} else if (typeof _then !== 'function') {
this._remaining--;
this._result[i] = entry;
} else if (c === Promise) {
var promise = new c(noop);
handleMaybeThenable(promise, entry, _then);
this._willSettleAt(promise, i);
} else {
this._willSettleAt(new c(function (resolve$$) {
return resolve$$(entry);
}), i);
}
} else {
this._willSettleAt(resolve$$(entry), i);
}
};
Enumerator.prototype._settledAt = function (state, i, value) {
var promise = this.promise;
if (promise._state === PENDING) {
this._remaining--;
if (state === REJECTED) {
_reject(promise, value);
} else {
this._result[i] = value;
}
}
if (this._remaining === 0) {
fulfill(promise, this._result);
}
};
Enumerator.prototype._willSettleAt = function (promise, i) {
var enumerator = this;
subscribe(promise, undefined, function (value) {
return enumerator._settledAt(FULFILLED, i, value);
}, function (reason) {
return enumerator._settledAt(REJECTED, i, reason);
});
};
/**
`Promise.all` accepts an array of promises, and returns a new promise which
is fulfilled with an array of fulfillment values for the passed promises, or
rejected with the reason of the first passed promise to be rejected. It casts all
elements of the passed iterable to promises as it runs this algorithm.
Example:
```javascript
let promise1 = resolve(1);
let promise2 = resolve(2);
let promise3 = resolve(3);
let promises = [ promise1, promise2, promise3 ];
Promise.all(promises).then(function(array){
// The array here would be [ 1, 2, 3 ];
});
```
If any of the `promises` given to `all` are rejected, the first promise
that is rejected will be given as an argument to the returned promises's
rejection handler. For example:
Example:
```javascript
let promise1 = resolve(1);
let promise2 = reject(new Error("2"));
let promise3 = reject(new Error("3"));
let promises = [ promise1, promise2, promise3 ];
Promise.all(promises).then(function(array){
// Code here never runs because there are rejected promises!
}, function(error) {
// error.message === "2"
});
```
@method all
@static
@param {Array} entries array of promises
@param {String} label optional string for labeling the promise.
Useful for tooling.
@return {Promise} promise that is fulfilled when all `promises` have been
fulfilled, or rejected if any of them become rejected.
@static
*/
function all(entries) {
return new Enumerator(this, entries).promise;
}
/**
`Promise.race` returns a new promise which is settled in the same way as the
first passed promise to settle.
Example:
```javascript
let promise1 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 1');
}, 200);
});
let promise2 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 2');
}, 100);
});
Promise.race([promise1, promise2]).then(function(result){
// result === 'promise 2' because it was resolved before promise1
// was resolved.
});
```
`Promise.race` is deterministic in that only the state of the first
settled promise matters. For example, even if other promises given to the
`promises` array argument are resolved, but the first settled promise has
become rejected before the other promises became fulfilled, the returned
promise will become rejected:
```javascript
let promise1 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 1');
}, 200);
});
let promise2 = new Promise(function(resolve, reject){
setTimeout(function(){
reject(new Error('promise 2'));
}, 100);
});
Promise.race([promise1, promise2]).then(function(result){
// Code here never runs
}, function(reason){
// reason.message === 'promise 2' because promise 2 became rejected before
// promise 1 became fulfilled
});
```
An example real-world use case is implementing timeouts:
```javascript
Promise.race([ajax('foo.json'), timeout(5000)])
```
@method race
@static
@param {Array} promises array of promises to observe
Useful for tooling.
@return {Promise} a promise which settles in the same way as the first passed
promise to settle.
*/
function race(entries) {
/*jshint validthis:true */
var Constructor = this;
if (!isArray(entries)) {
return new Constructor(function (_, reject) {
return reject(new TypeError('You must pass an array to race.'));
});
} else {
return new Constructor(function (resolve, reject) {
var length = entries.length;
for (var i = 0; i < length; i++) {
Constructor.resolve(entries[i]).then(resolve, reject);
}
});
}
}
/**
`Promise.reject` returns a promise rejected with the passed `reason`.
It is shorthand for the following:
```javascript
let promise = new Promise(function(resolve, reject){
reject(new Error('WHOOPS'));
});
promise.then(function(value){
// Code here doesn't run because the promise is rejected!
}, function(reason){
// reason.message === 'WHOOPS'
});
```
Instead of writing the above, your code now simply becomes the following:
```javascript
let promise = Promise.reject(new Error('WHOOPS'));
promise.then(function(value){
// Code here doesn't run because the promise is rejected!
}, function(reason){
// reason.message === 'WHOOPS'
});
```
@method reject
@static
@param {Any} reason value that the returned promise will be rejected with.
Useful for tooling.
@return {Promise} a promise rejected with the given `reason`.
*/
function reject(reason) {
/*jshint validthis:true */
var Constructor = this;
var promise = new Constructor(noop);
_reject(promise, reason);
return promise;
}
function needsResolver() {
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
}
function needsNew() {
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
}
/**
Promise objects represent the eventual result of an asynchronous operation. The
primary way of interacting with a promise is through its `then` method, which
registers callbacks to receive either a promise's eventual value or the reason
why the promise cannot be fulfilled.
Terminology
-----------
- `promise` is an object or function with a `then` method whose behavior conforms to this specification.
- `thenable` is an object or function that defines a `then` method.
- `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
- `exception` is a value that is thrown using the throw statement.
- `reason` is a value that indicates why a promise was rejected.
- `settled` the final resting state of a promise, fulfilled or rejected.
A promise can be in one of three states: pending, fulfilled, or rejected.
Promises that are fulfilled have a fulfillment value and are in the fulfilled
state. Promises that are rejected have a rejection reason and are in the
rejected state. A fulfillment value is never a thenable.
Promises can also be said to *resolve* a value. If this value is also a
promise, then the original promise's settled state will match the value's
settled state. So a promise that *resolves* a promise that rejects will
itself reject, and a promise that *resolves* a promise that fulfills will
itself fulfill.
Basic Usage:
------------
```js
let promise = new Promise(function(resolve, reject) {
// on success
resolve(value);
// on failure
reject(reason);
});
promise.then(function(value) {
// on fulfillment
}, function(reason) {
// on rejection
});
```
Advanced Usage:
---------------
Promises shine when abstracting away asynchronous interactions such as
`XMLHttpRequest`s.
```js
function getJSON(url) {
return new Promise(function(resolve, reject){
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onreadystatechange = handler;
xhr.responseType = 'json';
xhr.setRequestHeader('Accept', 'application/json');
xhr.send();
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
}
}
};
});
}
getJSON('/posts.json').then(function(json) {
// on fulfillment
}, function(reason) {
// on rejection
});
```
Unlike callbacks, promises are great composable primitives.
```js
Promise.all([
getJSON('/posts'),
getJSON('/comments')
]).then(function(values){
values[0] // => postsJSON
values[1] // => commentsJSON
return values;
});
```
@class Promise
@param {function} resolver
Useful for tooling.
@constructor
*/
function Promise(resolver) {
this[PROMISE_ID] = nextId();
this._result = this._state = undefined;
this._subscribers = [];
if (noop !== resolver) {
typeof resolver !== 'function' && needsResolver();
this instanceof Promise ? initializePromise(this, resolver) : needsNew();
}
}
Promise.all = all;
Promise.race = race;
Promise.resolve = resolve;
Promise.reject = reject;
Promise._setScheduler = setScheduler;
Promise._setAsap = setAsap;
Promise._asap = asap;
Promise.prototype = {
constructor: Promise,
/**
The primary way of interacting with a promise is through its `then` method,
which registers callbacks to receive either a promise's eventual value or the
reason why the promise cannot be fulfilled.
```js
findUser().then(function(user){
// user is available
}, function(reason){
// user is unavailable, and you are given the reason why
});
```
Chaining
--------
The return value of `then` is itself a promise. This second, 'downstream'
promise is resolved with the return value of the first promise's fulfillment
or rejection handler, or rejected if the handler throws an exception.
```js
findUser().then(function (user) {
return user.name;
}, function (reason) {
return 'default name';
}).then(function (userName) {
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it
// will be `'default name'`
});
findUser().then(function (user) {
throw new Error('Found user, but still unhappy');
}, function (reason) {
throw new Error('`findUser` rejected and we're unhappy');
}).then(function (value) {
// never reached
}, function (reason) {
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
});
```
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
```js
findUser().then(function (user) {
throw new PedagogicalException('Upstream error');
}).then(function (value) {
// never reached
}).then(function (value) {
// never reached
}, function (reason) {
// The `PedgagocialException` is propagated all the way down to here
});
```
Assimilation
------------
Sometimes the value you want to propagate to a downstream promise can only be
retrieved asynchronously. This can be achieved by returning a promise in the
fulfillment or rejection handler. The downstream promise will then be pending
until the returned promise is settled. This is called *assimilation*.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// The user's comments are now available
});
```
If the assimliated promise rejects, then the downstream promise will also reject.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// If `findCommentsByAuthor` fulfills, we'll have the value here
}, function (reason) {
// If `findCommentsByAuthor` rejects, we'll have the reason here
});
```
Simple Example
--------------
Synchronous Example
```javascript
let result;
try {
result = findResult();
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
findResult(function(result, err){
if (err) {
// failure
} else {
// success
}
});
```
Promise Example;
```javascript
findResult().then(function(result){
// success
}, function(reason){
// failure
});
```
Advanced Example
--------------
Synchronous Example
```javascript
let author, books;
try {
author = findAuthor();
books = findBooksByAuthor(author);
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
function foundBooks(books) {
}
function failure(reason) {
}
findAuthor(function(author, err){
if (err) {
failure(err);
// failure
} else {
try {
findBoooksByAuthor(author, function(books, err) {
if (err) {
failure(err);
} else {
try {
foundBooks(books);
} catch(reason) {
failure(reason);
}
}
});
} catch(error) {
failure(err);
}
// success
}
});
```
Promise Example;
```javascript
findAuthor().
then(findBooksByAuthor).
then(function(books){
// found books
}).catch(function(reason){
// something went wrong
});
```
@method then
@param {Function} onFulfilled
@param {Function} onRejected
Useful for tooling.
@return {Promise}
*/
then: then,
/**
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
as the catch block of a try/catch statement.
```js
function findAuthor(){
throw new Error('couldn't find that author');
}
// synchronous
try {
findAuthor();
} catch(reason) {
// something went wrong
}
// async with promises
findAuthor().catch(function(reason){
// something went wrong
});
```
@method catch
@param {Function} onRejection
Useful for tooling.
@return {Promise}
*/
'catch': function _catch(onRejection) {
return this.then(null, onRejection);
}
};
function polyfill() {
var local = undefined;
if (typeof global !== 'undefined') {
local = global;
} else if (typeof self !== 'undefined') {
local = self;
} else {
try {
local = Function('return this')();
} catch (e) {
throw new Error('polyfill failed because global object is unavailable in this environment');
}
}
var P = local.Promise;
if (P) {
var promiseToString = null;
try {
promiseToString = Object.prototype.toString.call(P.resolve());
} catch (e) {
// silently ignored
}
if (promiseToString === '[object Promise]' && !P.cast) {
return;
}
}
local.Promise = Promise;
}
// Strange compat..
Promise.polyfill = polyfill;
Promise.Promise = Promise;
return Promise;
})));
//# sourceMappingURL=es6-promise.map
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13), __webpack_require__(14)))
/***/ }),
/* 82 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;(function (self) {
'use strict';
function fetchPonyfill(options) {
var Promise = options && options.Promise || self.Promise;
var XMLHttpRequest = options && options.XMLHttpRequest || self.XMLHttpRequest;
var global = self;
return (function () {
var self = Object.create(global, {
fetch: {
value: undefined,
writable: true
}
});
(function(self) {
'use strict';
if (self.fetch) {
return
}
var support = {
searchParams: 'URLSearchParams' in self,
iterable: 'Symbol' in self && 'iterator' in Symbol,
blob: 'FileReader' in self && 'Blob' in self && (function() {
try {
new Blob()
return true
} catch(e) {
return false
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self
}
if (support.arrayBuffer) {
var viewClasses = [
'[object Int8Array]',
'[object Uint8Array]',
'[object Uint8ClampedArray]',
'[object Int16Array]',
'[object Uint16Array]',
'[object Int32Array]',
'[object Uint32Array]',
'[object Float32Array]',
'[object Float64Array]'
]
var isDataView = function(obj) {
return obj && DataView.prototype.isPrototypeOf(obj)
}
var isArrayBufferView = ArrayBuffer.isView || function(obj) {
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
}
}
function normalizeName(name) {
if (typeof name !== 'string') {
name = String(name)
}
if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
throw new TypeError('Invalid character in header field name')
}
return name.toLowerCase()
}
function normalizeValue(value) {
if (typeof value !== 'string') {
value = String(value)
}
return value
}
// Build a destructive iterator for the value list
function iteratorFor(items) {
var iterator = {
next: function() {
var value = items.shift()
return {done: value === undefined, value: value}
}
}
if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
}
}
return iterator
}
function Headers(headers) {
this.map = {}
if (headers instanceof Headers) {
headers.forEach(function(value, name) {
this.append(name, value)
}, this)
} else if (headers) {
Object.getOwnPropertyNames(headers).forEach(function(name) {
this.append(name, headers[name])
}, this)
}
}
Headers.prototype.append = function(name, value) {
name = normalizeName(name)
value = normalizeValue(value)
var oldValue = this.map[name]
this.map[name] = oldValue ? oldValue+','+value : value
}
Headers.prototype['delete'] = function(name) {
delete this.map[normalizeName(name)]
}
Headers.prototype.get = function(name) {
name = normalizeName(name)
return this.has(name) ? this.map[name] : null
}
Headers.prototype.has = function(name) {
return this.map.hasOwnProperty(normalizeName(name))
}
Headers.prototype.set = function(name, value) {
this.map[normalizeName(name)] = normalizeValue(value)
}
Headers.prototype.forEach = function(callback, thisArg) {
for (var name in this.map) {
if (this.map.hasOwnProperty(name)) {
callback.call(thisArg, this.map[name], name, this)
}
}
}
Headers.prototype.keys = function() {
var items = []
this.forEach(function(value, name) { items.push(name) })
return iteratorFor(items)
}
Headers.prototype.values = function() {
var items = []
this.forEach(function(value) { items.push(value) })
return iteratorFor(items)
}
Headers.prototype.entries = function() {
var items = []
this.forEach(function(value, name) { items.push([name, value]) })
return iteratorFor(items)
}
if (support.iterable) {
Headers.prototype[Symbol.iterator] = Headers.prototype.entries
}
function consumed(body) {
if (body.bodyUsed) {
return Promise.reject(new TypeError('Already read'))
}
body.bodyUsed = true
}
function fileReaderReady(reader) {
return new Promise(function(resolve, reject) {
reader.onload = function() {
resolve(reader.result)
}
reader.onerror = function() {
reject(reader.error)
}
})
}
function readBlobAsArrayBuffer(blob) {
var reader = new FileReader()
var promise = fileReaderReady(reader)
reader.readAsArrayBuffer(blob)
return promise
}
function readBlobAsText(blob) {
var reader = new FileReader()
var promise = fileReaderReady(reader)
reader.readAsText(blob)
return promise
}
function readArrayBufferAsText(buf) {
var view = new Uint8Array(buf)
var chars = new Array(view.length)
for (var i = 0; i < view.length; i++) {
chars[i] = String.fromCharCode(view[i])
}
return chars.join('')
}
function bufferClone(buf) {
if (buf.slice) {
return buf.slice(0)
} else {
var view = new Uint8Array(buf.byteLength)
view.set(new Uint8Array(buf))
return view.buffer
}
}
function Body() {
this.bodyUsed = false
this._initBody = function(body) {
this._bodyInit = body
if (!body) {
this._bodyText = ''
} else if (typeof body === 'string') {
this._bodyText = body
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
this._bodyBlob = body
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
this._bodyFormData = body
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this._bodyText = body.toString()
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
this._bodyArrayBuffer = bufferClone(body.buffer)
// IE 10-11 can't handle a DataView body.
this._bodyInit = new Blob([this._bodyArrayBuffer])
} else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
this._bodyArrayBuffer = bufferClone(body)
} else {
throw new Error('unsupported BodyInit type')
}
if (!this.headers.get('content-type')) {
if (typeof body === 'string') {
this.headers.set('content-type', 'text/plain;charset=UTF-8')
} else if (this._bodyBlob && this._bodyBlob.type) {
this.headers.set('content-type', this._bodyBlob.type)
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
}
}
}
if (support.blob) {
this.blob = function() {
var rejected = consumed(this)
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return Promise.resolve(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(new Blob([this._bodyArrayBuffer]))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as blob')
} else {
return Promise.resolve(new Blob([this._bodyText]))
}
}
this.arrayBuffer = function() {
if (this._bodyArrayBuffer) {
return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
} else {
return this.blob().then(readBlobAsArrayBuffer)
}
}
}
this.text = function() {
var rejected = consumed(this)
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return readBlobAsText(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as text')
} else {
return Promise.resolve(this._bodyText)
}
}
if (support.formData) {
this.formData = function() {
return this.text().then(decode)
}
}
this.json = function() {
return this.text().then(JSON.parse)
}
return this
}
// HTTP methods whose capitalization should be normalized
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
function normalizeMethod(method) {
var upcased = method.toUpperCase()
return (methods.indexOf(upcased) > -1) ? upcased : method
}
function Request(input, options) {
options = options || {}
var body = options.body
if (input instanceof Request) {
if (input.bodyUsed) {
throw new TypeError('Already read')
}
this.url = input.url
this.credentials = input.credentials
if (!options.headers) {
this.headers = new Headers(input.headers)
}
this.method = input.method
this.mode = input.mode
if (!body && input._bodyInit != null) {
body = input._bodyInit
input.bodyUsed = true
}
} else {
this.url = String(input)
}
this.credentials = options.credentials || this.credentials || 'omit'
if (options.headers || !this.headers) {
this.headers = new Headers(options.headers)
}
this.method = normalizeMethod(options.method || this.method || 'GET')
this.mode = options.mode || this.mode || null
this.referrer = null
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
throw new TypeError('Body not allowed for GET or HEAD requests')
}
this._initBody(body)
}
Request.prototype.clone = function() {
return new Request(this, { body: this._bodyInit })
}
function decode(body) {
var form = new FormData()
body.trim().split('&').forEach(function(bytes) {
if (bytes) {
var split = bytes.split('=')
var name = split.shift().replace(/\+/g, ' ')
var value = split.join('=').replace(/\+/g, ' ')
form.append(decodeURIComponent(name), decodeURIComponent(value))
}
})
return form
}
function parseHeaders(rawHeaders) {
var headers = new Headers()
rawHeaders.split(/\r?\n/).forEach(function(line) {
var parts = line.split(':')
var key = parts.shift().trim()
if (key) {
var value = parts.join(':').trim()
headers.append(key, value)
}
})
return headers
}
Body.call(Request.prototype)
function Response(bodyInit, options) {
if (!options) {
options = {}
}
this.type = 'default'
this.status = 'status' in options ? options.status : 200
this.ok = this.status >= 200 && this.status < 300
this.statusText = 'statusText' in options ? options.statusText : 'OK'
this.headers = new Headers(options.headers)
this.url = options.url || ''
this._initBody(bodyInit)
}
Body.call(Response.prototype)
Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url
})
}
Response.error = function() {
var response = new Response(null, {status: 0, statusText: ''})
response.type = 'error'
return response
}
var redirectStatuses = [301, 302, 303, 307, 308]
Response.redirect = function(url, status) {
if (redirectStatuses.indexOf(status) === -1) {
throw new RangeError('Invalid status code')
}
return new Response(null, {status: status, headers: {location: url}})
}
self.Headers = Headers
self.Request = Request
self.Response = Response
self.fetch = function(input, init) {
return new Promise(function(resolve, reject) {
var request = new Request(input, init)
var xhr = new XMLHttpRequest()
xhr.onload = function() {
var options = {
status: xhr.status,
statusText: xhr.statusText,
headers: parseHeaders(xhr.getAllResponseHeaders() || '')
}
options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')
var body = 'response' in xhr ? xhr.response : xhr.responseText
resolve(new Response(body, options))
}
xhr.onerror = function() {
reject(new TypeError('Network request failed'))
}
xhr.ontimeout = function() {
reject(new TypeError('Network request failed'))
}
xhr.open(request.method, request.url, true)
if (request.credentials === 'include') {
xhr.withCredentials = true
}
if ('responseType' in xhr && support.blob) {
xhr.responseType = 'blob'
}
request.headers.forEach(function(value, name) {
xhr.setRequestHeader(name, value)
})
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
})
}
self.fetch.polyfill = true
})(typeof self !== 'undefined' ? self : this);
return {
fetch: self.fetch,
Headers: self.Headers,
Request: self.Request,
Response: self.Response
};
}());
}
if (true) {
!(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
return fetchPonyfill;
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else if (typeof exports === 'object') {
module.exports = fetchPonyfill;
} else {
self.fetchPonyfill = fetchPonyfill;
}
}(typeof self === 'undefined' ? this : self));
/***/ }),
/* 83 */
/***/ (function(module, exports) {
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
var e, m
var eLen = nBytes * 8 - mLen - 1
var eMax = (1 << eLen) - 1
var eBias = eMax >> 1
var nBits = -7
var i = isLE ? (nBytes - 1) : 0
var d = isLE ? -1 : 1
var s = buffer[offset + i]
i += d
e = s & ((1 << (-nBits)) - 1)
s >>= (-nBits)
nBits += eLen
for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
m = e & ((1 << (-nBits)) - 1)
e >>= (-nBits)
nBits += mLen
for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
if (e === 0) {
e = 1 - eBias
} else if (e === eMax) {
return m ? NaN : ((s ? -1 : 1) * Infinity)
} else {
m = m + Math.pow(2, mLen)
e = e - eBias
}
return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}
exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
var e, m, c
var eLen = nBytes * 8 - mLen - 1
var eMax = (1 << eLen) - 1
var eBias = eMax >> 1
var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
var i = isLE ? 0 : (nBytes - 1)
var d = isLE ? 1 : -1
var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
value = Math.abs(value)
if (isNaN(value) || value === Infinity) {
m = isNaN(value) ? 1 : 0
e = eMax
} else {
e = Math.floor(Math.log(value) / Math.LN2)
if (value * (c = Math.pow(2, -e)) < 1) {
e--
c *= 2
}
if (e + eBias >= 1) {
value += rt / c
} else {
value += rt * Math.pow(2, 1 - eBias)
}
if (value * c >= 2) {
e++
c /= 2
}
if (e + eBias >= eMax) {
m = 0
e = eMax
} else if (e + eBias >= 1) {
m = (value * c - 1) * Math.pow(2, mLen)
e = e + eBias
} else {
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
e = 0
}
}
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
e = (e << mLen) | m
eLen += mLen
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
buffer[offset + i - d] |= s * 128
}
/***/ }),
/* 84 */
/***/ (function(module, exports) {
var toString = {}.toString;
module.exports = Array.isArray || function (arr) {
return toString.call(arr) == '[object Array]';
};
/***/ }),
/* 85 */
/***/ (function(module, exports, __webpack_require__) {
var json = typeof JSON !== 'undefined' ? JSON : __webpack_require__(86);
module.exports = function (obj, opts) {
if (!opts) opts = {};
if (typeof opts === 'function') opts = { cmp: opts };
var space = opts.space || '';
if (typeof space === 'number') space = Array(space+1).join(' ');
var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
var replacer = opts.replacer || function(key, value) { return value; };
var cmp = opts.cmp && (function (f) {
return function (node) {
return function (a, b) {
var aobj = { key: a, value: node[a] };
var bobj = { key: b, value: node[b] };
return f(aobj, bobj);
};
};
})(opts.cmp);
var seen = [];
return (function stringify (parent, key, node, level) {
var indent = space ? ('\n' + new Array(level + 1).join(space)) : '';
var colonSeparator = space ? ': ' : ':';
if (node && node.toJSON && typeof node.toJSON === 'function') {
node = node.toJSON();
}
node = replacer.call(parent, key, node);
if (node === undefined) {
return;
}
if (typeof node !== 'object' || node === null) {
return json.stringify(node);
}
if (isArray(node)) {
var out = [];
for (var i = 0; i < node.length; i++) {
var item = stringify(node, i, node[i], level+1) || json.stringify(null);
out.push(indent + space + item);
}
return '[' + out.join(',') + indent + ']';
}
else {
if (seen.indexOf(node) !== -1) {
if (cycles) return json.stringify('__cycle__');
throw new TypeError('Converting circular structure to JSON');
}
else seen.push(node);
var keys = objectKeys(node).sort(cmp && cmp(node));
var out = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = stringify(node, key, node[key], level+1);
if(!value) continue;
var keyValue = json.stringify(key)
+ colonSeparator
+ value;
;
out.push(indent + space + keyValue);
}
seen.splice(seen.indexOf(node), 1);
return '{' + out.join(',') + indent + '}';
}
})({ '': obj }, '', obj, 0);
};
var isArray = Array.isArray || function (x) {
return {}.toString.call(x) === '[object Array]';
};
var objectKeys = Object.keys || function (obj) {
var has = Object.prototype.hasOwnProperty || function () { return true };
var keys = [];
for (var key in obj) {
if (has.call(obj, key)) keys.push(key);
}
return keys;
};
/***/ }),
/* 86 */
/***/ (function(module, exports, __webpack_require__) {
exports.parse = __webpack_require__(87);
exports.stringify = __webpack_require__(88);
/***/ }),
/* 87 */
/***/ (function(module, exports) {
var at, // The index of the current character
ch, // The current character
escapee = {
'"': '"',
'\\': '\\',
'/': '/',
b: '\b',
f: '\f',
n: '\n',
r: '\r',
t: '\t'
},
text,
error = function (m) {
// Call error when something is wrong.
throw {
name: 'SyntaxError',
message: m,
at: at,
text: text
};
},
next = function (c) {
// If a c parameter is provided, verify that it matches the current character.
if (c && c !== ch) {
error("Expected '" + c + "' instead of '" + ch + "'");
}
// Get the next character. When there are no more characters,
// return the empty string.
ch = text.charAt(at);
at += 1;
return ch;
},
number = function () {
// Parse a number value.
var number,
string = '';
if (ch === '-') {
string = '-';
next('-');
}
while (ch >= '0' && ch <= '9') {
string += ch;
next();
}
if (ch === '.') {
string += '.';
while (next() && ch >= '0' && ch <= '9') {
string += ch;
}
}
if (ch === 'e' || ch === 'E') {
string += ch;
next();
if (ch === '-' || ch === '+') {
string += ch;
next();
}
while (ch >= '0' && ch <= '9') {
string += ch;
next();
}
}
number = +string;
if (!isFinite(number)) {
error("Bad number");
} else {
return number;
}
},
string = function () {
// Parse a string value.
var hex,
i,
string = '',
uffff;
// When parsing for string values, we must look for " and \ characters.
if (ch === '"') {
while (next()) {
if (ch === '"') {
next();
return string;
} else if (ch === '\\') {
next();
if (ch === 'u') {
uffff = 0;
for (i = 0; i < 4; i += 1) {
hex = parseInt(next(), 16);
if (!isFinite(hex)) {
break;
}
uffff = uffff * 16 + hex;
}
string += String.fromCharCode(uffff);
} else if (typeof escapee[ch] === 'string') {
string += escapee[ch];
} else {
break;
}
} else {
string += ch;
}
}
}
error("Bad string");
},
white = function () {
// Skip whitespace.
while (ch && ch <= ' ') {
next();
}
},
word = function () {
// true, false, or null.
switch (ch) {
case 't':
next('t');
next('r');
next('u');
next('e');
return true;
case 'f':
next('f');
next('a');
next('l');
next('s');
next('e');
return false;
case 'n':
next('n');
next('u');
next('l');
next('l');
return null;
}
error("Unexpected '" + ch + "'");
},
value, // Place holder for the value function.
array = function () {
// Parse an array value.
var array = [];
if (ch === '[') {
next('[');
white();
if (ch === ']') {
next(']');
return array; // empty array
}
while (ch) {
array.push(value());
white();
if (ch === ']') {
next(']');
return array;
}
next(',');
white();
}
}
error("Bad array");
},
object = function () {
// Parse an object value.
var key,
object = {};
if (ch === '{') {
next('{');
white();
if (ch === '}') {
next('}');
return object; // empty object
}
while (ch) {
key = string();
white();
next(':');
if (Object.hasOwnProperty.call(object, key)) {
error('Duplicate key "' + key + '"');
}
object[key] = value();
white();
if (ch === '}') {
next('}');
return object;
}
next(',');
white();
}
}
error("Bad object");
};
value = function () {
// Parse a JSON value. It could be an object, an array, a string, a number,
// or a word.
white();
switch (ch) {
case '{':
return object();
case '[':
return array();
case '"':
return string();
case '-':
return number();
default:
return ch >= '0' && ch <= '9' ? number() : word();
}
};
// Return the json_parse function. It will have access to all of the above
// functions and variables.
module.exports = function (source, reviver) {
var result;
text = source;
at = 0;
ch = ' ';
result = value();
white();
if (ch) {
error("Syntax error");
}
// If there is a reviver function, we recursively walk the new structure,
// passing each name/value pair to the reviver function for possible
// transformation, starting with a temporary root object that holds the result
// in an empty key. If there is not a reviver function, we simply return the
// result.
return typeof reviver === 'function' ? (function walk(holder, key) {
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}({'': result}, '')) : result;
};
/***/ }),
/* 88 */
/***/ (function(module, exports) {
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap,
indent,
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
rep;
function quote(string) {
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string' ? c :
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
function str(key, holder) {
// Produce a string from holder[key].
var i, // The loop counter.
k, // The member key.
v, // The member value.
length,
mind = gap,
partial,
value = holder[key];
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.
if (typeof rep === 'function') {
value = rep.call(holder, key, value);
}
// What happens next depends on the value's type.
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
// JSON numbers must be finite. Encode non-finite numbers as null.
return isFinite(value) ? String(value) : 'null';
case 'boolean':
case 'null':
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return String(value);
case 'object':
if (!value) return 'null';
gap += indent;
partial = [];
// Array.isArray
if (Object.prototype.toString.apply(value) === '[object Array]') {
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
// Join all of the elements together, separated with commas, and
// wrap them in brackets.
v = partial.length === 0 ? '[]' : gap ?
'[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
'[' + partial.join(',') + ']';
gap = mind;
return v;
}
// If the replacer is an array, use it to select the members to be
// stringified.
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
k = rep[i];
if (typeof k === 'string') {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
else {
// Otherwise, iterate through all of the keys in the object.
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v = partial.length === 0 ? '{}' : gap ?
'{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
'{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
module.exports = function (value, replacer, space) {
var i;
gap = '';
indent = '';
// If the space parameter is a number, make an indent string containing that
// many spaces.
if (typeof space === 'number') {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
}
// If the space parameter is a string, it will be used as the indent string.
else if (typeof space === 'string') {
indent = space;
}
// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.
rep = replacer;
if (replacer && typeof replacer !== 'function'
&& (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return str('', {'': value});
};
/***/ }),
/* 89 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
function toObject(val) {
if (val === null || val === undefined) {
throw new TypeError('Object.assign cannot be called with null or undefined');
}
return Object(val);
}
function shouldUseNative() {
try {
if (!Object.assign) {
return false;
}
// Detect buggy property enumeration order in older V8 versions.
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
test1[5] = 'de';
if (Object.getOwnPropertyNames(test1)[0] === '5') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test2 = {};
for (var i = 0; i < 10; i++) {
test2['_' + String.fromCharCode(i)] = i;
}
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
return test2[n];
});
if (order2.join('') !== '0123456789') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test3 = {};
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
test3[letter] = letter;
});
if (Object.keys(Object.assign({}, test3)).join('') !==
'abcdefghijklmnopqrst') {
return false;
}
return true;
} catch (err) {
// We don't expect any of the above to throw, but better to be safe.
return false;
}
}
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
var from;
var to = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty.call(from, key)) {
to[key] = from[key];
}
}
if (getOwnPropertySymbols) {
symbols = getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to[symbols[i]] = from[symbols[i]];
}
}
}
}
return to;
};
/***/ }),
/* 90 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var strictUriEncode = __webpack_require__(91);
var objectAssign = __webpack_require__(89);
function encoderForArrayFormat(opts) {
switch (opts.arrayFormat) {
case 'index':
return function (key, value, index) {
return value === null ? [
encode(key, opts),
'[',
index,
']'
].join('') : [
encode(key, opts),
'[',
encode(index, opts),
']=',
encode(value, opts)
].join('');
};
case 'bracket':
return function (key, value) {
return value === null ? encode(key, opts) : [
encode(key, opts),
'[]=',
encode(value, opts)
].join('');
};
default:
return function (key, value) {
return value === null ? encode(key, opts) : [
encode(key, opts),
'=',
encode(value, opts)
].join('');
};
}
}
function parserForArrayFormat(opts) {
var result;
switch (opts.arrayFormat) {
case 'index':
return function (key, value, accumulator) {
result = /\[(\d*)\]$/.exec(key);
key = key.replace(/\[\d*\]$/, '');
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === undefined) {
accumulator[key] = {};
}
accumulator[key][result[1]] = value;
};
case 'bracket':
return function (key, value, accumulator) {
result = /(\[\])$/.exec(key);
key = key.replace(/\[\]$/, '');
if (!result) {
accumulator[key] = value;
return;
} else if (accumulator[key] === undefined) {
accumulator[key] = [value];
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
default:
return function (key, value, accumulator) {
if (accumulator[key] === undefined) {
accumulator[key] = value;
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
}
}
function encode(value, opts) {
if (opts.encode) {
return opts.strict ? strictUriEncode(value) : encodeURIComponent(value);
}
return value;
}
function keysSorter(input) {
if (Array.isArray(input)) {
return input.sort();
} else if (typeof input === 'object') {
return keysSorter(Object.keys(input)).sort(function (a, b) {
return Number(a) - Number(b);
}).map(function (key) {
return input[key];
});
}
return input;
}
exports.extract = function (str) {
return str.split('?')[1] || '';
};
exports.parse = function (str, opts) {
opts = objectAssign({arrayFormat: 'none'}, opts);
var formatter = parserForArrayFormat(opts);
// Create an object with no prototype
// https://github.com/sindresorhus/query-string/issues/47
var ret = Object.create(null);
if (typeof str !== 'string') {
return ret;
}
str = str.trim().replace(/^(\?|#|&)/, '');
if (!str) {
return ret;
}
str.split('&').forEach(function (param) {
var parts = param.replace(/\+/g, ' ').split('=');
// Firefox (pre 40) decodes `%3D` to `=`
// https://github.com/sindresorhus/query-string/pull/37
var key = parts.shift();
var val = parts.length > 0 ? parts.join('=') : undefined;
// missing `=` should be `null`:
// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
val = val === undefined ? null : decodeURIComponent(val);
formatter(decodeURIComponent(key), val, ret);
});
return Object.keys(ret).sort().reduce(function (result, key) {
var val = ret[key];
if (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {
// Sort object keys, not values
result[key] = keysSorter(val);
} else {
result[key] = val;
}
return result;
}, Object.create(null));
};
exports.stringify = function (obj, opts) {
var defaults = {
encode: true,
strict: true,
arrayFormat: 'none'
};
opts = objectAssign(defaults, opts);
var formatter = encoderForArrayFormat(opts);
return obj ? Object.keys(obj).sort().map(function (key) {
var val = obj[key];
if (val === undefined) {
return '';
}
if (val === null) {
return encode(key, opts);
}
if (Array.isArray(val)) {
var result = [];
val.slice().forEach(function (val2) {
if (val2 === undefined) {
return;
}
result.push(formatter(key, val2, result.length));
});
return result.join('&');
}
return encode(key, opts) + '=' + encode(val, opts);
}).filter(function (x) {
return x.length > 0;
}).join('&') : '';
};
/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = function (str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16).toUpperCase();
});
};
/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {
(function(nacl) {
'use strict';
// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
// Public domain.
//
// Implementation derived from TweetNaCl version 20140427.
// See for details: http://tweetnacl.cr.yp.to/
var gf = function(init) {
var i, r = new Float64Array(16);
if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
return r;
};
// Pluggable, initialized in high-level API below.
var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };
var _0 = new Uint8Array(16);
var _9 = new Uint8Array(32); _9[0] = 9;
var gf0 = gf(),
gf1 = gf([1]),
_121665 = gf([0xdb41, 1]),
D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
function ts64(x, i, h, l) {
x[i] = (h >> 24) & 0xff;
x[i+1] = (h >> 16) & 0xff;
x[i+2] = (h >> 8) & 0xff;
x[i+3] = h & 0xff;
x[i+4] = (l >> 24) & 0xff;
x[i+5] = (l >> 16) & 0xff;
x[i+6] = (l >> 8) & 0xff;
x[i+7] = l & 0xff;
}
function vn(x, xi, y, yi, n) {
var i,d = 0;
for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
return (1 & ((d - 1) >>> 8)) - 1;
}
function crypto_verify_16(x, xi, y, yi) {
return vn(x,xi,y,yi,16);
}
function crypto_verify_32(x, xi, y, yi) {
return vn(x,xi,y,yi,32);
}
function core_salsa20(o, p, k, c) {
var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
x15 = j15, u;
for (var i = 0; i < 20; i += 2) {
u = x0 + x12 | 0;
x4 ^= u<<7 | u>>>(32-7);
u = x4 + x0 | 0;
x8 ^= u<<9 | u>>>(32-9);
u = x8 + x4 | 0;
x12 ^= u<<13 | u>>>(32-13);
u = x12 + x8 | 0;
x0 ^= u<<18 | u>>>(32-18);
u = x5 + x1 | 0;
x9 ^= u<<7 | u>>>(32-7);
u = x9 + x5 | 0;
x13 ^= u<<9 | u>>>(32-9);
u = x13 + x9 | 0;
x1 ^= u<<13 | u>>>(32-13);
u = x1 + x13 | 0;
x5 ^= u<<18 | u>>>(32-18);
u = x10 + x6 | 0;
x14 ^= u<<7 | u>>>(32-7);
u = x14 + x10 | 0;
x2 ^= u<<9 | u>>>(32-9);
u = x2 + x14 | 0;
x6 ^= u<<13 | u>>>(32-13);
u = x6 + x2 | 0;
x10 ^= u<<18 | u>>>(32-18);
u = x15 + x11 | 0;
x3 ^= u<<7 | u>>>(32-7);
u = x3 + x15 | 0;
x7 ^= u<<9 | u>>>(32-9);
u = x7 + x3 | 0;
x11 ^= u<<13 | u>>>(32-13);
u = x11 + x7 | 0;
x15 ^= u<<18 | u>>>(32-18);
u = x0 + x3 | 0;
x1 ^= u<<7 | u>>>(32-7);
u = x1 + x0 | 0;
x2 ^= u<<9 | u>>>(32-9);
u = x2 + x1 | 0;
x3 ^= u<<13 | u>>>(32-13);
u = x3 + x2 | 0;
x0 ^= u<<18 | u>>>(32-18);
u = x5 + x4 | 0;
x6 ^= u<<7 | u>>>(32-7);
u = x6 + x5 | 0;
x7 ^= u<<9 | u>>>(32-9);
u = x7 + x6 | 0;
x4 ^= u<<13 | u>>>(32-13);
u = x4 + x7 | 0;
x5 ^= u<<18 | u>>>(32-18);
u = x10 + x9 | 0;
x11 ^= u<<7 | u>>>(32-7);
u = x11 + x10 | 0;
x8 ^= u<<9 | u>>>(32-9);
u = x8 + x11 | 0;
x9 ^= u<<13 | u>>>(32-13);
u = x9 + x8 | 0;
x10 ^= u<<18 | u>>>(32-18);
u = x15 + x14 | 0;
x12 ^= u<<7 | u>>>(32-7);
u = x12 + x15 | 0;
x13 ^= u<<9 | u>>>(32-9);
u = x13 + x12 | 0;
x14 ^= u<<13 | u>>>(32-13);
u = x14 + x13 | 0;
x15 ^= u<<18 | u>>>(32-18);
}
x0 = x0 + j0 | 0;
x1 = x1 + j1 | 0;
x2 = x2 + j2 | 0;
x3 = x3 + j3 | 0;
x4 = x4 + j4 | 0;
x5 = x5 + j5 | 0;
x6 = x6 + j6 | 0;
x7 = x7 + j7 | 0;
x8 = x8 + j8 | 0;
x9 = x9 + j9 | 0;
x10 = x10 + j10 | 0;
x11 = x11 + j11 | 0;
x12 = x12 + j12 | 0;
x13 = x13 + j13 | 0;
x14 = x14 + j14 | 0;
x15 = x15 + j15 | 0;
o[ 0] = x0 >>> 0 & 0xff;
o[ 1] = x0 >>> 8 & 0xff;
o[ 2] = x0 >>> 16 & 0xff;
o[ 3] = x0 >>> 24 & 0xff;
o[ 4] = x1 >>> 0 & 0xff;
o[ 5] = x1 >>> 8 & 0xff;
o[ 6] = x1 >>> 16 & 0xff;
o[ 7] = x1 >>> 24 & 0xff;
o[ 8] = x2 >>> 0 & 0xff;
o[ 9] = x2 >>> 8 & 0xff;
o[10] = x2 >>> 16 & 0xff;
o[11] = x2 >>> 24 & 0xff;
o[12] = x3 >>> 0 & 0xff;
o[13] = x3 >>> 8 & 0xff;
o[14] = x3 >>> 16 & 0xff;
o[15] = x3 >>> 24 & 0xff;
o[16] = x4 >>> 0 & 0xff;
o[17] = x4 >>> 8 & 0xff;
o[18] = x4 >>> 16 & 0xff;
o[19] = x4 >>> 24 & 0xff;
o[20] = x5 >>> 0 & 0xff;
o[21] = x5 >>> 8 & 0xff;
o[22] = x5 >>> 16 & 0xff;
o[23] = x5 >>> 24 & 0xff;
o[24] = x6 >>> 0 & 0xff;
o[25] = x6 >>> 8 & 0xff;
o[26] = x6 >>> 16 & 0xff;
o[27] = x6 >>> 24 & 0xff;
o[28] = x7 >>> 0 & 0xff;
o[29] = x7 >>> 8 & 0xff;
o[30] = x7 >>> 16 & 0xff;
o[31] = x7 >>> 24 & 0xff;
o[32] = x8 >>> 0 & 0xff;
o[33] = x8 >>> 8 & 0xff;
o[34] = x8 >>> 16 & 0xff;
o[35] = x8 >>> 24 & 0xff;
o[36] = x9 >>> 0 & 0xff;
o[37] = x9 >>> 8 & 0xff;
o[38] = x9 >>> 16 & 0xff;
o[39] = x9 >>> 24 & 0xff;
o[40] = x10 >>> 0 & 0xff;
o[41] = x10 >>> 8 & 0xff;
o[42] = x10 >>> 16 & 0xff;
o[43] = x10 >>> 24 & 0xff;
o[44] = x11 >>> 0 & 0xff;
o[45] = x11 >>> 8 & 0xff;
o[46] = x11 >>> 16 & 0xff;
o[47] = x11 >>> 24 & 0xff;
o[48] = x12 >>> 0 & 0xff;
o[49] = x12 >>> 8 & 0xff;
o[50] = x12 >>> 16 & 0xff;
o[51] = x12 >>> 24 & 0xff;
o[52] = x13 >>> 0 & 0xff;
o[53] = x13 >>> 8 & 0xff;
o[54] = x13 >>> 16 & 0xff;
o[55] = x13 >>> 24 & 0xff;
o[56] = x14 >>> 0 & 0xff;
o[57] = x14 >>> 8 & 0xff;
o[58] = x14 >>> 16 & 0xff;
o[59] = x14 >>> 24 & 0xff;
o[60] = x15 >>> 0 & 0xff;
o[61] = x15 >>> 8 & 0xff;
o[62] = x15 >>> 16 & 0xff;
o[63] = x15 >>> 24 & 0xff;
}
function core_hsalsa20(o,p,k,c) {
var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
x15 = j15, u;
for (var i = 0; i < 20; i += 2) {
u = x0 + x12 | 0;
x4 ^= u<<7 | u>>>(32-7);
u = x4 + x0 | 0;
x8 ^= u<<9 | u>>>(32-9);
u = x8 + x4 | 0;
x12 ^= u<<13 | u>>>(32-13);
u = x12 + x8 | 0;
x0 ^= u<<18 | u>>>(32-18);
u = x5 + x1 | 0;
x9 ^= u<<7 | u>>>(32-7);
u = x9 + x5 | 0;
x13 ^= u<<9 | u>>>(32-9);
u = x13 + x9 | 0;
x1 ^= u<<13 | u>>>(32-13);
u = x1 + x13 | 0;
x5 ^= u<<18 | u>>>(32-18);
u = x10 + x6 | 0;
x14 ^= u<<7 | u>>>(32-7);
u = x14 + x10 | 0;
x2 ^= u<<9 | u>>>(32-9);
u = x2 + x14 | 0;
x6 ^= u<<13 | u>>>(32-13);
u = x6 + x2 | 0;
x10 ^= u<<18 | u>>>(32-18);
u = x15 + x11 | 0;
x3 ^= u<<7 | u>>>(32-7);
u = x3 + x15 | 0;
x7 ^= u<<9 | u>>>(32-9);
u = x7 + x3 | 0;
x11 ^= u<<13 | u>>>(32-13);
u = x11 + x7 | 0;
x15 ^= u<<18 | u>>>(32-18);
u = x0 + x3 | 0;
x1 ^= u<<7 | u>>>(32-7);
u = x1 + x0 | 0;
x2 ^= u<<9 | u>>>(32-9);
u = x2 + x1 | 0;
x3 ^= u<<13 | u>>>(32-13);
u = x3 + x2 | 0;
x0 ^= u<<18 | u>>>(32-18);
u = x5 + x4 | 0;
x6 ^= u<<7 | u>>>(32-7);
u = x6 + x5 | 0;
x7 ^= u<<9 | u>>>(32-9);
u = x7 + x6 | 0;
x4 ^= u<<13 | u>>>(32-13);
u = x4 + x7 | 0;
x5 ^= u<<18 | u>>>(32-18);
u = x10 + x9 | 0;
x11 ^= u<<7 | u>>>(32-7);
u = x11 + x10 | 0;
x8 ^= u<<9 | u>>>(32-9);
u = x8 + x11 | 0;
x9 ^= u<<13 | u>>>(32-13);
u = x9 + x8 | 0;
x10 ^= u<<18 | u>>>(32-18);
u = x15 + x14 | 0;
x12 ^= u<<7 | u>>>(32-7);
u = x12 + x15 | 0;
x13 ^= u<<9 | u>>>(32-9);
u = x13 + x12 | 0;
x14 ^= u<<13 | u>>>(32-13);
u = x14 + x13 | 0;
x15 ^= u<<18 | u>>>(32-18);
}
o[ 0] = x0 >>> 0 & 0xff;
o[ 1] = x0 >>> 8 & 0xff;
o[ 2] = x0 >>> 16 & 0xff;
o[ 3] = x0 >>> 24 & 0xff;
o[ 4] = x5 >>> 0 & 0xff;
o[ 5] = x5 >>> 8 & 0xff;
o[ 6] = x5 >>> 16 & 0xff;
o[ 7] = x5 >>> 24 & 0xff;
o[ 8] = x10 >>> 0 & 0xff;
o[ 9] = x10 >>> 8 & 0xff;
o[10] = x10 >>> 16 & 0xff;
o[11] = x10 >>> 24 & 0xff;
o[12] = x15 >>> 0 & 0xff;
o[13] = x15 >>> 8 & 0xff;
o[14] = x15 >>> 16 & 0xff;
o[15] = x15 >>> 24 & 0xff;
o[16] = x6 >>> 0 & 0xff;
o[17] = x6 >>> 8 & 0xff;
o[18] = x6 >>> 16 & 0xff;
o[19] = x6 >>> 24 & 0xff;
o[20] = x7 >>> 0 & 0xff;
o[21] = x7 >>> 8 & 0xff;
o[22] = x7 >>> 16 & 0xff;
o[23] = x7 >>> 24 & 0xff;
o[24] = x8 >>> 0 & 0xff;
o[25] = x8 >>> 8 & 0xff;
o[26] = x8 >>> 16 & 0xff;
o[27] = x8 >>> 24 & 0xff;
o[28] = x9 >>> 0 & 0xff;
o[29] = x9 >>> 8 & 0xff;
o[30] = x9 >>> 16 & 0xff;
o[31] = x9 >>> 24 & 0xff;
}
function crypto_core_salsa20(out,inp,k,c) {
core_salsa20(out,inp,k,c);
}
function crypto_core_hsalsa20(out,inp,k,c) {
core_hsalsa20(out,inp,k,c);
}
var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
// "expand 32-byte k"
function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
var z = new Uint8Array(16), x = new Uint8Array(64);
var u, i;
for (i = 0; i < 16; i++) z[i] = 0;
for (i = 0; i < 8; i++) z[i] = n[i];
while (b >= 64) {
crypto_core_salsa20(x,z,k,sigma);
for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];
u = 1;
for (i = 8; i < 16; i++) {
u = u + (z[i] & 0xff) | 0;
z[i] = u & 0xff;
u >>>= 8;
}
b -= 64;
cpos += 64;
mpos += 64;
}
if (b > 0) {
crypto_core_salsa20(x,z,k,sigma);
for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];
}
return 0;
}
function crypto_stream_salsa20(c,cpos,b,n,k) {
var z = new Uint8Array(16), x = new Uint8Array(64);
var u, i;
for (i = 0; i < 16; i++) z[i] = 0;
for (i = 0; i < 8; i++) z[i] = n[i];
while (b >= 64) {
crypto_core_salsa20(x,z,k,sigma);
for (i = 0; i < 64; i++) c[cpos+i] = x[i];
u = 1;
for (i = 8; i < 16; i++) {
u = u + (z[i] & 0xff) | 0;
z[i] = u & 0xff;
u >>>= 8;
}
b -= 64;
cpos += 64;
}
if (b > 0) {
crypto_core_salsa20(x,z,k,sigma);
for (i = 0; i < b; i++) c[cpos+i] = x[i];
}
return 0;
}
function crypto_stream(c,cpos,d,n,k) {
var s = new Uint8Array(32);
crypto_core_hsalsa20(s,n,k,sigma);
var sn = new Uint8Array(8);
for (var i = 0; i < 8; i++) sn[i] = n[i+16];
return crypto_stream_salsa20(c,cpos,d,sn,s);
}
function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
var s = new Uint8Array(32);
crypto_core_hsalsa20(s,n,k,sigma);
var sn = new Uint8Array(8);
for (var i = 0; i < 8; i++) sn[i] = n[i+16];
return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);
}
/*
* Port of Andrew Moon's Poly1305-donna-16. Public domain.
* https://github.com/floodyberry/poly1305-donna
*/
var poly1305 = function(key) {
this.buffer = new Uint8Array(16);
this.r = new Uint16Array(10);
this.h = new Uint16Array(10);
this.pad = new Uint16Array(8);
this.leftover = 0;
this.fin = 0;
var t0, t1, t2, t3, t4, t5, t6, t7;
t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;
t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;
t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;
this.r[5] = ((t4 >>> 1)) & 0x1ffe;
t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;
t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
this.r[9] = ((t7 >>> 5)) & 0x007f;
this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;
this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;
this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;
this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;
this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;
this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;
this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;
this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;
};
poly1305.prototype.blocks = function(m, mpos, bytes) {
var hibit = this.fin ? 0 : (1 << 11);
var t0, t1, t2, t3, t4, t5, t6, t7, c;
var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
var h0 = this.h[0],
h1 = this.h[1],
h2 = this.h[2],
h3 = this.h[3],
h4 = this.h[4],
h5 = this.h[5],
h6 = this.h[6],
h7 = this.h[7],
h8 = this.h[8],
h9 = this.h[9];
var r0 = this.r[0],
r1 = this.r[1],
r2 = this.r[2],
r3 = this.r[3],
r4 = this.r[4],
r5 = this.r[5],
r6 = this.r[6],
r7 = this.r[7],
r8 = this.r[8],
r9 = this.r[9];
while (bytes >= 16) {
t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;
t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;
t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;
h5 += ((t4 >>> 1)) & 0x1fff;
t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;
t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
h9 += ((t7 >>> 5)) | hibit;
c = 0;
d0 = c;
d0 += h0 * r0;
d0 += h1 * (5 * r9);
d0 += h2 * (5 * r8);
d0 += h3 * (5 * r7);
d0 += h4 * (5 * r6);
c = (d0 >>> 13); d0 &= 0x1fff;
d0 += h5 * (5 * r5);
d0 += h6 * (5 * r4);
d0 += h7 * (5 * r3);
d0 += h8 * (5 * r2);
d0 += h9 * (5 * r1);
c += (d0 >>> 13); d0 &= 0x1fff;
d1 = c;
d1 += h0 * r1;
d1 += h1 * r0;
d1 += h2 * (5 * r9);
d1 += h3 * (5 * r8);
d1 += h4 * (5 * r7);
c = (d1 >>> 13); d1 &= 0x1fff;
d1 += h5 * (5 * r6);
d1 += h6 * (5 * r5);
d1 += h7 * (5 * r4);
d1 += h8 * (5 * r3);
d1 += h9 * (5 * r2);
c += (d1 >>> 13); d1 &= 0x1fff;
d2 = c;
d2 += h0 * r2;
d2 += h1 * r1;
d2 += h2 * r0;
d2 += h3 * (5 * r9);
d2 += h4 * (5 * r8);
c = (d2 >>> 13); d2 &= 0x1fff;
d2 += h5 * (5 * r7);
d2 += h6 * (5 * r6);
d2 += h7 * (5 * r5);
d2 += h8 * (5 * r4);
d2 += h9 * (5 * r3);
c += (d2 >>> 13); d2 &= 0x1fff;
d3 = c;
d3 += h0 * r3;
d3 += h1 * r2;
d3 += h2 * r1;
d3 += h3 * r0;
d3 += h4 * (5 * r9);
c = (d3 >>> 13); d3 &= 0x1fff;
d3 += h5 * (5 * r8);
d3 += h6 * (5 * r7);
d3 += h7 * (5 * r6);
d3 += h8 * (5 * r5);
d3 += h9 * (5 * r4);
c += (d3 >>> 13); d3 &= 0x1fff;
d4 = c;
d4 += h0 * r4;
d4 += h1 * r3;
d4 += h2 * r2;
d4 += h3 * r1;
d4 += h4 * r0;
c = (d4 >>> 13); d4 &= 0x1fff;
d4 += h5 * (5 * r9);
d4 += h6 * (5 * r8);
d4 += h7 * (5 * r7);
d4 += h8 * (5 * r6);
d4 += h9 * (5 * r5);
c += (d4 >>> 13); d4 &= 0x1fff;
d5 = c;
d5 += h0 * r5;
d5 += h1 * r4;
d5 += h2 * r3;
d5 += h3 * r2;
d5 += h4 * r1;
c = (d5 >>> 13); d5 &= 0x1fff;
d5 += h5 * r0;
d5 += h6 * (5 * r9);
d5 += h7 * (5 * r8);
d5 += h8 * (5 * r7);
d5 += h9 * (5 * r6);
c += (d5 >>> 13); d5 &= 0x1fff;
d6 = c;
d6 += h0 * r6;
d6 += h1 * r5;
d6 += h2 * r4;
d6 += h3 * r3;
d6 += h4 * r2;
c = (d6 >>> 13); d6 &= 0x1fff;
d6 += h5 * r1;
d6 += h6 * r0;
d6 += h7 * (5 * r9);
d6 += h8 * (5 * r8);
d6 += h9 * (5 * r7);
c += (d6 >>> 13); d6 &= 0x1fff;
d7 = c;
d7 += h0 * r7;
d7 += h1 * r6;
d7 += h2 * r5;
d7 += h3 * r4;
d7 += h4 * r3;
c = (d7 >>> 13); d7 &= 0x1fff;
d7 += h5 * r2;
d7 += h6 * r1;
d7 += h7 * r0;
d7 += h8 * (5 * r9);
d7 += h9 * (5 * r8);
c += (d7 >>> 13); d7 &= 0x1fff;
d8 = c;
d8 += h0 * r8;
d8 += h1 * r7;
d8 += h2 * r6;
d8 += h3 * r5;
d8 += h4 * r4;
c = (d8 >>> 13); d8 &= 0x1fff;
d8 += h5 * r3;
d8 += h6 * r2;
d8 += h7 * r1;
d8 += h8 * r0;
d8 += h9 * (5 * r9);
c += (d8 >>> 13); d8 &= 0x1fff;
d9 = c;
d9 += h0 * r9;
d9 += h1 * r8;
d9 += h2 * r7;
d9 += h3 * r6;
d9 += h4 * r5;
c = (d9 >>> 13); d9 &= 0x1fff;
d9 += h5 * r4;
d9 += h6 * r3;
d9 += h7 * r2;
d9 += h8 * r1;
d9 += h9 * r0;
c += (d9 >>> 13); d9 &= 0x1fff;
c = (((c << 2) + c)) | 0;
c = (c + d0) | 0;
d0 = c & 0x1fff;
c = (c >>> 13);
d1 += c;
h0 = d0;
h1 = d1;
h2 = d2;
h3 = d3;
h4 = d4;
h5 = d5;
h6 = d6;
h7 = d7;
h8 = d8;
h9 = d9;
mpos += 16;
bytes -= 16;
}
this.h[0] = h0;
this.h[1] = h1;
this.h[2] = h2;
this.h[3] = h3;
this.h[4] = h4;
this.h[5] = h5;
this.h[6] = h6;
this.h[7] = h7;
this.h[8] = h8;
this.h[9] = h9;
};
poly1305.prototype.finish = function(mac, macpos) {
var g = new Uint16Array(10);
var c, mask, f, i;
if (this.leftover) {
i = this.leftover;
this.buffer[i++] = 1;
for (; i < 16; i++) this.buffer[i] = 0;
this.fin = 1;
this.blocks(this.buffer, 0, 16);
}
c = this.h[1] >>> 13;
this.h[1] &= 0x1fff;
for (i = 2; i < 10; i++) {
this.h[i] += c;
c = this.h[i] >>> 13;
this.h[i] &= 0x1fff;
}
this.h[0] += (c * 5);
c = this.h[0] >>> 13;
this.h[0] &= 0x1fff;
this.h[1] += c;
c = this.h[1] >>> 13;
this.h[1] &= 0x1fff;
this.h[2] += c;
g[0] = this.h[0] + 5;
c = g[0] >>> 13;
g[0] &= 0x1fff;
for (i = 1; i < 10; i++) {
g[i] = this.h[i] + c;
c = g[i] >>> 13;
g[i] &= 0x1fff;
}
g[9] -= (1 << 13);
mask = (c ^ 1) - 1;
for (i = 0; i < 10; i++) g[i] &= mask;
mask = ~mask;
for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];
this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;
this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;
this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;
this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;
this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;
this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;
this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;
this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;
f = this.h[0] + this.pad[0];
this.h[0] = f & 0xffff;
for (i = 1; i < 8; i++) {
f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;
this.h[i] = f & 0xffff;
}
mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;
mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;
mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;
mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;
mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;
mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;
mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;
mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;
mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;
mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;
mac[macpos+10] = (this.h[5] >>> 0) & 0xff;
mac[macpos+11] = (this.h[5] >>> 8) & 0xff;
mac[macpos+12] = (this.h[6] >>> 0) & 0xff;
mac[macpos+13] = (this.h[6] >>> 8) & 0xff;
mac[macpos+14] = (this.h[7] >>> 0) & 0xff;
mac[macpos+15] = (this.h[7] >>> 8) & 0xff;
};
poly1305.prototype.update = function(m, mpos, bytes) {
var i, want;
if (this.leftover) {
want = (16 - this.leftover);
if (want > bytes)
want = bytes;
for (i = 0; i < want; i++)
this.buffer[this.leftover + i] = m[mpos+i];
bytes -= want;
mpos += want;
this.leftover += want;
if (this.leftover < 16)
return;
this.blocks(this.buffer, 0, 16);
this.leftover = 0;
}
if (bytes >= 16) {
want = bytes - (bytes % 16);
this.blocks(m, mpos, want);
mpos += want;
bytes -= want;
}
if (bytes) {
for (i = 0; i < bytes; i++)
this.buffer[this.leftover + i] = m[mpos+i];
this.leftover += bytes;
}
};
function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
var s = new poly1305(k);
s.update(m, mpos, n);
s.finish(out, outpos);
return 0;
}
function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
var x = new Uint8Array(16);
crypto_onetimeauth(x,0,m,mpos,n,k);
return crypto_verify_16(h,hpos,x,0);
}
function crypto_secretbox(c,m,d,n,k) {
var i;
if (d < 32) return -1;
crypto_stream_xor(c,0,m,0,d,n,k);
crypto_onetimeauth(c, 16, c, 32, d - 32, c);
for (i = 0; i < 16; i++) c[i] = 0;
return 0;
}
function crypto_secretbox_open(m,c,d,n,k) {
var i;
var x = new Uint8Array(32);
if (d < 32) return -1;
crypto_stream(x,0,32,n,k);
if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
crypto_stream_xor(m,0,c,0,d,n,k);
for (i = 0; i < 32; i++) m[i] = 0;
return 0;
}
function set25519(r, a) {
var i;
for (i = 0; i < 16; i++) r[i] = a[i]|0;
}
function car25519(o) {
var i, v, c = 1;
for (i = 0; i < 16; i++) {
v = o[i] + c + 65535;
c = Math.floor(v / 65536);
o[i] = v - c * 65536;
}
o[0] += c-1 + 37 * (c-1);
}
function sel25519(p, q, b) {
var t, c = ~(b-1);
for (var i = 0; i < 16; i++) {
t = c & (p[i] ^ q[i]);
p[i] ^= t;
q[i] ^= t;
}
}
function pack25519(o, n) {
var i, j, b;
var m = gf(), t = gf();
for (i = 0; i < 16; i++) t[i] = n[i];
car25519(t);
car25519(t);
car25519(t);
for (j = 0; j < 2; j++) {
m[0] = t[0] - 0xffed;
for (i = 1; i < 15; i++) {
m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
m[i-1] &= 0xffff;
}
m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
b = (m[15]>>16) & 1;
m[14] &= 0xffff;
sel25519(t, m, 1-b);
}
for (i = 0; i < 16; i++) {
o[2*i] = t[i] & 0xff;
o[2*i+1] = t[i]>>8;
}
}
function neq25519(a, b) {
var c = new Uint8Array(32), d = new Uint8Array(32);
pack25519(c, a);
pack25519(d, b);
return crypto_verify_32(c, 0, d, 0);
}
function par25519(a) {
var d = new Uint8Array(32);
pack25519(d, a);
return d[0] & 1;
}
function unpack25519(o, n) {
var i;
for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
o[15] &= 0x7fff;
}
function A(o, a, b) {
for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
}
function Z(o, a, b) {
for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
}
function M(o, a, b) {
var v, c,
t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,
t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
b0 = b[0],
b1 = b[1],
b2 = b[2],
b3 = b[3],
b4 = b[4],
b5 = b[5],
b6 = b[6],
b7 = b[7],
b8 = b[8],
b9 = b[9],
b10 = b[10],
b11 = b[11],
b12 = b[12],
b13 = b[13],
b14 = b[14],
b15 = b[15];
v = a[0];
t0 += v * b0;
t1 += v * b1;
t2 += v * b2;
t3 += v * b3;
t4 += v * b4;
t5 += v * b5;
t6 += v * b6;
t7 += v * b7;
t8 += v * b8;
t9 += v * b9;
t10 += v * b10;
t11 += v * b11;
t12 += v * b12;
t13 += v * b13;
t14 += v * b14;
t15 += v * b15;
v = a[1];
t1 += v * b0;
t2 += v * b1;
t3 += v * b2;
t4 += v * b3;
t5 += v * b4;
t6 += v * b5;
t7 += v * b6;
t8 += v * b7;
t9 += v * b8;
t10 += v * b9;
t11 += v * b10;
t12 += v * b11;
t13 += v * b12;
t14 += v * b13;
t15 += v * b14;
t16 += v * b15;
v = a[2];
t2 += v * b0;
t3 += v * b1;
t4 += v * b2;
t5 += v * b3;
t6 += v * b4;
t7 += v * b5;
t8 += v * b6;
t9 += v * b7;
t10 += v * b8;
t11 += v * b9;
t12 += v * b10;
t13 += v * b11;
t14 += v * b12;
t15 += v * b13;
t16 += v * b14;
t17 += v * b15;
v = a[3];
t3 += v * b0;
t4 += v * b1;
t5 += v * b2;
t6 += v * b3;
t7 += v * b4;
t8 += v * b5;
t9 += v * b6;
t10 += v * b7;
t11 += v * b8;
t12 += v * b9;
t13 += v * b10;
t14 += v * b11;
t15 += v * b12;
t16 += v * b13;
t17 += v * b14;
t18 += v * b15;
v = a[4];
t4 += v * b0;
t5 += v * b1;
t6 += v * b2;
t7 += v * b3;
t8 += v * b4;
t9 += v * b5;
t10 += v * b6;
t11 += v * b7;
t12 += v * b8;
t13 += v * b9;
t14 += v * b10;
t15 += v * b11;
t16 += v * b12;
t17 += v * b13;
t18 += v * b14;
t19 += v * b15;
v = a[5];
t5 += v * b0;
t6 += v * b1;
t7 += v * b2;
t8 += v * b3;
t9 += v * b4;
t10 += v * b5;
t11 += v * b6;
t12 += v * b7;
t13 += v * b8;
t14 += v * b9;
t15 += v * b10;
t16 += v * b11;
t17 += v * b12;
t18 += v * b13;
t19 += v * b14;
t20 += v * b15;
v = a[6];
t6 += v * b0;
t7 += v * b1;
t8 += v * b2;
t9 += v * b3;
t10 += v * b4;
t11 += v * b5;
t12 += v * b6;
t13 += v * b7;
t14 += v * b8;
t15 += v * b9;
t16 += v * b10;
t17 += v * b11;
t18 += v * b12;
t19 += v * b13;
t20 += v * b14;
t21 += v * b15;
v = a[7];
t7 += v * b0;
t8 += v * b1;
t9 += v * b2;
t10 += v * b3;
t11 += v * b4;
t12 += v * b5;
t13 += v * b6;
t14 += v * b7;
t15 += v * b8;
t16 += v * b9;
t17 += v * b10;
t18 += v * b11;
t19 += v * b12;
t20 += v * b13;
t21 += v * b14;
t22 += v * b15;
v = a[8];
t8 += v * b0;
t9 += v * b1;
t10 += v * b2;
t11 += v * b3;
t12 += v * b4;
t13 += v * b5;
t14 += v * b6;
t15 += v * b7;
t16 += v * b8;
t17 += v * b9;
t18 += v * b10;
t19 += v * b11;
t20 += v * b12;
t21 += v * b13;
t22 += v * b14;
t23 += v * b15;
v = a[9];
t9 += v * b0;
t10 += v * b1;
t11 += v * b2;
t12 += v * b3;
t13 += v * b4;
t14 += v * b5;
t15 += v * b6;
t16 += v * b7;
t17 += v * b8;
t18 += v * b9;
t19 += v * b10;
t20 += v * b11;
t21 += v * b12;
t22 += v * b13;
t23 += v * b14;
t24 += v * b15;
v = a[10];
t10 += v * b0;
t11 += v * b1;
t12 += v * b2;
t13 += v * b3;
t14 += v * b4;
t15 += v * b5;
t16 += v * b6;
t17 += v * b7;
t18 += v * b8;
t19 += v * b9;
t20 += v * b10;
t21 += v * b11;
t22 += v * b12;
t23 += v * b13;
t24 += v * b14;
t25 += v * b15;
v = a[11];
t11 += v * b0;
t12 += v * b1;
t13 += v * b2;
t14 += v * b3;
t15 += v * b4;
t16 += v * b5;
t17 += v * b6;
t18 += v * b7;
t19 += v * b8;
t20 += v * b9;
t21 += v * b10;
t22 += v * b11;
t23 += v * b12;
t24 += v * b13;
t25 += v * b14;
t26 += v * b15;
v = a[12];
t12 += v * b0;
t13 += v * b1;
t14 += v * b2;
t15 += v * b3;
t16 += v * b4;
t17 += v * b5;
t18 += v * b6;
t19 += v * b7;
t20 += v * b8;
t21 += v * b9;
t22 += v * b10;
t23 += v * b11;
t24 += v * b12;
t25 += v * b13;
t26 += v * b14;
t27 += v * b15;
v = a[13];
t13 += v * b0;
t14 += v * b1;
t15 += v * b2;
t16 += v * b3;
t17 += v * b4;
t18 += v * b5;
t19 += v * b6;
t20 += v * b7;
t21 += v * b8;
t22 += v * b9;
t23 += v * b10;
t24 += v * b11;
t25 += v * b12;
t26 += v * b13;
t27 += v * b14;
t28 += v * b15;
v = a[14];
t14 += v * b0;
t15 += v * b1;
t16 += v * b2;
t17 += v * b3;
t18 += v * b4;
t19 += v * b5;
t20 += v * b6;
t21 += v * b7;
t22 += v * b8;
t23 += v * b9;
t24 += v * b10;
t25 += v * b11;
t26 += v * b12;
t27 += v * b13;
t28 += v * b14;
t29 += v * b15;
v = a[15];
t15 += v * b0;
t16 += v * b1;
t17 += v * b2;
t18 += v * b3;
t19 += v * b4;
t20 += v * b5;
t21 += v * b6;
t22 += v * b7;
t23 += v * b8;
t24 += v * b9;
t25 += v * b10;
t26 += v * b11;
t27 += v * b12;
t28 += v * b13;
t29 += v * b14;
t30 += v * b15;
t0 += 38 * t16;
t1 += 38 * t17;
t2 += 38 * t18;
t3 += 38 * t19;
t4 += 38 * t20;
t5 += 38 * t21;
t6 += 38 * t22;
t7 += 38 * t23;
t8 += 38 * t24;
t9 += 38 * t25;
t10 += 38 * t26;
t11 += 38 * t27;
t12 += 38 * t28;
t13 += 38 * t29;
t14 += 38 * t30;
// t15 left as is
// first car
c = 1;
v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
t0 += c-1 + 37 * (c-1);
// second car
c = 1;
v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
t0 += c-1 + 37 * (c-1);
o[ 0] = t0;
o[ 1] = t1;
o[ 2] = t2;
o[ 3] = t3;
o[ 4] = t4;
o[ 5] = t5;
o[ 6] = t6;
o[ 7] = t7;
o[ 8] = t8;
o[ 9] = t9;
o[10] = t10;
o[11] = t11;
o[12] = t12;
o[13] = t13;
o[14] = t14;
o[15] = t15;
}
function S(o, a) {
M(o, a, a);
}
function inv25519(o, i) {
var c = gf();
var a;
for (a = 0; a < 16; a++) c[a] = i[a];
for (a = 253; a >= 0; a--) {
S(c, c);
if(a !== 2 && a !== 4) M(c, c, i);
}
for (a = 0; a < 16; a++) o[a] = c[a];
}
function pow2523(o, i) {
var c = gf();
var a;
for (a = 0; a < 16; a++) c[a] = i[a];
for (a = 250; a >= 0; a--) {
S(c, c);
if(a !== 1) M(c, c, i);
}
for (a = 0; a < 16; a++) o[a] = c[a];
}
function crypto_scalarmult(q, n, p) {
var z = new Uint8Array(32);
var x = new Float64Array(80), r, i;
var a = gf(), b = gf(), c = gf(),
d = gf(), e = gf(), f = gf();
for (i = 0; i < 31; i++) z[i] = n[i];
z[31]=(n[31]&127)|64;
z[0]&=248;
unpack25519(x,p);
for (i = 0; i < 16; i++) {
b[i]=x[i];
d[i]=a[i]=c[i]=0;
}
a[0]=d[0]=1;
for (i=254; i>=0; --i) {
r=(z[i>>>3]>>>(i&7))&1;
sel25519(a,b,r);
sel25519(c,d,r);
A(e,a,c);
Z(a,a,c);
A(c,b,d);
Z(b,b,d);
S(d,e);
S(f,a);
M(a,c,a);
M(c,b,e);
A(e,a,c);
Z(a,a,c);
S(b,a);
Z(c,d,f);
M(a,c,_121665);
A(a,a,d);
M(c,c,a);
M(a,d,f);
M(d,b,x);
S(b,e);
sel25519(a,b,r);
sel25519(c,d,r);
}
for (i = 0; i < 16; i++) {
x[i+16]=a[i];
x[i+32]=c[i];
x[i+48]=b[i];
x[i+64]=d[i];
}
var x32 = x.subarray(32);
var x16 = x.subarray(16);
inv25519(x32,x32);
M(x16,x16,x32);
pack25519(q,x16);
return 0;
}
function crypto_scalarmult_base(q, n) {
return crypto_scalarmult(q, n, _9);
}
function crypto_box_keypair(y, x) {
randombytes(x, 32);
return crypto_scalarmult_base(y, x);
}
function crypto_box_beforenm(k, y, x) {
var s = new Uint8Array(32);
crypto_scalarmult(s, x, y);
return crypto_core_hsalsa20(k, _0, s, sigma);
}
var crypto_box_afternm = crypto_secretbox;
var crypto_box_open_afternm = crypto_secretbox_open;
function crypto_box(c, m, d, n, y, x) {
var k = new Uint8Array(32);
crypto_box_beforenm(k, y, x);
return crypto_box_afternm(c, m, d, n, k);
}
function crypto_box_open(m, c, d, n, y, x) {
var k = new Uint8Array(32);
crypto_box_beforenm(k, y, x);
return crypto_box_open_afternm(m, c, d, n, k);
}
var K = [
0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
];
function crypto_hashblocks_hl(hh, hl, m, n) {
var wh = new Int32Array(16), wl = new Int32Array(16),
bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,
bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,
th, tl, i, j, h, l, a, b, c, d;
var ah0 = hh[0],
ah1 = hh[1],
ah2 = hh[2],
ah3 = hh[3],
ah4 = hh[4],
ah5 = hh[5],
ah6 = hh[6],
ah7 = hh[7],
al0 = hl[0],
al1 = hl[1],
al2 = hl[2],
al3 = hl[3],
al4 = hl[4],
al5 = hl[5],
al6 = hl[6],
al7 = hl[7];
var pos = 0;
while (n >= 128) {
for (i = 0; i < 16; i++) {
j = 8 * i + pos;
wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];
wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];
}
for (i = 0; i < 80; i++) {
bh0 = ah0;
bh1 = ah1;
bh2 = ah2;
bh3 = ah3;
bh4 = ah4;
bh5 = ah5;
bh6 = ah6;
bh7 = ah7;
bl0 = al0;
bl1 = al1;
bl2 = al2;
bl3 = al3;
bl4 = al4;
bl5 = al5;
bl6 = al6;
bl7 = al7;
// add
h = ah7;
l = al7;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
// Sigma1
h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));
l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
// Ch
h = (ah4 & ah5) ^ (~ah4 & ah6);
l = (al4 & al5) ^ (~al4 & al6);
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
// K
h = K[i*2];
l = K[i*2+1];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
// w
h = wh[i%16];
l = wl[i%16];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
th = c & 0xffff | d << 16;
tl = a & 0xffff | b << 16;
// add
h = th;
l = tl;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
// Sigma0
h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));
l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
// Maj
h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);
l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
bh7 = (c & 0xffff) | (d << 16);
bl7 = (a & 0xffff) | (b << 16);
// add
h = bh3;
l = bl3;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = th;
l = tl;
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
bh3 = (c & 0xffff) | (d << 16);
bl3 = (a & 0xffff) | (b << 16);
ah1 = bh0;
ah2 = bh1;
ah3 = bh2;
ah4 = bh3;
ah5 = bh4;
ah6 = bh5;
ah7 = bh6;
ah0 = bh7;
al1 = bl0;
al2 = bl1;
al3 = bl2;
al4 = bl3;
al5 = bl4;
al6 = bl5;
al7 = bl6;
al0 = bl7;
if (i%16 === 15) {
for (j = 0; j < 16; j++) {
// add
h = wh[j];
l = wl[j];
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = wh[(j+9)%16];
l = wl[(j+9)%16];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
// sigma0
th = wh[(j+1)%16];
tl = wl[(j+1)%16];
h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);
l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
// sigma1
th = wh[(j+14)%16];
tl = wl[(j+14)%16];
h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);
l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
wh[j] = (c & 0xffff) | (d << 16);
wl[j] = (a & 0xffff) | (b << 16);
}
}
}
// add
h = ah0;
l = al0;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[0];
l = hl[0];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[0] = ah0 = (c & 0xffff) | (d << 16);
hl[0] = al0 = (a & 0xffff) | (b << 16);
h = ah1;
l = al1;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[1];
l = hl[1];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[1] = ah1 = (c & 0xffff) | (d << 16);
hl[1] = al1 = (a & 0xffff) | (b << 16);
h = ah2;
l = al2;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[2];
l = hl[2];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[2] = ah2 = (c & 0xffff) | (d << 16);
hl[2] = al2 = (a & 0xffff) | (b << 16);
h = ah3;
l = al3;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[3];
l = hl[3];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[3] = ah3 = (c & 0xffff) | (d << 16);
hl[3] = al3 = (a & 0xffff) | (b << 16);
h = ah4;
l = al4;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[4];
l = hl[4];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[4] = ah4 = (c & 0xffff) | (d << 16);
hl[4] = al4 = (a & 0xffff) | (b << 16);
h = ah5;
l = al5;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[5];
l = hl[5];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[5] = ah5 = (c & 0xffff) | (d << 16);
hl[5] = al5 = (a & 0xffff) | (b << 16);
h = ah6;
l = al6;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[6];
l = hl[6];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[6] = ah6 = (c & 0xffff) | (d << 16);
hl[6] = al6 = (a & 0xffff) | (b << 16);
h = ah7;
l = al7;
a = l & 0xffff; b = l >>> 16;
c = h & 0xffff; d = h >>> 16;
h = hh[7];
l = hl[7];
a += l & 0xffff; b += l >>> 16;
c += h & 0xffff; d += h >>> 16;
b += a >>> 16;
c += b >>> 16;
d += c >>> 16;
hh[7] = ah7 = (c & 0xffff) | (d << 16);
hl[7] = al7 = (a & 0xffff) | (b << 16);
pos += 128;
n -= 128;
}
return n;
}
function crypto_hash(out, m, n) {
var hh = new Int32Array(8),
hl = new Int32Array(8),
x = new Uint8Array(256),
i, b = n;
hh[0] = 0x6a09e667;
hh[1] = 0xbb67ae85;
hh[2] = 0x3c6ef372;
hh[3] = 0xa54ff53a;
hh[4] = 0x510e527f;
hh[5] = 0x9b05688c;
hh[6] = 0x1f83d9ab;
hh[7] = 0x5be0cd19;
hl[0] = 0xf3bcc908;
hl[1] = 0x84caa73b;
hl[2] = 0xfe94f82b;
hl[3] = 0x5f1d36f1;
hl[4] = 0xade682d1;
hl[5] = 0x2b3e6c1f;
hl[6] = 0xfb41bd6b;
hl[7] = 0x137e2179;
crypto_hashblocks_hl(hh, hl, m, n);
n %= 128;
for (i = 0; i < n; i++) x[i] = m[b-n+i];
x[n] = 128;
n = 256-128*(n<112?1:0);
x[n-9] = 0;
ts64(x, n-8, (b / 0x20000000) | 0, b << 3);
crypto_hashblocks_hl(hh, hl, x, n);
for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);
return 0;
}
function add(p, q) {
var a = gf(), b = gf(), c = gf(),
d = gf(), e = gf(), f = gf(),
g = gf(), h = gf(), t = gf();
Z(a, p[1], p[0]);
Z(t, q[1], q[0]);
M(a, a, t);
A(b, p[0], p[1]);
A(t, q[0], q[1]);
M(b, b, t);
M(c, p[3], q[3]);
M(c, c, D2);
M(d, p[2], q[2]);
A(d, d, d);
Z(e, b, a);
Z(f, d, c);
A(g, d, c);
A(h, b, a);
M(p[0], e, f);
M(p[1], h, g);
M(p[2], g, f);
M(p[3], e, h);
}
function cswap(p, q, b) {
var i;
for (i = 0; i < 4; i++) {
sel25519(p[i], q[i], b);
}
}
function pack(r, p) {
var tx = gf(), ty = gf(), zi = gf();
inv25519(zi, p[2]);
M(tx, p[0], zi);
M(ty, p[1], zi);
pack25519(r, ty);
r[31] ^= par25519(tx) << 7;
}
function scalarmult(p, q, s) {
var b, i;
set25519(p[0], gf0);
set25519(p[1], gf1);
set25519(p[2], gf1);
set25519(p[3], gf0);
for (i = 255; i >= 0; --i) {
b = (s[(i/8)|0] >> (i&7)) & 1;
cswap(p, q, b);
add(q, p);
add(p, p);
cswap(p, q, b);
}
}
function scalarbase(p, s) {
var q = [gf(), gf(), gf(), gf()];
set25519(q[0], X);
set25519(q[1], Y);
set25519(q[2], gf1);
M(q[3], X, Y);
scalarmult(p, q, s);
}
function crypto_sign_keypair(pk, sk, seeded) {
var d = new Uint8Array(64);
var p = [gf(), gf(), gf(), gf()];
var i;
if (!seeded) randombytes(sk, 32);
crypto_hash(d, sk, 32);
d[0] &= 248;
d[31] &= 127;
d[31] |= 64;
scalarbase(p, d);
pack(pk, p);
for (i = 0; i < 32; i++) sk[i+32] = pk[i];
return 0;
}
var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
function modL(r, x) {
var carry, i, j, k;
for (i = 63; i >= 32; --i) {
carry = 0;
for (j = i - 32, k = i - 12; j < k; ++j) {
x[j] += carry - 16 * x[i] * L[j - (i - 32)];
carry = (x[j] + 128) >> 8;
x[j] -= carry * 256;
}
x[j] += carry;
x[i] = 0;
}
carry = 0;
for (j = 0; j < 32; j++) {
x[j] += carry - (x[31] >> 4) * L[j];
carry = x[j] >> 8;
x[j] &= 255;
}
for (j = 0; j < 32; j++) x[j] -= carry * L[j];
for (i = 0; i < 32; i++) {
x[i+1] += x[i] >> 8;
r[i] = x[i] & 255;
}
}
function reduce(r) {
var x = new Float64Array(64), i;
for (i = 0; i < 64; i++) x[i] = r[i];
for (i = 0; i < 64; i++) r[i] = 0;
modL(r, x);
}
// Note: difference from C - smlen returned, not passed as argument.
function crypto_sign(sm, m, n, sk) {
var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
var i, j, x = new Float64Array(64);
var p = [gf(), gf(), gf(), gf()];
crypto_hash(d, sk, 32);
d[0] &= 248;
d[31] &= 127;
d[31] |= 64;
var smlen = n + 64;
for (i = 0; i < n; i++) sm[64 + i] = m[i];
for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
crypto_hash(r, sm.subarray(32), n+32);
reduce(r);
scalarbase(p, r);
pack(sm, p);
for (i = 32; i < 64; i++) sm[i] = sk[i];
crypto_hash(h, sm, n + 64);
reduce(h);
for (i = 0; i < 64; i++) x[i] = 0;
for (i = 0; i < 32; i++) x[i] = r[i];
for (i = 0; i < 32; i++) {
for (j = 0; j < 32; j++) {
x[i+j] += h[i] * d[j];
}
}
modL(sm.subarray(32), x);
return smlen;
}
function unpackneg(r, p) {
var t = gf(), chk = gf(), num = gf(),
den = gf(), den2 = gf(), den4 = gf(),
den6 = gf();
set25519(r[2], gf1);
unpack25519(r[1], p);
S(num, r[1]);
M(den, num, D);
Z(num, num, r[2]);
A(den, r[2], den);
S(den2, den);
S(den4, den2);
M(den6, den4, den2);
M(t, den6, num);
M(t, t, den);
pow2523(t, t);
M(t, t, num);
M(t, t, den);
M(t, t, den);
M(r[0], t, den);
S(chk, r[0]);
M(chk, chk, den);
if (neq25519(chk, num)) M(r[0], r[0], I);
S(chk, r[0]);
M(chk, chk, den);
if (neq25519(chk, num)) return -1;
if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);
M(r[3], r[0], r[1]);
return 0;
}
function crypto_sign_open(m, sm, n, pk) {
var i, mlen;
var t = new Uint8Array(32), h = new Uint8Array(64);
var p = [gf(), gf(), gf(), gf()],
q = [gf(), gf(), gf(), gf()];
mlen = -1;
if (n < 64) return -1;
if (unpackneg(q, pk)) return -1;
for (i = 0; i < n; i++) m[i] = sm[i];
for (i = 0; i < 32; i++) m[i+32] = pk[i];
crypto_hash(h, m, n);
reduce(h);
scalarmult(p, q, h);
scalarbase(q, sm.subarray(32));
add(p, q);
pack(t, p);
n -= 64;
if (crypto_verify_32(sm, 0, t, 0)) {
for (i = 0; i < n; i++) m[i] = 0;
return -1;
}
for (i = 0; i < n; i++) m[i] = sm[i + 64];
mlen = n;
return mlen;
}
var crypto_secretbox_KEYBYTES = 32,
crypto_secretbox_NONCEBYTES = 24,
crypto_secretbox_ZEROBYTES = 32,
crypto_secretbox_BOXZEROBYTES = 16,
crypto_scalarmult_BYTES = 32,
crypto_scalarmult_SCALARBYTES = 32,
crypto_box_PUBLICKEYBYTES = 32,
crypto_box_SECRETKEYBYTES = 32,
crypto_box_BEFORENMBYTES = 32,
crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
crypto_sign_BYTES = 64,
crypto_sign_PUBLICKEYBYTES = 32,
crypto_sign_SECRETKEYBYTES = 64,
crypto_sign_SEEDBYTES = 32,
crypto_hash_BYTES = 64;
nacl.lowlevel = {
crypto_core_hsalsa20: crypto_core_hsalsa20,
crypto_stream_xor: crypto_stream_xor,
crypto_stream: crypto_stream,
crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
crypto_stream_salsa20: crypto_stream_salsa20,
crypto_onetimeauth: crypto_onetimeauth,
crypto_onetimeauth_verify: crypto_onetimeauth_verify,
crypto_verify_16: crypto_verify_16,
crypto_verify_32: crypto_verify_32,
crypto_secretbox: crypto_secretbox,
crypto_secretbox_open: crypto_secretbox_open,
crypto_scalarmult: crypto_scalarmult,
crypto_scalarmult_base: crypto_scalarmult_base,
crypto_box_beforenm: crypto_box_beforenm,
crypto_box_afternm: crypto_box_afternm,
crypto_box: crypto_box,
crypto_box_open: crypto_box_open,
crypto_box_keypair: crypto_box_keypair,
crypto_hash: crypto_hash,
crypto_sign: crypto_sign,
crypto_sign_keypair: crypto_sign_keypair,
crypto_sign_open: crypto_sign_open,
crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
crypto_sign_BYTES: crypto_sign_BYTES,
crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
crypto_hash_BYTES: crypto_hash_BYTES
};
/* High-level API */
function checkLengths(k, n) {
if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
}
function checkBoxLengths(pk, sk) {
if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
}
function checkArrayTypes() {
var t, i;
for (i = 0; i < arguments.length; i++) {
if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')
throw new TypeError('unexpected type ' + t + ', use Uint8Array');
}
}
function cleanup(arr) {
for (var i = 0; i < arr.length; i++) arr[i] = 0;
}
// TODO: Completely remove this in v0.15.
if (!nacl.util) {
nacl.util = {};
nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {
throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');
};
}
nacl.randomBytes = function(n) {
var b = new Uint8Array(n);
randombytes(b, n);
return b;
};
nacl.secretbox = function(msg, nonce, key) {
checkArrayTypes(msg, nonce, key);
checkLengths(key, nonce);
var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
var c = new Uint8Array(m.length);
for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
crypto_secretbox(c, m, m.length, nonce, key);
return c.subarray(crypto_secretbox_BOXZEROBYTES);
};
nacl.secretbox.open = function(box, nonce, key) {
checkArrayTypes(box, nonce, key);
checkLengths(key, nonce);
var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
var m = new Uint8Array(c.length);
for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
if (c.length < 32) return false;
if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;
return m.subarray(crypto_secretbox_ZEROBYTES);
};
nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
nacl.scalarMult = function(n, p) {
checkArrayTypes(n, p);
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
var q = new Uint8Array(crypto_scalarmult_BYTES);
crypto_scalarmult(q, n, p);
return q;
};
nacl.scalarMult.base = function(n) {
checkArrayTypes(n);
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
var q = new Uint8Array(crypto_scalarmult_BYTES);
crypto_scalarmult_base(q, n);
return q;
};
nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
nacl.box = function(msg, nonce, publicKey, secretKey) {
var k = nacl.box.before(publicKey, secretKey);
return nacl.secretbox(msg, nonce, k);
};
nacl.box.before = function(publicKey, secretKey) {
checkArrayTypes(publicKey, secretKey);
checkBoxLengths(publicKey, secretKey);
var k = new Uint8Array(crypto_box_BEFORENMBYTES);
crypto_box_beforenm(k, publicKey, secretKey);
return k;
};
nacl.box.after = nacl.secretbox;
nacl.box.open = function(msg, nonce, publicKey, secretKey) {
var k = nacl.box.before(publicKey, secretKey);
return nacl.secretbox.open(msg, nonce, k);
};
nacl.box.open.after = nacl.secretbox.open;
nacl.box.keyPair = function() {
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
crypto_box_keypair(pk, sk);
return {publicKey: pk, secretKey: sk};
};
nacl.box.keyPair.fromSecretKey = function(secretKey) {
checkArrayTypes(secretKey);
if (secretKey.length !== crypto_box_SECRETKEYBYTES)
throw new Error('bad secret key size');
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
crypto_scalarmult_base(pk, secretKey);
return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
};
nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
nacl.box.nonceLength = crypto_box_NONCEBYTES;
nacl.box.overheadLength = nacl.secretbox.overheadLength;
nacl.sign = function(msg, secretKey) {
checkArrayTypes(msg, secretKey);
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
throw new Error('bad secret key size');
var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
crypto_sign(signedMsg, msg, msg.length, secretKey);
return signedMsg;
};
nacl.sign.open = function(signedMsg, publicKey) {
if (arguments.length !== 2)
throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');
checkArrayTypes(signedMsg, publicKey);
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
throw new Error('bad public key size');
var tmp = new Uint8Array(signedMsg.length);
var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
if (mlen < 0) return null;
var m = new Uint8Array(mlen);
for (var i = 0; i < m.length; i++) m[i] = tmp[i];
return m;
};
nacl.sign.detached = function(msg, secretKey) {
var signedMsg = nacl.sign(msg, secretKey);
var sig = new Uint8Array(crypto_sign_BYTES);
for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
return sig;
};
nacl.sign.detached.verify = function(msg, sig, publicKey) {
checkArrayTypes(msg, sig, publicKey);
if (sig.length !== crypto_sign_BYTES)
throw new Error('bad signature size');
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
throw new Error('bad public key size');
var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
var m = new Uint8Array(crypto_sign_BYTES + msg.length);
var i;
for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
};
nacl.sign.keyPair = function() {
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
crypto_sign_keypair(pk, sk);
return {publicKey: pk, secretKey: sk};
};
nacl.sign.keyPair.fromSecretKey = function(secretKey) {
checkArrayTypes(secretKey);
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
throw new Error('bad secret key size');
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
};
nacl.sign.keyPair.fromSeed = function(seed) {
checkArrayTypes(seed);
if (seed.length !== crypto_sign_SEEDBYTES)
throw new Error('bad seed size');
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
for (var i = 0; i < 32; i++) sk[i] = seed[i];
crypto_sign_keypair(pk, sk, true);
return {publicKey: pk, secretKey: sk};
};
nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
nacl.sign.seedLength = crypto_sign_SEEDBYTES;
nacl.sign.signatureLength = crypto_sign_BYTES;
nacl.hash = function(msg) {
checkArrayTypes(msg);
var h = new Uint8Array(crypto_hash_BYTES);
crypto_hash(h, msg, msg.length);
return h;
};
nacl.hash.hashLength = crypto_hash_BYTES;
nacl.verify = function(x, y) {
checkArrayTypes(x, y);
// Zero length arguments are considered not equal.
if (x.length === 0 || y.length === 0) return false;
if (x.length !== y.length) return false;
return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
};
nacl.setPRNG = function(fn) {
randombytes = fn;
};
(function() {
// Initialize PRNG if environment provides CSPRNG.
// If not, methods calling randombytes will throw.
var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
if (crypto && crypto.getRandomValues) {
// Browsers.
var QUOTA = 65536;
nacl.setPRNG(function(x, n) {
var i, v = new Uint8Array(n);
for (i = 0; i < n; i += QUOTA) {
crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
}
for (i = 0; i < n; i++) x[i] = v[i];
cleanup(v);
});
} else if (true) {
// Node.js.
crypto = __webpack_require__(94);
if (crypto && crypto.randomBytes) {
nacl.setPRNG(function(x, n) {
var i, v = crypto.randomBytes(n);
for (i = 0; i < n; i++) x[i] = v[i];
cleanup(v);
});
}
}
})();
})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));
/***/ }),
/* 93 */
/***/ (function(module, exports) {
/* (ignored) */
/***/ }),
/* 94 */
/***/ (function(module, exports) {
/* (ignored) */
/***/ }),
/* 95 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(26);
/***/ })
/******/ ]);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBmNmYxY2VkNGRkOTQyOWE2OTA4YyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRBcGlVcmxzLmpzIiwid2VicGFjazovLy8uL3NyYy9yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL34vbm9kZS1saWJzLWJyb3dzZXIvfi9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iczU4L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vdXRpbHMvY2NKc29uaWZ5LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2dldFN0YXR1cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jbG9uZS9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzLXNoYTMvc3JjL3NoYTMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzIiwid2VicGFjazovLy8uL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmFzZVJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vZ2V0QmxvY2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vbGlzdEJsb2Nrcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0T3V0cHV0cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0VHJhbnNhY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2xpc3RWb3Rlcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9wb2xsU3RhdHVzQW5kRmV0Y2hUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9wb3N0VHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Zvcm1hdF90ZXh0LmpzIiwid2VicGFjazovLy8uL3NyYy9zYW5pdGl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2hhMjU2SGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9oYXNoVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VDcmVhdGVUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUVkMjU1MTlDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VPdXRwdXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VTaGEyNTZDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUaHJlc2hvbGRDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL3V0aWxzL2NjSnNvbkxvYWQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYXNlLXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2RlY2FtZWxpemUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwid2VicGFjazovLy8uL34vZmV0Y2gtcG9ueWZpbGwvYnVpbGQvZmV0Y2gtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL34vb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N0cmljdC11cmktZW5jb2RlL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIndlYnBhY2s6Ly8vdmVydHggKGlnbm9yZWQpIiwid2VicGFjazovLy9jcnlwdG8gKGlnbm9yZWQpIl0sIm5hbWVzIjpbImdldEFwaVVybHMiLCJBUElfUEFUSCIsIkRFRkFVTFRfUkVRVUVTVF9DT05GSUciLCJjcmVkZW50aWFscyIsImhlYWRlcnMiLCJyZXF1ZXN0IiwidXJsIiwiY29uZmlnIiwib25seUpzb25SZXNwb25zZSIsInJlcXVlc3RDb25maWciLCJxdWVyeSIsInNhbml0aXplIiwiYXBpVXJsIiwianNvbkJvZHkiLCJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJiYXNlUmVxdWVzdCIsInRoZW4iLCJyZXMiLCJqc29uIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjY0pzb25pZnkiLCJmdWxmaWxsbWVudCIsImNvbmRpdGlvblVyaSIsImdldENvbmRpdGlvblVyaSIsInNlcmlhbGl6ZVVyaSIsImdldFR5cGVJZCIsImRldGFpbHMiLCJ0eXBlX2lkIiwiYml0bWFzayIsInByZWltYWdlIiwidG9TdHJpbmciLCJ0eXBlIiwiZ2V0Qml0bWFzayIsInRocmVzaG9sZCIsInN1YmNvbmRpdGlvbnMiLCJtYXAiLCJzdWJjb25kaXRpb24iLCJzdWJjb25kaXRpb25Kc29uIiwiYm9keSIsIndlaWdodCIsInNpZ25hdHVyZSIsInB1YmxpY19rZXkiLCJiYXNlNTgiLCJlbmNvZGUiLCJwdWJsaWNLZXkiLCJoYXNoIiwibWF4X2Z1bGZpbGxtZW50X2xlbmd0aCIsIm1heEZ1bGZpbGxtZW50TGVuZ3RoIiwibWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUiLCJtYWtlVHJhbnNhY3Rpb24iLCJvcGVyYXRpb24iLCJhc3NldCIsIm1ldGFkYXRhIiwib3V0cHV0cyIsImlucHV0cyIsInR4IiwiaWQiLCJoYXNoVHJhbnNhY3Rpb24iLCJzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmciLCJ0cmFuc2FjdGlvbiIsImNsb25lIiwic3RhYmxlU3RyaW5naWZ5IiwiYSIsImIiLCJrZXkiLCJnZXRTdGF0dXMiLCJ0eF9pZCIsImdldFRyYW5zYWN0aW9uIiwidHhJZCIsInVybFRlbXBsYXRlU3BlYyIsIm1ha2VJbnB1dFRlbXBsYXRlIiwicHVibGljS2V5cyIsImZ1bGZpbGxzIiwiRWQyNTUxOUtleXBhaXIiLCJzZWNyZXQiLCJrZXlQYWlyIiwic2VjcmV0SGFzaCIsInNoYTMiLCJzaGEzXzI1NiIsImNyZWF0ZSIsInVwZGF0ZSIsImFycmF5IiwibmFjbCIsInNpZ24iLCJmcm9tU2VlZCIsIlVpbnQ4QXJyYXkiLCJwcml2YXRlS2V5Iiwic2VjcmV0S2V5Iiwic2xpY2UiLCJmZXRjaCIsImZldGNoUG9ueWZpbGwiLCJmZXRjaENvbmZpZyIsImV4cGFuZGVkVXJsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidnNwcmludGYiLCJPYmplY3QiLCJrZXlzIiwiZm9ybWF0VGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm4iLCJzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0iLCJKU09OIiwic3RyaW5naWZ5Iiwib2siLCJnZXRCbG9jayIsImJsb2NrSWQiLCJsaXN0QmxvY2tzIiwic3RhdHVzIiwibGlzdE91dHB1dHMiLCJ1bnNwZW50IiwibGlzdFRyYW5zYWN0aW9ucyIsImFzc2V0X2lkIiwibGlzdFZvdGVzIiwiYmxvY2tfaWQiLCJyZXNvbHZlIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImxvZyIsImNsZWFySW50ZXJ2YWwiLCJwb3N0VHJhbnNhY3Rpb24iLCJtZXRob2QiLCJSZWdleCIsIlRFTVBMQVRFX0xJVEVSQUwiLCJLRVkiLCJLRVlfQUNDRVNTIiwiSU5ERVhfQUNDRVNTIiwicyIsImV4cGFuZGVkRm9ybWF0U3RyIiwiYXJndiIsInRlbXBsYXRlU3BlY09iaiIsInJlcGxhY2UiLCJtYXRjaCIsInJlcGxhY2VtZW50IiwiaW50ZXJwb2xhdGlvbkxlZnQiLCJ2YWx1ZSIsImN1ck1hdGNoIiwiZXhlYyIsInN1YnN0cmluZyIsIlN5bnRheEVycm9yIiwic3ByaW50ZiIsImZpbHRlckZyb21PYmplY3QiLCJvYmoiLCJmaWx0ZXIiLCJpc0luY2x1c2lvbiIsImFwcGx5RmlsdGVyT25PYmplY3QiLCJfIiwiY29yZUluY2x1ZGVzIiwiZmlsdGVyRm4iLCJmaWx0ZXJlZE9iaiIsImNvcmVPYmplY3RFbnRyaWVzIiwiZm9yRWFjaCIsInZhbCIsInNlbGVjdEZyb21PYmplY3QiLCJzaGEyNTZIYXNoIiwiZGF0YSIsImhleCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybWVkS2V5c09iaiIsInJlZHVjZSIsInBhcmFtc09iaiIsInF1ZXJ5U3RyaW5nIiwibWFrZUNyZWF0ZVRyYW5zYWN0aW9uIiwiYXNzZXREZWZpbml0aW9uIiwiaXNzdWVycyIsImlzc3VlciIsIm1ha2VFZDI1NTE5Q29uZGl0aW9uIiwicHVibGljS2V5QnVmZmVyIiwiZGVjb2RlIiwiZWQyNTUxOUZ1bGZpbGxtZW50IiwiY2MiLCJFZDI1NTE5Iiwic2V0UHVibGljS2V5IiwibWFrZU91dHB1dCIsImNvbmRpdGlvbiIsImFtb3VudCIsImhhc093blByb3BlcnR5IiwibWFrZVNoYTI1NkNvbmRpdGlvbiIsInNoYTI1NkZ1bGZpbGxtZW50IiwiUHJlaW1hZ2VTaGEyNTYiLCJtYWtlVGhyZXNob2xkQ29uZGl0aW9uIiwidGhyZXNob2xkQ29uZGl0aW9uIiwiVGhyZXNob2xkU2hhMjU2IiwiYWRkU3ViZnVsZmlsbG1lbnQiLCJtYWtlVHJhbnNmZXJUcmFuc2FjdGlvbiIsInVuc3BlbnRUcmFuc2FjdGlvbiIsImZ1bGZpbGxlZE91dHB1dHMiLCJvdXRwdXRJbmRleCIsImZ1bGZpbGxlZE91dHB1dCIsInRyYW5zYWN0aW9uTGluayIsInB1YmxpY19rZXlzIiwiYXNzZXRMaW5rIiwic2lnblRyYW5zYWN0aW9uIiwicHJpdmF0ZUtleXMiLCJzaWduZWRUeCIsImlucHV0IiwiaW5kZXgiLCJwcml2YXRlS2V5QnVmZmVyIiwic2VyaWFsaXplZFRyYW5zYWN0aW9uIiwiZnVsZmlsbG1lbnRVcmkiLCJjY0pzb25Mb2FkIiwiY29uZGl0aW9uSnNvbiIsIkNvbmRpdGlvbiIsInBhcnNlSW50Iiwic3ViZnVsZmlsbG1lbnRzIiwic3ViZnVsZmlsbG1lbnQiLCJhZGRTdWJjb25kaXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7OztBQ2hFZSxTQUFTQSxVQUFULENBQW9CQyxRQUFwQixFQUE4QjtBQUN6QyxXQUFPO0FBQ0gsa0JBQVVBLFdBQVcsUUFEbEI7QUFFSCx5QkFBaUJBLFdBQVcsb0JBRnpCO0FBR0gsbUJBQVdBLFdBQVcsU0FIbkI7QUFJSCxvQkFBWUEsV0FBVyxVQUpwQjtBQUtILHdCQUFnQkEsV0FBVyxjQUx4QjtBQU1ILCtCQUF1QkEsV0FBVyx1QkFOL0I7QUFPSCxpQkFBU0EsV0FBVztBQVBqQixLQUFQO0FBU0gsQzs7Ozs7Ozs7Ozs7O0FDVkQ7QUFDQTs7QUFHQSxJQUFNQyx5QkFBeUI7QUFDM0JDLGlCQUFhLFNBRGM7QUFFM0JDLGFBQVM7QUFDTCxrQkFBVTtBQURMO0FBRmtCLENBQS9COztBQU9BOzs7O0FBSWUsU0FBU0MsT0FBVCxDQUFpQkMsR0FBakIsRUFBMEQ7QUFBQSxRQUFwQ0MsTUFBb0MsdUVBQTNCLEVBQTJCO0FBQUEsUUFBdkJDLGdCQUF1Qix1RUFBTixJQUFNOztBQUNyRTtBQUNBLFFBQU1DLGdCQUFnQixTQUFjLEVBQWQsRUFBa0JQLHNCQUFsQixFQUEwQ0ssTUFBMUMsRUFBa0Q7QUFDcEVHLGVBQU9ILE9BQU9HLEtBQVAsSUFBZ0IsaUZBQUFDLENBQVNKLE9BQU9HLEtBQWhCO0FBRDZDLEtBQWxELENBQXRCO0FBR0EsUUFBSUUsU0FBU04sR0FBYjs7QUFFQSxRQUFJRyxjQUFjSSxRQUFsQixFQUE0QjtBQUN4Qkosc0JBQWNMLE9BQWQsR0FBd0IsU0FBYyxFQUFkLEVBQWtCSyxjQUFjTCxPQUFoQyxFQUF5QztBQUM3RCw0QkFBZ0I7QUFENkMsU0FBekMsQ0FBeEI7QUFHSDtBQUNELFFBQUksQ0FBQ0UsR0FBTCxFQUFVO0FBQ04sZUFBT1EsUUFBUUMsTUFBUixDQUFlLElBQUlDLEtBQUosQ0FBVSw4QkFBVixDQUFmLENBQVA7QUFDSDs7QUFFRCxXQUFPLG9GQUFBQyxDQUFZTCxNQUFaLEVBQW9CSCxhQUFwQixFQUNGUyxJQURFLENBQ0csVUFBQ0MsR0FBRCxFQUFTO0FBQ1gsZUFBT1gsbUJBQW1CVyxJQUFJQyxJQUFKLEVBQW5CLEdBQ0g7QUFDSUEsa0JBQU1ELElBQUlDLElBQUosRUFEVjtBQUVJZCxpQkFBS2EsSUFBSWI7QUFGYixTQURKO0FBS0gsS0FQRSxFQVFGZSxLQVJFLENBUUksVUFBQ0MsR0FBRCxFQUFTO0FBQ1pDLGdCQUFRQyxLQUFSLENBQWNGLEdBQWQ7QUFDQSxjQUFNQSxHQUFOO0FBQ0gsS0FYRSxDQUFQO0FBWUgsQzs7Ozs7OztBQzNDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtREFBbUQ7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsRUFBRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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Z0IsQ0FBaEIsR0FBb0IsQ0FBQyxDQUFoQztBQUFBLEdBQXBCLENBQVA7QUFDSCxDOzs7Ozs7QUNoQkQsNkJBQTZCO0FBQzdCLHFDQUFxQyxnQzs7Ozs7O0FDRHJDO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUSxnQkFBZ0IsVUFBVSxHQUFHO0FBQ3RFLENBQUMsRTs7Ozs7O0FDSEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGdDOzs7Ozs7QUNIdkM7QUFDQTtBQUNBLEU7Ozs7OztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNMQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7O0FDdkx0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7QUNwQkE7QUFDQTs7QUFFQTs7Ozs7QUFLZSxTQUFTQyxTQUFULENBQW1CQyxLQUFuQixFQUEwQnRFLFFBQTFCLEVBQW9DO0FBQy9DLFdBQU8sZ0ZBQUFJLENBQVEsbUZBQUFMLENBQVdDLFFBQVgsRUFBcUIsVUFBckIsQ0FBUixFQUEwQztBQUN6Q1MsZUFBTztBQUNINkQ7QUFERztBQURrQyxLQUExQyxDQUFQO0FBS0gsQzs7Ozs7Ozs7OztBQ2REO0FBQ0E7O0FBRUE7Ozs7O0FBS2UsU0FBU0MsY0FBVCxDQUF3QkMsSUFBeEIsRUFBOEJ4RSxRQUE5QixFQUF3QztBQUNuRCxXQUFPLGdGQUFBSSxDQUFRLG1GQUFBTCxDQUFXQyxRQUFYLEVBQXFCLHFCQUFyQixDQUFSLEVBQXFEO0FBQ3BEeUUseUJBQWlCO0FBQ2JEO0FBRGE7QUFEbUMsS0FBckQsQ0FBUDtBQUtILEM7Ozs7Ozs7O0FDZGMsU0FBU0UsaUJBQVQsR0FBaUY7QUFBQSxRQUF0REMsVUFBc0QsdUVBQXpDLEVBQXlDO0FBQUEsUUFBckNDLFFBQXFDLHVFQUExQixJQUEwQjtBQUFBLFFBQXBCbkQsV0FBb0IsdUVBQU4sSUFBTTs7QUFDNUYsV0FBTztBQUNIQSxnQ0FERztBQUVIbUQsMEJBRkc7QUFHSCx5QkFBaUJEO0FBSGQsS0FBUDtBQUtILEM7Ozs7OztBQ05EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7dURDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHFCQUFxQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGOztBQUVqRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQix1Q0FBdUM7QUFDeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE1BQU07QUFDaEIsVUFBVSxPQUFPO0FBQ2pCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixZQUFZO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFlBQVksU0FBUztBQUNyQixZQUFZLFNBQVM7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQztBQUNEOzs7Ozs7OztBQ3JvQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDO0FBQ0EsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RDtBQUNBLHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3REOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsUUFBUTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsYUFBYSxRQUFROztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCOztBQUVBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCO0FBQ3JCLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckIscUJBQXFCOztBQUVyQjtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekIseUJBQXlCOztBQUV6QjtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQiwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUIsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEIsb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUEsb0JBQW9CO0FBQ3BCLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkIsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQixvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEIsb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUEsb0JBQW9CO0FBQ3BCLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkIsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQixvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEIsb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixtQkFBbUI7O0FBRW5CO0FBQ0E7O0FBRUEsb0JBQW9CO0FBQ3BCLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxPQUFPOztBQUVwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsUUFBUTs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7O0FBRUEsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztB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O0FBQzFCO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDOztBQUVELENBQUMsaUdBQWlHOzs7Ozs7O0FDbjFFbEcsZTs7Ozs7O0FDQUEsZSIsImZpbGUiOiJidW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJqcy1iaWdjaGFpbmRiLWRyaXZlclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJqcy1iaWdjaGFpbmRiLWRyaXZlclwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDk1KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmNmYxY2VkNGRkOTQyOWE2OTA4YyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFwaVVybHMoQVBJX1BBVEgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAnYmxvY2tzJzogQVBJX1BBVEggKyAnYmxvY2tzJyxcbiAgICAgICAgJ2Jsb2Nrc19kZXRhaWwnOiBBUElfUEFUSCArICdibG9ja3MvJShibG9ja0lkKXMnLFxuICAgICAgICAnb3V0cHV0cyc6IEFQSV9QQVRIICsgJ291dHB1dHMnLFxuICAgICAgICAnc3RhdHVzZXMnOiBBUElfUEFUSCArICdzdGF0dXNlcycsXG4gICAgICAgICd0cmFuc2FjdGlvbnMnOiBBUElfUEFUSCArICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAndHJhbnNhY3Rpb25zX2RldGFpbCc6IEFQSV9QQVRIICsgJ3RyYW5zYWN0aW9ucy8lKHR4SWQpcycsXG4gICAgICAgICd2b3Rlcyc6IEFQSV9QQVRIICsgJ3ZvdGVzJ1xuICAgIH07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0QXBpVXJscy5qcyIsImltcG9ydCBiYXNlUmVxdWVzdCBmcm9tICcuL2Jhc2VSZXF1ZXN0JztcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICcuL3Nhbml0aXplJztcblxuXG5jb25zdCBERUZBVUxUX1JFUVVFU1RfQ09ORklHID0ge1xuICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfVxufTtcblxuLyoqXG4gKiBTbWFsbCB3cmFwcGVyIGFyb3VuZCBqcy11dGlsaXR5LWJlbHQncyByZXF1ZXN0IHRoYXQgcHJvdmlkZXMgdXJsIHJlc29sdmluZywgZGVmYXVsdCBzZXR0aW5ncywgYW5kXG4gKiByZXNwb25zZSBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWVzdCh1cmwsIGNvbmZpZyA9IHt9LCBvbmx5SnNvblJlc3BvbnNlPXRydWUpIHtcbiAgICAvLyBMb2FkIGRlZmF1bHQgZmV0Y2ggY29uZmlndXJhdGlvbiBhbmQgcmVtb3ZlIGFueSBmYWxzeSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfUkVRVUVTVF9DT05GSUcsIGNvbmZpZywge1xuICAgICAgICBxdWVyeTogY29uZmlnLnF1ZXJ5ICYmIHNhbml0aXplKGNvbmZpZy5xdWVyeSlcbiAgICB9KTtcbiAgICBsZXQgYXBpVXJsID0gdXJsO1xuXG4gICAgaWYgKHJlcXVlc3RDb25maWcuanNvbkJvZHkpIHtcbiAgICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdENvbmZpZy5oZWFkZXJzLCB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXVybCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdSZXF1ZXN0IHdhcyBub3QgZ2l2ZW4gYSB1cmwuJykpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlUmVxdWVzdChhcGlVcmwsIHJlcXVlc3RDb25maWcpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbmx5SnNvblJlc3BvbnNlID8gcmVzLmpzb24oKSA6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBqc29uOiByZXMuanNvbigpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHJlcy51cmxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlcXVlc3QuanMiLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vbm9kZS1saWJzLWJyb3dzZXIvfi9idWZmZXIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JzNTgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJGaXZlQmVsbHNDb25kaXRpb25cIixbXSxlKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkZpdmVCZWxsc0NvbmRpdGlvbj1lKCk6dC5GaXZlQmVsbHNDb25kaXRpb249ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7aWYocltuXSlyZXR1cm4gcltuXS5leHBvcnRzO3ZhciBpPXJbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiB0W25dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLGUpLGkubD0hMCxpLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIGUubT10LGUuYz1yLGUuaT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZS5kPWZ1bmN0aW9uKHQsZSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxlLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIGUuZChyLFwiYVwiLHIpLHJ9LGUubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sZS5wPVwiXCIsZShlLnM9NjEzKX0oW2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigzMiksbz1yKDE0KSxhPXIoMTUpLGY9cigzMykscz1cInByb3RvdHlwZVwiLHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBoLGMsZCxsLHA9dCZ1LkYsYj10JnUuRyx2PXQmdS5TLHk9dCZ1LlAsbT10JnUuQixnPWI/bjp2P25bZV18fChuW2VdPXt9KToobltlXXx8e30pW3NdLHc9Yj9pOmlbZV18fChpW2VdPXt9KSxfPXdbc118fCh3W3NdPXt9KTtiJiYocj1lKTtmb3IoaCBpbiByKWM9IXAmJmcmJnZvaWQgMCE9PWdbaF0sZD0oYz9nOnIpW2hdLGw9bSYmYz9mKGQsbik6eSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZD9mKEZ1bmN0aW9uLmNhbGwsZCk6ZCxnJiZhKGcsaCxkLHQmdS5VKSx3W2hdIT1kJiZvKHcsaCxsKSx5JiZfW2hdIT1kJiYoX1toXT1kKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCx0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkoKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnN1YmFycmF5JiYwPT09dC5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fWZ1bmN0aW9uIG8oKXtyZXR1cm4gdC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBhKGUscil7aWYobygpPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aFwiKTtyZXR1cm4gdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHIpLGUuX19wcm90b19fPXQucHJvdG90eXBlKToobnVsbD09PWUmJihlPW5ldyB0KHIpKSxlLmxlbmd0aD1yKSxlfWZ1bmN0aW9uIHQoZSxyLG4pe2lmKCEodC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUscixuKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKFwiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7cmV0dXJuIGgodGhpcyxlKX1yZXR1cm4gZih0aGlzLGUscixuKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2wodCxlLHIsbik6XCJzdHJpbmdcIj09dHlwZW9mIGU/Yyh0LGUscik6cCh0LGUpfWZ1bmN0aW9uIHModCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBzKGUpLGU8PTA/YSh0LGUpOnZvaWQgMCE9PXI/XCJzdHJpbmdcIj09dHlwZW9mIG4/YSh0LGUpLmZpbGwocixuKTphKHQsZSkuZmlsbChyKTphKHQsZSl9ZnVuY3Rpb24gaChlLHIpe2lmKHMociksZT1hKGUscjwwPzA6MHxiKHIpKSwhdC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO248cjsrK24pZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIGMoZSxyLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIlwiIT09bnx8KG49XCJ1dGY4XCIpLCF0LmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgaT0wfHkocixuKTtlPWEoZSxpKTt2YXIgbz1lLndyaXRlKHIsbik7cmV0dXJuIG8hPT1pJiYoZT1lLnNsaWNlKDAsbykpLGV9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUubGVuZ3RoPDA/MDowfGIoZS5sZW5ndGgpO3Q9YSh0LHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKXRbbl09MjU1JmVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gbChlLHIsbixpKXtpZihyLmJ5dGVMZW5ndGgsbjwwfHxyLmJ5dGVMZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHNcIik7aWYoci5ieXRlTGVuZ3RoPG4rKGl8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtyZXR1cm4gcj12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pP25ldyBVaW50OEFycmF5KHIpOnZvaWQgMD09PWk/bmV3IFVpbnQ4QXJyYXkocixuKTpuZXcgVWludDhBcnJheShyLG4saSksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXIsZS5fX3Byb3RvX189dC5wcm90b3R5cGUpOmU9ZChlLHIpLGV9ZnVuY3Rpb24gcChlLHIpe2lmKHQuaXNCdWZmZXIocikpe3ZhciBuPTB8YihyLmxlbmd0aCk7cmV0dXJuIGU9YShlLG4pLDA9PT1lLmxlbmd0aD9lOihyLmNvcHkoZSwwLDAsbiksZSl9aWYocil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZyLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxcImxlbmd0aFwiaW4gcilyZXR1cm5cIm51bWJlclwiIT10eXBlb2Ygci5sZW5ndGh8fFooci5sZW5ndGgpP2EoZSwwKTpkKGUscik7aWYoXCJCdWZmZXJcIj09PXIudHlwZSYmUShyLmRhdGEpKXJldHVybiBkKGUsci5kYXRhKX10aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LlwiKX1mdW5jdGlvbiBiKHQpe2lmKHQ+PW8oKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitvKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfHR9ZnVuY3Rpb24gdihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksdC5hbGxvYygrZSl9ZnVuY3Rpb24geShlLHIpe2lmKHQuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVwiXCIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKHIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIG47Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFYoZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKm47Y2FzZVwiaGV4XCI6cmV0dXJuIG4+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBZKGUpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIFYoZSkubGVuZ3RoO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09ZXx8ZTwwKSYmKGU9MCksZT50aGlzLmxlbmd0aClyZXR1cm5cIlwiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuXCJcIjtpZihyPj4+PTAsZT4+Pj0wLHI8PWUpcmV0dXJuXCJcIjtmb3IodHx8KHQ9XCJ1dGY4XCIpOzspc3dpdGNoKHQpe2Nhc2VcImhleFwiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gQih0aGlzLGUscik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gUih0aGlzLGUscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIFAodGhpcyxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBJKHRoaXMsZSxyKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gaih0aGlzLGUscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KTt0PSh0K1wiXCIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIHcoZSxyLG4saSxvKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4/KGk9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPW8/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihvKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIW8pcmV0dXJuLTE7bj0wfWlmKFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj10LmZyb20ocixpKSksdC5pc0J1ZmZlcihyKSlyZXR1cm4gMD09PXIubGVuZ3RoPy0xOl8oZSxyLG4saSxvKTtpZihcIm51bWJlclwiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LHQuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9vP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHIsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHIsbik6XyhlLFtyXSxuLGksbyk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiBfKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiAxPT09YT90W2VdOnQucmVhZFVJbnQxNkJFKGUqYSl9dmFyIGE9MSxmPXQubGVuZ3RoLHM9ZS5sZW5ndGg7aWYodm9pZCAwIT09biYmKG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCksXCJ1Y3MyXCI9PT1ufHxcInVjcy0yXCI9PT1ufHxcInV0ZjE2bGVcIj09PW58fFwidXRmLTE2bGVcIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO2E9MixmLz0yLHMvPTIsci89Mn12YXIgdTtpZihpKXt2YXIgaD0tMTtmb3IodT1yO3U8Zjt1KyspaWYobyh0LHUpPT09byhlLGg9PT0tMT8wOnUtaCkpe2lmKGg9PT0tMSYmKGg9dSksdS1oKzE9PT1zKXJldHVybiBoKmF9ZWxzZSBoIT09LTEmJih1LT11LWgpLGg9LTF9ZWxzZSBmb3IocitzPmYmJihyPWYtcyksdT1yO3U+PTA7dS0tKXtmb3IodmFyIGM9ITAsZD0wO2Q8cztkKyspaWYobyh0LHUrZCkhPT1vKGUsZCkpe2M9ITE7YnJlYWt9aWYoYylyZXR1cm4gdX1yZXR1cm4tMX1mdW5jdGlvbiBNKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobiksbj5pJiYobj1pKSk6bj1pO3ZhciBvPWUubGVuZ3RoO2lmKG8lMiE9PTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIGE9MDthPG47KythKXt2YXIgZj1wYXJzZUludChlLnN1YnN0cigyKmEsMiksMTYpO2lmKGlzTmFOKGYpKXJldHVybiBhO3RbcithXT1mfXJldHVybiBhfWZ1bmN0aW9uIFModCxlLHIsbil7cmV0dXJuIFcoVihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiBXKEgoZSksdCxyLG4pfWZ1bmN0aW9uIEEodCxlLHIsbil7cmV0dXJuIEUodCxlLHIsbil9ZnVuY3Rpb24gayh0LGUscixuKXtyZXR1cm4gVyhZKGUpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBXKFgoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gSSh0LGUscil7cmV0dXJuIDA9PT1lJiZyPT09dC5sZW5ndGg/Si5mcm9tQnl0ZUFycmF5KHQpOkouZnJvbUJ5dGVBcnJheSh0LnNsaWNlKGUscikpfWZ1bmN0aW9uIEIodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgbz10W2ldLGE9bnVsbCxmPW8+MjM5PzQ6bz4yMjM/MzpvPjE5MT8yOjE7aWYoaStmPD1yKXt2YXIgcyx1LGgsYztzd2l0Y2goZil7Y2FzZSAxOm88MTI4JiYoYT1vKTticmVhaztjYXNlIDI6cz10W2krMV0sMTI4PT09KDE5MiZzKSYmKGM9KDMxJm8pPDw2fDYzJnMsYz4xMjcmJihhPWMpKTticmVhaztjYXNlIDM6cz10W2krMV0sdT10W2krMl0sMTI4PT09KDE5MiZzKSYmMTI4PT09KDE5MiZ1KSYmKGM9KDE1Jm8pPDwxMnwoNjMmcyk8PDZ8NjMmdSxjPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGE9YykpO2JyZWFrO2Nhc2UgNDpzPXRbaSsxXSx1PXRbaSsyXSxoPXRbaSszXSwxMjg9PT0oMTkyJnMpJiYxMjg9PT0oMTkyJnUpJiYxMjg9PT0oMTkyJmgpJiYoYz0oMTUmbyk8PDE4fCg2MyZzKTw8MTJ8KDYzJnUpPDw2fDYzJmgsYz42NTUzNSYmYzwxMTE0MTEyJiYoYT1jKSl9fW51bGw9PT1hPyhhPTY1NTMzLGY9MSk6YT42NTUzNSYmKGEtPTY1NTM2LG4ucHVzaChhPj4+MTAmMTAyM3w1NTI5NiksYT01NjMyMHwxMDIzJmEpLG4ucHVzaChhKSxpKz1mfXJldHVybiBPKG4pfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9dHQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO2Zvcih2YXIgcj1cIlwiLG49MDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz10dCkpO3JldHVybiByfWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuPVwiXCI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuPVwiXCI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPVwiXCIsbz1lO288cjsrK28paSs9Ryh0W29dKTtyZXR1cm4gaX1mdW5jdGlvbiBqKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9XCJcIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBDKHQsZSxyKXtpZih0JTEhPT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIE4oZSxyLG4saSxvLGEpe2lmKCF0LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+b3x8cjxhKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4raT5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBMKHQsZSxyLG4pe2U8MCYmKGU9NjU1MzUrZSsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLXIsMik7aTxvOysraSl0W3IraV09KGUmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBVKHQsZSxyLG4pe2U8MCYmKGU9NDI5NDk2NzI5NStlKzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgtciw0KTtpPG87KytpKXRbcitpXT1lPj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIHoodCxlLHIsbixpLG8pe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gRCh0LGUscixuLGkpe3JldHVybiBpfHx6KHQsZSxyLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLCQud3JpdGUodCxlLHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBpfHx6KHQsZSxyLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksJC53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1mdW5jdGlvbiBGKHQpe2lmKHQ9Syh0KS5yZXBsYWNlKGV0LFwiXCIpLHQubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO3QubGVuZ3RoJTQhPT0wOyl0Kz1cIj1cIjtyZXR1cm4gdH1mdW5jdGlvbiBLKHQpe3JldHVybiB0LnRyaW0/dC50cmltKCk6dC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQ8MTY/XCIwXCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gVih0LGUpe2U9ZXx8MS8wO2Zvcih2YXIgcixuPXQubGVuZ3RoLGk9bnVsbCxvPVtdLGE9MDthPG47KythKXtpZihyPXQuY2hhckNvZGVBdChhKSxyPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGErMT09PW4peyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPShpLTU1Mjk2PDwxMHxyLTU2MzIwKSs2NTUzNn1lbHNlIGkmJihlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO28ucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO28ucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoZS09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEgodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gWCh0LGUpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KythKXI9dC5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gWSh0KXtyZXR1cm4gSi50b0J5dGVBcnJheShGKHQpKX1mdW5jdGlvbiBXKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIFoodCl7cmV0dXJuIHQhPT10fXZhciBKPXIoNDkwKSwkPXIoNDkxKSxRPXIoNDkyKTtlLkJ1ZmZlcj10LGUuU2xvd0J1ZmZlcj12LGUuSU5TUEVDVF9NQVhfQllURVM9NTAsdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PW4uVFlQRURfQVJSQVlfU1VQUE9SVD9uLlRZUEVEX0FSUkFZX1NVUFBPUlQ6aSgpLGUua01heExlbmd0aD1vKCksdC5wb29sU2l6ZT04MTkyLHQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXQucHJvdG90eXBlLGV9LHQuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGYobnVsbCx0LGUscil9LHQuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx0Ll9fcHJvdG9fXz1VaW50OEFycmF5LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZ0W1N5bWJvbC5zcGVjaWVzXT09PXQmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH0pKSx0LmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdShudWxsLHQsZSxyKX0sdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gaChudWxsLHQpfSx0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gaChudWxsLHQpfSx0LmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX0sdC5jb21wYXJlPWZ1bmN0aW9uKGUscil7aWYoIXQuaXNCdWZmZXIoZSl8fCF0LmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGU9PT1yKXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxpPXIubGVuZ3RoLG89MCxhPU1hdGgubWluKG4saSk7bzxhOysrbylpZihlW29dIT09cltvXSl7bj1lW29dLGk9cltvXTticmVha31yZXR1cm4gbjxpPy0xOmk8bj8xOjB9LHQuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHQuY29uY2F0PWZ1bmN0aW9uKGUscil7aWYoIVEoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0LmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXIpZm9yKHI9MCxuPTA7bjxlLmxlbmd0aDsrK24pcis9ZVtuXS5sZW5ndGg7dmFyIGk9dC5hbGxvY1Vuc2FmZShyKSxvPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGE9ZVtuXTtpZighdC5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTthLmNvcHkoaSxvKSxvKz1hLmxlbmd0aH1yZXR1cm4gaX0sdC5ieXRlTGVuZ3RoPXksdC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilnKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZyh0aGlzLGUsZSszKSxnKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClnKHRoaXMsZSxlKzcpLGcodGhpcyxlKzEsZSs2KSxnKHRoaXMsZSsyLGUrNSksZyh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10P1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qih0aGlzLDAsdCk6bS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighdC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT10LmNvbXBhcmUodGhpcyxlKX0sdC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PVwiXCIscj1lLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYodD10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxyKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5yJiYodCs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK3QrXCI+XCJ9LHQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSxyLG4saSxvKXtpZighdC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZih2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PWkmJihpPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSxyPDB8fG4+ZS5sZW5ndGh8fGk8MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihpPj1vJiZyPj1uKXJldHVybiAwO2lmKGk+PW8pcmV0dXJuLTE7aWYocj49bilyZXR1cm4gMTtpZihyPj4+PTAsbj4+Pj0wLGk+Pj49MCxvPj4+PTAsdGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBhPW8taSxmPW4tcixzPU1hdGgubWluKGEsZiksdT10aGlzLnNsaWNlKGksbyksaD1lLnNsaWNlKHIsbiksYz0wO2M8czsrK2MpaWYodVtjXSE9PWhbY10pe2E9dVtjXSxmPWhbY107YnJlYWt9cmV0dXJuIGE8Zj8tMTpmPGE/MTowfSx0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW5kZXhPZih0LGUscikhPT0tMX0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHcodGhpcyx0LGUsciwhMCl9LHQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdyh0aGlzLHQsZSxyLCExKX0sdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPVwidXRmOFwiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmXCJzdHJpbmdcIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2V8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49XCJ1dGY4XCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7bnx8KG49XCJ1dGY4XCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlXCJoZXhcIjpyZXR1cm4gTSh0aGlzLHQsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gUyh0aGlzLHQsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBFKHRoaXMsdCxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBBKHRoaXMsdCxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBrKHRoaXMsdCxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB4KHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7bj0oXCJcIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHR0PTQwOTY7dC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmxlbmd0aDtlPX5+ZSxyPXZvaWQgMD09PXI/bjp+fnIsZTwwPyhlKz1uLGU8MCYmKGU9MCkpOmU+biYmKGU9bikscjwwPyhyKz1uLHI8MCYmKHI9MCkpOnI+biYmKHI9bikscjxlJiYocj1lKTt2YXIgaTtpZih0LlRZUEVEX0FSUkFZX1NVUFBPUlQpaT10aGlzLnN1YmFycmF5KGUsciksaS5fX3Byb3RvX189dC5wcm90b3R5cGU7ZWxzZXt2YXIgbz1yLWU7aT1uZXcgdChvLHZvaWQgMCk7Zm9yKHZhciBhPTA7YTxvOysrYSlpW2FdPXRoaXNbYStlXX1yZXR1cm4gaX0sdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsbz0wOysrbzxlJiYoaSo9MjU2KTspbis9dGhpc1t0K29dKmk7cmV0dXJuIG59LHQucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSx0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LHQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHQucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LHQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0sdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSx0LnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLG89MDsrK288ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCtvXSppO3JldHVybiBpKj0xMjgsbj49aSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sdC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj1lLGk9MSxvPXRoaXNbdCstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbdCstLW5dKmk7cmV0dXJuIGkqPTEyOCxvPj1pJiYoby09TWF0aC5wb3coMiw4KmUpKSxvfSx0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/KDI1NS10aGlzW3RdKzEpKi0xOnRoaXNbdF19LHQucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7ZXx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe2V8fEModCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3QrMV18dGhpc1t0XTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sdC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sdC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITAsMjMsNCl9LHQucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwkLnJlYWQodGhpcyx0LCExLDIzLDQpfSx0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDgsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITAsNTIsOCl9LHQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsOCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMSw1Miw4KX0sdC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLHJ8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyKS0xO04odGhpcyx0LGUscixpLDApfXZhciBvPTEsYT0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdGhpc1tlK2FdPXQvbyYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLHJ8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyKS0xO04odGhpcyx0LGUscixpLDApfXZhciBvPXItMSxhPTE7Zm9yKHRoaXNbZStvXT0yNTUmdDstLW8+PTAmJihhKj0yNTYpOyl0aGlzW2Urb109dC9hJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMSwyNTUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3JdPTI1NSZlLHIrMX0sdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsNjU1MzUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZlLHRoaXNbcisxXT1lPj4+OCk6TCh0aGlzLGUsciwhMCkscisyfSx0LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMiw2NTUzNSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjgsdGhpc1tyKzFdPTI1NSZlKTpMKHRoaXMsZSxyLCExKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciw0LDQyOTQ5NjcyOTUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3IrM109ZT4+PjI0LHRoaXNbcisyXT1lPj4+MTYsdGhpc1tyKzFdPWU+Pj44LHRoaXNbcl09MjU1JmUpOlUodGhpcyxlLHIsITApLHIrNH0sdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjI0LHRoaXNbcisxXT1lPj4+MTYsdGhpc1tyKzJdPWU+Pj44LHRoaXNbciszXT0yNTUmZSk6VSh0aGlzLGUsciwhMSkscis0fSx0LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZXw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIG89MCxhPTEsZj0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrbzxyJiYoYSo9MjU2KTspdDwwJiYwPT09ZiYmMCE9PXRoaXNbZStvLTFdJiYoZj0xKSx0aGlzW2Urb109KHQvYT4+MCktZiYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO04odGhpcyx0LGUscixpLTEsLWkpfXZhciBvPXItMSxhPTEsZj0wO2Zvcih0aGlzW2Urb109MjU1JnQ7LS1vPj0wJiYoYSo9MjU2KTspdDwwJiYwPT09ZiYmMCE9PXRoaXNbZStvKzFdJiYoZj0xKSx0aGlzW2Urb109KHQvYT4+MCktZiYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMSwxMjcsLTEyOCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbcl09MjU1JmUscisxfSx0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZlLHRoaXNbcisxXT1lPj4+OCk6TCh0aGlzLGUsciwhMCkscisyfSx0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPWU+Pj44LHRoaXNbcisxXT0yNTUmZSk6TCh0aGlzLGUsciwhMSkscisyfSx0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT0yNTUmZSx0aGlzW3IrMV09ZT4+PjgsdGhpc1tyKzJdPWU+Pj4xNix0aGlzW3IrM109ZT4+PjI0KTpVKHRoaXMsZSxyLCEwKSxyKzR9LHQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPWU+Pj4yNCx0aGlzW3IrMV09ZT4+PjE2LHRoaXNbcisyXT1lPj4+OCx0aGlzW3IrM109MjU1JmUpOlUodGhpcyxlLHIsITEpLHIrNH0sdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMCxyKX0sdC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMSxyKX0sdC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHEodGhpcyx0LGUsITAscil9LHQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBxKHRoaXMsdCxlLCExLHIpfSx0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUscixuLGkpe2lmKG58fChuPTApLGl8fDA9PT1pfHwoaT10aGlzLmxlbmd0aCkscj49ZS5sZW5ndGgmJihyPWUubGVuZ3RoKSxyfHwocj0wKSxpPjAmJmk8biYmKGk9biksaT09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihpPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtpPnRoaXMubGVuZ3RoJiYoaT10aGlzLmxlbmd0aCksZS5sZW5ndGgtcjxpLW4mJihpPWUubGVuZ3RoLXIrbik7dmFyIG8sYT1pLW47aWYodGhpcz09PWUmJm48ciYmcjxpKWZvcihvPWEtMTtvPj0wOy0tbyllW28rcl09dGhpc1tvK25dO2Vsc2UgaWYoYTwxZTN8fCF0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGE7KytvKWVbbytyXT10aGlzW28rbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK2EpLHIpO3JldHVybiBhfSx0LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUscixuLGkpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygcj8oaT1yLHI9MCxuPXRoaXMubGVuZ3RoKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmKGk9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdCgwKTtvPDI1NiYmKGU9byl9aWYodm9pZCAwIT09aSYmXCJzdHJpbmdcIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJiF0LmlzRW5jb2RpbmcoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2kpfWVsc2VcIm51bWJlclwiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKG48PXIpcmV0dXJuIHRoaXM7cj4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKTt2YXIgYTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlmb3IoYT1yO2E8bjsrK2EpdGhpc1thXT1lO2Vsc2V7dmFyIGY9dC5pc0J1ZmZlcihlKT9lOlYobmV3IHQoZSxpKS50b1N0cmluZygpKSxzPWYubGVuZ3RoO2ZvcihhPTA7YTxuLXI7KythKXRoaXNbYStyXT1mW2Elc119cmV0dXJuIHRoaXN9O3ZhciBldD0vW14rXFwvMC05QS1aYS16LV9dL2d9KS5jYWxsKGUscigxKS5CdWZmZXIscigzOSkpfSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODcpKFwid2tzXCIpLGk9cig0OCksbz1yKDQpLlN5bWJvbCxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIG8sZj10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF18fChuW3RdPWEmJm9bdF18fChhP286aSkoXCJTeW1ib2wuXCIrdCkpfTtmLnN0b3JlPW59LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpLGk9cigxNzQpLG89cigyOSksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXIoOCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLGU9byhlLCEwKSxuKHIpLGkpdHJ5e3JldHVybiBhKHQsZSxyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtlXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzgpLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/aShuKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qobih0KSl9fSxmdW5jdGlvbih0LGUpe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSksaT1yKDM3KTt0LmV4cG9ydHM9cig4KT9mdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZih0LGUsaSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigxNCksbz1yKDEyKSxhPXIoNDgpKFwic3JjXCIpLGY9XCJ0b1N0cmluZ1wiLHM9RnVuY3Rpb25bZl0sdT0oXCJcIitzKS5zcGxpdChmKTtyKDMyKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7dmFyIHM9XCJmdW5jdGlvblwiPT10eXBlb2YgcjtzJiYobyhyLFwibmFtZVwiKXx8aShyLFwibmFtZVwiLGUpKSx0W2VdIT09ciYmKHMmJihvKHIsYSl8fGkocixhLHRbZV0/XCJcIit0W2VdOnUuam9pbihTdHJpbmcoZSkpKSksdD09PW4/dFtlXT1yOmY/dFtlXT90W2VdPXI6aSh0LGUscik6KGRlbGV0ZSB0W2VdLGkodCxlLHIpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsZixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fHMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNSksbz1yKDI0KSxhPS9cIi9nLGY9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9U3RyaW5nKG8odCkpLGY9XCI8XCIrZTtyZXR1cm5cIlwiIT09ciYmKGYrPVwiIFwiK3IrJz1cIicrU3RyaW5nKG4pLnJlcGxhY2UoYSxcIiZxdW90O1wiKSsnXCInKSxmK1wiPlwiK2krXCI8L1wiK2UrXCI+XCJ9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O3JbdF09ZShmKSxuKG4uUCtuLkYqaShmdW5jdGlvbigpe3ZhciBlPVwiXCJbdF0oJ1wiJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJ1wiJykubGVuZ3RoPjN9KSxcIlN0cmluZ1wiLHIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjUpLGk9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKGkodCkpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxcbmguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksbCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtcbnJldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLnZlcnNpb249cig0NjUpLnZlcnNpb24sbi51dGlscz1yKDUyMSksbi5yYW5kPXIoNTIyKSxuLmhtYWNEUkJHPXIoNTE5KSxuLmN1cnZlPXIoOTkpLG4uY3VydmVzPXIoNTEyKSxuLmVjPXIoNTEzKSxuLmVkZHNhPXIoNTE2KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjYpLGk9cigzNyksbz1yKDE3KSxhPXIoMjkpLGY9cigxMikscz1yKDE3NCksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1yKDgpP3U6ZnVuY3Rpb24odCxlKXtpZih0PW8odCksZT1hKGUsITApLHMpdHJ5e3JldHVybiB1KHQsZSl9Y2F0Y2godCl7fWlmKGYodCxlKSlyZXR1cm4gaSghbi5mLmNhbGwodCxlKSx0W2VdKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEyKSxpPXIoMTEpLG89cigxMzMpKFwiSUVfUFJPVE9cIiksYT1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PWkodCksbih0LG8pP3Rbb106XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD9hOm51bGx9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLnZlcnNpb249cig0NjcpLnZlcnNpb24sbi51dGlscz1yKDU1OCksbi5yYW5kPXIoNTU5KSxuLmhtYWNEUkJHPXIoNTU2KSxuLmN1cnZlPXIoMTA0KSxuLmN1cnZlcz1yKDU0OSksbi5lYz1yKDU1MCksbi5lZGRzYT1yKDU1Myl9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0JiZuKGZ1bmN0aW9uKCl7ZT90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gaSh0KXtpZihoPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChoPT09cnx8IWgpJiZzZXRUaW1lb3V0KXJldHVybiBoPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gaCh0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gaC5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gaC5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIG8odCl7aWYoYz09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChjPT09bnx8IWMpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGM9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIGModCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBjLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gYy5jYWxsKHRoaXMsdCl9fX1mdW5jdGlvbiBhKCl7YiYmbCYmKGI9ITEsbC5sZW5ndGg/cD1sLmNvbmNhdChwKTp2PS0xLHAubGVuZ3RoJiZmKCkpfWZ1bmN0aW9uIGYoKXtpZighYil7dmFyIHQ9aShhKTtiPSEwO2Zvcih2YXIgZT1wLmxlbmd0aDtlOyl7Zm9yKGw9cCxwPVtdOysrdjxlOylsJiZsW3ZdLnJ1bigpO3Y9LTEsZT1wLmxlbmd0aH1sPW51bGwsYj0hMSxvKHQpfX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gdSgpe312YXIgaCxjLGQ9dC5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtoPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpyfWNhdGNoKHQpe2g9cn10cnl7Yz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om59Y2F0Y2godCl7Yz1ufX0oKTt2YXIgbCxwPVtdLGI9ITEsdj0tMTtkLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07cC5wdXNoKG5ldyBzKHQsZSkpLDEhPT1wLmxlbmd0aHx8Ynx8aShmKX0scy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sZC50aXRsZT1cImJyb3dzZXJcIixkLmJyb3dzZXI9ITAsZC5lbnY9e30sZC5hcmd2PVtdLGQudmVyc2lvbj1cIlwiLGQudmVyc2lvbnM9e30sZC5vbj11LGQuYWRkTGlzdGVuZXI9dSxkLm9uY2U9dSxkLm9mZj11LGQucmVtb3ZlTGlzdGVuZXI9dSxkLnJlbW92ZUFsbExpc3RlbmVycz11LGQuZW1pdD11LGQuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sZC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sZC5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGQudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMzKSxpPXIoNjUpLG89cigxMSksYT1yKDEwKSxmPXIoMjgzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0xPT10LHM9Mj09dCx1PTM9PXQsaD00PT10LGM9Nj09dCxkPTU9PXR8fGMsbD1lfHxmO3JldHVybiBmdW5jdGlvbihlLGYscCl7Zm9yKHZhciBiLHYseT1vKGUpLG09aSh5KSxnPW4oZixwLDMpLHc9YShtLmxlbmd0aCksXz0wLE09cj9sKGUsdyk6cz9sKGUsMCk6dm9pZCAwO3c+XztfKyspaWYoKGR8fF8gaW4gbSkmJihiPW1bX10sdj1nKGIsXyx5KSx0KSlpZihyKU1bX109djtlbHNlIGlmKHYpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGI7Y2FzZSA2OnJldHVybiBfO2Nhc2UgMjpNLnB1c2goYil9ZWxzZSBpZihoKXJldHVybiExO3JldHVybiBjPy0xOnV8fGg/aDpNfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigzMiksbz1yKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPShpLk9iamVjdHx8e30pW3RdfHxPYmplY3RbdF0sYT17fTthW3RdPWUociksbihuLlMrbi5GKm8oZnVuY3Rpb24oKXtyKDEpfSksXCJPYmplY3RcIixhKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFuKHQpKXJldHVybiB0O3ZhciByLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LGwhPT1mJiYobT1zKmMtdSpkLGQ9cypkK3UqYyxjPW0pfX0sZC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGQucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGQucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGQucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wO2E8ZTthKyspbys9MHx0W2FdLHJbMiphXT04MTkxJm8sbz4+Pj0xMyxyWzIqYSsxXT04MTkxJm8sbz4+Pj0xMztmb3IoYT0yKmU7YTxpOysrYSlyW2FdPTA7bigwPT09byksbigwPT09KG8mLTgxOTIpKX0sZC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZC5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxhLG4pLFxudGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtpLmNhbGwodGhpcyl9dC5leHBvcnRzPW47dmFyIGk9cigxMTApLkV2ZW50RW1pdHRlcixvPXIoNjAzKTtvKG4saSksbi5SZWFkYWJsZT1yKDYwMCksbi5Xcml0YWJsZT1yKDYwMiksbi5EdXBsZXg9cig1OTUpLG4uVHJhbnNmb3JtPXIoNjAxKSxuLlBhc3NUaHJvdWdoPXIoNTk5KSxuLlN0cmVhbT1uLG4ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3Qud3JpdGFibGUmJiExPT09dC53cml0ZShlKSYmdS5wYXVzZSYmdS5wYXVzZSgpfWZ1bmN0aW9uIG4oKXt1LnJlYWRhYmxlJiZ1LnJlc3VtZSYmdS5yZXN1bWUoKX1mdW5jdGlvbiBvKCl7aHx8KGg9ITAsdC5lbmQoKSl9ZnVuY3Rpb24gYSgpe2h8fChoPSEwLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZGVzdHJveSYmdC5kZXN0cm95KCkpfWZ1bmN0aW9uIGYodCl7aWYocygpLDA9PT1pLmxpc3RlbmVyQ291bnQodGhpcyxcImVycm9yXCIpKXRocm93IHR9ZnVuY3Rpb24gcygpe3UucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsciksdC5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbiksdS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLG8pLHUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGEpLHUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLHUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixzKSx1LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixzKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixzKX12YXIgdT10aGlzO3Uub24oXCJkYXRhXCIsciksdC5vbihcImRyYWluXCIsbiksdC5faXNTdGRpb3x8ZSYmZS5lbmQ9PT0hMXx8KHUub24oXCJlbmRcIixvKSx1Lm9uKFwiY2xvc2VcIixhKSk7dmFyIGg9ITE7cmV0dXJuIHUub24oXCJlcnJvclwiLGYpLHQub24oXCJlcnJvclwiLGYpLHUub24oXCJlbmRcIixzKSx1Lm9uKFwiY2xvc2VcIixzKSx0Lm9uKFwiY2xvc2VcIixzKSx0LmVtaXQoXCJwaXBlXCIsdSksdH19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTkwKSxpPXIoMCksbz1yKDg3KShcIm1ldGFkYXRhXCIpLGE9by5zdG9yZXx8KG8uc3RvcmU9bmV3KHIoMTkzKSkpLGY9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWEuZ2V0KHQpO2lmKCFpKXtpZighcilyZXR1cm47YS5zZXQodCxpPW5ldyBuKX12YXIgbz1pLmdldChlKTtpZighbyl7aWYoIXIpcmV0dXJuO2kuc2V0KGUsbz1uZXcgbil9cmV0dXJuIG99LHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYoZSxyLCExKTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXModCl9LHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYoZSxyLCExKTtyZXR1cm4gdm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCl9LGg9ZnVuY3Rpb24odCxlLHIsbil7ZihyLG4sITApLnNldCh0LGUpfSxjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zih0LGUsITEpLG49W107cmV0dXJuIHImJnIuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChlKX0pLG59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fFwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSxsPWZ1bmN0aW9uKHQpe2koaS5TLFwiUmVmbGVjdFwiLHQpfTt0LmV4cG9ydHM9e3N0b3JlOmEsbWFwOmYsaGFzOnMsZ2V0OnUsc2V0Omgsa2V5czpjLGtleTpkLGV4cDpsfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2lmKHIoOCkpe3ZhciBuPXIoNDEpLGk9cig0KSxvPXIoNSksYT1yKDApLGY9cig4OCkscz1yKDE0MCksdT1yKDMzKSxoPXIoNDApLGM9cigzNyksZD1yKDE0KSxsPXIoNDUpLHA9cigzOCksYj1yKDEwKSx2PXIoNDcpLHk9cigyOSksbT1yKDEyKSxnPXIoMTg3KSx3PXIoNjQpLF89cig2KSxNPXIoMTEpLFM9cigxMjUpLEU9cig0MiksQT1yKDIxKSxrPXIoNDMpLmYseD1yKDE0MiksST1yKDQ4KSxCPXIoNyksTz1yKDI3KSxSPXIoNzgpLFA9cigxMzQpLFQ9cigxNDMpLGo9cig1NiksQz1yKDg0KSxOPXIoNDYpLEw9cigxMTgpLFU9cigxNjcpLHo9cig5KSxEPXIoMjApLHE9ei5mLEY9RC5mLEs9aS5SYW5nZUVycm9yLEc9aS5UeXBlRXJyb3IsVj1pLlVpbnQ4QXJyYXksSD1cIkFycmF5QnVmZmVyXCIsWD1cIlNoYXJlZFwiK0gsWT1cIkJZVEVTX1BFUl9FTEVNRU5UXCIsVz1cInByb3RvdHlwZVwiLFo9QXJyYXlbV10sSj1zLkFycmF5QnVmZmVyLCQ9cy5EYXRhVmlldyxRPU8oMCksdHQ9TygyKSxldD1PKDMpLHJ0PU8oNCksbnQ9Tyg1KSxpdD1PKDYpLG90PVIoITApLGF0PVIoITEpLGZ0PVQudmFsdWVzLHN0PVQua2V5cyx1dD1ULmVudHJpZXMsaHQ9Wi5sYXN0SW5kZXhPZixjdD1aLnJlZHVjZSxkdD1aLnJlZHVjZVJpZ2h0LGx0PVouam9pbixwdD1aLnNvcnQsYnQ9Wi5zbGljZSx2dD1aLnRvU3RyaW5nLHl0PVoudG9Mb2NhbGVTdHJpbmcsbXQ9QihcIml0ZXJhdG9yXCIpLGd0PUIoXCJ0b1N0cmluZ1RhZ1wiKSx3dD1JKFwidHlwZWRfY29uc3RydWN0b3JcIiksX3Q9SShcImRlZl9jb25zdHJ1Y3RvclwiKSxNdD1mLkNPTlNUUixTdD1mLlRZUEVELEV0PWYuVklFVyxBdD1cIldyb25nIGxlbmd0aCFcIixrdD1PKDEsZnVuY3Rpb24odCxlKXtyZXR1cm4gUHQoUCh0LHRbX3RdKSxlKX0pLHh0PW8oZnVuY3Rpb24oKXtyZXR1cm4gMT09PW5ldyBWKG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF19KSxJdD0hIVYmJiEhVltXXS5zZXQmJm8oZnVuY3Rpb24oKXtuZXcgVigxKS5zZXQoe30pfSksQnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10KXRocm93IEcoQXQpO3ZhciByPSt0LG49Yih0KTtpZihlJiYhZyhyLG4pKXRocm93IEsoQXQpO3JldHVybiBufSxPdD1mdW5jdGlvbih0LGUpe3ZhciByPXAodCk7aWYocjwwfHxyJWUpdGhyb3cgSyhcIldyb25nIG9mZnNldCFcIik7cmV0dXJuIHJ9LFJ0PWZ1bmN0aW9uKHQpe2lmKF8odCkmJlN0IGluIHQpcmV0dXJuIHQ7dGhyb3cgRyh0K1wiIGlzIG5vdCBhIHR5cGVkIGFycmF5IVwiKX0sUHQ9ZnVuY3Rpb24odCxlKXtpZighKF8odCkmJnd0IGluIHQpKXRocm93IEcoXCJJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciFcIik7cmV0dXJuIG5ldyB0KGUpfSxUdD1mdW5jdGlvbih0LGUpe3JldHVybiBqdChQKHQsdFtfdF0pLGUpfSxqdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaT1QdCh0LG4pO24+cjspaVtyXT1lW3IrK107cmV0dXJuIGl9LEN0PWZ1bmN0aW9uKHQsZSxyKXtxKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rbcl19fSl9LE50PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8sYSxmPU0odCkscz1hcmd1bWVudHMubGVuZ3RoLGg9cz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsYz12b2lkIDAhPT1oLGQ9eChmKTtpZih2b2lkIDAhPWQmJiFTKGQpKXtmb3IoYT1kLmNhbGwoZiksbj1bXSxlPTA7IShvPWEubmV4dCgpKS5kb25lO2UrKyluLnB1c2goby52YWx1ZSk7Zj1ufWZvcihjJiZzPjImJihoPXUoaCxhcmd1bWVudHNbMl0sMikpLGU9MCxyPWIoZi5sZW5ndGgpLGk9UHQodGhpcyxyKTtyPmU7ZSsrKWlbZV09Yz9oKGZbZV0sZSk6ZltlXTtyZXR1cm4gaX0sTHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgscj1QdCh0aGlzLGUpO2U+dDspclt0XT1hcmd1bWVudHNbdCsrXTtyZXR1cm4gcn0sVXQ9ISFWJiZvKGZ1bmN0aW9uKCl7eXQuY2FsbChuZXcgVigxKSl9KSx6dD1mdW5jdGlvbigpe3JldHVybiB5dC5hcHBseShVdD9idC5jYWxsKFJ0KHRoaXMpKTpSdCh0aGlzKSxhcmd1bWVudHMpfSxEdD17Y29weVdpdGhpbjpmdW5jdGlvbih0LGUpe3JldHVybiBVLmNhbGwoUnQodGhpcyksdCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIHJ0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmaWxsOmZ1bmN0aW9uKHQpe3JldHVybiBMLmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LGZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gVHQodGhpcyx0dChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG50KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGl0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe1EoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGF0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gb3QoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGpvaW46ZnVuY3Rpb24odCl7cmV0dXJuIGx0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBodC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGt0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIGN0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBkdC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxyZXZlcnNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxyPVJ0KGUpLmxlbmd0aCxuPU1hdGguZmxvb3Ioci8yKSxpPTA7aTxuOyl0PWVbaV0sZVtpKytdPWVbLS1yXSxlW3JdPXQ7cmV0dXJuIGV9LHNvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGV0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiBwdC5jYWxsKFJ0KHRoaXMpLHQpfSxzdWJhcnJheTpmdW5jdGlvbih0LGUpe3ZhciByPVJ0KHRoaXMpLG49ci5sZW5ndGgsaT12KHQsbik7cmV0dXJuIG5ldyhQKHIscltfdF0pKShyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQraSpyLkJZVEVTX1BFUl9FTEVNRU5ULGIoKHZvaWQgMD09PWU/bjp2KGUsbikpLWkpKX19LHF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFR0KHRoaXMsYnQuY2FsbChSdCh0aGlzKSx0LGUpKX0sRnQ9ZnVuY3Rpb24odCl7UnQodGhpcyk7dmFyIGU9T3QoYXJndW1lbnRzWzFdLDEpLHI9dGhpcy5sZW5ndGgsbj1NKHQpLGk9YihuLmxlbmd0aCksbz0wO2lmKGkrZT5yKXRocm93IEsoQXQpO2Zvcig7bzxpOyl0aGlzW2Urb109bltvKytdfSxLdD17ZW50cmllczpmdW5jdGlvbigpe3JldHVybiB1dC5jYWxsKFJ0KHRoaXMpKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBzdC5jYWxsKFJ0KHRoaXMpKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIGZ0LmNhbGwoUnQodGhpcykpfX0sR3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gXyh0KSYmdFtTdF0mJlwic3ltYm9sXCIhPXR5cGVvZiBlJiZlIGluIHQmJlN0cmluZygrZSk9PVN0cmluZyhlKX0sVnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodCxlPXkoZSwhMCkpP2MoMix0W2VdKTpGKHQsZSl9LEh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4hKEd0KHQsZT15KGUsITApKSYmXyhyKSYmbShyLFwidmFsdWVcIikpfHxtKHIsXCJnZXRcIil8fG0ocixcInNldFwiKXx8ci5jb25maWd1cmFibGV8fG0ocixcIndyaXRhYmxlXCIpJiYhci53cml0YWJsZXx8bShyLFwiZW51bWVyYWJsZVwiKSYmIXIuZW51bWVyYWJsZT9xKHQsZSxyKToodFtlXT1yLnZhbHVlLHQpfTtNdHx8KEQuZj1WdCx6LmY9SHQpLGEoYS5TK2EuRiohTXQsXCJPYmplY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlZ0LGRlZmluZVByb3BlcnR5Okh0fSksbyhmdW5jdGlvbigpe3Z0LmNhbGwoe30pfSkmJih2dD15dD1mdW5jdGlvbigpe3JldHVybiBsdC5jYWxsKHRoaXMpfSk7dmFyIFh0PWwoe30sRHQpO2woWHQsS3QpLGQoWHQsbXQsS3QudmFsdWVzKSxsKFh0LHtzbGljZTpxdCxzZXQ6RnQsY29uc3RydWN0b3I6ZnVuY3Rpb24oKXt9LHRvU3RyaW5nOnZ0LHRvTG9jYWxlU3RyaW5nOnp0fSksQ3QoWHQsXCJidWZmZXJcIixcImJcIiksQ3QoWHQsXCJieXRlT2Zmc2V0XCIsXCJvXCIpLEN0KFh0LFwiYnl0ZUxlbmd0aFwiLFwibFwiKSxDdChYdCxcImxlbmd0aFwiLFwiZVwiKSxxKFh0LGd0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tTdF19fSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3M9ISFzO3ZhciB1PXQrKHM/XCJDbGFtcGVkXCI6XCJcIikrXCJBcnJheVwiLGM9XCJVaW50OEFycmF5XCIhPXUsbD1cImdldFwiK3QscD1cInNldFwiK3Qsdj1pW3VdLHk9dnx8e30sbT12JiZBKHYpLGc9IXZ8fCFmLkFCVixNPXt9LFM9diYmdltXXSx4PWZ1bmN0aW9uKHQscil7dmFyIG49dC5fZDtyZXR1cm4gbi52W2xdKHIqZStuLm8seHQpfSxJPWZ1bmN0aW9uKHQscixuKXt2YXIgaT10Ll9kO3MmJihuPShuPU1hdGgucm91bmQobikpPDA/MDpuPjI1NT8yNTU6MjU1Jm4pLGkudltwXShyKmUraS5vLG4seHQpfSxCPWZ1bmN0aW9uKHQsZSl7cSh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gSSh0aGlzLGUsdCl9LGVudW1lcmFibGU6ITB9KX07Zz8odj1yKGZ1bmN0aW9uKHQscixuLGkpe2godCx2LHUsXCJfZFwiKTt2YXIgbyxhLGYscyxjPTAsbD0wO2lmKF8ocikpe2lmKCEociBpbnN0YW5jZW9mIEp8fChzPXcocikpPT1IfHxzPT1YKSlyZXR1cm4gU3QgaW4gcj9qdCh2LHIpOk50LmNhbGwodixyKTtvPXIsbD1PdChuLGUpO3ZhciBwPXIuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1pKXtpZihwJWUpdGhyb3cgSyhBdCk7aWYoYT1wLWwsYTwwKXRocm93IEsoQXQpfWVsc2UgaWYoYT1iKGkpKmUsYStsPnApdGhyb3cgSyhBdCk7Zj1hL2V9ZWxzZSBmPUJ0KHIsITApLGE9ZiplLG89bmV3IEooYSk7Zm9yKGQodCxcIl9kXCIse2I6byxvOmwsbDphLGU6Zix2Om5ldyAkKG8pfSk7YzxmOylCKHQsYysrKX0pLFM9dltXXT1FKFh0KSxkKFMsXCJjb25zdHJ1Y3RvclwiLHYpKTpDKGZ1bmN0aW9uKHQpe25ldyB2KG51bGwpLG5ldyB2KHQpfSwhMCl8fCh2PXIoZnVuY3Rpb24odCxyLG4saSl7aCh0LHYsdSk7dmFyIG87cmV0dXJuIF8ocik/ciBpbnN0YW5jZW9mIEp8fChvPXcocikpPT1IfHxvPT1YP3ZvaWQgMCE9PWk/bmV3IHkocixPdChuLGUpLGkpOnZvaWQgMCE9PW4/bmV3IHkocixPdChuLGUpKTpuZXcgeShyKTpTdCBpbiByP2p0KHYscik6TnQuY2FsbCh2LHIpOm5ldyB5KEJ0KHIsYykpfSksUShtIT09RnVuY3Rpb24ucHJvdG90eXBlP2soeSkuY29uY2F0KGsobSkpOmsoeSksZnVuY3Rpb24odCl7dCBpbiB2fHxkKHYsdCx5W3RdKX0pLHZbV109UyxufHwoUy5jb25zdHJ1Y3Rvcj12KSk7dmFyIE89U1ttdF0sUj0hIU8mJihcInZhbHVlc1wiPT1PLm5hbWV8fHZvaWQgMD09Ty5uYW1lKSxQPUt0LnZhbHVlcztkKHYsd3QsITApLGQoUyxTdCx1KSxkKFMsRXQsITApLGQoUyxfdCx2KSwocz9uZXcgdigxKVtndF09PXU6Z3QgaW4gUyl8fHEoUyxndCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSksTVt1XT12LGEoYS5HK2EuVythLkYqKHYhPXkpLE0pLGEoYS5TLHUse0JZVEVTX1BFUl9FTEVNRU5UOmUsZnJvbTpOdCxvZjpMdH0pLFkgaW4gU3x8ZChTLFksZSksYShhLlAsdSxEdCksTih1KSxhKGEuUCthLkYqSXQsdSx7c2V0OkZ0fSksYShhLlArYS5GKiFSLHUsS3QpLGEoYS5QK2EuRiooUy50b1N0cmluZyE9dnQpLHUse3RvU3RyaW5nOnZ0fSksYShhLlArYS5GKm8oZnVuY3Rpb24oKXtuZXcgdigxKS5zbGljZSgpfSksdSx7c2xpY2U6cXR9KSxhKGEuUCthLkYqKG8oZnVuY3Rpb24oKXtyZXR1cm5bMSwyXS50b0xvY2FsZVN0cmluZygpIT1uZXcgdihbMSwyXSkudG9Mb2NhbGVTdHJpbmcoKX0pfHwhbyhmdW5jdGlvbigpe1MudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwyXSl9KSksdSx7dG9Mb2NhbGVTdHJpbmc6enR9KSxqW3VdPVI/TzpQLG58fFJ8fGQoUyxtdCxQKX19ZWxzZSB0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0OCkoXCJtZXRhXCIpLGk9cig2KSxvPXIoMTIpLGE9cig5KS5mLGY9MCxzPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHU9IXIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gcyhPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGg9ZnVuY3Rpb24odCl7YSh0LG4se3ZhbHVlOntpOlwiT1wiKyArK2Ysdzp7fX19KX0sYz1mdW5jdGlvbih0LGUpe2lmKCFpKHQpKXJldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6KFwic3RyaW5nXCI9PXR5cGVvZiB0P1wiU1wiOlwiUFwiKSt0O2lmKCFvKHQsbikpe2lmKCFzKHQpKXJldHVyblwiRlwiO2lmKCFlKXJldHVyblwiRVwiO2godCl9cmV0dXJuIHRbbl0uaX0sZD1mdW5jdGlvbih0LGUpe2lmKCFvKHQsbikpe2lmKCFzKHQpKXJldHVybiEwO2lmKCFlKXJldHVybiExO2godCl9cmV0dXJuIHRbbl0ud30sbD1mdW5jdGlvbih0KXtyZXR1cm4gdSYmcC5ORUVEJiZzKHQpJiYhbyh0LG4pJiZoKHQpLHR9LHA9dC5leHBvcnRzPXtLRVk6bixORUVEOiExLGZhc3RLZXk6YyxnZXRXZWFrOmQsb25GcmVlemU6bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNlaWwsbj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP246cikodCl9fSxmdW5jdGlvbih0LGUpe3ZhciByO3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7cj1yfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl8fCgwLGV2YWwpKFwidGhpc1wiKX1jYXRjaCh0KXtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYocj13aW5kb3cpfXQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZighKHQgaW5zdGFuY2VvZiBlKXx8dm9pZCAwIT09biYmbiBpbiB0KXRocm93IFR5cGVFcnJvcihyK1wiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz0hMX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyksaT1yKDE4MCksbz1yKDEyMSksYT1yKDEzMykoXCJJRV9QUk9UT1wiKSxmPWZ1bmN0aW9uKCl7fSxzPVwicHJvdG90eXBlXCIsdT1mdW5jdGlvbigpe3ZhciB0LGU9cigxMjApKFwiaWZyYW1lXCIpLG49by5sZW5ndGgsaT1cIjxcIixhPVwiPlwiO2ZvcihlLnN0eWxlLmRpc3BsYXk9XCJub25lXCIscigxMjMpLmFwcGVuZENoaWxkKGUpLGUuc3JjPVwiamF2YXNjcmlwdDpcIix0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCx0Lm9wZW4oKSx0LndyaXRlKGkrXCJzY3JpcHRcIithK1wiZG9jdW1lbnQuRj1PYmplY3RcIitpK1wiL3NjcmlwdFwiK2EpLHQuY2xvc2UoKSx1PXQuRjtuLS07KWRlbGV0ZSB1W3NdW29bbl1dO3JldHVybiB1KCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8oZltzXT1uKHQpLHI9bmV3IGYsZltzXT1udWxsLHJbYV09dCk6cj11KCksdm9pZCAwPT09ZT9yOmkocixlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE4MiksaT1yKDEyMSkuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTgyKSxpPXIoMTIxKTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDkpLG89cig4KSxhPXIoNykoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO28mJmUmJiFlW2FdJiZpLmYoZSxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzOCksaT1NYXRoLm1heCxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PW4odCksdDwwP2kodCtlLDApOm8odCxlKX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxuPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcituKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi51dGlscz1yKDUyNyksbi5jb21tb249cig1MjMpLG4uc2hhPXIoNTI2KSxuLnJpcGVtZD1yKDUyNSksbi5obWFjPXIoNTI0KSxuLnNoYTE9bi5zaGEuc2hhMSxuLnNoYTI1Nj1uLnNoYS5zaGEyNTYsbi5zaGEyMjQ9bi5zaGEuc2hhMjI0LG4uc2hhMzg0PW4uc2hhLnNoYTM4NCxuLnNoYTUxMj1uLnNoYS5zaGE1MTIsbi5yaXBlbWQxNjA9bi5yaXBlbWQucmlwZW1kMTYwfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLnV0aWxzPXIoNTY0KSxuLmNvbW1vbj1yKDU2MCksbi5zaGE9cig1NjMpLG4ucmlwZW1kPXIoNTYyKSxuLmhtYWM9cig1NjEpLG4uc2hhMT1uLnNoYS5zaGExLG4uc2hhMjU2PW4uc2hhLnNoYTI1NixuLnNoYTIyND1uLnNoYS5zaGEyMjQsbi5zaGEzODQ9bi5zaGEuc2hhMzg0LG4uc2hhNTEyPW4uc2hhLnNoYTUxMixuLnJpcGVtZDE2MD1uLnJpcGVtZC5yaXBlbWQxNjB9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMsdCksaC5jYWxsKHRoaXMsdCksdCYmdC5yZWFkYWJsZT09PSExJiYodGhpcy5yZWFkYWJsZT0hMSksdCYmdC53cml0YWJsZT09PSExJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLHQmJnQuYWxsb3dIYWxmT3Blbj09PSExJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx2b2lkIHRoaXMub25jZShcImVuZFwiLGkpKTpuZXcgbih0KX1mdW5jdGlvbiBpKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxmKG8sdGhpcyl9ZnVuY3Rpb24gbyh0KXt0LmVuZCgpfXZhciBhPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9O3QuZXhwb3J0cz1uO3ZhciBmPXIoMTU3KSxzPXIoNzMpO3MuaW5oZXJpdHM9cig3NCk7dmFyIHU9cigyNTApLGg9cigxNTUpO3MuaW5oZXJpdHMobix1KTtmb3IodmFyIGM9YShoLnByb3RvdHlwZSksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgbD1jW2RdO24ucHJvdG90eXBlW2xdfHwobi5wcm90b3R5cGVbbF09aC5wcm90b3R5cGVbbF0pfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCYmIXModCkpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBvKHQpe3RoaXMuY2hhclJlY2VpdmVkPXQubGVuZ3RoJTIsdGhpcy5jaGFyTGVuZ3RoPXRoaXMuY2hhclJlY2VpdmVkPzI6MH1mdW5jdGlvbiBhKHQpe3RoaXMuY2hhclJlY2VpdmVkPXQubGVuZ3RoJTMsdGhpcy5jaGFyTGVuZ3RoPXRoaXMuY2hhclJlY2VpdmVkPzM6MH12YXIgZj1yKDEpLkJ1ZmZlcixzPWYuaXNFbmNvZGluZ3x8ZnVuY3Rpb24odCl7c3dpdGNoKHQmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdT1lLlN0cmluZ0RlY29kZXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9KHR8fFwidXRmOFwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX10vLFwiXCIpLG4odCksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmOFwiOnRoaXMuc3Vycm9nYXRlU2l6ZT0zO2JyZWFrO2Nhc2VcInVjczJcIjpjYXNlXCJ1dGYxNmxlXCI6dGhpcy5zdXJyb2dhdGVTaXplPTIsdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcj1vO2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMuc3Vycm9nYXRlU2l6ZT0zLHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9YTticmVhaztkZWZhdWx0OnJldHVybiB2b2lkKHRoaXMud3JpdGU9aSl9dGhpcy5jaGFyQnVmZmVyPW5ldyBmKDYpLHRoaXMuY2hhclJlY2VpdmVkPTAsdGhpcy5jaGFyTGVuZ3RoPTB9O3UucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1cIlwiO3RoaXMuY2hhckxlbmd0aDspe3ZhciByPXQubGVuZ3RoPj10aGlzLmNoYXJMZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQ/dGhpcy5jaGFyTGVuZ3RoLXRoaXMuY2hhclJlY2VpdmVkOnQubGVuZ3RoO2lmKHQuY29weSh0aGlzLmNoYXJCdWZmZXIsdGhpcy5jaGFyUmVjZWl2ZWQsMCxyKSx0aGlzLmNoYXJSZWNlaXZlZCs9cix0aGlzLmNoYXJSZWNlaXZlZDx0aGlzLmNoYXJMZW5ndGgpcmV0dXJuXCJcIjt0PXQuc2xpY2Uocix0Lmxlbmd0aCksZT10aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCx0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO3ZhciBuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtpZighKG4+PTU1Mjk2JiZuPD01NjMxOSkpe2lmKHRoaXMuY2hhclJlY2VpdmVkPXRoaXMuY2hhckxlbmd0aD0wLDA9PT10Lmxlbmd0aClyZXR1cm4gZTticmVha310aGlzLmNoYXJMZW5ndGgrPXRoaXMuc3Vycm9nYXRlU2l6ZSxlPVwiXCJ9dGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcih0KTt2YXIgaT10Lmxlbmd0aDt0aGlzLmNoYXJMZW5ndGgmJih0LmNvcHkodGhpcy5jaGFyQnVmZmVyLDAsdC5sZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQsaSksaS09dGhpcy5jaGFyUmVjZWl2ZWQpLGUrPXQudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLGkpO3ZhciBpPWUubGVuZ3RoLTEsbj1lLmNoYXJDb2RlQXQoaSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXt2YXIgbz10aGlzLnN1cnJvZ2F0ZVNpemU7cmV0dXJuIHRoaXMuY2hhckxlbmd0aCs9byx0aGlzLmNoYXJSZWNlaXZlZCs9byx0aGlzLmNoYXJCdWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsbywwLG8pLHQuY29weSh0aGlzLmNoYXJCdWZmZXIsMCwwLG8pLGUuc3Vic3RyaW5nKDAsaSl9cmV0dXJuIGV9LHUucHJvdG90eXBlLmRldGVjdEluY29tcGxldGVDaGFyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aD49Mz8zOnQubGVuZ3RoO2U+MDtlLS0pe3ZhciByPXRbdC5sZW5ndGgtZV07aWYoMT09ZSYmcj4+NT09Nil7dGhpcy5jaGFyTGVuZ3RoPTI7YnJlYWt9aWYoZTw9MiYmcj4+ND09MTQpe3RoaXMuY2hhckxlbmd0aD0zO2JyZWFrfWlmKGU8PTMmJnI+PjM9PTMwKXt0aGlzLmNoYXJMZW5ndGg9NDticmVha319dGhpcy5jaGFyUmVjZWl2ZWQ9ZX0sdS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPVwiXCI7aWYodCYmdC5sZW5ndGgmJihlPXRoaXMud3JpdGUodCkpLHRoaXMuY2hhclJlY2VpdmVkKXt2YXIgcj10aGlzLmNoYXJSZWNlaXZlZCxuPXRoaXMuY2hhckJ1ZmZlcixpPXRoaXMuZW5jb2Rpbmc7ZSs9bi5zbGljZSgwLHIpLnRvU3RyaW5nKGkpfXJldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG5yZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcInVuc2NvcGFibGVzXCIpLGk9QXJyYXkucHJvdG90eXBlO3ZvaWQgMD09aVtuXSYmcigxNCkoaSxuLHt9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aVtuXVt0XT0hMH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMzKSxpPXIoMTc2KSxvPXIoMTI1KSxhPXIoMyksZj1yKDEwKSxzPXIoMTQyKSx1PXt9LGg9e30sZT10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyxkKXt2YXIgbCxwLGIsdix5PWQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06cyh0KSxtPW4ocixjLGU/MjoxKSxnPTA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgaXRlcmFibGUhXCIpO2lmKG8oeSkpe2ZvcihsPWYodC5sZW5ndGgpO2w+ZztnKyspaWYodj1lP20oYShwPXRbZ10pWzBdLHBbMV0pOm0odFtnXSksdj09PXV8fHY9PT1oKXJldHVybiB2fWVsc2UgZm9yKGI9eS5jYWxsKHQpOyEocD1iLm5leHQoKSkuZG9uZTspaWYodj1pKGIsbSxwLnZhbHVlLGUpLHY9PT11fHx2PT09aClyZXR1cm4gdn07ZS5CUkVBSz11LGUuUkVUVVJOPWh9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXt9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KS5mLGk9cigxMiksbz1yKDcpKFwidG9TdHJpbmdUYWdcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt0JiYhaSh0PXI/dDp0LnByb3RvdHlwZSxvKSYmbih0LG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjQpLG89cig1KSxhPXIoMTM4KSxmPVwiW1wiK2ErXCJdXCIscz1cIuKAi8KFXCIsdT1SZWdFeHAoXCJeXCIrZitmK1wiKlwiKSxoPVJlZ0V4cChmK2YrXCIqJFwiKSxjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxmPW8oZnVuY3Rpb24oKXtyZXR1cm4hIWFbdF0oKXx8c1t0XSgpIT1zfSksdT1pW3RdPWY/ZShkKTphW3RdO3ImJihpW3JdPXUpLG4obi5QK24uRipmLFwiU3RyaW5nXCIsaSl9LGQ9Yy50cmltPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9U3RyaW5nKGkodCkpLDEmZSYmKHQ9dC5yZXBsYWNlKHUsXCJcIikpLDImZSYmKHQ9dC5yZXBsYWNlKGgsXCJcIikpLHR9O3QuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dS5jYWxsKHRoaXMsXCJkaWdlc3RcIiksdGhpcy5faGFzaD10LHRoaXMuYnVmZmVycz1bXX1mdW5jdGlvbiBpKHQpe3UuY2FsbCh0aGlzLFwiZGlnZXN0XCIpLHRoaXMuX2hhc2g9dH12YXIgbz1yKDIpLGE9cigxMDUpLGY9cig1NjcpLHM9cig1NjgpLHU9cig1NjYpO28obix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuYnVmZmVycy5wdXNoKHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD1lLmNvbmNhdCh0aGlzLmJ1ZmZlcnMpLHI9dGhpcy5faGFzaCh0KTtyZXR1cm4gdGhpcy5idWZmZXJzPW51bGwscn0sbyhpLHUpLGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5faGFzaC51cGRhdGUodCl9LGkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLFwibWQ1XCI9PT10P25ldyBuKGEpOlwicm1kMTYwXCI9PT10fHxcInJpcGVtZDE2MFwiPT09dD9uZXcgbihmKTpuZXcgaShzKHQpKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyKXt0aGlzLl9ibG9jaz1uZXcgZSh0KSx0aGlzLl9maW5hbFNpemU9cix0aGlzLl9ibG9ja1NpemU9dCx0aGlzLl9sZW49MCx0aGlzLl9zPTB9ci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJihyPXJ8fFwidXRmOFwiLHQ9bmV3IGUodCxyKSk7Zm9yKHZhciBuPXRoaXMuX2xlbis9dC5sZW5ndGgsaT10aGlzLl9zfHwwLG89MCxhPXRoaXMuX2Jsb2NrO2k8bjspe2Zvcih2YXIgZj1NYXRoLm1pbih0Lmxlbmd0aCxvK3RoaXMuX2Jsb2NrU2l6ZS1pJXRoaXMuX2Jsb2NrU2l6ZSkscz1mLW8sdT0wO3U8czt1KyspYVtpJXRoaXMuX2Jsb2NrU2l6ZSt1XT10W3Urb107aSs9cyxvKz1zLGkldGhpcy5fYmxvY2tTaXplPT09MCYmdGhpcy5fdXBkYXRlKGEpfXJldHVybiB0aGlzLl9zPWksdGhpc30sci5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPTgqdGhpcy5fbGVuO3RoaXMuX2Jsb2NrW3RoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemVdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZSsxKSxlJSg4KnRoaXMuX2Jsb2NrU2l6ZSk+PTgqdGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKSx0aGlzLl9ibG9jay53cml0ZUludDMyQkUoZSx0aGlzLl9ibG9ja1NpemUtNCk7dmFyIHI9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKXx8dGhpcy5faGFzaCgpO3JldHVybiB0P3IudG9TdHJpbmcodCk6cn0sci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc1wiKX0sdC5leHBvcnRzPXJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUscixuKXtmdW5jdGlvbiBpKCl7dGhyb3cgbmV3IEVycm9yKFwic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTFcIil9ZnVuY3Rpb24gbyh0LGkpe2lmKHQ+NjU1MzYpdGhyb3cgbmV3IEVycm9yKFwicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlc1wiKTt2YXIgbz1uZXcgZS5VaW50OEFycmF5KHQpO3Q+MCYmYS5nZXRSYW5kb21WYWx1ZXMobyk7dmFyIGY9bmV3IHIoby5idWZmZXIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGk/bi5uZXh0VGljayhmdW5jdGlvbigpe2kobnVsbCxmKX0pOmZ9dmFyIGE9ZS5jcnlwdG98fGUubXNDcnlwdG87YSYmYS5nZXRSYW5kb21WYWx1ZXM/dC5leHBvcnRzPW86dC5leHBvcnRzPWl9KS5jYWxsKGUscigzOSkscigxKS5CdWZmZXIscigyNikpfSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBpKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSk7dmFyIGk9bih0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5jYWxsKHRoaXMpKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJtZXNzYWdlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnZvaWQgMCE9PXQ/U3RyaW5nKHQpOlwiXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6aS5jb25zdHJ1Y3Rvci5uYW1lfSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGksaS5jb25zdHJ1Y3RvciksaX1yZXR1cm4gaShlLHQpLGV9KEVycm9yKTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDExNSksYT1yKDc1KSxmPXIoOTApLHM9cig5MSksdT1yKDIwMSksaD1yKDExNiksYz1yKDE1OSksZD1yKDExMyksbD0vXmNmOihbMS05YS1mXVswLTlhLWZdezAsM318MCk6W2EtekEtWjAtOV8tXSokLyxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LFt7a2V5OlwiZ2V0VHlwZUlkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5UWVBFX0lEfX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLkZFQVRVUkVfQklUTUFTS319LHtrZXk6XCJnZXRDb25kaXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBhO3JldHVybiB0LnNldFR5cGVJZCh0aGlzLmdldFR5cGVJZCgpKSx0LnNldEJpdG1hc2sodGhpcy5nZXRCaXRtYXNrKCkpLHQuc2V0SGFzaCh0aGlzLmdlbmVyYXRlSGFzaCgpKSx0LnNldE1heEZ1bGZpbGxtZW50TGVuZ3RoKHRoaXMuY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGgoKSksdH19LHtrZXk6XCJnZXRDb25kaXRpb25VcmlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENvbmRpdGlvbigpLnNlcmlhbGl6ZVVyaSgpfX0se2tleTpcImdldENvbmRpdGlvbkJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uKCkuc2VyaWFsaXplQmluYXJ5KCl9fSx7a2V5OlwiZ2VuZXJhdGVIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzc1wiKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGY7cmV0dXJuIHRoaXMud3JpdGVQYXlsb2FkKHQpLHQuZ2V0U2l6ZSgpfX0se2tleTpcInNlcmlhbGl6ZVVyaVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJjZjpcIit0aGlzLmdldFR5cGVJZCgpLnRvU3RyaW5nKDE2KStcIjpcIitoLmVuY29kZSh0aGlzLnNlcmlhbGl6ZVBheWxvYWQoKSl9fSx7a2V5Olwic2VyaWFsaXplQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcztyZXR1cm4gdC53cml0ZVVJbnQxNih0aGlzLmdldFR5cGVJZCgpKSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5zZXJpYWxpemVQYXlsb2FkKCkpLHQuZ2V0QnVmZmVyKCl9fSx7a2V5Olwic2VyaWFsaXplUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHM7cmV0dXJuIHRoaXMud3JpdGVQYXlsb2FkKHQpLHQuZ2V0QnVmZmVyKCl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX19XSxbe2tleTpcImZyb21VcmlcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdClyZXR1cm4gZTtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJTZXJpYWxpemVkIGZ1bGZpbGxtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7dmFyIHI9ZS5zcGxpdChcIjpcIik7aWYoXCJjZlwiIT09clswXSl0aHJvdyBuZXcgYygnU2VyaWFsaXplZCBmdWxmaWxsbWVudCBtdXN0IHN0YXJ0IHdpdGggXCJjZjpcIicpO2lmKCF0LlJFR0VYLmV4ZWMoZSkpdGhyb3cgbmV3IGQoXCJJbnZhbGlkIGZ1bGZpbGxtZW50IGZvcm1hdFwiKTt2YXIgbj1wYXJzZUludChyWzFdLDE2KSxpPWguZGVjb2RlKHJbMl0pLGE9by5nZXRDbGFzc0Zyb21UeXBlSWQobiksZj1uZXcgYTtyZXR1cm4gZi5wYXJzZVBheWxvYWQodS5mcm9tKGkpLGkubGVuZ3RoKSxmfX0se2tleTpcImZyb21CaW5hcnlcIix2YWx1ZTpmdW5jdGlvbih0KXt0PXUuZnJvbSh0KTt2YXIgZT1vLmdldENsYXNzRnJvbVR5cGVJZCh0LnJlYWRVSW50MTYoKSkscj1uZXcgZSxuPXQucmVhZExlbmd0aFByZWZpeCgpO3JldHVybiByLnBhcnNlUGF5bG9hZCh0LG4pLHJ9fV0pLHR9KCk7cC5SRUdFWD1sLHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyksaT1yKDcpKFwidG9TdHJpbmdUYWdcIiksbz1cIkFyZ3VtZW50c1wiPT1uKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksYT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixmO3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKHI9YShlPU9iamVjdCh0KSxpKSk/cjpvP24oZSk6XCJPYmplY3RcIj09KGY9bihlKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2FsbGVlP1wiQXJndW1lbnRzXCI6Zn19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09bih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsZSl7ZS5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCksaT1uZXcgZShuKSxvPTA7bzxuOysrbylpW29dPXRbb11ecltvXTtyZXR1cm4gaX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLlJlcG9ydGVyPXIoNTMyKS5SZXBvcnRlcixuLkRlY29kZXJCdWZmZXI9cigyMTQpLkRlY29kZXJCdWZmZXIsbi5FbmNvZGVyQnVmZmVyPXIoMjE0KS5FbmNvZGVyQnVmZmVyLG4uTm9kZT1yKDUzMSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSxpPW5ldyBlKG4pLG89MDtvPG47KytvKWlbb109dFtvXV5yW29dO3JldHVybiBpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIG8uaXNCTih0KT90Oih0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCx2b2lkKG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSkpKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGk7bysrKXt2YXIgYT10LmNoYXJDb2RlQXQobyktNDg7bjw8PTQsbnw9YT49NDkmJmE8PTU0P2EtNDkrMTA6YT49MTcmJmE8PTIyP2EtMTcrMTA6MTUmYX1yZXR1cm4gbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8bzthKyspe3ZhciBmPXQuY2hhckNvZGVBdChhKS00ODtpKj1uLGkrPWY+PTQ5P2YtNDkrMTA6Zj49MTc/Zi0xNysxMDpmfXJldHVybiBpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLG89MHxlLndvcmRzWzBdLGE9aSpvLGY9NjcxMDg4NjMmYSxzPWEvNjcxMDg4NjR8MDtyLndvcmRzWzBdPWY7Zm9yKHZhciB1PTE7dTxuO3UrKyl7Zm9yKHZhciBoPXM+Pj4yNixjPTY3MTA4ODYzJnMsZD1NYXRoLm1pbih1LGUubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCx1LXQubGVuZ3RoKzEpO2w8PWQ7bCsrKXt2YXIgcD11LWx8MDtpPTB8dC53b3Jkc1twXSxvPTB8ZS53b3Jkc1tsXSxhPWkqbytjLGgrPWEvNjcxMDg4NjR8MCxjPTY3MTA4ODYzJmF9ci53b3Jkc1t1XT0wfGMscz0wfGh9cmV0dXJuIDAhPT1zP3Iud29yZHNbdV09MHxzOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGgodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxvPTA7bzxyLmxlbmd0aC0xO28rKyl7dmFyIGE9aTtpPTA7Zm9yKHZhciBmPTY3MTA4ODYzJm4scz1NYXRoLm1pbihvLGUubGVuZ3RoLTEpLHU9TWF0aC5tYXgoMCxvLXQubGVuZ3RoKzEpO3U8PXM7dSsrKXt2YXIgaD1vLXUsYz0wfHQud29yZHNbaF0sZD0wfGUud29yZHNbdV0sbD1jKmQscD02NzEwODg2MyZsO2E9YSsobC82NzEwODg2NHwwKXwwLHA9cCtmfDAsZj02NzEwODg2MyZwLGE9YSsocD4+PjI2KXwwLGkrPWE+Pj4yNixhJj02NzEwODg2M31yLndvcmRzW29dPWYsbj1hLGE9aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1tvXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLm11bHAodCxlLHIpfWZ1bmN0aW9uIGQodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBsKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBvKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBvKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7bC5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiBiKCl7bC5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiB2KCl7bC5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiB5KCl7bC5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBtKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT1vLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGcodCl7bS5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9PTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IG8oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPW86ZS5CTj1vLG8uQk49byxvLndvcmRTaXplPTI2O3ZhciB3O3RyeXt3PXIoMSkuQnVmZmVyfWNhdGNoKHQpe31vLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvfHxudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1vLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxvLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sby5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LG8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7XCJoZXhcIj09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKTt2YXIgaT0wO1wiLVwiPT09dFswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksXCItXCI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgbyxhLGY9MDtpZihcImJlXCI9PT1yKWZvcihpPXQubGVuZ3RoLTEsbz0wO2k+PTA7aS09MylhPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO2Vsc2UgaWYoXCJsZVwiPT09cilmb3IoaT0wLG89MDtpPHQubGVuZ3RoO2krPTMpYT10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxvPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9YSh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyxvKz0yNCxvPj0yNiYmKG8tPTI2LG4rKyk7cis2IT09ZSYmKGk9YSh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIG89dC5sZW5ndGgtcixhPW8lbixzPU1hdGgubWluKG8sby1hKStyLHU9MCxoPXI7aDxzO2grPW4pdT1mKHQsaCxoK24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KTtpZigwIT09YSl7dmFyIGM9MTtmb3IodT1mKHQsaCx0Lmxlbmd0aCxlKSxoPTA7aDxhO2grKyljKj1lO3RoaXMuaW11bG4oYyksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSl9fSxvLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sby5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxvLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD9cIjxCTi1SOiBcIjpcIjxCTjogXCIpK3RoaXMudG9TdHJpbmcoMTYpK1wiPlwifTt2YXIgXz1bXCJcIixcIjBcIixcIjAwXCIsXCIwMDBcIixcIjAwMDBcIixcIjAwMDAwXCIsXCIwMDAwMDBcIixcIjAwMDAwMDBcIixcIjAwMDAwMDAwXCIsXCIwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIl0sTT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxTPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO28ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9dGhpcy53b3Jkc1thXSxzPSgxNjc3NzIxNSYoZjw8aXxvKSkudG9TdHJpbmcoMTYpO289Zj4+PjI0LWkmMTY3NzcyMTUscj0wIT09b3x8YSE9PXRoaXMubGVuZ3RoLTE/X1s2LXMubGVuZ3RoXStzK3I6cytyLGkrPTIsaT49MjYmJihpLT0yNixhLS0pfWZvcigwIT09byYmKHI9by50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9TVt0XSxoPVNbdF07cj1cIlwiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIGQ9Yy5tb2RuKGgpLnRvU3RyaW5nKHQpO2M9Yy5pZGl2bihoKSxyPWMuaXNaZXJvKCk/ZCtyOl9bdS1kLmxlbmd0aF0rZCtyfWZvcih0aGlzLmlzWmVybygpJiYocj1cIjBcIityKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sby5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sby5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgdyksdGhpcy50b0FycmF5TGlrZSh3LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksbz1yfHxNYXRoLm1heCgxLGkpO24oaTw9byxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihvPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBhLGYscz1cImxlXCI9PT1lLHU9bmV3IHQobyksaD10aGlzLmNsb25lKCk7aWYocyl7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtmXT1hO2Zvcig7ZjxvO2YrKyl1W2ZdPTB9ZWxzZXtmb3IoZj0wO2Y8by1pO2YrKyl1W2ZdPTA7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtvLWYtMV09YX1yZXR1cm4gdX0sTWF0aC5jbHozMj9vLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTpvLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sby5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sby5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sby5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sby5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LG8ucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LG8ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LG8ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksZT90aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3ZhciByLG47dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSktKDB8aS53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtmb3IoOzAhPT1vJiZhPG4ubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9dC53b3JkcyxmPWUud29yZHMscz1yLndvcmRzLHU9MCxoPTB8YVswXSxjPTgxOTEmaCxkPWg+Pj4xMyxsPTB8YVsxXSxwPTgxOTEmbCxiPWw+Pj4xMyx2PTB8YVsyXSx5PTgxOTEmdixtPXY+Pj4xMyxnPTB8YVszXSx3PTgxOTEmZyxfPWc+Pj4xMyxNPTB8YVs0XSxTPTgxOTEmTSxFPU0+Pj4xMyxBPTB8YVs1XSxrPTgxOTEmQSx4PUE+Pj4xMyxJPTB8YVs2XSxCPTgxOTEmSSxPPUk+Pj4xMyxSPTB8YVs3XSxQPTgxOTEmUixUPVI+Pj4xMyxqPTB8YVs4XSxDPTgxOTEmaixOPWo+Pj4xMyxMPTB8YVs5XSxVPTgxOTEmTCx6PUw+Pj4xMyxEPTB8ZlswXSxxPTgxOTEmRCxGPUQ+Pj4xMyxLPTB8ZlsxXSxHPTgxOTEmSyxWPUs+Pj4xMyxIPTB8ZlsyXSxYPTgxOTEmSCxZPUg+Pj4xMyxXPTB8ZlszXSxaPTgxOTEmVyxKPVc+Pj4xMywkPTB8Zls0XSxRPTgxOTEmJCx0dD0kPj4+MTMsZXQ9MHxmWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfGZbNl0sb3Q9ODE5MSZpdCxhdD1pdD4+PjEzLGZ0PTB8Zls3XSxzdD04MTkxJmZ0LHV0PWZ0Pj4+MTMsaHQ9MHxmWzhdLGN0PTgxOTEmaHQsZHQ9aHQ+Pj4xMyxsdD0wfGZbOV0scHQ9ODE5MSZsdCxidD1sdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5LG49TWF0aC5pbXVsKGMscSksaT1NYXRoLmltdWwoYyxGKSxpPWkrTWF0aC5pbXVsKGQscSl8MCxvPU1hdGguaW11bChkLEYpO3ZhciB2dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwocCxxKSxpPU1hdGguaW11bChwLEYpLGk9aStNYXRoLmltdWwoYixxKXwwLG89TWF0aC5pbXVsKGIsRiksbj1uK01hdGguaW11bChjLEcpfDAsaT1pK01hdGguaW11bChjLFYpfDAsaT1pK01hdGguaW11bChkLEcpfDAsbz1vK01hdGguaW11bChkLFYpfDA7dmFyIHl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bCh5LHEpLGk9TWF0aC5pbXVsKHksRiksaT1pK01hdGguaW11bChtLHEpfDAsbz1NYXRoLmltdWwobSxGKSxuPW4rTWF0aC5pbXVsKHAsRyl8MCxpPWkrTWF0aC5pbXVsKHAsVil8MCxpPWkrTWF0aC5pbXVsKGIsRyl8MCxvPW8rTWF0aC5pbXVsKGIsVil8MCxuPW4rTWF0aC5pbXVsKGMsWCl8MCxpPWkrTWF0aC5pbXVsKGMsWSl8MCxpPWkrTWF0aC5pbXVsKGQsWCl8MCxvPW8rTWF0aC5pbXVsKGQsWSl8MDt2YXIgbXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHcscSksaT1NYXRoLmltdWwodyxGKSxpPWkrTWF0aC5pbXVsKF8scSl8MCxvPU1hdGguaW11bChfLEYpLG49bitNYXRoLmltdWwoeSxHKXwwLGk9aStNYXRoLmltdWwoeSxWKXwwLGk9aStNYXRoLmltdWwobSxHKXwwLG89bytNYXRoLmltdWwobSxWKXwwLG49bitNYXRoLmltdWwocCxYKXwwLGk9aStNYXRoLmltdWwocCxZKXwwLGk9aStNYXRoLmltdWwoYixYKXwwLG89bytNYXRoLmltdWwoYixZKXwwLG49bitNYXRoLmltdWwoYyxaKXwwLGk9aStNYXRoLmltdWwoYyxKKXwwLGk9aStNYXRoLmltdWwoZCxaKXwwLG89bytNYXRoLmltdWwoZCxKKXwwO3ZhciBndD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUyxxKSxpPU1hdGguaW11bChTLEYpLGk9aStNYXRoLmltdWwoRSxxKXwwLG89TWF0aC5pbXVsKEUsRiksbj1uK01hdGguaW11bCh3LEcpfDAsaT1pK01hdGguaW11bCh3LFYpfDAsaT1pK01hdGguaW11bChfLEcpfDAsbz1vK01hdGguaW11bChfLFYpfDAsbj1uK01hdGguaW11bCh5LFgpfDAsaT1pK01hdGguaW11bCh5LFkpfDAsaT1pK01hdGguaW11bChtLFgpfDAsbz1vK01hdGguaW11bChtLFkpfDAsbj1uK01hdGguaW11bChwLFopfDAsaT1pK01hdGguaW11bChwLEopfDAsaT1pK01hdGguaW11bChiLFopfDAsbz1vK01hdGguaW11bChiLEopfDAsbj1uK01hdGguaW11bChjLFEpfDAsaT1pK01hdGguaW11bChjLHR0KXwwLGk9aStNYXRoLmltdWwoZCxRKXwwLG89bytNYXRoLmltdWwoZCx0dCl8MDt2YXIgd3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGsscSksaT1NYXRoLmltdWwoayxGKSxpPWkrTWF0aC5pbXVsKHgscSl8MCxvPU1hdGguaW11bCh4LEYpLG49bitNYXRoLmltdWwoUyxHKXwwLGk9aStNYXRoLmltdWwoUyxWKXwwLGk9aStNYXRoLmltdWwoRSxHKXwwLG89bytNYXRoLmltdWwoRSxWKXwwLG49bitNYXRoLmltdWwodyxYKXwwLGk9aStNYXRoLmltdWwodyxZKXwwLGk9aStNYXRoLmltdWwoXyxYKXwwLG89bytNYXRoLmltdWwoXyxZKXwwLG49bitNYXRoLmltdWwoeSxaKXwwLGk9aStNYXRoLmltdWwoeSxKKXwwLGk9aStNYXRoLmltdWwobSxaKXwwLG89bytNYXRoLmltdWwobSxKKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9aStNYXRoLmltdWwocCx0dCl8MCxpPWkrTWF0aC5pbXVsKGIsUSl8MCxvPW8rTWF0aC5pbXVsKGIsdHQpfDAsbj1uK01hdGguaW11bChjLHJ0KXwwLGk9aStNYXRoLmltdWwoYyxudCl8MCxpPWkrTWF0aC5pbXVsKGQscnQpfDAsbz1vK01hdGguaW11bChkLG50KXwwO3ZhciBfdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPU1hdGguaW11bChCLEYpLGk9aStNYXRoLmltdWwoTyxxKXwwLG89TWF0aC5pbXVsKE8sRiksbj1uK01hdGguaW11bChrLEcpfDAsaT1pK01hdGguaW11bChrLFYpfDAsaT1pK01hdGguaW11bCh4LEcpfDAsbz1vK01hdGguaW11bCh4LFYpfDAsbj1uK01hdGguaW11bChTLFgpfDAsaT1pK01hdGguaW11bChTLFkpfDAsaT1pK01hdGguaW11bChFLFgpfDAsbz1vK01hdGguaW11bChFLFkpfDAsbj1uK01hdGguaW11bCh3LFopfDAsaT1pK01hdGguaW11bCh3LEopfDAsaT1pK01hdGguaW11bChfLFopfDAsbz1vK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLGk9aStNYXRoLmltdWwobSxRKXwwLG89bytNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT1pK01hdGguaW11bChwLG50KXwwLGk9aStNYXRoLmltdWwoYixydCl8MCxvPW8rTWF0aC5pbXVsKGIsbnQpfDAsbj1uK01hdGguaW11bChjLG90KXwwLGk9aStNYXRoLmltdWwoYyxhdCl8MCxpPWkrTWF0aC5pbXVsKGQsb3QpfDAsbz1vK01hdGguaW11bChkLGF0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxxKSxpPU1hdGguaW11bChQLEYpLGk9aStNYXRoLmltdWwoVCxxKXwwLG89TWF0aC5pbXVsKFQsRiksbj1uK01hdGguaW11bChCLEcpfDAsaT1pK01hdGguaW11bChCLFYpfDAsaT1pK01hdGguaW11bChPLEcpfDAsbz1vK01hdGguaW11bChPLFYpfDAsbj1uK01hdGguaW11bChrLFgpfDAsaT1pK01hdGguaW11bChrLFkpfDAsaT1pK01hdGguaW11bCh4LFgpfDAsbz1vK01hdGguaW11bCh4LFkpfDAsbj1uK01hdGguaW11bChTLFopfDAsaT1pK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChFLFopfDAsbz1vK01hdGguaW11bChFLEopfDAsbj1uK01hdGguaW11bCh3LFEpfDAsaT1pK01hdGguaW11bCh3LHR0KXwwLGk9aStNYXRoLmltdWwoXyxRKXwwLG89bytNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT1pK01hdGguaW11bCh5LG50KXwwLGk9aStNYXRoLmltdWwobSxydCl8MCxvPW8rTWF0aC5pbXVsKG0sbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwocCxhdCl8MCxpPWkrTWF0aC5pbXVsKGIsb3QpfDAsbz1vK01hdGguaW11bChiLGF0KXwwLG49bitNYXRoLmltdWwoYyxzdCl8MCxpPWkrTWF0aC5pbXVsKGMsdXQpfDAsaT1pK01hdGguaW11bChkLHN0KXwwLG89bytNYXRoLmltdWwoZCx1dCl8MDt2YXIgU3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMscSksaT1NYXRoLmltdWwoQyxGKSxpPWkrTWF0aC5pbXVsKE4scSl8MCxvPU1hdGguaW11bChOLEYpLG49bitNYXRoLmltdWwoUCxHKXwwLGk9aStNYXRoLmltdWwoUCxWKXwwLGk9aStNYXRoLmltdWwoVCxHKXwwLG89bytNYXRoLmltdWwoVCxWKXwwLG49bitNYXRoLmltdWwoQixYKXwwLGk9aStNYXRoLmltdWwoQixZKXwwLGk9aStNYXRoLmltdWwoTyxYKXwwLG89bytNYXRoLmltdWwoTyxZKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9aStNYXRoLmltdWwoayxKKXwwLGk9aStNYXRoLmltdWwoeCxaKXwwLG89bytNYXRoLmltdWwoeCxKKXwwLG49bitNYXRoLmltdWwoUyxRKXwwLGk9aStNYXRoLmltdWwoUyx0dCl8MCxpPWkrTWF0aC5pbXVsKEUsUSl8MCxvPW8rTWF0aC5pbXVsKEUsdHQpfDAsbj1uK01hdGguaW11bCh3LHJ0KXwwLGk9aStNYXRoLmltdWwodyxudCl8MCxpPWkrTWF0aC5pbXVsKF8scnQpfDAsbz1vK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsaT1pK01hdGguaW11bChtLG90KXwwLG89bytNYXRoLmltdWwobSxhdCl8MCxuPW4rTWF0aC5pbXVsKHAsc3QpfDAsaT1pK01hdGguaW11bChwLHV0KXwwLGk9aStNYXRoLmltdWwoYixzdCl8MCxvPW8rTWF0aC5pbXVsKGIsdXQpfDAsbj1uK01hdGguaW11bChjLGN0KXwwLGk9aStNYXRoLmltdWwoYyxkdCl8MCxpPWkrTWF0aC5pbXVsKGQsY3QpfDAsbz1vK01hdGguaW11bChkLGR0KXwwO3ZhciBFdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxxKSxpPU1hdGguaW11bChVLEYpLGk9aStNYXRoLmltdWwoeixxKXwwLG89TWF0aC5pbXVsKHosRiksbj1uK01hdGguaW11bChDLEcpfDAsaT1pK01hdGguaW11bChDLFYpfDAsaT1pK01hdGguaW11bChOLEcpfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChQLFgpfDAsaT1pK01hdGguaW11bChQLFkpfDAsaT1pK01hdGguaW11bChULFgpfDAsbz1vK01hdGguaW11bChULFkpfDAsbj1uK01hdGguaW11bChCLFopfDAsaT1pK01hdGguaW11bChCLEopfDAsaT1pK01hdGguaW11bChPLFopfDAsbz1vK01hdGguaW11bChPLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT1pK01hdGguaW11bChrLHR0KXwwLGk9aStNYXRoLmltdWwoeCxRKXwwLG89bytNYXRoLmltdWwoeCx0dCl8MCxuPW4rTWF0aC5pbXVsKFMscnQpfDAsaT1pK01hdGguaW11bChTLG50KXwwLGk9aStNYXRoLmltdWwoRSxydCl8MCxvPW8rTWF0aC5pbXVsKEUsbnQpfDAsbj1uK01hdGguaW11bCh3LG90KXwwLGk9aStNYXRoLmltdWwodyxhdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbz1vK01hdGguaW11bChfLGF0KXwwLG49bitNYXRoLmltdWwoeSxzdCl8MCxpPWkrTWF0aC5pbXVsKHksdXQpfDAsaT1pK01hdGguaW11bChtLHN0KXwwLG89bytNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKHAsY3QpfDAsaT1pK01hdGguaW11bChwLGR0KXwwLGk9aStNYXRoLmltdWwoYixjdCl8MCxvPW8rTWF0aC5pbXVsKGIsZHQpfDAsbj1uK01hdGguaW11bChjLHB0KXwwLGk9aStNYXRoLmltdWwoYyxidCl8MCxpPWkrTWF0aC5pbXVsKGQscHQpfDAsbz1vK01hdGguaW11bChkLGJ0KXwwO3ZhciBBdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxHKSxpPU1hdGguaW11bChVLFYpLGk9aStNYXRoLmltdWwoeixHKXwwLG89TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLFgpfDAsaT1pK01hdGguaW11bChDLFkpfDAsaT1pK01hdGguaW11bChOLFgpfDAsbz1vK01hdGguaW11bChOLFkpfDAsbj1uK01hdGguaW11bChQLFopfDAsaT1pK01hdGguaW11bChQLEopfDAsaT1pK01hdGguaW11bChULFopfDAsbz1vK01hdGguaW11bChULEopfDAsbj1uK01hdGguaW11bChCLFEpfDAsaT1pK01hdGguaW11bChCLHR0KXwwLGk9aStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT1pK01hdGguaW11bChrLG50KXwwLGk9aStNYXRoLmltdWwoeCxydCl8MCxvPW8rTWF0aC5pbXVsKHgsbnQpfDAsbj1uK01hdGguaW11bChTLG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxpPWkrTWF0aC5pbXVsKEUsb3QpfDAsbz1vK01hdGguaW11bChFLGF0KXwwLG49bitNYXRoLmltdWwodyxzdCl8MCxpPWkrTWF0aC5pbXVsKHcsdXQpfDAsaT1pK01hdGguaW11bChfLHN0KXwwLG89bytNYXRoLmltdWwoXyx1dCl8MCxuPW4rTWF0aC5pbXVsKHksY3QpfDAsaT1pK01hdGguaW11bCh5LGR0KXwwLGk9aStNYXRoLmltdWwobSxjdCl8MCxvPW8rTWF0aC5pbXVsKG0sZHQpfDAsbj1uK01hdGguaW11bChwLHB0KXwwLGk9aStNYXRoLmltdWwocCxidCl8MCxpPWkrTWF0aC5pbXVsKGIscHQpfDAsbz1vK01hdGguaW11bChiLGJ0KXwwO3ZhciBrdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxYKSxpPU1hdGguaW11bChVLFkpLGk9aStNYXRoLmltdWwoeixYKXwwLG89TWF0aC5pbXVsKHosWSksbj1uK01hdGguaW11bChDLFopfDAsaT1pK01hdGguaW11bChDLEopfDAsaT1pK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLEopfDAsbj1uK01hdGguaW11bChQLFEpfDAsaT1pK01hdGguaW11bChQLHR0KXwwLGk9aStNYXRoLmltdWwoVCxRKXwwLG89bytNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKEIscnQpfDAsaT1pK01hdGguaW11bChCLG50KXwwLGk9aStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChrLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxpPWkrTWF0aC5pbXVsKHgsb3QpfDAsbz1vK01hdGguaW11bCh4LGF0KXwwLG49bitNYXRoLmltdWwoUyxzdCl8MCxpPWkrTWF0aC5pbXVsKFMsdXQpfDAsaT1pK01hdGguaW11bChFLHN0KXwwLG89bytNYXRoLmltdWwoRSx1dCl8MCxuPW4rTWF0aC5pbXVsKHcsY3QpfDAsaT1pK01hdGguaW11bCh3LGR0KXwwLGk9aStNYXRoLmltdWwoXyxjdCl8MCxvPW8rTWF0aC5pbXVsKF8sZHQpfDAsbj1uK01hdGguaW11bCh5LHB0KXwwLGk9aStNYXRoLmltdWwoeSxidCl8MCxpPWkrTWF0aC5pbXVsKG0scHQpfDAsbz1vK01hdGguaW11bChtLGJ0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxaKSxpPU1hdGguaW11bChVLEopLGk9aStNYXRoLmltdWwoeixaKXwwLG89TWF0aC5pbXVsKHosSiksbj1uK01hdGguaW11bChDLFEpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLGk9aStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT1pK01hdGguaW11bChQLG50KXwwLGk9aStNYXRoLmltdWwoVCxydCl8MCxvPW8rTWF0aC5pbXVsKFQsbnQpfDAsbj1uK01hdGguaW11bChCLG90KXwwLGk9aStNYXRoLmltdWwoQixhdCl8MCxpPWkrTWF0aC5pbXVsKE8sb3QpfDAsbz1vK01hdGguaW11bChPLGF0KXwwLG49bitNYXRoLmltdWwoayxzdCl8MCxpPWkrTWF0aC5pbXVsKGssdXQpfDAsaT1pK01hdGguaW11bCh4LHN0KXwwLG89bytNYXRoLmltdWwoeCx1dCl8MCxuPW4rTWF0aC5pbXVsKFMsY3QpfDAsaT1pK01hdGguaW11bChTLGR0KXwwLGk9aStNYXRoLmltdWwoRSxjdCl8MCxvPW8rTWF0aC5pbXVsKEUsZHQpfDAsbj1uK01hdGguaW11bCh3LHB0KXwwLGk9aStNYXRoLmltdWwodyxidCl8MCxpPWkrTWF0aC5pbXVsKF8scHQpfDAsbz1vK01hdGguaW11bChfLGJ0KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxRKSxpPU1hdGguaW11bChVLHR0KSxpPWkrTWF0aC5pbXVsKHosUSl8MCxvPU1hdGguaW11bCh6LHR0KSxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT1pK01hdGguaW11bChDLG50KXwwLGk9aStNYXRoLmltdWwoTixydCl8MCxvPW8rTWF0aC5pbXVsKE4sbnQpfDAsbj1uK01hdGguaW11bChQLG90KXwwLGk9aStNYXRoLmltdWwoUCxhdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbz1vK01hdGguaW11bChULGF0KXwwLG49bitNYXRoLmltdWwoQixzdCl8MCxpPWkrTWF0aC5pbXVsKEIsdXQpfDAsaT1pK01hdGguaW11bChPLHN0KXwwLG89bytNYXRoLmltdWwoTyx1dCl8MCxuPW4rTWF0aC5pbXVsKGssY3QpfDAsaT1pK01hdGguaW11bChrLGR0KXwwLGk9aStNYXRoLmltdWwoeCxjdCl8MCxvPW8rTWF0aC5pbXVsKHgsZHQpfDAsbj1uK01hdGguaW11bChTLHB0KXwwLGk9aStNYXRoLmltdWwoUyxidCl8MCxpPWkrTWF0aC5pbXVsKEUscHQpfDAsbz1vK01hdGguaW11bChFLGJ0KXwwO3ZhciBCdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxydCksaT1NYXRoLmltdWwoVSxudCksaT1pK01hdGguaW11bCh6LHJ0KXwwLG89TWF0aC5pbXVsKHosbnQpLG49bitNYXRoLmltdWwoQyxvdCl8MCxpPWkrTWF0aC5pbXVsKEMsYXQpfDAsaT1pK01hdGguaW11bChOLG90KXwwLG89bytNYXRoLmltdWwoTixhdCl8MCxuPW4rTWF0aC5pbXVsKFAsc3QpfDAsaT1pK01hdGguaW11bChQLHV0KXwwLGk9aStNYXRoLmltdWwoVCxzdCl8MCxvPW8rTWF0aC5pbXVsKFQsdXQpfDAsbj1uK01hdGguaW11bChCLGN0KXwwLGk9aStNYXRoLmltdWwoQixkdCl8MCxpPWkrTWF0aC5pbXVsKE8sY3QpfDAsbz1vK01hdGguaW11bChPLGR0KXwwLG49bitNYXRoLmltdWwoayxwdCl8MCxpPWkrTWF0aC5pbXVsKGssYnQpfDAsaT1pK01hdGguaW11bCh4LHB0KXwwLG89bytNYXRoLmltdWwoeCxidCl8MDt2YXIgT3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsb3QpLGk9TWF0aC5pbXVsKFUsYXQpLGk9aStNYXRoLmltdWwoeixvdCl8MCxvPU1hdGguaW11bCh6LGF0KSxuPW4rTWF0aC5pbXVsKEMsc3QpfDAsaT1pK01hdGguaW11bChDLHV0KXwwLGk9aStNYXRoLmltdWwoTixzdCl8MCxvPW8rTWF0aC5pbXVsKE4sdXQpfDAsbj1uK01hdGguaW11bChQLGN0KXwwLGk9aStNYXRoLmltdWwoUCxkdCl8MCxpPWkrTWF0aC5pbXVsKFQsY3QpfDAsbz1vK01hdGguaW11bChULGR0KXwwLG49bitNYXRoLmltdWwoQixwdCl8MCxpPWkrTWF0aC5pbXVsKEIsYnQpfDAsaT1pK01hdGguaW11bChPLHB0KXwwLG89bytNYXRoLmltdWwoTyxidCl8MDt2YXIgUnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFJ0Pj4+MjYpfDAsUnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsc3QpLGk9TWF0aC5pbXVsKFUsdXQpLGk9aStNYXRoLmltdWwoeixzdCl8MCxvPU1hdGguaW11bCh6LHV0KSxuPW4rTWF0aC5pbXVsKEMsY3QpfDAsaT1pK01hdGguaW11bChDLGR0KXwwLGk9aStNYXRoLmltdWwoTixjdCl8MCxvPW8rTWF0aC5pbXVsKE4sZHQpfDAsbj1uK01hdGguaW11bChQLHB0KXwwLGk9aStNYXRoLmltdWwoUCxidCl8MCxpPWkrTWF0aC5pbXVsKFQscHQpfDAsbz1vK01hdGguaW11bChULGJ0KXwwO3ZhciBQdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxjdCksaT1NYXRoLmltdWwoVSxkdCksaT1pK01hdGguaW11bCh6LGN0KXwwLG89TWF0aC5pbXVsKHosZHQpLG49bitNYXRoLmltdWwoQyxwdCl8MCxpPWkrTWF0aC5pbXVsKEMsYnQpfDAsaT1pK01hdGguaW11bChOLHB0KXwwLG89bytNYXRoLmltdWwoTixidCl8MDt2YXIgVHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscHQpLGk9TWF0aC5pbXVsKFUsYnQpLGk9aStNYXRoLmltdWwoeixwdCl8MCxvPU1hdGguaW11bCh6LGJ0KTt2YXIganQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShvKyhpPj4+MTMpfDApKyhqdD4+PjI2KXwwLGp0Jj02NzEwODg2MyxzWzBdPXZ0LHNbMV09eXQsc1syXT1tdCxzWzNdPWd0LHNbNF09d3Qsc1s1XT1fdCxzWzZdPU10LHNbN109U3Qsc1s4XT1FdCxzWzldPUF0LHNbMTBdPWt0LHNbMTFdPXh0LHNbMTJdPUl0LHNbMTNdPUJ0LHNbMTRdPU90LHNbMTVdPVJ0LHNbMTZdPVB0LHNbMTddPVR0LHNbMThdPWp0LDAhPT11JiYoc1sxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChFPXUpLG8ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gcj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP0UodGhpcyx0LGUpOm48NjM/dSh0aGlzLHQsZSk6bjwxMDI0P2godGhpcyx0LGUpOmModGhpcyx0LGUpfSxkLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGQucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxcbmQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LGwhPT1mJiYobT1zKmMtdSpkLGQ9cypkK3UqYyxjPW0pfX0sZC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGQucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGQucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGQucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wO2E8ZTthKyspbys9MHx0W2FdLHJbMiphXT04MTkxJm8sbz4+Pj0xMyxyWzIqYSsxXT04MTkxJm8sbz4+Pj0xMztmb3IoYT0yKmU7YTxpOysrYSlyW2FdPTA7bigwPT09byksbigwPT09KG8mLTgxOTIpKX0sZC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZC5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxhLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLHUsbiksdGhpcy50cmFuc2Zvcm0oYSxvLGYscyxuLGkpLHRoaXMudHJhbnNmb3JtKHUsbyxoLGMsbixpKTtmb3IodmFyIGw9MDtsPG47bCsrKXt2YXIgcD1mW2xdKmhbbF0tc1tsXSpjW2xdO3NbbF09ZltsXSpjW2xdK3NbbF0qaFtsXSxmW2xdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKGYscyxuKSx0aGlzLnRyYW5zZm9ybShmLHMsZCxvLG4saSksdGhpcy5jb25qdWdhdGUoZCxvLG4pLHRoaXMubm9ybWFsaXplMTNiKGQsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LG8ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxjKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LG8ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPW8+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJm99cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sby5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxvLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxvLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBvKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixvPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGE9MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLndvcmRzW2VdJm8scz0oMHx0aGlzLndvcmRzW2VdKS1mPDxyO3RoaXMud29yZHNbZV09c3xhLGE9Zj4+PjI2LXJ9YSYmKHRoaXMud29yZHNbZV09YSx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sby5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgaTtpPWU/KGUtZSUyNikvMjY6MDt2YXIgbz10JTI2LGE9TWF0aC5taW4oKHQtbykvMjYsdGhpcy5sZW5ndGgpLGY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5vPDxvLHM9cjtpZihpLT1hLGk9TWF0aC5tYXgoMCxpKSxzKXtmb3IodmFyIHU9MDt1PGE7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD1hfWlmKDA9PT1hKTtlbHNlIGlmKHRoaXMubGVuZ3RoPmEpZm9yKHRoaXMubGVuZ3RoLT1hLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdSthXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBoPTA7Zm9yKHU9dGhpcy5sZW5ndGgtMTt1Pj0wJiYoMCE9PWh8fHU+PWkpO3UtLSl7dmFyIGM9MHx0aGlzLndvcmRzW3VdO3RoaXMud29yZHNbdV09aDw8MjYtb3xjPj4+byxoPWMmZn1yZXR1cm4gcyYmMCE9PWgmJihzLndvcmRzW3MubGVuZ3RoKytdPWgpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxvLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LG8ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LG8ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxvLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiExO3ZhciBvPXRoaXMud29yZHNbcl07cmV0dXJuISEobyZpKX0sby5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxvLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LG8ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxvLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LG8ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sby5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sby5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LG8ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgYSxmPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK2Y7dmFyIHM9KDB8dC53b3Jkc1tpXSkqZTthLT02NzEwODg2MyZzLGY9KGE+PjI2KS0ocy82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspYT0oMHx0aGlzLndvcmRzW2krcl0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09ZilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKGY9PT0tMSksZj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhPS0oMHx0aGlzLndvcmRzW2ldKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSxmPXRoaXMuX2NvdW50Qml0cyhhKTtyPTI2LWYsMCE9PXImJihpPWkudXNobG4ociksbi5pdXNobG4ociksYT0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLHU9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpe3M9bmV3IG8obnVsbCkscy5sZW5ndGg9dSsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzLndvcmRzW2hdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsdSk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbdV09MSkpO2Zvcih2YXIgZD11LTE7ZD49MDtkLS0pe3ZhciBsPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZF0pKygwfG4ud29yZHNbaS5sZW5ndGgrZC0xXSk7Zm9yKGw9TWF0aC5taW4obC9hfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksbCxkKTswIT09bi5uZWdhdGl2ZTspbC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2RdPWwpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sby5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtpZihuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpKXJldHVybntkaXY6bmV3IG8oMCksbW9kOm5ldyBvKDApfTt2YXIgaSxhLGY7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oZj10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlhZGQodCkpLHtkaXY6aSxtb2Q6YX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8oZj10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSkse2RpdjppLG1vZDpmLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8oZj10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pc3ViKHQpKSx7ZGl2OmYuZGl2LG1vZDphfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoP1wiZGl2XCI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LG8ucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LG8ucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LG8ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxvLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxvPXIuY21wKG4pO3JldHVybiBvPDB8fDE9PT1pJiYwPT09bz9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LG8ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sby5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxvLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9bmV3IG8oMCkscz1uZXcgbygxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgaD1yLmNsb25lKCksYz1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGQ9MCxsPTE7MD09PShlLndvcmRzWzBdJmwpJiZkPDI2OysrZCxsPDw9MSk7aWYoZD4wKWZvcihlLml1c2hybihkKTtkLS0gPjA7KShpLmlzT2RkKCl8fGEuaXNPZGQoKSkmJihpLmlhZGQoaCksYS5pc3ViKGMpKSxpLml1c2hybigxKSxhLml1c2hybigxKTtmb3IodmFyIHA9MCxiPTE7MD09PShyLndvcmRzWzBdJmIpJiZwPDI2OysrcCxiPDw9MSk7aWYocD4wKWZvcihyLml1c2hybihwKTtwLS0gPjA7KShmLmlzT2RkKCl8fHMuaXNPZGQoKSkmJihmLmlhZGQoaCkscy5pc3ViKGMpKSxmLml1c2hybigxKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihmKSxhLmlzdWIocykpOihyLmlzdWIoZSksZi5pc3ViKGkpLHMuaXN1YihhKSl9cmV0dXJue2E6ZixiOnMsZ2NkOnIuaXVzaGxuKHUpfX0sby5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgcz0wLHU9MTswPT09KGUud29yZHNbMF0mdSkmJnM8MjY7KytzLHU8PD0xKTtpZihzPjApZm9yKGUuaXVzaHJuKHMpO3MtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQoZiksaS5pdXNocm4oMSk7Zm9yKHZhciBoPTAsYz0xOzA9PT0oci53b3Jkc1swXSZjKSYmaDwyNjsrK2gsYzw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylhLmlzT2RkKCkmJmEuaWFkZChmKSxhLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihhKSk6KHIuaXN1YihlKSxhLmlzdWIoaSkpfXZhciBkO3JldHVybiBkPTA9PT1lLmNtcG4oMSk/aTphLGQuY21wbigwKTwwJiZkLmlhZGQodCksZH0sby5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBvPWU7ZT1yLHI9b31lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LG8ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LG8ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sby5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgbz1pLGE9cjswIT09byYmYTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPTB8dGhpcy53b3Jkc1thXTtmKz1vLG89Zj4+PjI2LGYmPTY3MTA4ODYzLHRoaXMud29yZHNbYV09Zn1yZXR1cm4gMCE9PW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LG8ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGU9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmZSlyZXR1cm4gMTt0aGlzLnN0cmlwKCk7dmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXtlJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtyPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXI6cn0sby5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LG8ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxvLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LG8ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sby5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sby5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk9PT0tMX0sby5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sby5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sby5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxvLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG0odCl9LG8ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sby5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LG8ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LG8ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LG8ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LG8ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBBPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07bC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbC5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG8gdGhpcy5zcGxpdChyLHRoaXMudG1wKSxyPXRoaXMuaW11bEsocikscj1yLmlhZGQodGhpcy50bXApLGU9ci5iaXRMZW5ndGgoKTt3aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxsLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxsLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkocCxsKSxwLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj00MTk0MzAzLG49TWF0aC5taW4odC5sZW5ndGgsOSksaT0wO2k8bjtpKyspZS53b3Jkc1tpXT10LndvcmRzW2ldO2lmKGUubGVuZ3RoPW4sdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBvPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109byZyLGk9MTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPTB8dC53b3Jkc1tpXTt0LndvcmRzW2ktMTBdPShhJnIpPDw0fG8+Pj4yMixvPWF9bz4+Pj0yMix0LndvcmRzW2ktMTBdPW8sMD09PW8mJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0scC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIsbCksaSh2LGwpLGkoeSxsKSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LG8uX3ByaW1lPWZ1bmN0aW9uIHQoZSl7aWYoQVtlXSlyZXR1cm4gQVtlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgcDtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyBiO2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IHY7ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IHl9cmV0dXJuIEFbZV09dCx0fSxtLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sbS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LG0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sbS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sbS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxtLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgbygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxhPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylhKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGY9bmV3IG8oMSkudG9SZWQodGhpcykscz1mLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGg9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihoPW5ldyBvKDIqaCpoKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coaCx1KS5jbXAocyk7KWgucmVkSUFkZChzKTtmb3IodmFyIGM9dGhpcy5wb3coaCxpKSxkPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksbD10aGlzLnBvdyh0LGkpLHA9YTswIT09bC5jbXAoZik7KXtmb3IodmFyIGI9bCx2PTA7MCE9PWIuY21wKGYpO3YrKyliPWIucmVkU3FyKCk7bih2PHApO3ZhciB5PXRoaXMucG93KGMsbmV3IG8oMSkuaXVzaGxuKHAtdi0xKSk7ZD1kLnJlZE11bCh5KSxjPXkucmVkU3FyKCksbD1sLnJlZE11bChjKSxwPXZ9cmV0dXJuIGR9LG0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPTQsbj1uZXcgQXJyYXkoMTw8cik7blswXT1uZXcgbygxKS50b1JlZCh0aGlzKSxuWzFdPXQ7Zm9yKHZhciBpPTI7aTxuLmxlbmd0aDtpKyspbltpXT10aGlzLm11bChuW2ktMV0sdCk7dmFyIGE9blswXSxmPTAscz0wLHU9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXUmJih1PTI2KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgaD1lLndvcmRzW2ldLGM9dS0xO2M+PTA7Yy0tKXt2YXIgZD1oPj5jJjE7YSE9PW5bMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09ZHx8MCE9PWY/KGY8PD0xLGZ8PWQscysrLChzPT09cnx8MD09PWkmJjA9PT1jKSYmKGE9dGhpcy5tdWwoYSxuW2ZdKSxzPTAsZj0wKSk6cz0wfXU9MjZ9cmV0dXJuIGF9LG0ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LG0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxvLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQpfSxpKGcsbSksZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgdHx8dCx0aGlzKX0pLmNhbGwoZSxyKDkyKSh0KSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uUmVwb3J0ZXI9cig1ODIpLlJlcG9ydGVyLG4uRGVjb2RlckJ1ZmZlcj1yKDIzNCkuRGVjb2RlckJ1ZmZlcixuLkVuY29kZXJCdWZmZXI9cigyMzQpLkVuY29kZXJCdWZmZXIsbi5Ob2RlPXIoNTgxKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLGk9bmV3IGUobiksbz0wO288bjsrK28paVtvXT10W29dXnJbb107cmV0dXJuIGl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkodCk6XCJbb2JqZWN0IEFycmF5XVwiPT09dih0KX1mdW5jdGlvbiBuKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdH1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gZih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiBzKHQpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIltvYmplY3QgUmVnRXhwXVwiPT09dih0KX1mdW5jdGlvbiBjKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBkKHQpe3JldHVyblwiW29iamVjdCBEYXRlXVwiPT09dih0KX1mdW5jdGlvbiBsKHQpe3JldHVyblwiW29iamVjdCBFcnJvcl1cIj09PXYodCl8fHQgaW5zdGFuY2VvZiBFcnJvcn1mdW5jdGlvbiBwKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbD09PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWUuaXNBcnJheT1yLGUuaXNCb29sZWFuPW4sZS5pc051bGw9aSxlLmlzTnVsbE9yVW5kZWZpbmVkPW8sZS5pc051bWJlcj1hLGUuaXNTdHJpbmc9ZixlLmlzU3ltYm9sPXMsZS5pc1VuZGVmaW5lZD11LGUuaXNSZWdFeHA9aCxlLmlzT2JqZWN0PWMsZS5pc0RhdGU9ZCxlLmlzRXJyb3I9bCxlLmlzRnVuY3Rpb249cCxlLmlzUHJpbWl0aXZlPWIsZS5pc0J1ZmZlcj10LmlzQnVmZmVyfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDExNSksYT1yKDE1OSksZj1yKDExMykscz1yKDUzKSx1PXIoMTE2KSxoPXIoMjAxKSxjPXIoOTEpLGQ9cigxNjIpLGw9L15jYzooWzEtOWEtZl1bMC05YS1mXXswLDN9fDApOlsxLTlhLWZdWzAtOWEtZl17MCwxNX06W2EtekEtWjAtOV8tXXswLDg2fTooWzEtOV1bMC05XXswLDE3fXwwKSQvLHA9L15jYzooWzEtOWEtZl1bMC05YS1mXXswLDN9fDApOlsxLTlhLWZdWzAtOWEtZl17MCw3fTpbYS16QS1aMC05Xy1dezAsODZ9OihbMS05XVswLTldezAsMTd9fDApJC8sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCl9cmV0dXJuIGkodCxbe2tleTpcImdldFR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX19LHtrZXk6XCJzZXRUeXBlSWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnR5cGU9dH19LHtrZXk6XCJnZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaXRtYXNrfX0se2tleTpcInNldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmJpdG1hc2s9dH19LHtrZXk6XCJnZXRIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNoKXRocm93IG5ldyBzKFwiSGFzaCBub3Qgc2V0XCIpO3JldHVybiB0aGlzLmhhc2h9fSx7a2V5Olwic2V0SGFzaFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJIYXNoIG11c3QgYmUgYSBCdWZmZXJcIik7dGhpcy5oYXNoPXR9fSx7a2V5OlwiZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0aGlzLm1heEZ1bGZpbGxtZW50TGVuZ3RoKXRocm93IG5ldyBzKFwiTWF4aW11bSBmdWxmaWxsbWVudCBsZW5ndGggbm90IHNldFwiKTtyZXR1cm4gdGhpcy5tYXhGdWxmaWxsbWVudExlbmd0aH19LHtrZXk6XCJzZXRNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFkKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGdWxmaWxsbWVudCBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO2lmKHQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVsZmlsbG1lbnQgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUgb3IgemVyb1wiKTt0aGlzLm1heEZ1bGZpbGxtZW50TGVuZ3RoPXR9fSx7a2V5Olwic2VyaWFsaXplVXJpXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cImNjOlwiK3RoaXMuZ2V0VHlwZUlkKCkudG9TdHJpbmcoMTYpK1wiOlwiK3RoaXMuZ2V0Qml0bWFzaygpLnRvU3RyaW5nKDE2KStcIjpcIit1LmVuY29kZSh0aGlzLmdldEhhc2goKSkrXCI6XCIrdGhpcy5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpfX0se2tleTpcInNlcmlhbGl6ZUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGM7cmV0dXJuIHQud3JpdGVVSW50MTYodGhpcy5nZXRUeXBlSWQoKSksdC53cml0ZVZhclVJbnQodGhpcy5nZXRCaXRtYXNrKCkpLHQud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLmdldEhhc2goKSksdC53cml0ZVZhclVJbnQodGhpcy5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpKSx0LmdldEJ1ZmZlcigpfX0se2tleTpcInBhcnNlQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRUeXBlSWQodC5yZWFkVUludDE2KCkpLHRoaXMuc2V0Qml0bWFzayh0LnJlYWRWYXJVSW50KCkpLHRoaXMuc2V0SGFzaCh0LnJlYWRWYXJPY3RldFN0cmluZygpKSx0aGlzLnNldE1heEZ1bGZpbGxtZW50TGVuZ3RoKHQucmVhZFZhclVJbnQoKSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe2lmKG8uZ2V0Q2xhc3NGcm9tVHlwZUlkKHRoaXMuZ2V0VHlwZUlkKCkpLHRoaXMuZ2V0Qml0bWFzaygpPnQuTUFYX1NBRkVfQklUTUFTSyl0aHJvdyBuZXcgRXJyb3IoXCJCaXRtYXNrIHRvbyBsYXJnZSB0byBiZSBzYWZlbHkgcmVwcmVzZW50ZWRcIik7aWYodGhpcy5nZXRCaXRtYXNrKCkmfnQuU1VQUE9SVEVEX0JJVE1BU0spdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBmZWF0dXJlIHN1aXRlc1wiKTtpZih0aGlzLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCk+dC5NQVhfRlVMRklMTE1FTlRfTEVOR1RIKXRocm93IG5ldyBFcnJvcihcIkNvbmRpdGlvbiByZXF1ZXN0ZWQgdG9vIGxhcmdlIG9mIGEgbWF4IGZ1bGZpbGxtZW50IHNpemVcIik7cmV0dXJuITB9fV0sW3trZXk6XCJmcm9tVXJpXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiU2VyaWFsaXplZCBjb25kaXRpb24gbXVzdCBiZSBhIHN0cmluZ1wiKTt2YXIgcj1lLnNwbGl0KFwiOlwiKTtpZihcImNjXCIhPT1yWzBdKXRocm93IG5ldyBhKCdTZXJpYWxpemVkIGNvbmRpdGlvbiBtdXN0IHN0YXJ0IHdpdGggXCJjYzpcIicpO2lmKCF0LlJFR0VYX1NUUklDVC5leGVjKGUpKXRocm93IG5ldyBmKFwiSW52YWxpZCBjb25kaXRpb24gZm9ybWF0XCIpO3ZhciBuPW5ldyB0O3JldHVybiBuLnNldFR5cGVJZChwYXJzZUludChyWzFdLDE2KSksbi5zZXRCaXRtYXNrKHBhcnNlSW50KHJbMl0sMTYpKSxuLnNldEhhc2godS5kZWNvZGUoclszXSkpLG4uc2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgocGFyc2VJbnQocls0XSwxMCkpLG59fSx7a2V5OlwiZnJvbUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9aC5mcm9tKGUpO3ZhciByPW5ldyB0O3JldHVybiByLnBhcnNlQmluYXJ5KGUpLHJ9fV0pLHR9KCk7Yi5NQVhfU0FGRV9CSVRNQVNLPTQyOTQ5NjcyOTUsYi5TVVBQT1JURURfQklUTUFTSz02MyxiLk1BWF9GVUxGSUxMTUVOVF9MRU5HVEg9NjU1MzUsYi5SRUdFWD1sLGIuUkVHRVhfU1RSSUNUPXAsdC5leHBvcnRzPWJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig2Mykscz1yKDExNCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxhKGUsW3trZXk6XCJnZW5lcmF0ZUhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBzKFwic2hhMjU2XCIpO3JldHVybiB0aGlzLndyaXRlSGFzaFBheWxvYWQodCksdC5nZXREaWdlc3QoKX19XSksZX0oZik7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNyksaT1yKDEwKSxvPXIoNDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLGEpe3ZhciBmLHM9bihlKSx1PWkocy5sZW5ndGgpLGg9byhhLHUpO2lmKHQmJnIhPXIpe2Zvcig7dT5oOylpZihmPXNbaCsrXSxmIT1mKXJldHVybiEwfWVsc2UgZm9yKDt1Pmg7aCsrKWlmKCh0fHxoIGluIHMpJiZzW2hdPT09cilyZXR1cm4gdHx8aHx8MDtyZXR1cm4hdCYmLTF9fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDApLG89cigxNSksYT1yKDQ1KSxmPXIoMzYpLHM9cig1NSksdT1yKDQwKSxoPXIoNiksYz1yKDUpLGQ9cig4NCksbD1yKDU3KSxwPXIoMTI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYix2LHkpe3ZhciBtPW5bdF0sZz1tLHc9dj9cInNldFwiOlwiYWRkXCIsXz1nJiZnLnByb3RvdHlwZSxNPXt9LFM9ZnVuY3Rpb24odCl7dmFyIGU9X1t0XTtvKF8sdCxcImRlbGV0ZVwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoeSYmIWgodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImhhc1wiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoeSYmIWgodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImdldFwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiB5JiYhaCh0KT92b2lkIDA6ZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06XCJhZGRcIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0KSx0aGlzfTpmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBnJiYoeXx8Xy5mb3JFYWNoJiYhYyhmdW5jdGlvbigpeyhuZXcgZykuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IGcsQT1FW3ddKHk/e306LTAsMSkhPUUsaz1jKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSx4PWQoZnVuY3Rpb24odCl7bmV3IGcodCl9KSxJPSF5JiZjKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBnLGU9NTtlLS07KXRbd10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSk7eHx8KGc9ZShmdW5jdGlvbihlLHIpe3UoZSxnLHQpO3ZhciBuPXAobmV3IG0sZSxnKTtyZXR1cm4gdm9pZCAwIT1yJiZzKHIsdixuW3ddLG4pLG59KSxnLnByb3RvdHlwZT1fLF8uY29uc3RydWN0b3I9ZyksKGt8fEkpJiYoUyhcImRlbGV0ZVwiKSxTKFwiaGFzXCIpLHYmJlMoXCJnZXRcIikpLChJfHxBKSYmUyh3KSx5JiZfLmNsZWFyJiZkZWxldGUgXy5jbGVhcn1lbHNlIGc9Yi5nZXRDb25zdHJ1Y3RvcihlLHQsdix3KSxhKGcucHJvdG90eXBlLHIpLGYuTkVFRD0hMDtyZXR1cm4gbChnLHQpLE1bdF09ZyxpKGkuRytpLlcraS5GKihnIT1tKSxNKSx5fHxiLnNldFN0cm9uZyhnLHQsdiksZ319LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDE0KSxpPXIoMTUpLG89cig1KSxhPXIoMjQpLGY9cig3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBzPWYodCksdT1yKGEscyxcIlwiW3RdKSxoPXVbMF0sYz11WzFdO28oZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVtzXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW3RdKGUpfSkmJihpKFN0cmluZy5wcm90b3R5cGUsdCxoKSxuKFJlZ0V4cC5wcm90b3R5cGUscywyPT1lP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGMuY2FsbCh0LHRoaXMsZSl9OmZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCx0aGlzKX0pKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDMpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4odGhpcyksZT1cIlwiO3JldHVybiB0Lmdsb2JhbCYmKGUrPVwiZ1wiKSx0Lmlnbm9yZUNhc2UmJihlKz1cImlcIiksdC5tdWx0aWxpbmUmJihlKz1cIm1cIiksdC51bmljb2RlJiYoZSs9XCJ1XCIpLHQuc3RpY2t5JiYoZSs9XCJ5XCIpLGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49dm9pZCAwPT09cjtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbj90KCk6dC5jYWxsKHIpO2Nhc2UgMTpyZXR1cm4gbj90KGVbMF0pOnQuY2FsbChyLGVbMF0pO2Nhc2UgMjpyZXR1cm4gbj90KGVbMF0sZVsxXSk6dC5jYWxsKHIsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG4/dChlWzBdLGVbMV0sZVsyXSk6dC5jYWxsKHIsZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbj90KGVbMF0sZVsxXSxlWzJdLGVbM10pOnQuY2FsbChyLGVbMF0sZVsxXSxlWzJdLGVbM10pfXJldHVybiB0LmFwcGx5KHIsZSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMjMpLG89cig3KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gbih0KSYmKHZvaWQgMCE9PShlPXRbb10pPyEhZTpcIlJlZ0V4cFwiPT1pKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwiaXRlcmF0b3JcIiksaT0hMTt0cnl7dmFyIG89WzddW25dKCk7by5yZXR1cm49ZnVuY3Rpb24oKXtpPSEwfSxBcnJheS5mcm9tKG8sZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2godCl7fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFlJiYhaSlyZXR1cm4hMTt2YXIgcj0hMTt0cnl7dmFyIG89WzddLGE9b1tuXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fSxvW25dPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LHQobyl9Y2F0Y2godCl7fXJldHVybiByfX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQxKXx8IXIoNSkoZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnJhbmRvbSgpO19fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLHQsZnVuY3Rpb24oKXt9KSxkZWxldGUgcig0KVt0XX0pfSxmdW5jdGlvbih0LGUpe2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsbz1uW2ldfHwobltpXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfHwob1t0XT17fSl9fSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9cig0KSxvPXIoMTQpLGE9cig0OCksZj1hKFwidHlwZWRfYXJyYXlcIikscz1hKFwidmlld1wiKSx1PSEoIWkuQXJyYXlCdWZmZXJ8fCFpLkRhdGFWaWV3KSxoPXUsYz0wLGQ9OSxsPVwiSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXlcIi5zcGxpdChcIixcIik7YzxkOykobj1pW2xbYysrXV0pPyhvKG4ucHJvdG90eXBlLGYsITApLG8obi5wcm90b3R5cGUscywhMCkpOmg9ITE7dC5leHBvcnRzPXtBQlY6dSxDT05TVFI6aCxUWVBFRDpmLFZJRVc6c319LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXIoNDcyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1yKDQ3NCl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LndlYnBhY2tQb2x5ZmlsbHx8KHQuZGVwcmVjYXRlPWZ1bmN0aW9uKCl7fSx0LnBhdGhzPVtdLHQuY2hpbGRyZW58fCh0LmNoaWxkcmVuPVtdKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImxvYWRlZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5sfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiaWRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaX19KSx0LndlYnBhY2tQb2x5ZmlsbD0xKSx0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UucmFuZG9tQnl0ZXM9ZS5ybmc9ZS5wc2V1ZG9SYW5kb21CeXRlcz1lLnBybmc9cig2MSksZS5jcmVhdGVIYXNoPWUuSGFzaD1yKDU5KSxlLmNyZWF0ZUhtYWM9ZS5IbWFjPXIoMTQ5KTt2YXIgbj1bXCJzaGExXCIsXCJzaGEyMjRcIixcInNoYTI1NlwiLFwic2hhMzg0XCIsXCJzaGE1MTJcIixcIm1kNVwiLFwicm1kMTYwXCJdLmNvbmNhdChPYmplY3Qua2V5cyhyKDIxMSkpKTtlLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBufTt2YXIgaT1yKDE1MSk7ZS5wYmtkZjI9aS5wYmtkZjIsZS5wYmtkZjJTeW5jPWkucGJrZGYyU3luYzt2YXIgbz1yKDQ5Myk7W1wiQ2lwaGVyXCIsXCJjcmVhdGVDaXBoZXJcIixcIkNpcGhlcml2XCIsXCJjcmVhdGVDaXBoZXJpdlwiLFwiRGVjaXBoZXJcIixcImNyZWF0ZURlY2lwaGVyXCIsXCJEZWNpcGhlcml2XCIsXCJjcmVhdGVEZWNpcGhlcml2XCIsXCJnZXRDaXBoZXJzXCIsXCJsaXN0Q2lwaGVyc1wiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09b1t0XX0pO3ZhciBhPXIoNTczKTtbXCJEaWZmaWVIZWxsbWFuR3JvdXBcIixcImNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cFwiLFwiZ2V0RGlmZmllSGVsbG1hblwiLFwiY3JlYXRlRGlmZmllSGVsbG1hblwiLFwiRGlmZmllSGVsbG1hblwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09YVt0XX0pO3ZhciBmPXIoNTA2KTtbXCJjcmVhdGVTaWduXCIsXCJTaWduXCIsXCJjcmVhdGVWZXJpZnlcIixcIlZlcmlmeVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09Zlt0XX0pLGUuY3JlYXRlRUNESD1yKDU0NCk7dmFyIHM9cig1NzcpO1tcInB1YmxpY0VuY3J5cHRcIixcInByaXZhdGVFbmNyeXB0XCIsXCJwdWJsaWNEZWNyeXB0XCIsXCJwcml2YXRlRGVjcnlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09c1t0XX0pLFtcImNyZWF0ZUNyZWRlbnRpYWxzXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbXCJzb3JyeSwgXCIrdCtcIiBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XCIsXCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1wiLFwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5XCJdLmpvaW4oXCJcXG5cIikpfX0pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dmFyIGUscjtyZXR1cm4gZT10PmZ8fHQ8MD8ocj1NYXRoLmFicyh0KSVmLHQ8MD9mLXI6cik6dH1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7dCsrKXRbZV09MDtyZXR1cm4hMX1mdW5jdGlvbiBpKCl7dGhpcy5TQk9YPVtdLHRoaXMuSU5WX1NCT1g9W10sdGhpcy5TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5JTlZfU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuaW5pdCgpLHRoaXMuUkNPTj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNCxyPW5ldyBBcnJheShlKSxuPS0xOysrbjxlOylyW25dPXQucmVhZFVJbnQzMkJFKDQqbik7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0aGlzLl9rZXk9byh0KSx0aGlzLl9kb1Jlc2V0KCl9dmFyIGY9TWF0aC5wb3coMiwzMik7aS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbyxhLGYscyx1O2Zvcih0PWZ1bmN0aW9uKCl7dmFyIHQscjtmb3Iocj1bXSxlPXQ9MDt0PDI1NjtlPSsrdCllPDEyOD9yLnB1c2goZTw8MSk6ci5wdXNoKGU8PDFeMjgzKTtyZXR1cm4gcn0oKSxpPTAscz0wLGU9dT0wO3U8MjU2O2U9Kyt1KXI9c15zPDwxXnM8PDJeczw8M15zPDw0LHI9cj4+PjheMjU1JnJeOTksdGhpcy5TQk9YW2ldPXIsdGhpcy5JTlZfU0JPWFtyXT1pLG89dFtpXSxhPXRbb10sZj10W2FdLG49MjU3KnRbcl1eMTY4NDMwMDgqcix0aGlzLlNVQl9NSVhbMF1baV09bjw8MjR8bj4+PjgsdGhpcy5TVUJfTUlYWzFdW2ldPW48PDE2fG4+Pj4xNix0aGlzLlNVQl9NSVhbMl1baV09bjw8OHxuPj4+MjQsdGhpcy5TVUJfTUlYWzNdW2ldPW4sbj0xNjg0MzAwOSpmXjY1NTM3KmFeMjU3Km9eMTY4NDMwMDgqaSx0aGlzLklOVl9TVUJfTUlYWzBdW3JdPW48PDI0fG4+Pj44LHRoaXMuSU5WX1NVQl9NSVhbMV1bcl09bjw8MTZ8bj4+PjE2LHRoaXMuSU5WX1NVQl9NSVhbMl1bcl09bjw8OHxuPj4+MjQsdGhpcy5JTlZfU1VCX01JWFszXVtyXT1uLDA9PT1pP2k9cz0xOihpPW9edFt0W3RbZl5vXV1dLHNePXRbdFtzXV0pO3JldHVybiEwfTt2YXIgcz1uZXcgaTthLmJsb2NrU2l6ZT0xNixhLnByb3RvdHlwZS5ibG9ja1NpemU9YS5ibG9ja1NpemUsYS5rZXlTaXplPTMyLGEucHJvdG90eXBlLmtleVNpemU9YS5rZXlTaXplLGEucHJvdG90eXBlLl9kb1Jlc2V0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvO2ZvcihyPXRoaXMuX2tleSxlPXIubGVuZ3RoLHRoaXMuX25Sb3VuZHM9ZSs2LGk9NCoodGhpcy5fblJvdW5kcysxKSx0aGlzLl9rZXlTY2hlZHVsZT1bXSxuPTA7bjxpO24rKyl0aGlzLl9rZXlTY2hlZHVsZVtuXT1uPGU/cltuXToobz10aGlzLl9rZXlTY2hlZHVsZVtuLTFdLG4lZT09PTA/KG89bzw8OHxvPj4+MjQsbz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dLG9ePXMuUkNPTltuL2V8MF08PDI0KTplPjYmJm4lZT09PTQ/bz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dOnZvaWQgMCx0aGlzLl9rZXlTY2hlZHVsZVtuLWVdXm8pO2Zvcih0aGlzLl9pbnZLZXlTY2hlZHVsZT1bXSx0PTA7dDxpO3QrKyluPWktdCxvPXRoaXMuX2tleVNjaGVkdWxlW24tKHQlND8wOjQpXSx0aGlzLl9pbnZLZXlTY2hlZHVsZVt0XT10PDR8fG48PTQ/bzpzLklOVl9TVUJfTUlYWzBdW3MuU0JPWFtvPj4+MjRdXV5zLklOVl9TVUJfTUlYWzFdW3MuU0JPWFtvPj4+MTYmMjU1XV1ecy5JTlZfU1VCX01JWFsyXVtzLlNCT1hbbz4+PjgmMjU1XV1ecy5JTlZfU1VCX01JWFszXVtzLlNCT1hbMjU1Jm9dXTtcbnJldHVybiEwfSxhLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9rZXlTY2hlZHVsZSxzLlNVQl9NSVgscy5TQk9YKSxuPW5ldyB0KDE2KTtyZXR1cm4gbi53cml0ZVVJbnQzMkJFKHJbMF0sMCksbi53cml0ZVVJbnQzMkJFKHJbMV0sNCksbi53cml0ZVVJbnQzMkJFKHJbMl0sOCksbi53cml0ZVVJbnQzMkJFKHJbM10sMTIpLG59LGEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPVtlWzNdLGVbMV1dO2VbMV09clswXSxlWzNdPXJbMV07dmFyIG49dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5faW52S2V5U2NoZWR1bGUscy5JTlZfU1VCX01JWCxzLklOVl9TQk9YKSxpPW5ldyB0KDE2KTtyZXR1cm4gaS53cml0ZVVJbnQzMkJFKG5bMF0sMCksaS53cml0ZVVJbnQzMkJFKG5bM10sNCksaS53cml0ZVVJbnQzMkJFKG5bMl0sOCksaS53cml0ZVVJbnQzMkJFKG5bMV0sMTIpLGl9LGEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bih0aGlzLl9rZXlTY2hlZHVsZSksbih0aGlzLl9pbnZLZXlTY2hlZHVsZSksbih0aGlzLl9rZXkpfSxhLnByb3RvdHlwZS5fZG9DcnlwdEJsb2NrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEsZixzLHUsaCxjLGQsbDthPXRbMF1eZVswXSxmPXRbMV1eZVsxXSxzPXRbMl1eZVsyXSx1PXRbM11eZVszXSxvPTQ7Zm9yKHZhciBwPTE7cDx0aGlzLl9uUm91bmRzO3ArKyloPW5bMF1bYT4+PjI0XV5uWzFdW2Y+Pj4xNiYyNTVdXm5bMl1bcz4+PjgmMjU1XV5uWzNdWzI1NSZ1XV5lW28rK10sYz1uWzBdW2Y+Pj4yNF1eblsxXVtzPj4+MTYmMjU1XV5uWzJdW3U+Pj44JjI1NV1eblszXVsyNTUmYV1eZVtvKytdLGQ9blswXVtzPj4+MjRdXm5bMV1bdT4+PjE2JjI1NV1eblsyXVthPj4+OCYyNTVdXm5bM11bMjU1JmZdXmVbbysrXSxsPW5bMF1bdT4+PjI0XV5uWzFdW2E+Pj4xNiYyNTVdXm5bMl1bZj4+PjgmMjU1XV5uWzNdWzI1NSZzXV5lW28rK10sYT1oLGY9YyxzPWQsdT1sO3JldHVybiBoPShpW2E+Pj4yNF08PDI0fGlbZj4+PjE2JjI1NV08PDE2fGlbcz4+PjgmMjU1XTw8OHxpWzI1NSZ1XSleZVtvKytdLGM9KGlbZj4+PjI0XTw8MjR8aVtzPj4+MTYmMjU1XTw8MTZ8aVt1Pj4+OCYyNTVdPDw4fGlbMjU1JmFdKV5lW28rK10sZD0oaVtzPj4+MjRdPDwyNHxpW3U+Pj4xNiYyNTVdPDwxNnxpW2E+Pj44JjI1NV08PDh8aVsyNTUmZl0pXmVbbysrXSxsPShpW3U+Pj4yNF08PDI0fGlbYT4+PjE2JjI1NV08PDE2fGlbZj4+PjgmMjU1XTw8OHxpWzI1NSZzXSleZVtvKytdLFtyKGgpLHIoYykscihkKSxyKGwpXX0sZS5BRVM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImFlcy0xMjgtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xMjgtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZS5hZXMxMjg9ZVtcImFlcy0xMjgtY2JjXCJdLGUuYWVzMTkyPWVbXCJhZXMtMTkyLWNiY1wiXSxlLmFlczI1Nj1lW1wiYWVzLTI1Ni1jYmNcIl0sZVtcImFlcy0xMjgtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTE5Mi1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMjU2LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aDtyLS07KXtpZihlPXQucmVhZFVJbnQ4KHIpLDI1NSE9PWUpe2UrKyx0LndyaXRlVUludDgoZSxyKTticmVha310LndyaXRlVUludDgoMCxyKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpO3JldHVybiBuKHQuX3ByZXYpLGV9dmFyIG89cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxpKGUpXSk7dmFyIG49ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxvKHIsbil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX10LmV4cG9ydHM9cixyLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0IT1lKXRocm93IG5ldyBFcnJvcihyfHxcIkFzc2VydGlvbiBmYWlsZWQ6IFwiK3QrXCIgIT0gXCIrZSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLmJhc2U9cig1MDgpLG4uc2hvcnQ9cig1MTEpLG4ubW9udD1yKDUxMCksbi5lZHdhcmRzPXIoNTA5KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5iaWdudW09cigxOCksbi5kZWZpbmU9cig1MzApLmRlZmluZSxuLmJhc2U9cig2OCksbi5jb25zdGFudHM9cigyMTUpLG4uZGVjb2RlcnM9cig1MzQpLG4uZW5jb2RlcnM9cig1MzYpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dmFyIGUscjtyZXR1cm4gZT10PmZ8fHQ8MD8ocj1NYXRoLmFicyh0KSVmLHQ8MD9mLXI6cik6dH1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7dCsrKXRbZV09MDtyZXR1cm4hMX1mdW5jdGlvbiBpKCl7dGhpcy5TQk9YPVtdLHRoaXMuSU5WX1NCT1g9W10sdGhpcy5TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5JTlZfU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuaW5pdCgpLHRoaXMuUkNPTj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNCxyPW5ldyBBcnJheShlKSxuPS0xOysrbjxlOylyW25dPXQucmVhZFVJbnQzMkJFKDQqbik7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0aGlzLl9rZXk9byh0KSx0aGlzLl9kb1Jlc2V0KCl9dmFyIGY9TWF0aC5wb3coMiwzMik7aS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbyxhLGYscyx1O2Zvcih0PWZ1bmN0aW9uKCl7dmFyIHQscjtmb3Iocj1bXSxlPXQ9MDt0PDI1NjtlPSsrdCllPDEyOD9yLnB1c2goZTw8MSk6ci5wdXNoKGU8PDFeMjgzKTtyZXR1cm4gcn0oKSxpPTAscz0wLGU9dT0wO3U8MjU2O2U9Kyt1KXI9c15zPDwxXnM8PDJeczw8M15zPDw0LHI9cj4+PjheMjU1JnJeOTksdGhpcy5TQk9YW2ldPXIsdGhpcy5JTlZfU0JPWFtyXT1pLG89dFtpXSxhPXRbb10sZj10W2FdLG49MjU3KnRbcl1eMTY4NDMwMDgqcix0aGlzLlNVQl9NSVhbMF1baV09bjw8MjR8bj4+PjgsdGhpcy5TVUJfTUlYWzFdW2ldPW48PDE2fG4+Pj4xNix0aGlzLlNVQl9NSVhbMl1baV09bjw8OHxuPj4+MjQsdGhpcy5TVUJfTUlYWzNdW2ldPW4sbj0xNjg0MzAwOSpmXjY1NTM3KmFeMjU3Km9eMTY4NDMwMDgqaSx0aGlzLklOVl9TVUJfTUlYWzBdW3JdPW48PDI0fG4+Pj44LHRoaXMuSU5WX1NVQl9NSVhbMV1bcl09bjw8MTZ8bj4+PjE2LHRoaXMuSU5WX1NVQl9NSVhbMl1bcl09bjw8OHxuPj4+MjQsdGhpcy5JTlZfU1VCX01JWFszXVtyXT1uLDA9PT1pP2k9cz0xOihpPW9edFt0W3RbZl5vXV1dLHNePXRbdFtzXV0pO3JldHVybiEwfTt2YXIgcz1uZXcgaTthLmJsb2NrU2l6ZT0xNixhLnByb3RvdHlwZS5ibG9ja1NpemU9YS5ibG9ja1NpemUsYS5rZXlTaXplPTMyLGEucHJvdG90eXBlLmtleVNpemU9YS5rZXlTaXplLGEucHJvdG90eXBlLl9kb1Jlc2V0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvO2ZvcihyPXRoaXMuX2tleSxlPXIubGVuZ3RoLHRoaXMuX25Sb3VuZHM9ZSs2LGk9NCoodGhpcy5fblJvdW5kcysxKSx0aGlzLl9rZXlTY2hlZHVsZT1bXSxuPTA7bjxpO24rKyl0aGlzLl9rZXlTY2hlZHVsZVtuXT1uPGU/cltuXToobz10aGlzLl9rZXlTY2hlZHVsZVtuLTFdLG4lZT09PTA/KG89bzw8OHxvPj4+MjQsbz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dLG9ePXMuUkNPTltuL2V8MF08PDI0KTplPjYmJm4lZT09PTQ/bz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dOnZvaWQgMCx0aGlzLl9rZXlTY2hlZHVsZVtuLWVdXm8pO2Zvcih0aGlzLl9pbnZLZXlTY2hlZHVsZT1bXSx0PTA7dDxpO3QrKyluPWktdCxvPXRoaXMuX2tleVNjaGVkdWxlW24tKHQlND8wOjQpXSx0aGlzLl9pbnZLZXlTY2hlZHVsZVt0XT10PDR8fG48PTQ/bzpzLklOVl9TVUJfTUlYWzBdW3MuU0JPWFtvPj4+MjRdXV5zLklOVl9TVUJfTUlYWzFdW3MuU0JPWFtvPj4+MTYmMjU1XV1ecy5JTlZfU1VCX01JWFsyXVtzLlNCT1hbbz4+PjgmMjU1XV1ecy5JTlZfU1VCX01JWFszXVtzLlNCT1hbMjU1Jm9dXTtyZXR1cm4hMH0sYS5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5fa2V5U2NoZWR1bGUscy5TVUJfTUlYLHMuU0JPWCksbj1uZXcgdCgxNik7cmV0dXJuIG4ud3JpdGVVSW50MzJCRShyWzBdLDApLG4ud3JpdGVVSW50MzJCRShyWzFdLDQpLG4ud3JpdGVVSW50MzJCRShyWzJdLDgpLG4ud3JpdGVVSW50MzJCRShyWzNdLDEyKSxufSxhLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj1bZVszXSxlWzFdXTtlWzFdPXJbMF0sZVszXT1yWzFdO3ZhciBuPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2ludktleVNjaGVkdWxlLHMuSU5WX1NVQl9NSVgscy5JTlZfU0JPWCksaT1uZXcgdCgxNik7cmV0dXJuIGkud3JpdGVVSW50MzJCRShuWzBdLDApLGkud3JpdGVVSW50MzJCRShuWzNdLDQpLGkud3JpdGVVSW50MzJCRShuWzJdLDgpLGkud3JpdGVVSW50MzJCRShuWzFdLDEyKSxpfSxhLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe24odGhpcy5fa2V5U2NoZWR1bGUpLG4odGhpcy5faW52S2V5U2NoZWR1bGUpLG4odGhpcy5fa2V5KX0sYS5wcm90b3R5cGUuX2RvQ3J5cHRCbG9jaz1mdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLGYscyx1LGgsYyxkLGw7YT10WzBdXmVbMF0sZj10WzFdXmVbMV0scz10WzJdXmVbMl0sdT10WzNdXmVbM10sbz00O2Zvcih2YXIgcD0xO3A8dGhpcy5fblJvdW5kcztwKyspaD1uWzBdW2E+Pj4yNF1eblsxXVtmPj4+MTYmMjU1XV5uWzJdW3M+Pj44JjI1NV1eblszXVsyNTUmdV1eZVtvKytdLGM9blswXVtmPj4+MjRdXm5bMV1bcz4+PjE2JjI1NV1eblsyXVt1Pj4+OCYyNTVdXm5bM11bMjU1JmFdXmVbbysrXSxkPW5bMF1bcz4+PjI0XV5uWzFdW3U+Pj4xNiYyNTVdXm5bMl1bYT4+PjgmMjU1XV5uWzNdWzI1NSZmXV5lW28rK10sbD1uWzBdW3U+Pj4yNF1eblsxXVthPj4+MTYmMjU1XV5uWzJdW2Y+Pj44JjI1NV1eblszXVsyNTUmc11eZVtvKytdLGE9aCxmPWMscz1kLHU9bDtyZXR1cm4gaD0oaVthPj4+MjRdPDwyNHxpW2Y+Pj4xNiYyNTVdPDwxNnxpW3M+Pj44JjI1NV08PDh8aVsyNTUmdV0pXmVbbysrXSxjPShpW2Y+Pj4yNF08PDI0fGlbcz4+PjE2JjI1NV08PDE2fGlbdT4+PjgmMjU1XTw8OHxpWzI1NSZhXSleZVtvKytdLGQ9KGlbcz4+PjI0XTw8MjR8aVt1Pj4+MTYmMjU1XTw8MTZ8aVthPj4+OCYyNTVdPDw4fGlbMjU1JmZdKV5lW28rK10sbD0oaVt1Pj4+MjRdPDwyNHxpW2E+Pj4xNiYyNTVdPDwxNnxpW2Y+Pj44JjI1NV08PDh8aVsyNTUmc10pXmVbbysrXSxbcihoKSxyKGMpLHIoZCkscihsKV19LGUuQUVTPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGg7ci0tOyl7aWYoZT10LnJlYWRVSW50OChyKSwyNTUhPT1lKXtlKyssdC53cml0ZVVJbnQ4KGUscik7YnJlYWt9dC53cml0ZVVJbnQ4KDAscil9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KTtyZXR1cm4gbih0Ll9wcmV2KSxlfXZhciBvPXIoNjkpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsaShlKV0pO3ZhciBuPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksbyhyLG4pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgdCx0aGlzLmhhc2hNb2RlP3RoaXNbdF09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9dmFyIGk9cigzMSkuVHJhbnNmb3JtLG89cigyKSxhPXIoNTIpLlN0cmluZ0RlY29kZXI7dC5leHBvcnRzPW4sbyhuLGkpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpO3ZhciBpPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihuJiYoaT10aGlzLl90b1N0cmluZyhpLG4pKSxpKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaCh0KXtuPXR9ZmluYWxseXtyKG4pfX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fZmluYWwoKSl9Y2F0Y2godCl7ZT10fWZpbmFsbHl7dChlKX19LG4ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2ZpbmFsKCl8fG5ldyBlKFwiXCIpO3JldHVybiB0JiYocj10aGlzLl90b1N0cmluZyhyLHQsITApKSxyfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBhKGUpLHRoaXMuX2VuY29kaW5nPWUpLHRoaXMuX2VuY29kaW5nIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzXCIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIHImJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24uYmFzZT1yKDU0NSksbi5zaG9ydD1yKDU0OCksbi5tb250PXIoNTQ3KSxuLmVkd2FyZHM9cig1NDYpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RbZT4+NV18PTEyODw8ZSUzMix0WyhlKzY0Pj4+OTw8NCkrMTRdPWU7Zm9yKHZhciByPTE3MzI1ODQxOTMsbj0tMjcxNzMzODc5LGk9LTE3MzI1ODQxOTQsaD0yNzE3MzM4NzgsYz0wO2M8dC5sZW5ndGg7Yys9MTYpe3ZhciBkPXIsbD1uLHA9aSxiPWg7cj1vKHIsbixpLGgsdFtjKzBdLDcsLTY4MDg3NjkzNiksaD1vKGgscixuLGksdFtjKzFdLDEyLC0zODk1NjQ1ODYpLGk9byhpLGgscixuLHRbYysyXSwxNyw2MDYxMDU4MTkpLG49byhuLGksaCxyLHRbYyszXSwyMiwtMTA0NDUyNTMzMCkscj1vKHIsbixpLGgsdFtjKzRdLDcsLTE3NjQxODg5NyksaD1vKGgscixuLGksdFtjKzVdLDEyLDEyMDAwODA0MjYpLGk9byhpLGgscixuLHRbYys2XSwxNywtMTQ3MzIzMTM0MSksbj1vKG4saSxoLHIsdFtjKzddLDIyLC00NTcwNTk4Mykscj1vKHIsbixpLGgsdFtjKzhdLDcsMTc3MDAzNTQxNiksaD1vKGgscixuLGksdFtjKzldLDEyLC0xOTU4NDE0NDE3KSxpPW8oaSxoLHIsbix0W2MrMTBdLDE3LC00MjA2Myksbj1vKG4saSxoLHIsdFtjKzExXSwyMiwtMTk5MDQwNDE2Mikscj1vKHIsbixpLGgsdFtjKzEyXSw3LDE4MDQ2MDM2ODIpLGg9byhoLHIsbixpLHRbYysxM10sMTIsLTQwMzQxMTAxKSxpPW8oaSxoLHIsbix0W2MrMTRdLDE3LC0xNTAyMDAyMjkwKSxuPW8obixpLGgscix0W2MrMTVdLDIyLDEyMzY1MzUzMjkpLHI9YShyLG4saSxoLHRbYysxXSw1LC0xNjU3OTY1MTApLGg9YShoLHIsbixpLHRbYys2XSw5LC0xMDY5NTAxNjMyKSxpPWEoaSxoLHIsbix0W2MrMTFdLDE0LDY0MzcxNzcxMyksbj1hKG4saSxoLHIsdFtjKzBdLDIwLC0zNzM4OTczMDIpLHI9YShyLG4saSxoLHRbYys1XSw1LC03MDE1NTg2OTEpLGg9YShoLHIsbixpLHRbYysxMF0sOSwzODAxNjA4MyksaT1hKGksaCxyLG4sdFtjKzE1XSwxNCwtNjYwNDc4MzM1KSxuPWEobixpLGgscix0W2MrNF0sMjAsLTQwNTUzNzg0OCkscj1hKHIsbixpLGgsdFtjKzldLDUsNTY4NDQ2NDM4KSxoPWEoaCxyLG4saSx0W2MrMTRdLDksLTEwMTk4MDM2OTApLGk9YShpLGgscixuLHRbYyszXSwxNCwtMTg3MzYzOTYxKSxuPWEobixpLGgscix0W2MrOF0sMjAsMTE2MzUzMTUwMSkscj1hKHIsbixpLGgsdFtjKzEzXSw1LC0xNDQ0NjgxNDY3KSxoPWEoaCxyLG4saSx0W2MrMl0sOSwtNTE0MDM3ODQpLGk9YShpLGgscixuLHRbYys3XSwxNCwxNzM1MzI4NDczKSxuPWEobixpLGgscix0W2MrMTJdLDIwLC0xOTI2NjA3NzM0KSxyPWYocixuLGksaCx0W2MrNV0sNCwtMzc4NTU4KSxoPWYoaCxyLG4saSx0W2MrOF0sMTEsLTIwMjI1NzQ0NjMpLGk9ZihpLGgscixuLHRbYysxMV0sMTYsMTgzOTAzMDU2Miksbj1mKG4saSxoLHIsdFtjKzE0XSwyMywtMzUzMDk1NTYpLHI9ZihyLG4saSxoLHRbYysxXSw0LC0xNTMwOTkyMDYwKSxoPWYoaCxyLG4saSx0W2MrNF0sMTEsMTI3Mjg5MzM1MyksaT1mKGksaCxyLG4sdFtjKzddLDE2LC0xNTU0OTc2MzIpLG49ZihuLGksaCxyLHRbYysxMF0sMjMsLTEwOTQ3MzA2NDApLHI9ZihyLG4saSxoLHRbYysxM10sNCw2ODEyNzkxNzQpLGg9ZihoLHIsbixpLHRbYyswXSwxMSwtMzU4NTM3MjIyKSxpPWYoaSxoLHIsbix0W2MrM10sMTYsLTcyMjUyMTk3OSksbj1mKG4saSxoLHIsdFtjKzZdLDIzLDc2MDI5MTg5KSxyPWYocixuLGksaCx0W2MrOV0sNCwtNjQwMzY0NDg3KSxoPWYoaCxyLG4saSx0W2MrMTJdLDExLC00MjE4MTU4MzUpLGk9ZihpLGgscixuLHRbYysxNV0sMTYsNTMwNzQyNTIwKSxuPWYobixpLGgscix0W2MrMl0sMjMsLTk5NTMzODY1MSkscj1zKHIsbixpLGgsdFtjKzBdLDYsLTE5ODYzMDg0NCksaD1zKGgscixuLGksdFtjKzddLDEwLDExMjY4OTE0MTUpLGk9cyhpLGgscixuLHRbYysxNF0sMTUsLTE0MTYzNTQ5MDUpLG49cyhuLGksaCxyLHRbYys1XSwyMSwtNTc0MzQwNTUpLHI9cyhyLG4saSxoLHRbYysxMl0sNiwxNzAwNDg1NTcxKSxoPXMoaCxyLG4saSx0W2MrM10sMTAsLTE4OTQ5ODY2MDYpLGk9cyhpLGgscixuLHRbYysxMF0sMTUsLTEwNTE1MjMpLG49cyhuLGksaCxyLHRbYysxXSwyMSwtMjA1NDkyMjc5OSkscj1zKHIsbixpLGgsdFtjKzhdLDYsMTg3MzMxMzM1OSksaD1zKGgscixuLGksdFtjKzE1XSwxMCwtMzA2MTE3NDQpLGk9cyhpLGgscixuLHRbYys2XSwxNSwtMTU2MDE5ODM4MCksbj1zKG4saSxoLHIsdFtjKzEzXSwyMSwxMzA5MTUxNjQ5KSxyPXMocixuLGksaCx0W2MrNF0sNiwtMTQ1NTIzMDcwKSxoPXMoaCxyLG4saSx0W2MrMTFdLDEwLC0xMTIwMjEwMzc5KSxpPXMoaSxoLHIsbix0W2MrMl0sMTUsNzE4Nzg3MjU5KSxuPXMobixpLGgscix0W2MrOV0sMjEsLTM0MzQ4NTU1MSkscj11KHIsZCksbj11KG4sbCksaT11KGkscCksaD11KGgsYil9cmV0dXJuIEFycmF5KHIsbixpLGgpfWZ1bmN0aW9uIGkodCxlLHIsbixpLG8pe3JldHVybiB1KGgodSh1KGUsdCksdShuLG8pKSxpKSxyKX1mdW5jdGlvbiBvKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKGUmcnx+ZSZuLHQsZSxvLGEsZil9ZnVuY3Rpb24gYSh0LGUscixuLG8sYSxmKXtyZXR1cm4gaShlJm58ciZ+bix0LGUsbyxhLGYpfWZ1bmN0aW9uIGYodCxlLHIsbixvLGEsZil7cmV0dXJuIGkoZV5yXm4sdCxlLG8sYSxmKX1mdW5jdGlvbiBzKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKHJeKGV8fm4pLHQsZSxvLGEsZil9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSg2NTUzNSZ0KSsoNjU1MzUmZSksbj0odD4+MTYpKyhlPj4xNikrKHI+PjE2KTtyZXR1cm4gbjw8MTZ8NjU1MzUmcn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9dmFyIGM9cig1NjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYy5oYXNoKHQsbiwxNil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmJpZ251bT1yKDcwKSxuLmRlZmluZT1yKDU4MCkuZGVmaW5lLG4uYmFzZT1yKDcxKSxuLmNvbnN0YW50cz1yKDIzNSksbi5kZWNvZGVycz1yKDU4NCksbi5lbmNvZGVycz1yKDU4Nil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt2YXIgZSxyO3JldHVybiBlPXQ+Znx8dDwwPyhyPU1hdGguYWJzKHQpJWYsdDwwP2YtcjpyKTp0fWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDt0KyspdFtlXT0wO3JldHVybiExfWZ1bmN0aW9uIGkoKXt0aGlzLlNCT1g9W10sdGhpcy5JTlZfU0JPWD1bXSx0aGlzLlNVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLklOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5pbml0KCksdGhpcy5SQ09OPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC80LHI9bmV3IEFycmF5KGUpLG49LTE7KytuPGU7KXJbbl09dC5yZWFkVUludDMyQkUoNCpuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3RoaXMuX2tleT1vKHQpLHRoaXMuX2RvUmVzZXQoKX12YXIgZj1NYXRoLnBvdygyLDMyKTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvLGEsZixzLHU7Zm9yKHQ9ZnVuY3Rpb24oKXt2YXIgdCxyO2ZvcihyPVtdLGU9dD0wO3Q8MjU2O2U9Kyt0KWU8MTI4P3IucHVzaChlPDwxKTpyLnB1c2goZTw8MV4yODMpO3JldHVybiByfSgpLGk9MCxzPTAsZT11PTA7dTwyNTY7ZT0rK3Upcj1zXnM8PDFeczw8Ml5zPDwzXnM8PDQscj1yPj4+OF4yNTUmcl45OSx0aGlzLlNCT1hbaV09cix0aGlzLklOVl9TQk9YW3JdPWksbz10W2ldLGE9dFtvXSxmPXRbYV0sbj0yNTcqdFtyXV4xNjg0MzAwOCpyLHRoaXMuU1VCX01JWFswXVtpXT1uPDwyNHxuPj4+OCx0aGlzLlNVQl9NSVhbMV1baV09bjw8MTZ8bj4+PjE2LHRoaXMuU1VCX01JWFsyXVtpXT1uPDw4fG4+Pj4yNCx0aGlzLlNVQl9NSVhbM11baV09bixuPTE2ODQzMDA5KmZeNjU1MzcqYV4yNTcqb14xNjg0MzAwOCppLHRoaXMuSU5WX1NVQl9NSVhbMF1bcl09bjw8MjR8bj4+PjgsdGhpcy5JTlZfU1VCX01JWFsxXVtyXT1uPDwxNnxuPj4+MTYsdGhpcy5JTlZfU1VCX01JWFsyXVtyXT1uPDw4fG4+Pj4yNCx0aGlzLklOVl9TVUJfTUlYWzNdW3JdPW4sMD09PWk/aT1zPTE6KGk9b150W3RbdFtmXm9dXV0sc149dFt0W3NdXSk7cmV0dXJuITB9O3ZhciBzPW5ldyBpO2EuYmxvY2tTaXplPTE2LGEucHJvdG90eXBlLmJsb2NrU2l6ZT1hLmJsb2NrU2l6ZSxhLmtleVNpemU9MzIsYS5wcm90b3R5cGUua2V5U2l6ZT1hLmtleVNpemUsYS5wcm90b3R5cGUuX2RvUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG87Zm9yKHI9dGhpcy5fa2V5LGU9ci5sZW5ndGgsdGhpcy5fblJvdW5kcz1lKzYsaT00Kih0aGlzLl9uUm91bmRzKzEpLHRoaXMuX2tleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKXRoaXMuX2tleVNjaGVkdWxlW25dPW48ZT9yW25dOihvPXRoaXMuX2tleVNjaGVkdWxlW24tMV0sbiVlPT09MD8obz1vPDw4fG8+Pj4yNCxvPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb10sb149cy5SQ09OW24vZXwwXTw8MjQpOmU+NiYmbiVlPT09ND9vPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb106dm9pZCAwLHRoaXMuX2tleVNjaGVkdWxlW24tZV1ebyk7Zm9yKHRoaXMuX2ludktleVNjaGVkdWxlPVtdLHQ9MDt0PGk7dCsrKW49aS10LG89dGhpcy5fa2V5U2NoZWR1bGVbbi0odCU0PzA6NCldLHRoaXMuX2ludktleVNjaGVkdWxlW3RdPXQ8NHx8bjw9ND9vOnMuSU5WX1NVQl9NSVhbMF1bcy5TQk9YW28+Pj4yNF1dXnMuSU5WX1NVQl9NSVhbMV1bcy5TQk9YW28+Pj4xNiYyNTVdXV5zLklOVl9TVUJfTUlYWzJdW3MuU0JPWFtvPj4+OCYyNTVdXV5zLklOVl9TVUJfTUlYWzNdW3MuU0JPWFsyNTUmb11dO3JldHVybiEwfSxhLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9rZXlTY2hlZHVsZSxzLlNVQl9NSVgscy5TQk9YKSxuPW5ldyB0KDE2KTtyZXR1cm4gbi53cml0ZVVJbnQzMkJFKHJbMF0sMCksbi53cml0ZVVJbnQzMkJFKHJbMV0sNCksbi53cml0ZVVJbnQzMkJFKHJbMl0sOCksbi53cml0ZVVJbnQzMkJFKHJbM10sMTIpLG59LGEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPVtlWzNdLGVbMV1dO2VbMV09clswXSxlWzNdPXJbMV07dmFyIG49dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5faW52S2V5U2NoZWR1bGUscy5JTlZfU1VCX01JWCxzLklOVl9TQk9YKSxpPW5ldyB0KDE2KTtyZXR1cm4gaS53cml0ZVVJbnQzMkJFKG5bMF0sMCksaS53cml0ZVVJbnQzMkJFKG5bM10sNCksaS53cml0ZVVJbnQzMkJFKG5bMl0sOCksaS53cml0ZVVJbnQzMkJFKG5bMV0sMTIpLGl9LGEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bih0aGlzLl9rZXlTY2hlZHVsZSksbih0aGlzLl9pbnZLZXlTY2hlZHVsZSksbih0aGlzLl9rZXkpfSxhLnByb3RvdHlwZS5fZG9DcnlwdEJsb2NrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEsZixzLHUsaCxjLGQsbDthPXRbMF1eZVswXSxmPXRbMV1eZVsxXSxzPXRbMl1eZVsyXSx1PXRbM11eZVszXSxvPTQ7Zm9yKHZhciBwPTE7cDx0aGlzLl9uUm91bmRzO3ArKyloPW5bMF1bYT4+PjI0XV5uWzFdW2Y+Pj4xNiYyNTVdXm5bMl1bcz4+PjgmMjU1XV5uWzNdWzI1NSZ1XV5lW28rK10sYz1uWzBdW2Y+Pj4yNF1eblsxXVtzPj4+MTYmMjU1XV5uWzJdW3U+Pj44JjI1NV1eblszXVsyNTUmYV1eZVtvKytdLGQ9blswXVtzPj4+MjRdXm5bMV1bdT4+PjE2JjI1NV1eblsyXVthPj4+OCYyNTVdXm5bM11bMjU1JmZdXmVbbysrXSxsPW5bMF1bdT4+PjI0XV5uWzFdW2E+Pj4xNiYyNTVdXm5bMl1bZj4+PjgmMjU1XV5uWzNdWzI1NSZzXV5lW28rK10sYT1oLGY9YyxzPWQsdT1sO3JldHVybiBoPShpW2E+Pj4yNF08PDI0fGlbZj4+PjE2JjI1NV08PDE2fGlbcz4+PjgmMjU1XTw8OHxpWzI1NSZ1XSleZVtvKytdLGM9KGlbZj4+PjI0XTw8MjR8aVtzPj4+MTYmMjU1XTw8MTZ8aVt1Pj4+OCYyNTVdPDw4fGlbMjU1JmFdKV5lW28rK10sZD0oaVtzPj4+MjRdPDwyNHxpW3U+Pj4xNiYyNTVdPDwxNnxpW2E+Pj44JjI1NV08PDh8aVsyNTUmZl0pXmVbbysrXSxsPShpW3U+Pj4yNF08PDI0fGlbYT4+PjE2JjI1NV08PDE2fGlbZj4+PjgmMjU1XTw8OHxpWzI1NSZzXSleZVtvKytdLFtyKGgpLHIoYykscihkKSxyKGwpXX0sZS5BRVM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aDtyLS07KXtpZihlPXQucmVhZFVJbnQ4KHIpLDI1NSE9PWUpe2UrKyx0LndyaXRlVUludDgoZSxyKTticmVha310LndyaXRlVUludDgoMCxyKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpO3JldHVybiBuKHQuX3ByZXYpLGV9dmFyIG89cig3Mik7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxpKGUpXSk7dmFyIG49ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxvKHIsbil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e30sdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWZ1bmN0aW9uIG4odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdH1mdW5jdGlvbiBpKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIG8odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHZvaWQgMD09PXR9dC5leHBvcnRzPXIsci5FdmVudEVtaXR0ZXI9cixyLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMCxyLmRlZmF1bHRNYXhMaXN0ZW5lcnM9MTAsci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCFpKHQpfHx0PDB8fGlzTmFOKHQpKXRocm93IFR5cGVFcnJvcihcIm4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sci5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLGksZixzLHU7aWYodGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSxcImVycm9yXCI9PT10JiYoIXRoaXMuX2V2ZW50cy5lcnJvcnx8byh0aGlzLl9ldmVudHMuZXJyb3IpJiYhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpe2lmKGU9YXJndW1lbnRzWzFdLGUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBlO3ZhciBoPW5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4gKCcrZStcIilcIik7dGhyb3cgaC5jb250ZXh0PWUsaH1pZihyPXRoaXMuX2V2ZW50c1t0XSxhKHIpKXJldHVybiExO2lmKG4ocikpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSAyOnIuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSk7YnJlYWs7Y2FzZSAzOnIuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2RlZmF1bHQ6Zj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksci5hcHBseSh0aGlzLGYpfWVsc2UgaWYobyhyKSlmb3IoZj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksdT1yLnNsaWNlKCksaT11Lmxlbmd0aCxzPTA7czxpO3MrKyl1W3NdLmFwcGx5KHRoaXMsZik7cmV0dXJuITB9LHIucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIGk7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3JldHVybiB0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lciYmdGhpcy5lbWl0KFwibmV3TGlzdGVuZXJcIix0LG4oZS5saXN0ZW5lcik/ZS5saXN0ZW5lcjplKSx0aGlzLl9ldmVudHNbdF0/byh0aGlzLl9ldmVudHNbdF0pP3RoaXMuX2V2ZW50c1t0XS5wdXNoKGUpOnRoaXMuX2V2ZW50c1t0XT1bdGhpcy5fZXZlbnRzW3RdLGVdOnRoaXMuX2V2ZW50c1t0XT1lLG8odGhpcy5fZXZlbnRzW3RdKSYmIXRoaXMuX2V2ZW50c1t0XS53YXJuZWQmJihpPWEodGhpcy5fbWF4TGlzdGVuZXJzKT9yLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dGhpcy5fbWF4TGlzdGVuZXJzLGkmJmk+MCYmdGhpcy5fZXZlbnRzW3RdLmxlbmd0aD5pJiYodGhpcy5fZXZlbnRzW3RdLndhcm5lZD0hMCxjb25zb2xlLmVycm9yKFwiKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC5cIix0aGlzLl9ldmVudHNbdF0ubGVuZ3RoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjb25zb2xlLnRyYWNlJiZjb25zb2xlLnRyYWNlKCkpKSx0aGlzfSxyLnByb3RvdHlwZS5vbj1yLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixyLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxyKSxpfHwoaT0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3ZhciBpPSExO3JldHVybiByLmxpc3RlbmVyPWUsdGhpcy5vbih0LHIpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLGY7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2lmKCF0aGlzLl9ldmVudHN8fCF0aGlzLl9ldmVudHNbdF0pcmV0dXJuIHRoaXM7aWYocj10aGlzLl9ldmVudHNbdF0sYT1yLmxlbmd0aCxpPS0xLHI9PT1lfHxuKHIubGlzdGVuZXIpJiZyLmxpc3RlbmVyPT09ZSlkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LGUpO2Vsc2UgaWYobyhyKSl7Zm9yKGY9YTtmLS0gPjA7KWlmKHJbZl09PT1lfHxyW2ZdLmxpc3RlbmVyJiZyW2ZdLmxpc3RlbmVyPT09ZSl7aT1mO2JyZWFrfWlmKGk8MClyZXR1cm4gdGhpczsxPT09ci5sZW5ndGg/KHIubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ci5zcGxpY2UoaSwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxlKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm4gdGhpcztpZighdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9ldmVudHM9e306dGhpcy5fZXZlbnRzW3RdJiZkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihlIGluIHRoaXMuX2V2ZW50cylcInJlbW92ZUxpc3RlbmVyXCIhPT1lJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9e30sdGhpc31pZihyPXRoaXMuX2V2ZW50c1t0XSxuKHIpKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyKTtlbHNlIGlmKHIpZm9yKDtyLmxlbmd0aDspdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHJbci5sZW5ndGgtMV0pO3JldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXN9LHIucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gZT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50c1t0XT9uKHRoaXMuX2V2ZW50c1t0XSk/W3RoaXMuX2V2ZW50c1t0XV06dGhpcy5fZXZlbnRzW3RdLnNsaWNlKCk6W119LHIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXZlbnRzKXt2YXIgZT10aGlzLl9ldmVudHNbdF07aWYobihlKSlyZXR1cm4gMTtpZihlKXJldHVybiBlLmxlbmd0aH1yZXR1cm4gMH0sci5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGlzdGVuZXJDb3VudChlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtuZXdJbnZhbGlkQXNuMUVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBFcnJvcjtyZXR1cm4gZS5uYW1lPVwiSW52YWxpZEFzbjFFcnJvclwiLGUubWVzc2FnZT10fHxcIlwiLGV9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e0VPQzowLEJvb2xlYW46MSxJbnRlZ2VyOjIsQml0U3RyaW5nOjMsT2N0ZXRTdHJpbmc6NCxOdWxsOjUsT0lEOjYsT2JqZWN0RGVzY3JpcHRvcjo3LEV4dGVybmFsOjgsUmVhbDo5LEVudW1lcmF0aW9uOjEwLFBEVjoxMSxVdGY4U3RyaW5nOjEyLFJlbGF0aXZlT0lEOjEzLFNlcXVlbmNlOjE2LFNldDoxNyxOdW1lcmljU3RyaW5nOjE4LFByaW50YWJsZVN0cmluZzoxOSxUNjFTdHJpbmc6MjAsVmlkZW90ZXhTdHJpbmc6MjEsSUE1U3RyaW5nOjIyLFVUQ1RpbWU6MjMsR2VuZXJhbGl6ZWRUaW1lOjI0LEdyYXBoaWNTdHJpbmc6MjUsVmlzaWJsZVN0cmluZzoyNixHZW5lcmFsU3RyaW5nOjI4LFVuaXZlcnNhbFN0cmluZzoyOSxDaGFyYWN0ZXJTdHJpbmc6MzAsQk1QU3RyaW5nOjMxLENvbnN0cnVjdG9yOjMyLENvbnRleHQ6MTI4fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPXIoOTMpLHM9cig5MSksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe24odGhpcyxlKTt2YXIgcj1pKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmNhbGwodGhpcykpO3JldHVybiByLmhhc2g9Zi5jcmVhdGVIYXNoKHQpLHJ9cmV0dXJuIG8oZSx0KSxhKGUsW3trZXk6XCJ3cml0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaGFzaC51cGRhdGUodCl9fSx7a2V5OlwiZ2V0RGlnZXN0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoLmRpZ2VzdCgpfX1dLFt7a2V5OlwiZ2V0TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGYuY3JlYXRlSGFzaCh0KS5kaWdlc3QoKS5sZW5ndGh9fV0pLGV9KHMpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMjYxKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LG51bGwsW3trZXk6XCJnZXRDbGFzc0Zyb21UeXBlSWRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXRocm93IG5ldyBvKFwiVHlwZSBcIitlK1wiIGlzIG5vdCBzdXBwb3J0ZWRcIik7dmFyIHI9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGY9dC5yZWdpc3RlcmVkVHlwZXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oYT1mLm5leHQoKSkuZG9uZSk7cj0hMCl7dmFyIHM9YS52YWx1ZTtpZihlPT09cy50eXBlSWQpcmV0dXJuIHMuQ2xhc3N9fWNhdGNoKHQpe249ITAsaT10fWZpbmFsbHl7dHJ5eyFyJiZmLnJldHVybiYmZi5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19dGhyb3cgbmV3IG8oXCJUeXBlIFwiK2UrXCIgaXMgbm90IHN1cHBvcnRlZFwiKX19LHtrZXk6XCJyZWdpc3RlclR5cGVcIix2YWx1ZTpmdW5jdGlvbihlKXt0LnJlZ2lzdGVyZWRUeXBlcy5wdXNoKHt0eXBlSWQ6ZS5UWVBFX0lELENsYXNzOmV9KX19XSksdH0oKTthLnJlZ2lzdGVyZWRUeXBlcz1bXSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBuKHQsbnVsbCxbe2tleTpcImRlY29kZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQucmVwbGFjZSgvXFwtL2csXCIrXCIpLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIG5ldyBlKHIsXCJiYXNlNjRcIil9fSx7a2V5OlwiZW5jb2RlXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvPS9nLFwiXCIpLnJlcGxhY2UoL1xcKy9nLFwiLVwiKS5yZXBsYWNlKC9cXC8vZyxcIl9cIil9fV0pLHR9KCk7dC5leHBvcnRzPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDE2NCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDExKSxpPXIoNDcpLG89cigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHRoaXMpLHI9byhlLmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLGY9aShhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyKSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHU9dm9pZCAwPT09cz9yOmkocyxyKTt1PmY7KWVbZisrXT10O3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOSksaT1yKDM3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2UgaW4gdD9uLmYodCxlLGkoMCxyKSk6dFtlXT1yfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDQpLmRvY3VtZW50LG89bihpKSYmbihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1cImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZlwiLnNwbGl0KFwiLFwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNykoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXtcIi8uL1wiW3RdKGUpfWNhdGNoKHIpe3RyeXtyZXR1cm4gZVtuXT0hMSwhXCIvLi9cIlt0XShlKX1jYXRjaCh0KXt9fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQpLmRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigxMzIpLnNldDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLGE9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihvPWEucHJvdG90eXBlKSE9PXIucHJvdG90eXBlJiZuKG8pJiZpJiZpKHQsbyksdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDU2KSxpPXIoNykoXCJpdGVyYXRvclwiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihuLkFycmF5PT09dHx8b1tpXT09PXQpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjMpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PW4odCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0MiksaT1yKDM3KSxvPXIoNTcpLGE9e307cigxNCkoYSxyKDcpKFwiaXRlcmF0b3JcIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHQuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dC5wcm90b3R5cGU9bihhLHtuZXh0OmkoMSxyKX0pLG8odCxlK1wiIEl0ZXJhdG9yXCIpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDEpLGk9cigwKSxvPXIoMTUpLGE9cigxNCksZj1yKDEyKSxzPXIoNTYpLHU9cigxMjcpLGg9cig1NyksYz1yKDIxKSxkPXIoNykoXCJpdGVyYXRvclwiKSxsPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSkscD1cIkBAaXRlcmF0b3JcIixiPVwia2V5c1wiLHY9XCJ2YWx1ZXNcIix5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixtLGcsdyxfKXt1KHIsZSxtKTt2YXIgTSxTLEUsQT1mdW5jdGlvbih0KXtpZighbCYmdCBpbiBCKXJldHVybiBCW3RdO3N3aXRjaCh0KXtjYXNlIGI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9O2Nhc2UgdjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9fSxrPWUrXCIgSXRlcmF0b3JcIix4PWc9PXYsST0hMSxCPXQucHJvdG90eXBlLE89QltkXXx8QltwXXx8ZyYmQltnXSxSPU98fEEoZyksUD1nP3g/QShcImVudHJpZXNcIik6Ujp2b2lkIDAsVD1cIkFycmF5XCI9PWU/Qi5lbnRyaWVzfHxPOk87aWYoVCYmKEU9YyhULmNhbGwobmV3IHQpKSxFIT09T2JqZWN0LnByb3RvdHlwZSYmKGgoRSxrLCEwKSxufHxmKEUsZCl8fGEoRSxkLHkpKSkseCYmTyYmTy5uYW1lIT09diYmKEk9ITAsUj1mdW5jdGlvbigpe3JldHVybiBPLmNhbGwodGhpcyl9KSxuJiYhX3x8IWwmJiFJJiZCW2RdfHxhKEIsZCxSKSxzW2VdPVIsc1trXT15LGcpaWYoTT17dmFsdWVzOng/UjpBKHYpLGtleXM6dz9SOkEoYiksZW50cmllczpQfSxfKWZvcihTIGluIE0pUyBpbiBCfHxvKEIsUyxNW1NdKTtlbHNlIGkoaS5QK2kuRioobHx8SSksZSxNKTtyZXR1cm4gTX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5leHBtMTt0LmV4cG9ydHM9IXJ8fHIoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8cigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHxyKC0yZS0xNykhPS0yZS0xNz9mdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6dD4tMWUtNiYmdDwxZS02P3QrdCp0LzI6TWF0aC5leHAodCktMX06cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMTM5KS5zZXQsbz1uLk11dGF0aW9uT2JzZXJ2ZXJ8fG4uV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhPW4ucHJvY2VzcyxmPW4uUHJvbWlzZSxzPVwicHJvY2Vzc1wiPT1yKDIzKShhKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsdT1mdW5jdGlvbigpe3ZhciBuLGk7Zm9yKHMmJihuPWEuZG9tYWluKSYmbi5leGl0KCk7dDspe2k9dC5mbix0PXQubmV4dDt0cnl7aSgpfWNhdGNoKG4pe3Rocm93IHQ/cigpOmU9dm9pZCAwLG59fWU9dm9pZCAwLG4mJm4uZW50ZXIoKX07aWYocylyPWZ1bmN0aW9uKCl7YS5uZXh0VGljayh1KX07ZWxzZSBpZihvKXt2YXIgaD0hMCxjPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO25ldyBvKHUpLm9ic2VydmUoYyx7Y2hhcmFjdGVyRGF0YTohMH0pLHI9ZnVuY3Rpb24oKXtjLmRhdGE9aD0haH19ZWxzZSBpZihmJiZmLnJlc29sdmUpe3ZhciBkPWYucmVzb2x2ZSgpO3I9ZnVuY3Rpb24oKXtkLnRoZW4odSl9fWVsc2Ugcj1mdW5jdGlvbigpe2kuY2FsbChuLHUpfTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9e2ZuOm4sbmV4dDp2b2lkIDB9O2UmJihlLm5leHQ9aSksdHx8KHQ9aSxyKCkpLGU9aX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMyksbz1mdW5jdGlvbih0LGUpe2lmKGkodCksIW4oZSkmJm51bGwhPT1lKXRocm93IFR5cGVFcnJvcihlK1wiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKX07dC5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoXCJfX3Byb3RvX19cImlue30/ZnVuY3Rpb24odCxlLG4pe3RyeXtuPXIoMzMpKEZ1bmN0aW9uLmNhbGwscigyMCkuZihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCwyKSxuKHQsW10pLGU9ISh0IGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKHQpe2U9ITB9cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG8odCxyKSxlP3QuX19wcm90b19fPXI6bih0LHIpLHR9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpvfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODcpKFwia2V5c1wiKSxpPXIoNDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XXx8KG5bdF09aSh0KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzKSxpPXIoMTMpLG89cig3KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT1uKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHx2b2lkIDA9PShyPW4oYSlbb10pP2U6aShyKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM4KSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbyxhLGY9U3RyaW5nKGkoZSkpLHM9bihyKSx1PWYubGVuZ3RoO3JldHVybiBzPDB8fHM+PXU/dD9cIlwiOnZvaWQgMDoobz1mLmNoYXJDb2RlQXQocyksbzw1NTI5Nnx8bz41NjMxOXx8cysxPT09dXx8KGE9Zi5jaGFyQ29kZUF0KHMrMSkpPDU2MzIwfHxhPjU3MzQzP3Q/Zi5jaGFyQXQocyk6bzp0P2Yuc2xpY2UocyxzKzIpOihvLTU1Mjk2PDwxMCkrKGEtNTYzMjApKzY1NTM2KX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4MyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG4oZSkpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcoaSh0KSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzOCksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKGkodGhpcykpLHI9XCJcIixvPW4odCk7aWYobzwwfHxvPT0xLzApdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO2Zvcig7bz4wOyhvPj4+PTEpJiYoZSs9ZSkpMSZvJiYocis9ZSk7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1cIlxcdFxcblxcdlxcZlxcciDCoOGagOGgjuKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XFx1ZmVmZlwifSxmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9cigzMyksZj1yKDgyKSxzPXIoMTIzKSx1PXIoMTIwKSxoPXIoNCksYz1oLnByb2Nlc3MsZD1oLnNldEltbWVkaWF0ZSxsPWguY2xlYXJJbW1lZGlhdGUscD1oLk1lc3NhZ2VDaGFubmVsLGI9MCx2PXt9LHk9XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixtPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYodi5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9dlt0XTtkZWxldGUgdlt0XSxlKCl9fSxnPWZ1bmN0aW9uKHQpe20uY2FsbCh0LmRhdGEpfTtkJiZsfHwoZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO2FyZ3VtZW50cy5sZW5ndGg+cjspZS5wdXNoKGFyZ3VtZW50c1tyKytdKTtyZXR1cm4gdlsrK2JdPWZ1bmN0aW9uKCl7ZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCksZSl9LG4oYiksYn0sbD1mdW5jdGlvbih0KXtkZWxldGUgdlt0XX0sXCJwcm9jZXNzXCI9PXIoMjMpKGMpP249ZnVuY3Rpb24odCl7Yy5uZXh0VGljayhhKG0sdCwxKSl9OnA/KGk9bmV3IHAsbz1pLnBvcnQyLGkucG9ydDEub25tZXNzYWdlPWcsbj1hKG8ucG9zdE1lc3NhZ2UsbywxKSk6aC5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWguaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbih0KXtoLnBvc3RNZXNzYWdlKHQrXCJcIixcIipcIil9LGguYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixnLCExKSk6bj15IGluIHUoXCJzY3JpcHRcIik/ZnVuY3Rpb24odCl7cy5hcHBlbmRDaGlsZCh1KFwic2NyaXB0XCIpKVt5XT1mdW5jdGlvbigpe3MucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChhKG0sdCwxKSwwKX0pLHQuZXhwb3J0cz17c2V0OmQsY2xlYXI6bH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cig4KSxvPXIoNDEpLGE9cig4OCksZj1yKDE0KSxzPXIoNDUpLHU9cig1KSxoPXIoNDApLGM9cigzOCksZD1yKDEwKSxsPXIoNDMpLmYscD1yKDkpLmYsYj1yKDExOCksdj1yKDU3KSx5PVwiQXJyYXlCdWZmZXJcIixtPVwiRGF0YVZpZXdcIixnPVwicHJvdG90eXBlXCIsdz1cIldyb25nIGxlbmd0aCFcIixfPVwiV3JvbmcgaW5kZXghXCIsTT1uW3ldLFM9blttXSxFPW4uTWF0aCxBPW4uUmFuZ2VFcnJvcixrPW4uSW5maW5pdHkseD1NLEk9RS5hYnMsQj1FLnBvdyxPPUUuZmxvb3IsUj1FLmxvZyxQPUUuTE4yLFQ9XCJidWZmZXJcIixqPVwiYnl0ZUxlbmd0aFwiLEM9XCJieXRlT2Zmc2V0XCIsTj1pP1wiX2JcIjpULEw9aT9cIl9sXCI6aixVPWk/XCJfb1wiOkMsej1mdW5jdGlvbih0LGUscil7XG52YXIgbixpLG8sYT1BcnJheShyKSxmPTgqci1lLTEscz0oMTw8ZiktMSx1PXM+PjEsaD0yMz09PWU/QigyLC0yNCktQigyLC03Nyk6MCxjPTAsZD10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9SSh0KSx0IT10fHx0PT09az8oaT10IT10PzE6MCxuPXMpOihuPU8oUih0KS9QKSx0KihvPUIoMiwtbikpPDEmJihuLS0sbyo9MiksdCs9bit1Pj0xP2gvbzpoKkIoMiwxLXUpLHQqbz49MiYmKG4rKyxvLz0yKSxuK3U+PXM/KGk9MCxuPXMpOm4rdT49MT8oaT0odCpvLTEpKkIoMixlKSxuKz11KTooaT10KkIoMix1LTEpKkIoMixlKSxuPTApKTtlPj04O2FbYysrXT0yNTUmaSxpLz0yNTYsZS09OCk7Zm9yKG49bjw8ZXxpLGYrPWU7Zj4wO2FbYysrXT0yNTUmbixuLz0yNTYsZi09OCk7cmV0dXJuIGFbLS1jXXw9MTI4KmQsYX0sRD1mdW5jdGlvbih0LGUscil7dmFyIG4saT04KnItZS0xLG89KDE8PGkpLTEsYT1vPj4xLGY9aS03LHM9ci0xLHU9dFtzLS1dLGg9MTI3JnU7Zm9yKHU+Pj03O2Y+MDtoPTI1NipoK3Rbc10scy0tLGYtPTgpO2ZvcihuPWgmKDE8PC1mKS0xLGg+Pj0tZixmKz1lO2Y+MDtuPTI1NipuK3Rbc10scy0tLGYtPTgpO2lmKDA9PT1oKWg9MS1hO2Vsc2V7aWYoaD09PW8pcmV0dXJuIG4/TmFOOnU/LWs6aztuKz1CKDIsZSksaC09YX1yZXR1cm4odT8tMToxKSpuKkIoMixoLWUpfSxxPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LEY9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0XX0sSz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfSxHPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NSx0Pj4xNiYyNTUsdD4+MjQmMjU1XX0sVj1mdW5jdGlvbih0KXtyZXR1cm4geih0LDUyLDgpfSxIPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQsMjMsNCl9LFg9ZnVuY3Rpb24odCxlLHIpe3AodFtnXSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tyXX19KX0sWT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0rcixvPWMoaSk7aWYoaSE9b3x8bzwwfHxvK2U+dFtMXSl0aHJvdyBBKF8pO3ZhciBhPXRbTl0uX2IsZj1vK3RbVV0scz1hLnNsaWNlKGYsZitlKTtyZXR1cm4gbj9zOnMucmV2ZXJzZSgpfSxXPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgYT0rcixmPWMoYSk7aWYoYSE9Znx8ZjwwfHxmK2U+dFtMXSl0aHJvdyBBKF8pO2Zvcih2YXIgcz10W05dLl9iLHU9Zit0W1VdLGg9bigraSksZD0wO2Q8ZTtkKyspc1t1K2RdPWhbbz9kOmUtZC0xXX0sWj1mdW5jdGlvbih0LGUpe2godCxNLHkpO3ZhciByPStlLG49ZChyKTtpZihyIT1uKXRocm93IEEodyk7cmV0dXJuIG59O2lmKGEuQUJWKXtpZighdShmdW5jdGlvbigpe25ldyBNfSl8fCF1KGZ1bmN0aW9uKCl7bmV3IE0oLjUpfSkpe009ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KFoodGhpcyx0KSl9O2Zvcih2YXIgSiwkPU1bZ109eFtnXSxRPWwoeCksdHQ9MDtRLmxlbmd0aD50dDspKEo9UVt0dCsrXSlpbiBNfHxmKE0sSix4W0pdKTtvfHwoJC5jb25zdHJ1Y3Rvcj1NKX12YXIgZXQ9bmV3IFMobmV3IE0oMikpLHJ0PVNbZ10uc2V0SW50ODtldC5zZXRJbnQ4KDAsMjE0NzQ4MzY0OCksZXQuc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFldC5nZXRJbnQ4KDApJiZldC5nZXRJbnQ4KDEpfHxzKFNbZ10se3NldEludDg6ZnVuY3Rpb24odCxlKXtydC5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe3J0LmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9fSwhMCl9ZWxzZSBNPWZ1bmN0aW9uKHQpe3ZhciBlPVoodGhpcyx0KTt0aGlzLl9iPWIuY2FsbChBcnJheShlKSwwKSx0aGlzW0xdPWV9LFM9ZnVuY3Rpb24odCxlLHIpe2godGhpcyxTLG0pLGgodCxNLG0pO3ZhciBuPXRbTF0saT1jKGUpO2lmKGk8MHx8aT5uKXRocm93IEEoXCJXcm9uZyBvZmZzZXQhXCIpO2lmKHI9dm9pZCAwPT09cj9uLWk6ZChyKSxpK3I+bil0aHJvdyBBKHcpO3RoaXNbTl09dCx0aGlzW1VdPWksdGhpc1tMXT1yfSxpJiYoWChNLGosXCJfbFwiKSxYKFMsVCxcIl9iXCIpLFgoUyxqLFwiX2xcIiksWChTLEMsXCJfb1wiKSkscyhTW2ddLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBZKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gWSh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPVkodGhpcywyLHQsYXJndW1lbnRzWzFdKTtyZXR1cm4oZVsxXTw8OHxlWzBdKTw8MTY+PjE2fSxnZXRVaW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9WSh0aGlzLDIsdCxhcmd1bWVudHNbMV0pO3JldHVybiBlWzFdPDw4fGVbMF19LGdldEludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBxKFkodGhpcyw0LHQsYXJndW1lbnRzWzFdKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gcShZKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbih0KXtyZXR1cm4gRChZKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSksMjMsNCl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24odCl7cmV0dXJuIEQoWSh0aGlzLDgsdCxhcmd1bWVudHNbMV0pLDUyLDgpfSxzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDEsdCxGLGUpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe1codGhpcywxLHQsRixlKX0sc2V0SW50MTY6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMix0LEssZSxhcmd1bWVudHNbMl0pfSxzZXRVaW50MTY6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMix0LEssZSxhcmd1bWVudHNbMl0pfSxzZXRJbnQzMjpmdW5jdGlvbih0LGUpe1codGhpcyw0LHQsRyxlLGFyZ3VtZW50c1syXSl9LHNldFVpbnQzMjpmdW5jdGlvbih0LGUpe1codGhpcyw0LHQsRyxlLGFyZ3VtZW50c1syXSl9LHNldEZsb2F0MzI6ZnVuY3Rpb24odCxlKXtXKHRoaXMsNCx0LEgsZSxhcmd1bWVudHNbMl0pfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDgsdCxWLGUsYXJndW1lbnRzWzJdKX19KTt2KE0seSksdihTLG0pLGYoU1tnXSxhLlZJRVcsITApLGVbeV09TSxlW21dPVN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigzMiksbz1yKDQxKSxhPXIoMTg5KSxmPXIoOSkuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5TeW1ib2x8fChpLlN5bWJvbD1vP3t9Om4uU3ltYm9sfHx7fSk7XCJfXCI9PXQuY2hhckF0KDApfHx0IGluIGV8fGYoZSx0LHt2YWx1ZTphLmYodCl9KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY0KSxpPXIoNykoXCJpdGVyYXRvclwiKSxvPXIoNTYpO3QuZXhwb3J0cz1yKDMyKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbih0KXtpZih2b2lkIDAhPXQpcmV0dXJuIHRbaV18fHRbXCJAQGl0ZXJhdG9yXCJdfHxvW24odCldfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNTQpLGk9cigxNzcpLG89cig1NiksYT1yKDE3KTt0LmV4cG9ydHM9cigxMjgpKEFycmF5LFwiQXJyYXlcIixmdW5jdGlvbih0LGUpe3RoaXMuX3Q9YSh0KSx0aGlzLl9pPTAsdGhpcy5faz1lfSxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3QsZT10aGlzLl9rLHI9dGhpcy5faSsrO3JldHVybiF0fHxyPj10Lmxlbmd0aD8odGhpcy5fdD12b2lkIDAsaSgxKSk6XCJrZXlzXCI9PWU/aSgwLHIpOlwidmFsdWVzXCI9PWU/aSgwLHRbcl0pOmkoMCxbcix0W3JdXSl9LFwidmFsdWVzXCIpLG8uQXJndW1lbnRzPW8uQXJyYXksbihcImtleXNcIiksbihcInZhbHVlc1wiKSxuKFwiZW50cmllc1wiKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcigxOTkpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS51dGlscz1yKDUwNSksZS5DaXBoZXI9cig1MDIpLGUuREVTPXIoNTAzKSxlLkNCQz1yKDUwMSksZS5FREU9cig1MDQpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sbyl7ZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxcImJpbmFyeVwiKSksciYmIWUuaXNCdWZmZXIocikmJihyPW5ldyBlKHIsXCJiaW5hcnlcIikpLG4vPTgsbz1vfHwwO2Zvcih2YXIgYSxmLHM9MCx1PTAsaD1uZXcgZShuKSxjPW5ldyBlKG8pLGQ9MCxsPVtdOzspe2lmKGQrKz4wJiZsLnB1c2goYSksbC5wdXNoKHQpLHImJmwucHVzaChyKSxhPWkoZS5jb25jYXQobCkpLGw9W10sZj0wLG4+MClmb3IoOzspe2lmKDA9PT1uKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztoW3MrK109YVtmXSxuLS0sZisrfWlmKG8+MCYmZiE9PWEubGVuZ3RoKWZvcig7Oyl7aWYoMD09PW8pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2NbdSsrXT1hW2ZdLG8tLSxmKyt9aWYoMD09PW4mJjA9PT1vKWJyZWFrfWZvcihmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXT0wO3JldHVybntrZXk6aCxpdjpjfX12YXIgaT1yKDEwNSk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2VbXCJhZXMtMTI4LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTI4LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGUuYWVzMTI4PWVbXCJhZXMtMTI4LWNiY1wiXSxlLmFlczE5Mj1lW1wiYWVzLTE5Mi1jYmNcIl0sZS5hZXMyNTY9ZVtcImFlcy0yNTYtY2JjXCJdLGVbXCJhZXMtMTI4LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0xOTItZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTI1Ni1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sbyl7ZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxcImJpbmFyeVwiKSksciYmIWUuaXNCdWZmZXIocikmJihyPW5ldyBlKHIsXCJiaW5hcnlcIikpLG4vPTgsbz1vfHwwO2Zvcih2YXIgYSxmLHM9MCx1PTAsaD1uZXcgZShuKSxjPW5ldyBlKG8pLGQ9MCxsPVtdOzspe2lmKGQrKz4wJiZsLnB1c2goYSksbC5wdXNoKHQpLHImJmwucHVzaChyKSxhPWkoZS5jb25jYXQobCkpLGw9W10sZj0wLG4+MClmb3IoOzspe2lmKDA9PT1uKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztoW3MrK109YVtmXSxuLS0sZisrfWlmKG8+MCYmZiE9PWEubGVuZ3RoKWZvcig7Oyl7aWYoMD09PW8pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2NbdSsrXT1hW2ZdLG8tLSxmKyt9aWYoMD09PW4mJjA9PT1vKWJyZWFrfWZvcihmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXT0wO3JldHVybntrZXk6aCxpdjpjfX12YXIgaT1yKDEwNSk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXthLmNhbGwodGhpcyksdD10LnRvTG93ZXJDYXNlKCksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyBlKHIpKTt2YXIgbj1cInNoYTUxMlwiPT09dHx8XCJzaGEzODRcIj09PXQ/MTI4OjY0O3RoaXMuX2FsZz10LHRoaXMuX2tleT1yLHIubGVuZ3RoPm4/cj1pKHQpLnVwZGF0ZShyKS5kaWdlc3QoKTpyLmxlbmd0aDxuJiYocj1lLmNvbmNhdChbcixmXSxuKSk7Zm9yKHZhciBvPXRoaXMuX2lwYWQ9bmV3IGUobikscz10aGlzLl9vcGFkPW5ldyBlKG4pLHU9MDt1PG47dSsrKW9bdV09NTReclt1XSxzW3VdPTkyXnJbdV07dGhpcy5faGFzaD1pKHQpLnVwZGF0ZShvKX12YXIgaT1yKDU5KSxvPXIoMiksYT1yKDMxKS5UcmFuc2Zvcm0sZj1uZXcgZSgxMjgpO2YuZmlsbCgwKSxvKG4sYSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKHQsZSksdGhpc30sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dGhpcy5faGFzaC51cGRhdGUodCkscigpfSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpLHQoKX0sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIGkodGhpcy5fYWxnKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKGUpLmRpZ2VzdCh0KX0sdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBuKHQsZSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LFxubCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0LG4pe3ZhciBpPXIoMTQ5KSxvPXIoNTc2KTtlLnBia2RmMj1mdW5jdGlvbih0LHIsbixpLGEsZil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKGY9YSxhPXZvaWQgMCksbyhuLGkpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGYpdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyXCIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmKG51bGwsZS5wYmtkZjJTeW5jKHQscixuLGksYSkpfSl9O3ZhciBhO2lmKHQuYnJvd3NlcilhPVwidXRmLThcIjtlbHNle3ZhciBmPXBhcnNlSW50KHQudmVyc2lvbi5zcGxpdChcIi5cIilbMF0uc2xpY2UoMSksMTApO2E9Zj49Nj9cInV0Zi04XCI6XCJiaW5hcnlcIn1lLnBia2RmMlN5bmM9ZnVuY3Rpb24odCxlLHIsZixzKXtuLmlzQnVmZmVyKHQpfHwodD1uZXcgbih0LGEpKSxuLmlzQnVmZmVyKGUpfHwoZT1uZXcgbihlLGEpKSxvKHIsZikscz1zfHxcInNoYTFcIjt2YXIgdSxoPTEsYz1uZXcgbihmKSxkPW5ldyBuKGUubGVuZ3RoKzQpO2UuY29weShkLDAsMCxlLmxlbmd0aCk7Zm9yKHZhciBsLHAsYj0xO2I8PWg7YisrKXtkLndyaXRlVUludDMyQkUoYixlLmxlbmd0aCk7dmFyIHY9aShzLHQpLnVwZGF0ZShkKS5kaWdlc3QoKTt1fHwodT12Lmxlbmd0aCxwPW5ldyBuKHUpLGg9TWF0aC5jZWlsKGYvdSksbD1mLShoLTEpKnUpLHYuY29weShwLDAsMCx1KTtmb3IodmFyIHk9MTt5PHI7eSsrKXt2PWkocyx0KS51cGRhdGUodikuZGlnZXN0KCk7Zm9yKHZhciBtPTA7bTx1O20rKylwW21dXj12W21dfXZhciBnPShiLTEpKnUsdz1iPT09aD9sOnU7cC5jb3B5KGMsZywwLHcpfXJldHVybiBjfX0pLmNhbGwoZSxyKDI2KSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImFlcy0xMjgtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xMjgtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZS5hZXMxMjg9ZVtcImFlcy0xMjgtY2JjXCJdLGUuYWVzMTkyPWVbXCJhZXMtMTkyLWNiY1wiXSxlLmFlczI1Nj1lW1wiYWVzLTI1Ni1jYmNcIl0sZVtcImFlcy0xMjgtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTE5Mi1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMjU2LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixvKXtlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LFwiYmluYXJ5XCIpKSxyJiYhZS5pc0J1ZmZlcihyKSYmKHI9bmV3IGUocixcImJpbmFyeVwiKSksbi89OCxvPW98fDA7Zm9yKHZhciBhLGYscz0wLHU9MCxoPW5ldyBlKG4pLGM9bmV3IGUobyksZD0wLGw9W107Oyl7aWYoZCsrPjAmJmwucHVzaChhKSxsLnB1c2godCksciYmbC5wdXNoKHIpLGE9aShlLmNvbmNhdChsKSksbD1bXSxmPTAsbj4wKWZvcig7Oyl7aWYoMD09PW4pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2hbcysrXT1hW2ZdLG4tLSxmKyt9aWYobz4wJiZmIT09YS5sZW5ndGgpZm9yKDs7KXtpZigwPT09bylicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7Y1t1KytdPWFbZl0sby0tLGYrK31pZigwPT09biYmMD09PW8pYnJlYWt9Zm9yKGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPTA7cmV0dXJue2tleTpoLGl2OmN9fXZhciBpPXIoMTA1KTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMuYWZ0ZXJUcmFuc2Zvcm09ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaSh0LGUscil9LHRoaXMubmVlZFRyYW5zZm9ybT0hMSx0aGlzLnRyYW5zZm9ybWluZz0hMSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlY2h1bms9bnVsbCx0aGlzLndyaXRlZW5jb2Rpbmc9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj10Ll90cmFuc2Zvcm1TdGF0ZTtuLnRyYW5zZm9ybWluZz0hMTt2YXIgaT1uLndyaXRlY2I7aWYoIWkpcmV0dXJuIHQuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwibm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3NcIikpO24ud3JpdGVjaHVuaz1udWxsLG4ud3JpdGVjYj1udWxsLG51bGwhPT1yJiZ2b2lkIDAhPT1yJiZ0LnB1c2gociksaShlKTt2YXIgbz10Ll9yZWFkYWJsZVN0YXRlO28ucmVhZGluZz0hMSwoby5uZWVkUmVhZGFibGV8fG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFyaykmJnQuX3JlYWQoby5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBvKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyh0KTtmLmNhbGwodGhpcyx0KSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT1uZXcgbih0aGlzKTt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSx0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09dC50cmFuc2Zvcm0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZmx1c2gmJih0aGlzLl9mbHVzaD10LmZsdXNoKSksdGhpcy5vbmNlKFwicHJlZmluaXNoXCIsZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbih0KXthKGUsdCl9KTphKGUpfSl9ZnVuY3Rpb24gYSh0LGUpe2lmKGUpcmV0dXJuIHQuZW1pdChcImVycm9yXCIsZSk7dmFyIHI9dC5fd3JpdGFibGVTdGF0ZSxuPXQuX3RyYW5zZm9ybVN0YXRlO2lmKHIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMFwiKTtpZihuLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoXCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nXCIpO3JldHVybiB0LnB1c2gobnVsbCl9dC5leHBvcnRzPW87dmFyIGY9cig1MSkscz1yKDczKTtzLmluaGVyaXRzPXIoNzQpLHMuaW5oZXJpdHMobyxmKSxvLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsZi5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxvLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKG4ud3JpdGVjYj1yLG4ud3JpdGVjaHVuaz10LG4ud3JpdGVlbmNvZGluZz1lLCFuLnRyYW5zZm9ybWluZyl7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTsobi5uZWVkVHJhbnNmb3JtfHxpLm5lZWRSZWFkYWJsZXx8aS5sZW5ndGg8aS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChpLmhpZ2hXYXRlck1hcmspfX0sby5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PWUud3JpdGVjaHVuayYmZS53cml0ZWNiJiYhZS50cmFuc2Zvcm1pbmc/KGUudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShlLndyaXRlY2h1bmssZS53cml0ZWVuY29kaW5nLGUuYWZ0ZXJUcmFuc2Zvcm0pKTplLm5lZWRUcmFuc2Zvcm09ITB9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe31mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmNodW5rPXQsdGhpcy5lbmNvZGluZz1lLHRoaXMuY2FsbGJhY2s9cix0aGlzLm5leHQ9bnVsbH1mdW5jdGlvbiBhKHQsZSl7Uj1SfHxyKDUxKSx0PXR8fHt9LHRoaXMub2JqZWN0TW9kZT0hIXQub2JqZWN0TW9kZSxlIGluc3RhbmNlb2YgUiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdC53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBuPXQuaGlnaFdhdGVyTWFyayxpPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9bnx8MD09PW4/bjppLHRoaXMuaGlnaFdhdGVyTWFyaz1+fnRoaXMuaGlnaFdhdGVyTWFyayx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITE7dmFyIG89dC5kZWNvZGVTdHJpbmdzPT09ITE7dGhpcy5kZWNvZGVTdHJpbmdzPSFvLHRoaXMuZGVmYXVsdEVuY29kaW5nPXQuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKHQpe2IoZSx0KX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgUyh0aGlzKX1mdW5jdGlvbiBmKHQpe3JldHVybiBSPVJ8fHIoNTEpLHRoaXMgaW5zdGFuY2VvZiBmfHx0aGlzIGluc3RhbmNlb2YgUj8odGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgYSh0LHRoaXMpLHRoaXMud3JpdGFibGU9ITAsdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQud3JpdGUmJih0aGlzLl93cml0ZT10LndyaXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LndyaXRldiYmKHRoaXMuX3dyaXRldj10LndyaXRldikpLHZvaWQgeC5jYWxsKHRoaXMpKTpuZXcgZih0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bmV3IEVycm9yKFwid3JpdGUgYWZ0ZXIgZW5kXCIpO3QuZW1pdChcImVycm9yXCIsciksRShlLHIpfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9ITAsbz0hMTtyZXR1cm4gbnVsbD09PXI/bz1uZXcgVHlwZUVycm9yKFwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW1cIik6Qi5pc0J1ZmZlcihyKXx8XCJzdHJpbmdcIj09dHlwZW9mIHJ8fHZvaWQgMD09PXJ8fGUub2JqZWN0TW9kZXx8KG89bmV3IFR5cGVFcnJvcihcIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmtcIikpLG8mJih0LmVtaXQoXCJlcnJvclwiLG8pLEUobixvKSxpPSExKSxpfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiB0Lm9iamVjdE1vZGV8fHQuZGVjb2RlU3RyaW5ncz09PSExfHxcInN0cmluZ1wiIT10eXBlb2YgZXx8KGU9Ty5mcm9tKGUscikpLGV9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3I9aChlLHIsbiksQi5pc0J1ZmZlcihyKSYmKG49XCJidWZmZXJcIik7dmFyIGE9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGg7ZS5sZW5ndGgrPWE7dmFyIGY9ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrO2lmKGZ8fChlLm5lZWREcmFpbj0hMCksZS53cml0aW5nfHxlLmNvcmtlZCl7dmFyIHM9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD1uZXcgbyhyLG4saSkscz9zLm5leHQ9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OmUuYnVmZmVyZWRSZXF1ZXN0PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdCxlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgZCh0LGUsITEsYSxyLG4saSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZCh0LGUscixuLGksbyxhKXtlLndyaXRlbGVuPW4sZS53cml0ZWNiPWEsZS53cml0aW5nPSEwLGUuc3luYz0hMCxyP3QuX3dyaXRldihpLGUub253cml0ZSk6dC5fd3JpdGUoaSxvLGUub253cml0ZSksZS5zeW5jPSExfWZ1bmN0aW9uIGwodCxlLHIsbixpKXstLWUucGVuZGluZ2NiLHI/RShpLG4pOmkobiksdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdC5lbWl0KFwiZXJyb3JcIixuKX1mdW5jdGlvbiBwKHQpe3Qud3JpdGluZz0hMSx0LndyaXRlY2I9bnVsbCx0Lmxlbmd0aC09dC53cml0ZWxlbix0LndyaXRlbGVuPTB9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuX3dyaXRhYmxlU3RhdGUsbj1yLnN5bmMsaT1yLndyaXRlY2I7aWYocChyKSxlKWwodCxyLG4sZSxpKTtlbHNle3ZhciBvPWcocik7b3x8ci5jb3JrZWR8fHIuYnVmZmVyUHJvY2Vzc2luZ3x8IXIuYnVmZmVyZWRSZXF1ZXN0fHxtKHQsciksbj9BKHYsdCxyLG8saSk6dih0LHIsbyxpKX19ZnVuY3Rpb24gdih0LGUscixuKXtyfHx5KHQsZSksZS5wZW5kaW5nY2ItLSxuKCksXyh0LGUpfWZ1bmN0aW9uIHkodCxlKXswPT09ZS5sZW5ndGgmJmUubmVlZERyYWluJiYoZS5uZWVkRHJhaW49ITEsdC5lbWl0KFwiZHJhaW5cIikpfWZ1bmN0aW9uIG0odCxlKXtlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHI9ZS5idWZmZXJlZFJlcXVlc3Q7aWYodC5fd3JpdGV2JiZyJiZyLm5leHQpe3ZhciBuPWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQsaT1uZXcgQXJyYXkobiksbz1lLmNvcmtlZFJlcXVlc3RzRnJlZTtvLmVudHJ5PXI7Zm9yKHZhciBhPTA7cjspaVthXT1yLHI9ci5uZXh0LGErPTE7ZCh0LGUsITAsZS5sZW5ndGgsaSxcIlwiLG8uZmluaXNoKSxlLnBlbmRpbmdjYisrLGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLG8ubmV4dD8oZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9by5uZXh0LG8ubmV4dD1udWxsKTplLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgUyhlKX1lbHNle2Zvcig7cjspe3ZhciBmPXIuY2h1bmsscz1yLmVuY29kaW5nLHU9ci5jYWxsYmFjayxoPWUub2JqZWN0TW9kZT8xOmYubGVuZ3RoO2lmKGQodCxlLCExLGgsZixzLHUpLHI9ci5uZXh0LGUud3JpdGluZylicmVha31udWxsPT09ciYmKGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsZS5idWZmZXJlZFJlcXVlc3Q9cixlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5lbmRpbmcmJjA9PT10Lmxlbmd0aCYmbnVsbD09PXQuYnVmZmVyZWRSZXF1ZXN0JiYhdC5maW5pc2hlZCYmIXQud3JpdGluZ31mdW5jdGlvbiB3KHQsZSl7ZS5wcmVmaW5pc2hlZHx8KGUucHJlZmluaXNoZWQ9ITAsdC5lbWl0KFwicHJlZmluaXNoXCIpKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZyhlKTtyZXR1cm4gciYmKDA9PT1lLnBlbmRpbmdjYj8odyh0LGUpLGUuZmluaXNoZWQ9ITAsdC5lbWl0KFwiZmluaXNoXCIpKTp3KHQsZSkpLHJ9ZnVuY3Rpb24gTSh0LGUscil7ZS5lbmRpbmc9ITAsXyh0LGUpLHImJihlLmZpbmlzaGVkP0Uocik6dC5vbmNlKFwiZmluaXNoXCIscikpLGUuZW5kZWQ9ITAsdC53cml0YWJsZT0hMX1mdW5jdGlvbiBTKHQpe3ZhciBlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKHIpe3ZhciBuPWUuZW50cnk7Zm9yKGUuZW50cnk9bnVsbDtuOyl7dmFyIGk9bi5jYWxsYmFjazt0LnBlbmRpbmdjYi0tLGkociksbj1uLm5leHR9dC5jb3JrZWRSZXF1ZXN0c0ZyZWU/dC5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1lOnQuY29ya2VkUmVxdWVzdHNGcmVlPWV9fXQuZXhwb3J0cz1mO3ZhciBFPXIoMTU3KSxBPSFlLmJyb3dzZXImJltcInYwLjEwXCIsXCJ2MC45LlwiXS5pbmRleE9mKGUudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9uOkU7Zi5Xcml0YWJsZVN0YXRlPWE7dmFyIGs9cig3Myk7ay5pbmhlcml0cz1yKDc0KTt2YXIgeCxJPXtkZXByZWNhdGU6cig1OTgpfTshZnVuY3Rpb24oKXt0cnl7eD1yKDMxKX1jYXRjaCh0KXt9ZmluYWxseXt4fHwoeD1yKDExMCkuRXZlbnRFbWl0dGVyKX19KCk7dmFyIEI9cigxKS5CdWZmZXIsTz1yKDE1Nik7ay5pbmhlcml0cyhmLHgpO3ZhciBSO2EucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxlPVtdO3Q7KWUucHVzaCh0KSx0PXQubmV4dDtyZXR1cm4gZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLFwiYnVmZmVyXCIse2dldDpJLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSxcIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuXCIpfSl9Y2F0Y2godCl7fX0oKTt2YXIgUjtmLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlXCIpKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3dyaXRhYmxlU3RhdGUsbz0hMTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksQi5pc0J1ZmZlcih0KT9lPVwiYnVmZmVyXCI6ZXx8KGU9bi5kZWZhdWx0RW5jb2RpbmcpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJihyPWkpLG4uZW5kZWQ/cyh0aGlzLHIpOnUodGhpcyxuLHQscikmJihuLnBlbmRpbmdjYisrLG89Yyh0aGlzLG4sdCxlLHIpKSxvfSxmLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTt0LmNvcmtlZCsrfSxmLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93cml0YWJsZVN0YXRlO3QuY29ya2VkJiYodC5jb3JrZWQtLSx0LndyaXRpbmd8fHQuY29ya2VkfHx0LmZpbmlzaGVkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fCF0LmJ1ZmZlcmVkUmVxdWVzdHx8bSh0aGlzLHQpKX0sZi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD10LnRvTG93ZXJDYXNlKCkpLCEoW1wiaGV4XCIsXCJ1dGY4XCIsXCJ1dGYtOFwiLFwiYXNjaWlcIixcImJpbmFyeVwiLFwiYmFzZTY0XCIsXCJ1Y3MyXCIsXCJ1Y3MtMlwiLFwidXRmMTZsZVwiLFwidXRmLTE2bGVcIixcInJhd1wiXS5pbmRleE9mKCh0K1wiXCIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXQsdGhpc30sZi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXtyKG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKSl9LGYucHJvdG90eXBlLl93cml0ZXY9bnVsbCxmLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7XCJmdW5jdGlvblwiPT10eXBlb2YgdD8ocj10LHQ9bnVsbCxlPW51bGwpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUsZT1udWxsKSxudWxsIT09dCYmdm9pZCAwIT09dCYmdGhpcy53cml0ZSh0LGUpLG4uY29ya2VkJiYobi5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuLmVuZGluZ3x8bi5maW5pc2hlZHx8TSh0aGlzLG4scil9fSkuY2FsbChlLHIoMjYpLHIoMTU4KS5zZXRJbW1lZGlhdGUpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoMSksaT1uLkJ1ZmZlcixvPW4uU2xvd0J1ZmZlcixhPW4ua01heExlbmd0aHx8MjE0NzQ4MzY0NztlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFsbG9jKXJldHVybiBpLmFsbG9jKHQsZSxyKTtpZihcIm51bWJlclwiPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVtYmVyXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplIG11c3QgYmUgYSBudW1iZXJcIik7aWYodD5hKXRocm93IG5ldyBSYW5nZUVycm9yKFwic2l6ZSBpcyB0b28gbGFyZ2VcIik7dmFyIG49cixvPWU7dm9pZCAwPT09byYmKG49dm9pZCAwLG89MCk7dmFyIGY9bmV3IGkodCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG8pZm9yKHZhciBzPW5ldyBpKG8sbiksdT1zLmxlbmd0aCxoPS0xOysraDx0OylmW2hdPXNbaCV1XTtlbHNlIGYuZmlsbChvKTtyZXR1cm4gZn0sZS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFsbG9jVW5zYWZlKXJldHVybiBpLmFsbG9jVW5zYWZlKHQpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplIG11c3QgYmUgYSBudW1iZXJcIik7aWYodD5hKXRocm93IG5ldyBSYW5nZUVycm9yKFwic2l6ZSBpcyB0b28gbGFyZ2VcIik7cmV0dXJuIG5ldyBpKHQpfSxlLmZyb209ZnVuY3Rpb24oZSxyLG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuZnJvbSYmKCF0LlVpbnQ4QXJyYXl8fFVpbnQ4QXJyYXkuZnJvbSE9PWkuZnJvbSkpcmV0dXJuIGkuZnJvbShlLHIsbik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5ldyBpKGUscik7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3ZhciBvPXI7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG5ldyBpKGUpO1widW5kZWZpbmVkXCI9PXR5cGVvZiBvJiYobz0wKTt2YXIgYT1uO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhJiYoYT1lLmJ5dGVMZW5ndGgtbyksbz49ZS5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihhPmUuYnl0ZUxlbmd0aC1vKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtyZXR1cm4gbmV3IGkoZS5zbGljZShvLG8rYSkpfWlmKGkuaXNCdWZmZXIoZSkpe3ZhciBmPW5ldyBpKGUubGVuZ3RoKTtyZXR1cm4gZS5jb3B5KGYsMCwwLGUubGVuZ3RoKSxmfWlmKGUpe2lmKEFycmF5LmlzQXJyYXkoZSl8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8XCJsZW5ndGhcImluIGUpcmV0dXJuIG5ldyBpKGUpO2lmKFwiQnVmZmVyXCI9PT1lLnR5cGUmJkFycmF5LmlzQXJyYXkoZS5kYXRhKSlyZXR1cm4gbmV3IGkoZS5kYXRhKX10aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LlwiKX0sZS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5hbGxvY1Vuc2FmZVNsb3cpcmV0dXJuIGkuYWxsb2NVbnNhZmVTbG93KHQpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplIG11c3QgYmUgYSBudW1iZXJcIik7aWYodD49YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNpemUgaXMgdG9vIGxhcmdlXCIpO3JldHVybiBuZXcgbyh0KX19KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNhbGxiYWNrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIG8sYSxmPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKGYpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIGUubmV4dFRpY2sodCk7Y2FzZSAyOnJldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscil9KTtjYXNlIDM6cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxyLG4pfSk7Y2FzZSA0OnJldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscixuLGkpfSk7ZGVmYXVsdDpmb3Iobz1uZXcgQXJyYXkoZi0xKSxhPTA7YTxvLmxlbmd0aDspb1thKytdPWFyZ3VtZW50c1thXTtyZXR1cm4gZS5uZXh0VGljayhmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxvKX0pfX0hZS52ZXJzaW9ufHwwPT09ZS52ZXJzaW9uLmluZGV4T2YoXCJ2MC5cIil8fDA9PT1lLnZlcnNpb24uaW5kZXhPZihcInYxLlwiKSYmMCE9PWUudmVyc2lvbi5pbmRleE9mKFwidjEuOC5cIik/dC5leHBvcnRzPXI6dC5leHBvcnRzPWUubmV4dFRpY2s7XG59KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSh0LGUpe3RoaXMuX2lkPXQsdGhpcy5fY2xlYXJGbj1lfXZhciBvPXIoMjYpLm5leHRUaWNrLGE9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LGY9QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9e30sdT0wO2Uuc2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiBuZXcgaShhLmNhbGwoc2V0VGltZW91dCx3aW5kb3csYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSxlLnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKGEuY2FsbChzZXRJbnRlcnZhbCx3aW5kb3csYXJndW1lbnRzKSxjbGVhckludGVydmFsKX0sZS5jbGVhclRpbWVvdXQ9ZS5jbGVhckludGVydmFsPWZ1bmN0aW9uKHQpe3QuY2xvc2UoKX0saS5wcm90b3R5cGUudW5yZWY9aS5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csdGhpcy5faWQpfSxlLmVucm9sbD1mdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKSx0Ll9pZGxlVGltZW91dD1lfSxlLnVuZW5yb2xsPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKSx0Ll9pZGxlVGltZW91dD0tMX0sZS5fdW5yZWZBY3RpdmU9ZS5hY3RpdmU9ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpO3ZhciBlPXQuX2lkbGVUaW1lb3V0O2U+PTAmJih0Ll9pZGxlVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0Ll9vblRpbWVvdXQmJnQuX29uVGltZW91dCgpfSxlKSl9LGUuc2V0SW1tZWRpYXRlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbih0KXt2YXIgcj11Kyssbj0hKGFyZ3VtZW50cy5sZW5ndGg8MikmJmYuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHNbcl09ITAsbyhmdW5jdGlvbigpe3Nbcl0mJihuP3QuYXBwbHkobnVsbCxuKTp0LmNhbGwobnVsbCksZS5jbGVhckltbWVkaWF0ZShyKSl9KSxyfSxlLmNsZWFySW1tZWRpYXRlPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpmdW5jdGlvbih0KXtkZWxldGUgc1t0XX19KS5jYWxsKGUscigxNTgpLnNldEltbWVkaWF0ZSxyKDE1OCkuY2xlYXJJbW1lZGlhdGUpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDI1NykuQmVyLGE9NjU1MzcsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OlwibW9kdWx1c1RvUGVtXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMD09PXRbMF0pdGhyb3cgbmV3IEVycm9yKFwiTW9kdWx1cyBtYXkgbm90IHN0YXJ0IHdpdGggemVyb1wiKTsxMjgmdFswXSYmKHQ9ZS5jb25jYXQoW25ldyBlKFswXSksdF0pKTt2YXIgcj1uZXcgby5Xcml0ZXI7cmV0dXJuIHIuc3RhcnRTZXF1ZW5jZSgpLHIud3JpdGVCdWZmZXIodCwyKSxyLndyaXRlSW50KGEpLHIuZW5kU2VxdWVuY2UoKSxcIi0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLVxcblwiK3IuYnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLm1hdGNoKC8uezEsNjR9L2cpLmpvaW4oXCJcXG5cIikrXCJcXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXFxuXCJ9fSx7a2V5OlwibW9kdWx1c0Zyb21Qcml2YXRlS2V5XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5yZXBsYWNlKFwiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVwiLFwiXCIpLnJlcGxhY2UoXCItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVwiLFwiXCIpLnJlcGxhY2UoL1xccyt8XFxuXFxyfFxcbnxcXHIkL2dtLFwiXCIpLG49bmV3IGUocixcImJhc2U2NFwiKSxpPW5ldyBvLlJlYWRlcihuKTtpLnJlYWRTZXF1ZW5jZSgpLGkucmVhZFN0cmluZygyLCEwKTt2YXIgYT1pLnJlYWRTdHJpbmcoMiwhMCk7cmV0dXJuIDA9PT1hWzBdP2Euc2xpY2UoMSk6YX19XSksdH0oKTt0LmV4cG9ydHM9Zn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtyKDI4MSksdC5leHBvcnRzPXIoMTYzKS5OdW1iZXIuaXNJbnRlZ2VyfSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNC4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJlwiTnVtYmVyXCIhPW4odCkpdGhyb3cgVHlwZUVycm9yKGUpO3JldHVybit0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTEpLGk9cig0Nyksbz1yKDEwKTt0LmV4cG9ydHM9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRoaXMpLGE9byhyLmxlbmd0aCksZj1pKHQsYSkscz1pKGUsYSksdT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxoPU1hdGgubWluKCh2b2lkIDA9PT11P2E6aSh1LGEpKS1zLGEtZiksYz0xO2ZvcihzPGYmJmY8cytoJiYoYz0tMSxzKz1oLTEsZis9aC0xKTtoLS0gPjA7KXMgaW4gcj9yW2ZdPXJbc106ZGVsZXRlIHJbZl0sZis9YyxzKz1jO3JldHVybiByfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBuKHQsITEsci5wdXNoLHIsZSkscn19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEzKSxpPXIoMTEpLG89cig2NSksYT1yKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZixzKXtuKGUpO3ZhciB1PWkodCksaD1vKHUpLGM9YSh1Lmxlbmd0aCksZD1zP2MtMTowLGw9cz8tMToxO2lmKHI8Milmb3IoOzspe2lmKGQgaW4gaCl7Zj1oW2RdLGQrPWw7YnJlYWt9aWYoZCs9bCxzP2Q8MDpjPD1kKXRocm93IFR5cGVFcnJvcihcIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWVcIil9Zm9yKDtzP2Q+PTA6Yz5kO2QrPWwpZCBpbiBoJiYoZj1lKGYsaFtkXSxkLHUpKTtyZXR1cm4gZn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDEzKSxpPXIoNiksbz1yKDgyKSxhPVtdLnNsaWNlLGY9e30scz1mdW5jdGlvbih0LGUscil7aWYoIShlIGluIGYpKXtmb3IodmFyIG49W10saT0wO2k8ZTtpKyspbltpXT1cImFbXCIraStcIl1cIjtmW2VdPUZ1bmN0aW9uKFwiRixhXCIsXCJyZXR1cm4gbmV3IEYoXCIrbi5qb2luKFwiLFwiKStcIilcIil9cmV0dXJuIGZbZV0odCxyKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odGhpcykscj1hLmNhbGwoYXJndW1lbnRzLDEpLGY9ZnVuY3Rpb24oKXt2YXIgbj1yLmNvbmNhdChhLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmP3MoZSxuLmxlbmd0aCxuKTpvKGUsbix0KX07cmV0dXJuIGkoZS5wcm90b3R5cGUpJiYoZi5wcm90b3R5cGU9ZS5wcm90b3R5cGUpLGZ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig5KS5mLGk9cig0Miksbz1yKDQ1KSxhPXIoMzMpLGY9cig0MCkscz1yKDI0KSx1PXIoNTUpLGg9cigxMjgpLGM9cigxNzcpLGQ9cig0NiksbD1yKDgpLHA9cigzNikuZmFzdEtleSxiPWw/XCJfc1wiOlwic2l6ZVwiLHY9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXAoZSk7aWYoXCJGXCIhPT1uKXJldHVybiB0Ll9pW25dO2ZvcihyPXQuX2Y7cjtyPXIubilpZihyLms9PWUpcmV0dXJuIHJ9O3QuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsaCl7dmFyIGM9dChmdW5jdGlvbih0LG4pe2YodCxjLGUsXCJfaVwiKSx0Ll9pPWkobnVsbCksdC5fZj12b2lkIDAsdC5fbD12b2lkIDAsdFtiXT0wLHZvaWQgMCE9biYmdShuLHIsdFtoXSx0KX0pO3JldHVybiBvKGMucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dC5faSxyPXQuX2Y7cjtyPXIubilyLnI9ITAsci5wJiYoci5wPXIucC5uPXZvaWQgMCksZGVsZXRlIGVbci5pXTt0Ll9mPXQuX2w9dm9pZCAwLHRbYl09MH0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj12KGUsdCk7aWYocil7dmFyIG49ci5uLGk9ci5wO2RlbGV0ZSBlLl9pW3IuaV0sci5yPSEwLGkmJihpLm49biksbiYmKG4ucD1pKSxlLl9mPT1yJiYoZS5fZj1uKSxlLl9sPT1yJiYoZS5fbD1pKSxlW2JdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2YodGhpcyxjLFwiZm9yRWFjaFwiKTtmb3IodmFyIGUscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2Uubjp0aGlzLl9mOylmb3IocihlLnYsZS5rLHRoaXMpO2UmJmUucjspZT1lLnB9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXYodGhpcyx0KX19KSxsJiZuKGMucHJvdG90eXBlLFwic2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzW2JdKX19KSxjfSxkZWY6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbz12KHQsZSk7cmV0dXJuIG8/by52PXI6KHQuX2w9bz17aTppPXAoZSwhMCksazplLHY6cixwOm49dC5fbCxuOnZvaWQgMCxyOiExfSx0Ll9mfHwodC5fZj1vKSxuJiYobi5uPW8pLHRbYl0rKyxcIkZcIiE9PWkmJih0Ll9pW2ldPW8pKSx0fSxnZXRFbnRyeTp2LHNldFN0cm9uZzpmdW5jdGlvbih0LGUscil7aCh0LGUsZnVuY3Rpb24odCxlKXt0aGlzLl90PXQsdGhpcy5faz1lLHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dC5fayxyPXQuX2w7ciYmci5yOylyPXIucDtyZXR1cm4gdC5fdCYmKHQuX2w9cj1yP3Iubjp0Ll90Ll9mKT9cImtleXNcIj09ZT9jKDAsci5rKTpcInZhbHVlc1wiPT1lP2MoMCxyLnYpOmMoMCxbci5rLHIudl0pOih0Ll90PXZvaWQgMCxjKDEpKX0scj9cImVudHJpZXNcIjpcInZhbHVlc1wiLCFyLCEwKSxkKGUpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY0KSxpPXIoMTY4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYobih0aGlzKSE9dCl0aHJvdyBUeXBlRXJyb3IodCtcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtyZXR1cm4gaSh0aGlzKX19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0NSksaT1yKDM2KS5nZXRXZWFrLG89cigzKSxhPXIoNiksZj1yKDQwKSxzPXIoNTUpLHU9cigyNyksaD1yKDEyKSxjPXUoNSksZD11KDYpLGw9MCxwPWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9sfHwodC5fbD1uZXcgYil9LGI9ZnVuY3Rpb24oKXt0aGlzLmE9W119LHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYyh0LmEsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSl9O2IucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dih0aGlzLHQpO2lmKGUpcmV0dXJuIGVbMV19LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXYodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dih0aGlzLHQpO3I/clsxXT1lOnRoaXMuYS5wdXNoKFt0LGVdKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcy5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pO3JldHVybn5lJiZ0aGlzLmEuc3BsaWNlKGUsMSksISF+ZX19LHQuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHU9dChmdW5jdGlvbih0LG4pe2YodCx1LGUsXCJfaVwiKSx0Ll9pPWwrKyx0Ll9sPXZvaWQgMCx2b2lkIDAhPW4mJnMobixyLHRbb10sdCl9KTtyZXR1cm4gbih1LnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiExO3ZhciBlPWkodCk7cmV0dXJuIGU9PT0hMD9wKHRoaXMpLmRlbGV0ZSh0KTplJiZoKGUsdGhpcy5faSkmJmRlbGV0ZSBlW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24odCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtyZXR1cm4gZT09PSEwP3AodGhpcykuaGFzKHQpOmUmJmgoZSx0aGlzLl9pKX19KSx1fSxkZWY6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkobyhlKSwhMCk7cmV0dXJuIG49PT0hMD9wKHQpLnNldChlLHIpOm5bdC5faV09cix0fSx1ZnN0b3JlOnB9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDgpJiYhcig1KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxMjApKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIW4odCkmJmlzRmluaXRlKHQpJiZpKHQpPT09dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt0cnl7cmV0dXJuIGk/ZShuKHIpWzBdLHJbMV0pOmUocil9Y2F0Y2goZSl7dmFyIG89dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09byYmbihvLmNhbGwodCkpLGV9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6ZSxkb25lOiEhdH19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOk1hdGgubG9nKDErdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0NCksaT1yKDg2KSxvPXIoNjYpLGE9cigxMSksZj1yKDY1KSxzPU9iamVjdC5hc3NpZ247dC5leHBvcnRzPSFzfHxyKDUpKGZ1bmN0aW9uKCl7dmFyIHQ9e30sZT17fSxyPVN5bWJvbCgpLG49XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO3JldHVybiB0W3JdPTcsbi5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09dH0pLDchPXMoe30sdClbcl18fE9iamVjdC5rZXlzKHMoe30sZSkpLmpvaW4oXCJcIikhPW59KT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hKHQpLHM9YXJndW1lbnRzLmxlbmd0aCx1PTEsaD1pLmYsYz1vLmY7cz51Oylmb3IodmFyIGQsbD1mKGFyZ3VtZW50c1t1KytdKSxwPWg/bihsKS5jb25jYXQoaChsKSk6bihsKSxiPXAubGVuZ3RoLHY9MDtiPnY7KWMuY2FsbChsLGQ9cFt2KytdKSYmKHJbZF09bFtkXSk7cmV0dXJuIHJ9OnN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLGk9cigzKSxvPXIoNDQpO3QuZXhwb3J0cz1yKDgpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTtmb3IodmFyIHIsYT1vKGUpLGY9YS5sZW5ndGgscz0wO2Y+czspbi5mKHQscj1hW3MrK10sZVtyXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNyksaT1yKDQzKS5mLG89e30udG9TdHJpbmcsYT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W10sZj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGkodCl9Y2F0Y2godCl7cmV0dXJuIGEuc2xpY2UoKX19O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBhJiZcIltvYmplY3QgV2luZG93XVwiPT1vLmNhbGwodCk/Zih0KTppKG4odCkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTIpLGk9cigxNyksbz1yKDc4KSghMSksYT1yKDEzMykoXCJJRV9QUk9UT1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixmPWkodCkscz0wLHU9W107Zm9yKHIgaW4gZilyIT1hJiZuKGYscikmJnUucHVzaChyKTtmb3IoO2UubGVuZ3RoPnM7KW4oZixyPWVbcysrXSkmJih+byh1LHIpfHx1LnB1c2gocikpO3JldHVybiB1fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDQpLGk9cigxNyksbz1yKDY2KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByLGE9aShlKSxmPW4oYSkscz1mLmxlbmd0aCx1PTAsaD1bXTtzPnU7KW8uY2FsbChhLHI9Zlt1KytdKSYmaC5wdXNoKHQ/W3IsYVtyXV06YVtyXSk7cmV0dXJuIGh9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDMpLGk9cig4Niksbz1yKDMpLGE9cig0KS5SZWZsZWN0O3QuZXhwb3J0cz1hJiZhLm93bktleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPW4uZihvKHQpKSxyPWkuZjtyZXR1cm4gcj9lLmNvbmNhdChyKHQpKTplfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCkucGFyc2VGbG9hdCxpPXIoNTgpLnRyaW07dC5leHBvcnRzPTEvbihyKDEzOCkrXCItMFwiKSE9PS0oMS8wKT9mdW5jdGlvbih0KXt2YXIgZT1pKFN0cmluZyh0KSwzKSxyPW4oZSk7cmV0dXJuIDA9PT1yJiZcIi1cIj09ZS5jaGFyQXQoMCk/LTA6cn06bn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCkucGFyc2VJbnQsaT1yKDU4KS50cmltLG89cigxMzgpLGE9L15bXFwtK10/MFt4WF0vO3QuZXhwb3J0cz04IT09bihvK1wiMDhcIil8fDIyIT09bihvK1wiMHgxNlwiKT9mdW5jdGlvbih0LGUpe3ZhciByPWkoU3RyaW5nKHQpLDMpO3JldHVybiBuKHIsZT4+PjB8fChhLnRlc3Qocik/MTY6MTApKX06bn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT09MS9lOnQhPXQmJmUhPWV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMCksaT1yKDEzNyksbz1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGY9U3RyaW5nKG8odCkpLHM9Zi5sZW5ndGgsdT12b2lkIDA9PT1yP1wiIFwiOlN0cmluZyhyKSxoPW4oZSk7aWYoaDw9c3x8XCJcIj09dSlyZXR1cm4gZjt2YXIgYz1oLXMsZD1pLmNhbGwodSxNYXRoLmNlaWwoYy91Lmxlbmd0aCkpO3JldHVybiBkLmxlbmd0aD5jJiYoZD1kLnNsaWNlKDAsYykpLGE/ZCtmOmYrZH19LGZ1bmN0aW9uKHQsZSxyKXtlLmY9cig3KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTcxKTt0LmV4cG9ydHM9cig3OSkoXCJNYXBcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5nZXRFbnRyeSh0aGlzLHQpO3JldHVybiBlJiZlLnZ9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBuLmRlZih0aGlzLDA9PT10PzA6dCxlKX19LG4sITApfSxmdW5jdGlvbih0LGUscil7cig4KSYmXCJnXCIhPS8uL2cuZmxhZ3MmJnIoOSkuZihSZWdFeHAucHJvdG90eXBlLFwiZmxhZ3NcIix7Y29uZmlndXJhYmxlOiEwLGdldDpyKDgxKX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNzEpO3QuZXhwb3J0cz1yKDc5KShcIlNldFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbi5kZWYodGhpcyx0PTA9PT10PzA6dCx0KX19LG4pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT1yKDI3KSgwKSxvPXIoMTUpLGE9cigzNiksZj1yKDE3OSkscz1yKDE3MyksdT1yKDYpLGg9YS5nZXRXZWFrLGM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxkPXMudWZzdG9yZSxsPXt9LHA9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSxiPXtnZXQ6ZnVuY3Rpb24odCl7aWYodSh0KSl7dmFyIGU9aCh0KTtyZXR1cm4gZT09PSEwP2QodGhpcykuZ2V0KHQpOmU/ZVt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5kZWYodGhpcyx0LGUpfX0sdj10LmV4cG9ydHM9cig3OSkoXCJXZWFrTWFwXCIscCxiLHMsITAsITApOzchPShuZXcgdikuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGwpLDcpLmdldChsKSYmKG49cy5nZXRDb25zdHJ1Y3RvcihwKSxmKG4ucHJvdG90eXBlLGIpLGEuTkVFRD0hMCxpKFtcImRlbGV0ZVwiLFwiaGFzXCIsXCJnZXRcIixcInNldFwiXSxmdW5jdGlvbih0KXt2YXIgZT12LnByb3RvdHlwZSxyPWVbdF07byhlLHQsZnVuY3Rpb24oZSxpKXtpZih1KGUpJiYhYyhlKSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IG4pO3ZhciBvPXRoaXMuX2ZbdF0oZSxpKTtyZXR1cm5cInNldFwiPT10P3RoaXM6b31yZXR1cm4gci5jYWxsKHRoaXMsZSxpKX0pfSkpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIit0K1wiJy5cIil9ci5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHIucmVzb2x2ZT1yLHQuZXhwb3J0cz1yLHIuaWQ9MTk0fSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBpKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSk7dmFyIGk9bih0aGlzLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5jYWxsKHRoaXMpKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJtZXNzYWdlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnZvaWQgMCE9PXQ/U3RyaW5nKHQpOlwiXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6aS5jb25zdHJ1Y3Rvci5uYW1lfSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGksaS5jb25zdHJ1Y3RvciksaX1yZXR1cm4gaShlLHQpLGV9KEVycm9yKTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLHIpe3IoNDg2KSx0LmV4cG9ydHM9cigxOTcpLk51bWJlci5pc0ludGVnZXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjAwKSxpPXIoMTk3KSxvPXIoNDc4KSxhPXIoNDgwKSxmPVwicHJvdG90eXBlXCIscz1mdW5jdGlvbih0LGUscil7dmFyIHUsaCxjLGQ9dCZzLkYsbD10JnMuRyxwPXQmcy5TLGI9dCZzLlAsdj10JnMuQix5PXQmcy5XLG09bD9pOmlbZV18fChpW2VdPXt9KSxnPW1bZl0sdz1sP246cD9uW2VdOihuW2VdfHx7fSlbZl07bCYmKHI9ZSk7Zm9yKHUgaW4gciloPSFkJiZ3JiZ2b2lkIDAhPT13W3VdLGgmJnUgaW4gbXx8KGM9aD93W3VdOnJbdV0sbVt1XT1sJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB3W3VdP3JbdV06diYmaD9vKGMsbik6eSYmd1t1XT09Yz9mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihlLHIsbil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZSk7Y2FzZSAyOnJldHVybiBuZXcgdChlLHIpfXJldHVybiBuZXcgdChlLHIsbil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZVtmXT10W2ZdLGV9KGMpOmImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGM/byhGdW5jdGlvbi5jYWxsLGMpOmMsYiYmKChtLnZpcnR1YWx8fChtLnZpcnR1YWw9e30pKVt1XT1jLHQmcy5SJiZnJiYhZ1t1XSYmYShnLHUsYykpKX07cy5GPTEscy5HPTIscy5TPTQscy5QPTgscy5CPTE2LHMuVz0zMixzLlU9NjQscy5SPTEyOCx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9cig0NzMpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpey8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIG4odCxlKXtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuQnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkJ1ZmZlci5pc0J1ZmZlcj9lLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCkmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkFycmF5QnVmZmVyJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX1mdW5jdGlvbiBmKHQpe2lmKHcuaXNGdW5jdGlvbih0KSl7aWYoUylyZXR1cm4gdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKSxyPWUubWF0Y2goQSk7cmV0dXJuIHImJnJbMV19fWZ1bmN0aW9uIHModCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90Lmxlbmd0aDxlP3Q6dC5zbGljZSgwLGUpOnR9ZnVuY3Rpb24gdSh0KXtpZihTfHwhdy5pc0Z1bmN0aW9uKHQpKXJldHVybiB3Lmluc3BlY3QodCk7dmFyIGU9Zih0KSxyPWU/XCI6IFwiK2U6XCJcIjtyZXR1cm5cIltGdW5jdGlvblwiK3IrXCJdXCJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gcyh1KHQuYWN0dWFsKSwxMjgpK1wiIFwiK3Qub3BlcmF0b3IrXCIgXCIrcyh1KHQuZXhwZWN0ZWQpLDEyOCl9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3Rocm93IG5ldyBFLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24gZCh0LGUpe3R8fGModCwhMCxlLFwiPT1cIixFLm9rKX1mdW5jdGlvbiBsKHQsZSxyLGYpe2lmKHQ9PT1lKXJldHVybiEwO2lmKGkodCkmJmkoZSkpcmV0dXJuIDA9PT1uKHQsZSk7aWYody5pc0RhdGUodCkmJncuaXNEYXRlKGUpKXJldHVybiB0LmdldFRpbWUoKT09PWUuZ2V0VGltZSgpO2lmKHcuaXNSZWdFeHAodCkmJncuaXNSZWdFeHAoZSkpcmV0dXJuIHQuc291cmNlPT09ZS5zb3VyY2UmJnQuZ2xvYmFsPT09ZS5nbG9iYWwmJnQubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmUmJnQubGFzdEluZGV4PT09ZS5sYXN0SW5kZXgmJnQuaWdub3JlQ2FzZT09PWUuaWdub3JlQ2FzZTtpZihudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHR8fG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7aWYoYSh0KSYmYShlKSYmbyh0KT09PW8oZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1uKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGkodCkhPT1pKGUpKXJldHVybiExO2Y9Znx8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX07dmFyIHM9Zi5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4gcyE9PS0xJiZzPT09Zi5leHBlY3RlZC5pbmRleE9mKGUpfHwoZi5hY3R1YWwucHVzaCh0KSxmLmV4cGVjdGVkLnB1c2goZSksYih0LGUscixmKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiBwKHQpe3JldHVyblwiW29iamVjdCBBcmd1bWVudHNdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSxyLG4pe2lmKG51bGw9PT10fHx2b2lkIDA9PT10fHxudWxsPT09ZXx8dm9pZCAwPT09ZSlyZXR1cm4hMTtpZih3LmlzUHJpbWl0aXZlKHQpfHx3LmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9cCh0KSxvPXAoZSk7aWYoaSYmIW98fCFpJiZvKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9TS5jYWxsKHQpLGU9TS5jYWxsKGUpLGwodCxlLHIpO3ZhciBhLGYscz1rKHQpLHU9ayhlKTtpZihzLmxlbmd0aCE9PXUubGVuZ3RoKXJldHVybiExO2ZvcihzLnNvcnQoKSx1LnNvcnQoKSxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paWYoc1tmXSE9PXVbZl0pcmV0dXJuITE7Zm9yKGY9cy5sZW5ndGgtMTtmPj0wO2YtLSlpZihhPXNbZl0sIWwodFthXSxlW2FdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0LGUscil7bCh0LGUsITApJiZjKHQsZSxyLFwibm90RGVlcFN0cmljdEVxdWFsXCIsdil9ZnVuY3Rpb24geSh0LGUpe2lmKCF0fHwhZSlyZXR1cm4hMTtpZihcIltvYmplY3QgUmVnRXhwXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiZlLmNhbGwoe30sdCk9PT0hMH1mdW5jdGlvbiBtKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPW0oZSksbj0ociYmci5uYW1lP1wiIChcIityLm5hbWUrXCIpLlwiOlwiLlwiKSsobj9cIiBcIituOlwiLlwiKSx0JiYhaSYmYyhpLHIsXCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvblwiK24pO3ZhciBvPVwic3RyaW5nXCI9PXR5cGVvZiBuLGE9IXQmJncuaXNFcnJvcihpKSxmPSF0JiZpJiYhcjtpZigoYSYmbyYmeShpLHIpfHxmKSYmYyhpLHIsXCJHb3QgdW53YW50ZWQgZXhjZXB0aW9uXCIrbiksdCYmaSYmciYmIXkoaSxyKXx8IXQmJmkpdGhyb3cgaX12YXIgdz1yKDYwNiksXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LE09QXJyYXkucHJvdG90eXBlLnNsaWNlLFM9ZnVuY3Rpb24oKXtyZXR1cm5cImZvb1wiPT09ZnVuY3Rpb24oKXt9Lm5hbWV9KCksRT10LmV4cG9ydHM9ZCxBPS9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87RS5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1oKHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGU9dC5zdGFja1N0YXJ0RnVuY3Rpb258fGM7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlKTtlbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgbj1yLnN0YWNrLGk9ZihlKSxvPW4uaW5kZXhPZihcIlxcblwiK2kpO2lmKG8+PTApe3ZhciBhPW4uaW5kZXhPZihcIlxcblwiLG8rMSk7bj1uLnN1YnN0cmluZyhhKzEpfXRoaXMuc3RhY2s9bn19fSx3LmluaGVyaXRzKEUuQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLEUuZmFpbD1jLEUub2s9ZCxFLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZjKHQsZSxyLFwiPT1cIixFLmVxdWFsKX0sRS5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmYyh0LGUscixcIiE9XCIsRS5ub3RFcXVhbCl9LEUuZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtsKHQsZSwhMSl8fGModCxlLHIsXCJkZWVwRXF1YWxcIixFLmRlZXBFcXVhbCl9LEUuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtsKHQsZSwhMCl8fGModCxlLHIsXCJkZWVwU3RyaWN0RXF1YWxcIixFLmRlZXBTdHJpY3RFcXVhbCl9LEUubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtsKHQsZSwhMSkmJmModCxlLHIsXCJub3REZWVwRXF1YWxcIixFLm5vdERlZXBFcXVhbCl9LEUubm90RGVlcFN0cmljdEVxdWFsPXYsRS5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJmModCxlLHIsXCI9PT1cIixFLnN0cmljdEVxdWFsKX0sRS5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09PWUmJmModCxlLHIsXCIhPT1cIixFLm5vdFN0cmljdEVxdWFsKX0sRS50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe2coITAsdCxlLHIpfSxFLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7ZyghMSx0LGUscil9LEUuaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9O3ZhciBrPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClfLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsaSxmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCxyLGkpO2EuY2FsbCh0aGlzKSx0aGlzLl9maW5JRD1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMV0pXSksaT1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMl0pXSksdGhpcy5fY2lwaGVyPW5ldyBvLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGkubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLGkuY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPXQ7dmFyIHU9bmV3IGUoNCk7dS5maWxsKDApLHRoaXMuX2doYXNoPW5ldyBzKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodSkpLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTA7dC5sZW5ndGghPT1lLmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0tMTsrK2k8bjspcis9dFtpXV5lW2ldO3JldHVybiByfXZhciBvPXIoOTQpLGE9cig5NyksZj1yKDIpLHM9cig0OTcpLHU9cig2Nyk7ZihuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIHI9MTYtdGhpcy5fYWxlbiUxNjtyPDE2JiYocj1uZXcgZShyKSxyLmZpbGwoMCksdGhpcy5fZ2hhc2gudXBkYXRlKHIpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIG49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCk7cmV0dXJuIHRoaXMuX2RlY3J5cHQ/dGhpcy5fZ2hhc2gudXBkYXRlKHQpOnRoaXMuX2doYXNoLnVwZGF0ZShuKSx0aGlzLl9sZW4rPXQubGVuZ3RoLG59LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKTt2YXIgdD11KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQpe2lmKGkodCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIil9ZWxzZSB0aGlzLl9hdXRoVGFnPXQ7dGhpcy5fY2lwaGVyLnNjcnViKCl9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVjcnlwdCYmZS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSlyZXR1cm4gdGhpcy5fYXV0aFRhZzt0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbih0KXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9hdXRoVGFnPXR9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbih0KXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2doYXNoLnVwZGF0ZSh0KSx0aGlzLl9hbGVuKz10Lmxlbmd0aH19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlLHQuX3ByZXYpO3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sociksdC5fcHJldn0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJldjt0Ll9wcmV2PWU7dmFyIGk9dC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKTtyZXR1cm4gbihpLHIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixuKXt2YXIgbz1yLmxlbmd0aCxhPWkocixlLl9jYWNoZSk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKG8pLGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYsbj9yOmFdKSxhfXZhciBpPXIoNjcpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIsaSl7Zm9yKHZhciBvLGE9bmV3IHQoXCJcIik7ci5sZW5ndGg7KXtpZigwPT09ZS5fY2FjaGUubGVuZ3RoJiYoZS5fY2FjaGU9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxlLl9wcmV2PW5ldyB0KFwiXCIpKSwhKGUuX2NhY2hlLmxlbmd0aDw9ci5sZW5ndGgpKXthPXQuY29uY2F0KFthLG4oZSxyLGkpXSk7YnJlYWt9bz1lLl9jYWNoZS5sZW5ndGgsYT10LmNvbmNhdChbYSxuKGUsci5zbGljZSgwLG8pLGkpXSkscj1yLnNsaWNlKG8pfXJldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUscil7Zm9yKHZhciBpLG8sYSxmPS0xLHM9OCx1PTA7KytmPHM7KWk9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSxvPWUmMTw8Ny1mPzEyODowLGE9aVswXV5vLHUrPSgxMjgmYSk+PmYlOCx0Ll9wcmV2PW4odC5fcHJldixyP286YSk7cmV0dXJuIHV9ZnVuY3Rpb24gbihlLHIpe3ZhciBuPWUubGVuZ3RoLGk9LTEsbz1uZXcgdChlLmxlbmd0aCk7Zm9yKGU9dC5jb25jYXQoW2UsbmV3IHQoW3JdKV0pOysraTxuOylvW2ldPWVbaV08PDF8ZVtpKzFdPj43O3JldHVybiBvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyLG4pe3ZhciBpPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksbz1pWzBdXnI7cmV0dXJuIGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYuc2xpY2UoMSksbmV3IHQoW24/cjpvXSldKSxvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGUpfSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLHQuX3ByZXZ9dmFyIGk9cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxuKGUpXSk7dmFyIG89ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxpKHIsbyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixhLGYpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oby5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgaS5BRVMociksdGhpcy5fcHJldj1uZXcgZShhLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLGEuY29weSh0aGlzLl9wcmV2KSx2b2lkKHRoaXMuX21vZGU9dCkpOm5ldyBuKHQscixhKX12YXIgaT1yKDk0KSxvPXIoOTcpLGE9cigyKTthKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCx0aGlzLl9kZWNyeXB0KX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXtlW1wiUlNBLVNIQTIyNFwiXT1lLnNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTIyNFwiLGlkOm5ldyB0KFwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixcImhleFwiKX0sZVtcIlJTQS1TSEEyNTZcIl09ZS5zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGEyNTZcIixpZDpuZXcgdChcIjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwXCIsXCJoZXhcIil9LGVbXCJSU0EtU0hBMzg0XCJdPWUuc2hhMzg0V2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMzg0XCIsaWQ6bmV3IHQoXCIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMFwiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTUxMlwiXT1lLnNoYTUxMldpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTUxMlwiLGlkOm5ldyB0KFwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixcImhleFwiKX0sZVtcIlJTQS1TSEExXCJdPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTFcIixpZDpuZXcgdChcIjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNFwiLFwiaGV4XCIpfSxlW1wiZWNkc2Etd2l0aC1TSEExXCJdPXtzaWduOlwiZWNkc2FcIixoYXNoOlwic2hhMVwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGUuRFNBPWVbXCJEU0EtU0hBMVwiXT1lW1wiRFNBLVNIQVwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGExXCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEEyMjRcIl09ZVtcIkRTQS1XSVRILVNIQTIyNFwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEyMjRcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTI1NlwiXT1lW1wiRFNBLVdJVEgtU0hBMjU2XCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTI1NlwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtU0hBMzg0XCJdPWVbXCJEU0EtV0lUSC1TSEEzODRcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMzg0XCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEE1MTJcIl09ZVtcIkRTQS1XSVRILVNIQTUxMlwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGE1MTJcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVJJUEVNRDE2MFwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJybWQxNjBcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiUlNBLVJJUEVNRDE2MFwiXT1lLnJpcGVtZDE2MFdpdGhSU0E9e3NpZ246XCJyc2FcIixoYXNoOlwicm1kMTYwXCIsaWQ6bmV3IHQoXCIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTRcIixcImhleFwiKX0sZVtcIlJTQS1NRDVcIl09ZS5tZDVXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJtZDVcIixpZDpuZXcgdChcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiLFwiaGV4XCIpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZVtcIjEuMy4xMzIuMC4xMFwiXT1cInNlY3AyNTZrMVwiLGVbXCIxLjMuMTMyLjAuMzNcIl09XCJwMjI0XCIsZVtcIjEuMi44NDAuMTAwNDUuMy4xLjFcIl09XCJwMTkyXCIsZVtcIjEuMi44NDAuMTAwNDUuMy4xLjdcIl09XCJwMjU2XCIsZVtcIjEuMy4xMzIuMC4zNFwiXT1cInAzODRcIixlW1wiMS4zLjEzMi4wLjM1XCJdPVwicDUyMVwifSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI7XCJvYmplY3RcIiE9dHlwZW9mIHR8fGUuaXNCdWZmZXIodCl8fChyPXQucGFzc3BocmFzZSx0PXQua2V5KSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCkpO3ZhciBuLGEscz1mKHQsciksdT1zLnRhZyxoPXMuZGF0YTtzd2l0Y2godSl7Y2FzZVwiUFVCTElDIEtFWVwiOnN3aXRjaChhPW8uUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpLG49YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oXCIuXCIpKXtjYXNlXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiOnJldHVybiBvLlJTQVB1YmxpY0tleS5kZWNvZGUoYS5zdWJqZWN0UHVibGljS2V5LmRhdGEsXCJkZXJcIik7Y2FzZVwiMS4yLjg0MC4xMDA0NS4yLjFcIjpyZXR1cm4gYS5zdWJqZWN0UHJpdmF0ZUtleT1hLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6XCJlY1wiLGRhdGE6YX07Y2FzZVwiMS4yLjg0MC4xMDA0MC40LjFcIjpyZXR1cm4gYS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9by5EU0FwYXJhbS5kZWNvZGUoYS5zdWJqZWN0UHVibGljS2V5LmRhdGEsXCJkZXJcIikse3R5cGU6XCJkc2FcIixkYXRhOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiOmg9by5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLGg9aShoLHIpO2Nhc2VcIlBSSVZBVEUgS0VZXCI6c3dpdGNoKGE9by5Qcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLG49YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oXCIuXCIpKXtjYXNlXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIik7Y2FzZVwiMS4yLjg0MC4xMDA0NS4yLjFcIjpyZXR1cm57Y3VydmU6YS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpvLkVDUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKS5wcml2YXRlS2V5fTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9by5EU0FwYXJhbS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKSx7dHlwZTpcImRzYVwiLHBhcmFtczphLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgaWQgXCIrbil9dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KTtjYXNlXCJSU0EgUFVCTElDIEtFWVwiOnJldHVybiBvLlJTQVB1YmxpY0tleS5kZWNvZGUoaCxcImRlclwiKTtjYXNlXCJSU0EgUFJJVkFURSBLRVlcIjpyZXR1cm4gby5SU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIkRTQSBQUklWQVRFIEtFWVwiOnJldHVybnt0eXBlOlwiZHNhXCIscGFyYW1zOm8uRFNBUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKX07Y2FzZVwiRUMgUFJJVkFURSBLRVlcIjpyZXR1cm4gaD1vLkVDUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSx7Y3VydmU6aC5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6aC5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSl9fWZ1bmN0aW9uIGkodCxyKXt2YXIgbj10LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxpPXBhcnNlSW50KHQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxvPWFbdC5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKFwiLlwiKV0sZj10LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixoPXQuc3ViamVjdFByaXZhdGVLZXksYz1wYXJzZUludChvLnNwbGl0KFwiLVwiKVsxXSwxMCkvOCxkPXUucGJrZGYyU3luYyhyLG4saSxjKSxsPXMuY3JlYXRlRGVjaXBoZXJpdihvLGQsZikscD1bXTtyZXR1cm4gcC5wdXNoKGwudXBkYXRlKGgpKSxwLnB1c2gobC5maW5hbCgpKSxlLmNvbmNhdChwKX12YXIgbz1yKDUyOCksYT1yKDQ2NiksZj1yKDUyOSkscz1yKDIxOSksdT1yKDE1MSk7dC5leHBvcnRzPW4sbi5zaWduYXR1cmU9by5zaWduYXR1cmV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBhLmNhbGwodGhpcyxlKSxmLmlzQnVmZmVyKHQpPyh0aGlzLmJhc2U9dCx0aGlzLm9mZnNldD0wLHZvaWQodGhpcy5sZW5ndGg9dC5sZW5ndGgpKTp2b2lkIHRoaXMuZXJyb3IoXCJJbnB1dCBub3QgQnVmZmVyXCIpfWZ1bmN0aW9uIGkodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl8fCh0PW5ldyBpKHQsZSkpLHRoaXMubGVuZ3RoKz10Lmxlbmd0aCx0fSx0aGlzKTtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZighKDA8PXQmJnQ8PTI1NSkpcmV0dXJuIGUuZXJyb3IoXCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlXCIpO3RoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPWYuYnl0ZUxlbmd0aCh0KTtlbHNle2lmKCFmLmlzQnVmZmVyKHQpKXJldHVybiBlLmVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZTogXCIrdHlwZW9mIHQpO3RoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH19dmFyIG89cigyKSxhPXIoNjgpLlJlcG9ydGVyLGY9cigxKS5CdWZmZXI7byhuLGEpLGUuRGVjb2RlckJ1ZmZlcj1uLG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOmEucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gZS5vZmZzZXQ9dC5vZmZzZXQsZS5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9dC5vZmZzZXQsYS5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsdC5yZXBvcnRlciksZX0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxuLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcih0fHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKX0sbi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbih0LGUpe2lmKCEodGhpcy5vZmZzZXQrdDw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKGV8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpO3ZhciByPW5ldyBuKHRoaXMuYmFzZSk7cmV0dXJuIHIuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyLm9mZnNldD10aGlzLm9mZnNldCxyLmxlbmd0aD10aGlzLm9mZnNldCt0LHRoaXMub2Zmc2V0Kz10LHJ9LG4ucHJvdG90eXBlLnJhdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHQ/dC5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxlLkVuY29kZXJCdWZmZXI9aSxpLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fCh0PW5ldyBmKHRoaXMubGVuZ3RoKSksZXx8KGU9MCksMD09PXRoaXMubGVuZ3RoP3Q6KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Iuam9pbih0LGUpLGUrPXIubGVuZ3RofSk6KFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3RbZV09dGhpcy52YWx1ZTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZT90LndyaXRlKHRoaXMudmFsdWUsZSk6Zi5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KHQsZSksZSs9dGhpcy5sZW5ndGgpLHQpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5fcmV2ZXJzZT1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXsoMHxyKT09ciYmKHJ8PTApO3ZhciBuPXRbcl07ZVtuXT1yfSksZX0sbi5kZXI9cig1MzMpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5lbnRpdHk9dCx0aGlzLnRyZWU9bmV3IGksdGhpcy50cmVlLl9pbml0KHQuYm9keSl9ZnVuY3Rpb24gaSh0KXt1Lk5vZGUuY2FsbCh0aGlzLFwiZGVyXCIsdCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQucmVhZFVJbnQ4KGUpO2lmKHQuaXNFcnJvcihyKSlyZXR1cm4gcjt2YXIgbj1jLnRhZ0NsYXNzW3I+PjZdLGk9MD09PSgzMiZyKTtpZigzMT09PSgzMSZyKSl7dmFyIG89cjtmb3Iocj0wOzEyOD09PSgxMjgmbyk7KXtpZihvPXQucmVhZFVJbnQ4KGUpLHQuaXNFcnJvcihvKSlyZXR1cm4gbztyPDw9NyxyfD0xMjcmb319ZWxzZSByJj0zMTt2YXIgYT1jLnRhZ1tyXTtyZXR1cm57Y2xzOm4scHJpbWl0aXZlOmksdGFnOnIsdGFnU3RyOmF9fWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXQucmVhZFVJbnQ4KHIpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZighZSYmMTI4PT09bilyZXR1cm4gbnVsbDtpZigwPT09KDEyOCZuKSlyZXR1cm4gbjt2YXIgaT0xMjcmbjtpZihpPj00KXJldHVybiB0LmVycm9yKFwibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZ1wiKTtuPTA7Zm9yKHZhciBvPTA7bzxpO28rKyl7bjw8PTg7dmFyIGE9dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKGEpKXJldHVybiBhO258PWF9cmV0dXJuIG59dmFyIGY9cigyKSxzPXIoMTAwKSx1PXMuYmFzZSxoPXMuYmlnbnVtLGM9cy5jb25zdGFudHMuZGVyO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgdS5EZWNvZGVyQnVmZmVyfHwodD1uZXcgdS5EZWNvZGVyQnVmZmVyKHQsZSkpLHRoaXMudHJlZS5fZGVjb2RlKHQsZSl9LGYoaSx1Lk5vZGUpLGkucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgbj10LnNhdmUoKSxpPW8odCwnRmFpbGVkIHRvIHBlZWsgdGFnOiBcIicrZSsnXCInKTtyZXR1cm4gdC5pc0Vycm9yKGkpP2k6KHQucmVzdG9yZShuKSxpLnRhZz09PWV8fGkudGFnU3RyPT09ZXx8aS50YWdTdHIrXCJvZlwiPT09ZXx8cil9LGkucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW8odCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgXCInK2UrJ1wiJyk7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO3ZhciBpPWEodCxuLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgXCInK2UrJ1wiJyk7aWYodC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKCFyJiZuLnRhZyE9PWUmJm4udGFnU3RyIT09ZSYmbi50YWdTdHIrXCJvZlwiIT09ZSlyZXR1cm4gdC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogXCInK2UrJ1wiJyk7aWYobi5wcmltaXRpdmV8fG51bGwhPT1pKXJldHVybiB0LnNraXAoaSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJytlKydcIicpO3ZhciBmPXQuc2F2ZSgpLHM9dGhpcy5fc2tpcFVudGlsRW5kKHQsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6IFwiJyt0aGlzLnRhZysnXCInKTtyZXR1cm4gdC5pc0Vycm9yKHMpP3M6KGk9dC5vZmZzZXQtZi5vZmZzZXQsdC5yZXN0b3JlKGYpLHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJykpfSxpLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKDs7KXt2YXIgcj1vKHQsZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWEodCxyLnByaW1pdGl2ZSxlKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk7aWYoaT1yLnByaW1pdGl2ZXx8bnVsbCE9PW4/dC5za2lwKG4pOnRoaXMuX3NraXBVbnRpbEVuZCh0LGUpLHQuaXNFcnJvcihpKSlyZXR1cm4gaTtpZihcImVuZFwiPT09ci50YWdTdHIpYnJlYWt9fSxpLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9W107IXQuaXNFbXB0eSgpOyl7dmFyIG89dGhpcy5fcGVla1RhZyh0LFwiZW5kXCIpO2lmKHQuaXNFcnJvcihvKSlyZXR1cm4gbzt2YXIgYT1yLmRlY29kZSh0LFwiZGVyXCIsbik7aWYodC5pc0Vycm9yKGEpJiZvKWJyZWFrO2kucHVzaChhKX1yZXR1cm4gaX0saS5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbih0LGUpe2lmKFwiYml0c3RyXCI9PT1lKXt2YXIgcj10LnJlYWRVSW50OCgpO3JldHVybiB0LmlzRXJyb3Iocik/cjp7dW51c2VkOnIsZGF0YTp0LnJhdygpfX1pZihcImJtcHN0clwiPT09ZSl7dmFyIG49dC5yYXcoKTtpZihuLmxlbmd0aCUyPT09MSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoXCIpO2Zvcih2YXIgaT1cIlwiLG89MDtvPG4ubGVuZ3RoLzI7bysrKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobi5yZWFkVUludDE2QkUoMipvKSk7cmV0dXJuIGl9aWYoXCJudW1zdHJcIj09PWUpe3ZhciBhPXQucmF3KCkudG9TdHJpbmcoXCJhc2NpaVwiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoYSk/YTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfWlmKFwib2N0c3RyXCI9PT1lKXJldHVybiB0LnJhdygpO2lmKFwicHJpbnRzdHJcIj09PWUpe3ZhciBmPXQucmF3KCkudG9TdHJpbmcoXCJhc2NpaVwiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihmKT9mOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyc1wiKX1yZXR1cm4vc3RyJC8udGVzdChlKT90LnJhdygpLnRvU3RyaW5nKCk6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPVtdLG89MDshdC5pc0VtcHR5KCk7KXt2YXIgYT10LnJlYWRVSW50OCgpO288PD03LG98PTEyNyZhLDA9PT0oMTI4JmEpJiYoaS5wdXNoKG8pLG89MCl9MTI4JmEmJmkucHVzaChvKTt2YXIgZj1pWzBdLzQwfDAscz1pWzBdJTQwO2lmKG49cj9pOltmLHNdLmNvbmNhdChpLnNsaWNlKDEpKSxlKXt2YXIgdT1lW24uam9pbihcIiBcIildO3ZvaWQgMD09PXUmJih1PWVbbi5qb2luKFwiLlwiKV0pLHZvaWQgMCE9PXUmJihuPXUpfXJldHVybiBufSxpLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByPXQucmF3KCkudG9TdHJpbmcoKTtpZihcImdlbnRpbWVcIj09PWUpdmFyIG49MHxyLnNsaWNlKDAsNCksaT0wfHIuc2xpY2UoNCw2KSxvPTB8ci5zbGljZSg2LDgpLGE9MHxyLnNsaWNlKDgsMTApLGY9MHxyLnNsaWNlKDEwLDEyKSxzPTB8ci5zbGljZSgxMiwxNCk7ZWxzZXtpZihcInV0Y3RpbWVcIiE9PWUpcmV0dXJuIHQuZXJyb3IoXCJEZWNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7dmFyIG49MHxyLnNsaWNlKDAsMiksaT0wfHIuc2xpY2UoMiw0KSxvPTB8ci5zbGljZSg0LDYpLGE9MHxyLnNsaWNlKDYsOCksZj0wfHIuc2xpY2UoOCwxMCkscz0wfHIuc2xpY2UoMTAsMTIpO249bjw3MD8yZTMrbjoxOTAwK259cmV0dXJuIERhdGUuVVRDKG4saS0xLG8sYSxmLHMsMCl9LGkucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbih0KXt2YXIgZT10LnJlYWRVSW50OCgpO3JldHVybiB0LmlzRXJyb3IoZSk/ZTowIT09ZX0saS5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbih0LGUpe3ZhciByPXQucmF3KCksbj1uZXcgaChyKTtyZXR1cm4gZSYmKG49ZVtuLnRvU3RyaW5nKDEwKV18fG4pLG59LGkucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KGUpKSx0Ll9nZXREZWNvZGVyKFwiZGVyXCIpLnRyZWV9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5lbnRpdHk9dCx0aGlzLnRyZWU9bmV3IGksdGhpcy50cmVlLl9pbml0KHQuYm9keSl9ZnVuY3Rpb24gaSh0KXtoLk5vZGUuY2FsbCh0aGlzLFwiZGVyXCIsdCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDwxMD9cIjBcIit0OnR9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaTtpZihcInNlcW9mXCI9PT10P3Q9XCJzZXFcIjpcInNldG9mXCI9PT10JiYodD1cInNldFwiKSxjLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eSh0KSlpPWMudGFnQnlOYW1lW3RdO2Vsc2V7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fCgwfHQpIT09dClyZXR1cm4gbi5lcnJvcihcIlVua25vd24gdGFnOiBcIit0KTtpPXR9cmV0dXJuIGk+PTMxP24uZXJyb3IoXCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWRcIik6KGV8fChpfD0zMiksaXw9Yy50YWdDbGFzc0J5TmFtZVtyfHxcInVuaXZlcnNhbFwiXTw8Nil9dmFyIGY9cigyKSxzPXIoMSkuQnVmZmVyLHU9cigxMDApLGg9dS5iYXNlLGM9dS5jb25zdGFudHMuZGVyO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZSh0LGUpLmpvaW4oKX0sZihpLGguTm9kZSksaS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1hKHQsZSxyLHRoaXMucmVwb3J0ZXIpO2lmKG4ubGVuZ3RoPDEyOCl7dmFyIG89bmV3IHMoMik7cmV0dXJuIG9bMF09aSxvWzFdPW4ubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pfWZvcih2YXIgZj0xLHU9bi5sZW5ndGg7dT49MjU2O3U+Pj04KWYrKzt2YXIgbz1uZXcgcygyK2YpO29bMF09aSxvWzFdPTEyOHxmO2Zvcih2YXIgdT0xK2YsaD1uLmxlbmd0aDtoPjA7dS0tLGg+Pj04KW9bdV09MjU1Jmg7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pfSxpLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8dC51bnVzZWQsdC5kYXRhXSk7aWYoXCJibXBzdHJcIj09PWUpe2Zvcih2YXIgcj1uZXcgcygyKnQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspci53cml0ZVVJbnQxNkJFKHQuY2hhckNvZGVBdChuKSwyKm4pO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHIpfXJldHVyblwibnVtc3RyXCI9PT1lP3RoaXMuX2lzTnVtc3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlXCIpOlwicHJpbnRzdHJcIj09PWU/dGhpcy5faXNQcmludHN0cih0KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFya1wiKTovc3RyJC8udGVzdChlKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogXCIrZStcIiB1bnN1cHBvcnRlZFwiKX0saS5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKHQsZSxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXBcIik7dD1lW3RdLnNwbGl0KC9bXFxzXFwuXSsvZyk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3Q9dC5zbGljZSgpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl18PTB9aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6IFwiK0pTT04uc3RyaW5naWZ5KHQpKTtpZighcil7aWYodFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0JcIik7dC5zcGxpY2UoMCwyLDQwKnRbMF0rdFsxXSl9Zm9yKHZhciBpPTAsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dO2ZvcihpKys7bz49MTI4O28+Pj03KWkrK31mb3IodmFyIGE9bmV3IHMoaSksZj1hLmxlbmd0aC0xLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIG89dFtuXTtmb3IoYVtmLS1dPTEyNyZvOyhvPj49Nyk+MDspYVtmLS1dPTEyOHwxMjcmb31yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKX0saS5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPW5ldyBEYXRlKHQpO3JldHVyblwiZ2VudGltZVwiPT09ZT9yPVtvKG4uZ2V0RnVsbFllYXIoKSksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOlwidXRjdGltZVwiPT09ZT9yPVtvKG4uZ2V0RnVsbFllYXIoKSUxMDApLG8obi5nZXRVVENNb250aCgpKzEpLG8obi5nZXRVVENEYXRlKCkpLG8obi5nZXRVVENIb3VycygpKSxvKG4uZ2V0VVRDTWludXRlcygpKSxvKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2RpbmcgXCIrZStcIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpLHRoaXMuX2VuY29kZVN0cihyLFwib2N0c3RyXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFwiXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKCFlKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcFwiKTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiBcIitKU09OLnN0cmluZ2lmeSh0KSk7dD1lW3RdfWlmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhcy5pc0J1ZmZlcih0KSl7dmFyIHI9dC50b0FycmF5KCk7IXQuc2lnbiYmMTI4JnJbMF0mJnIudW5zaGlmdCgwKSx0PW5ldyBzKHIpfWlmKHMuaXNCdWZmZXIodCkpe3ZhciBuPXQubGVuZ3RoOzA9PT10Lmxlbmd0aCYmbisrO3ZhciBpPW5ldyBzKG4pO3JldHVybiB0LmNvcHkoaSksMD09PXQubGVuZ3RoJiYoaVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGkpfWlmKHQ8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2lmKHQ8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLHRdKTtmb3IodmFyIG49MSxvPXQ7bz49MjU2O28+Pj04KW4rKztmb3IodmFyIGk9bmV3IEFycmF5KG4pLG89aS5sZW5ndGgtMTtvPj0wO28tLSlpW29dPTI1NSZ0LHQ+Pj04O3JldHVybiAxMjgmaVswXSYmaS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IHMoaSkpfSxpLnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0PzI1NTowKX0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldEVuY29kZXIoXCJkZXJcIikudHJlZX0saS5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09aS5kZWZhdWx0KXJldHVybiExO3ZhciBvPXQuam9pbigpO2lmKHZvaWQgMD09PWkuZGVmYXVsdEJ1ZmZlciYmKGkuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShpLmRlZmF1bHQsZSxyKS5qb2luKCkpLG8ubGVuZ3RoIT09aS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248by5sZW5ndGg7bisrKWlmKG9bbl0hPT1pLmRlZmF1bHRCdWZmZXJbbl0pcmV0dXJuITE7cmV0dXJuITB9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGksZil7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQscixpKTthLmNhbGwodGhpcyksdGhpcy5fZmluSUQ9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDFdKV0pLGk9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDJdKV0pLHRoaXMuX2NpcGhlcj1uZXcgby5BRVMociksdGhpcy5fcHJldj1uZXcgZShpLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCxpLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT10O3ZhciB1PW5ldyBlKDQpO3UuZmlsbCgwKSx0aGlzLl9naGFzaD1uZXcgcyh0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHUpKSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj0wO3QubGVuZ3RoIT09ZS5sZW5ndGgmJnIrKztmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9LTE7KytpPG47KXIrPXRbaV1eZVtpXTtyZXR1cm4gcn12YXIgbz1yKDEwMSksYT1yKDEwMyksZj1yKDIpLHM9cig1NDEpLHU9cig2OSk7ZihuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIHI9MTYtdGhpcy5fYWxlbiUxNjtyPDE2JiYocj1uZXcgZShyKSxyLmZpbGwoMCksdGhpcy5fZ2hhc2gudXBkYXRlKHIpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIG49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCk7cmV0dXJuIHRoaXMuX2RlY3J5cHQ/dGhpcy5fZ2hhc2gudXBkYXRlKHQpOnRoaXMuX2doYXNoLnVwZGF0ZShuKSx0aGlzLl9sZW4rPXQubGVuZ3RoLG59LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKTt2YXIgdD11KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQpe2lmKGkodCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIil9ZWxzZSB0aGlzLl9hdXRoVGFnPXQ7dGhpcy5fY2lwaGVyLnNjcnViKCl9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVjcnlwdCYmZS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSlyZXR1cm4gdGhpcy5fYXV0aFRhZzt0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbih0KXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9hdXRoVGFnPXR9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbih0KXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2doYXNoLnVwZGF0ZSh0KSx0aGlzLl9hbGVuKz10Lmxlbmd0aH19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBPYmplY3Qua2V5cyhhKX12YXIgaT1yKDU0MCk7ZS5jcmVhdGVDaXBoZXI9ZS5DaXBoZXI9aS5jcmVhdGVDaXBoZXIsZS5jcmVhdGVDaXBoZXJpdj1lLkNpcGhlcml2PWkuY3JlYXRlQ2lwaGVyaXY7dmFyIG89cig1MzkpO2UuY3JlYXRlRGVjaXBoZXI9ZS5EZWNpcGhlcj1vLmNyZWF0ZURlY2lwaGVyLGUuY3JlYXRlRGVjaXBoZXJpdj1lLkRlY2lwaGVyaXY9by5jcmVhdGVEZWNpcGhlcml2O3ZhciBhPXIoMTQ3KTtlLmxpc3RDaXBoZXJzPWUuZ2V0Q2lwaGVycz1ufSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlLHQuX3ByZXYpO3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sociksdC5fcHJldn0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJldjt0Ll9wcmV2PWU7dmFyIGk9dC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKTtyZXR1cm4gbihpLHIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixuKXt2YXIgbz1yLmxlbmd0aCxhPWkocixlLl9jYWNoZSk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKG8pLGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYsbj9yOmFdKSxhfXZhciBpPXIoNjkpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIsaSl7Zm9yKHZhciBvLGE9bmV3IHQoXCJcIik7ci5sZW5ndGg7KXtpZigwPT09ZS5fY2FjaGUubGVuZ3RoJiYoZS5fY2FjaGU9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxlLl9wcmV2PW5ldyB0KFwiXCIpKSwhKGUuX2NhY2hlLmxlbmd0aDw9ci5sZW5ndGgpKXthPXQuY29uY2F0KFthLG4oZSxyLGkpXSk7YnJlYWt9bz1lLl9jYWNoZS5sZW5ndGgsYT10LmNvbmNhdChbYSxuKGUsci5zbGljZSgwLG8pLGkpXSkscj1yLnNsaWNlKG8pfXJldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUscil7Zm9yKHZhciBpLG8sYSxmPS0xLHM9OCx1PTA7KytmPHM7KWk9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSxvPWUmMTw8Ny1mPzEyODowLGE9aVswXV5vLHUrPSgxMjgmYSk+PmYlOCx0Ll9wcmV2PW4odC5fcHJldixyP286YSk7cmV0dXJuIHV9ZnVuY3Rpb24gbihlLHIpe3ZhciBuPWUubGVuZ3RoLGk9LTEsbz1uZXcgdChlLmxlbmd0aCk7Zm9yKGU9dC5jb25jYXQoW2UsbmV3IHQoW3JdKV0pOysraTxuOylvW2ldPWVbaV08PDF8ZVtpKzFdPj43O3JldHVybiBvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyLG4pe3ZhciBpPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksbz1pWzBdXnI7cmV0dXJuIGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYuc2xpY2UoMSksbmV3IHQoW24/cjpvXSldKSxvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGUpfSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLHQuX3ByZXZ9dmFyIGk9cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxuKGUpXSk7dmFyIG89ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxpKHIsbyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixhLGYpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oby5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgaS5BRVMociksdGhpcy5fcHJldj1uZXcgZShhLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLGEuY29weSh0aGlzLl9wcmV2KSx2b2lkKHRoaXMuX21vZGU9dCkpOm5ldyBuKHQscixhKX12YXIgaT1yKDEwMSksbz1yKDEwMyksYT1yKDIpO2EobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0LHRoaXMuX2RlY3J5cHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWwsYy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiByXnQmKGVecil9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHQmZXxyJih0fGUpfWZ1bmN0aW9uIGEodCl7cmV0dXJuKHQ+Pj4yfHQ8PDMwKV4odD4+PjEzfHQ8PDE5KV4odD4+PjIyfHQ8PDEwKX1mdW5jdGlvbiBmKHQpe3JldHVybih0Pj4+Nnx0PDwyNileKHQ+Pj4xMXx0PDwyMSleKHQ+Pj4yNXx0PDw3KX1mdW5jdGlvbiBzKHQpe3JldHVybih0Pj4+N3x0PDwyNSleKHQ+Pj4xOHx0PDwxNCledD4+PjN9ZnVuY3Rpb24gdSh0KXtyZXR1cm4odD4+PjE3fHQ8PDE1KV4odD4+PjE5fHQ8PDEzKV50Pj4+MTB9dmFyIGg9cigyKSxjPXIoNjApLGQ9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sbD1uZXcgQXJyYXkoNjQpO2gobixjKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9hLG49MHx0aGlzLl9iLGg9MHx0aGlzLl9jLGM9MHx0aGlzLl9kLGw9MHx0aGlzLl9lLHA9MHx0aGlzLl9mLGI9MHx0aGlzLl9nLHY9MHx0aGlzLl9oLHk9MDt5PDE2OysreSllW3ldPXQucmVhZEludDMyQkUoNCp5KTtmb3IoO3k8NjQ7Kyt5KWVbeV09dShlW3ktMl0pK2VbeS03XStzKGVbeS0xNV0pK2VbeS0xNl18MDtmb3IodmFyIG09MDttPDY0OysrbSl7dmFyIGc9ditmKGwpK2kobCxwLGIpK2RbbV0rZVttXXwwLHc9YShyKStvKHIsbixoKXwwO3Y9YixiPXAscD1sLGw9YytnfDAsYz1oLGg9bixuPXIscj1nK3d8MH10aGlzLl9hPXIrdGhpcy5fYXwwLHRoaXMuX2I9bit0aGlzLl9ifDAsdGhpcy5fYz1oK3RoaXMuX2N8MCx0aGlzLl9kPWMrdGhpcy5fZHwwLHRoaXMuX2U9bCt0aGlzLl9lfDAsdGhpcy5fZj1wK3RoaXMuX2Z8MCx0aGlzLl9nPWIrdGhpcy5fZ3wwLHRoaXMuX2g9dit0aGlzLl9ofDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMzIpO3JldHVybiB0LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksdC53cml0ZUludDMyQkUodGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSx0LndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSx0LndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSx0LndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSx0fSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dixwLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm4gcl50JihlXnIpfWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiB0JmV8ciYodHxlKX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuKHQ+Pj4yOHxlPDw0KV4oZT4+PjJ8dDw8MzApXihlPj4+N3x0PDwyNSl9ZnVuY3Rpb24gZih0LGUpe3JldHVybih0Pj4+MTR8ZTw8MTgpXih0Pj4+MTh8ZTw8MTQpXihlPj4+OXx0PDwyMyl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybih0Pj4+MXxlPDwzMSleKHQ+Pj44fGU8PDI0KV50Pj4+N31mdW5jdGlvbiB1KHQsZSl7cmV0dXJuKHQ+Pj4xfGU8PDMxKV4odD4+Pjh8ZTw8MjQpXih0Pj4+N3xlPDwyNSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybih0Pj4+MTl8ZTw8MTMpXihlPj4+Mjl8dDw8MyledD4+PjZ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybih0Pj4+MTl8ZTw8MTMpXihlPj4+Mjl8dDw8MyleKHQ+Pj42fGU8PDI2KX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ+Pj4wPGU+Pj4wPzE6MH12YXIgbD1yKDIpLHA9cig2MCksYj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHY9bmV3IEFycmF5KDE2MCk7bChuLHApLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9haCxuPTB8dGhpcy5fYmgsbD0wfHRoaXMuX2NoLHA9MHx0aGlzLl9kaCx2PTB8dGhpcy5fZWgseT0wfHRoaXMuX2ZoLG09MHx0aGlzLl9naCxnPTB8dGhpcy5faGgsdz0wfHRoaXMuX2FsLF89MHx0aGlzLl9ibCxNPTB8dGhpcy5fY2wsUz0wfHRoaXMuX2RsLEU9MHx0aGlzLl9lbCxBPTB8dGhpcy5fZmwsaz0wfHRoaXMuX2dsLHg9MHx0aGlzLl9obCxJPTA7STwzMjtJKz0yKWVbSV09dC5yZWFkSW50MzJCRSg0KkkpLGVbSSsxXT10LnJlYWRJbnQzMkJFKDQqSSs0KTtmb3IoO0k8MTYwO0krPTIpe3ZhciBCPWVbSS0zMF0sTz1lW0ktMzArMV0sUj1zKEIsTyksUD11KE8sQik7XG5CPWVbSS00XSxPPWVbSS00KzFdO3ZhciBUPWgoQixPKSxqPWMoTyxCKSxDPWVbSS0xNF0sTj1lW0ktMTQrMV0sTD1lW0ktMzJdLFU9ZVtJLTMyKzFdLHo9UCtOfDAsRD1SK0MrZCh6LFApfDA7ej16K2p8MCxEPUQrVCtkKHosail8MCx6PXorVXwwLEQ9RCtMK2QoeixVKXwwLGVbSV09RCxlW0krMV09en1mb3IodmFyIHE9MDtxPDE2MDtxKz0yKXtEPWVbcV0sej1lW3ErMV07dmFyIEY9byhyLG4sbCksSz1vKHcsXyxNKSxHPWEocix3KSxWPWEodyxyKSxIPWYodixFKSxYPWYoRSx2KSxZPWJbcV0sVz1iW3ErMV0sWj1pKHYseSxtKSxKPWkoRSxBLGspLCQ9eCtYfDAsUT1nK0grZCgkLHgpfDA7JD0kK0p8MCxRPVErWitkKCQsSil8MCwkPSQrV3wwLFE9UStZK2QoJCxXKXwwLCQ9JCt6fDAsUT1RK0QrZCgkLHopfDA7dmFyIHR0PVYrS3wwLGV0PUcrRitkKHR0LFYpfDA7Zz1tLHg9ayxtPXksaz1BLHk9dixBPUUsRT1TKyR8MCx2PXArUStkKEUsUyl8MCxwPWwsUz1NLGw9bixNPV8sbj1yLF89dyx3PSQrdHR8MCxyPVErZXQrZCh3LCQpfDB9dGhpcy5fYWw9dGhpcy5fYWwrd3wwLHRoaXMuX2JsPXRoaXMuX2JsK198MCx0aGlzLl9jbD10aGlzLl9jbCtNfDAsdGhpcy5fZGw9dGhpcy5fZGwrU3wwLHRoaXMuX2VsPXRoaXMuX2VsK0V8MCx0aGlzLl9mbD10aGlzLl9mbCtBfDAsdGhpcy5fZ2w9dGhpcy5fZ2wra3wwLHRoaXMuX2hsPXRoaXMuX2hsK3h8MCx0aGlzLl9haD10aGlzLl9haCtyK2QodGhpcy5fYWwsdyl8MCx0aGlzLl9iaD10aGlzLl9iaCtuK2QodGhpcy5fYmwsXyl8MCx0aGlzLl9jaD10aGlzLl9jaCtsK2QodGhpcy5fY2wsTSl8MCx0aGlzLl9kaD10aGlzLl9kaCtwK2QodGhpcy5fZGwsUyl8MCx0aGlzLl9laD10aGlzLl9laCt2K2QodGhpcy5fZWwsRSl8MCx0aGlzLl9maD10aGlzLl9maCt5K2QodGhpcy5fZmwsQSl8MCx0aGlzLl9naD10aGlzLl9naCttK2QodGhpcy5fZ2wsayl8MCx0aGlzLl9oaD10aGlzLl9oaCtnK2QodGhpcy5faGwseCl8MH0sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtyLndyaXRlSW50MzJCRSh0LG4pLHIud3JpdGVJbnQzMkJFKGUsbis0KX12YXIgcj1uZXcgZSg2NCk7cmV0dXJuIHQodGhpcy5fYWgsdGhpcy5fYWwsMCksdCh0aGlzLl9iaCx0aGlzLl9ibCw4KSx0KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx0KHRoaXMuX2RoLHRoaXMuX2RsLDI0KSx0KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx0KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSx0KHRoaXMuX2doLHRoaXMuX2dsLDQ4KSx0KHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxyfSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7aWYobnVsbCE9PWcpcmV0dXJuIGc7dmFyIHQ9MTA0ODU3NixlPVtdO2VbMF09Mjtmb3IodmFyIHI9MSxuPTM7bjx0O24rPTIpe2Zvcih2YXIgaT1NYXRoLmNlaWwoTWF0aC5zcXJ0KG4pKSxvPTA7bzxyJiZlW29dPD1pJiZuJWVbb10hPT0wO28rKyk7ciE9PW8mJmVbb108PWl8fChlW3IrK109bil9cmV0dXJuIGc9ZSxlfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW4oKSxyPTA7cjxlLmxlbmd0aDtyKyspaWYoMD09PXQubW9kbihlW3JdKSlyZXR1cm4gMD09PXQuY21wbihlW3JdKTtyZXR1cm4hMH1mdW5jdGlvbiBvKHQpe3ZhciBlPXMubW9udCh0KTtyZXR1cm4gMD09PWwudG9SZWQoZSkucmVkUG93KHQuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQ8MTYpcmV0dXJuIG5ldyBzKDI9PT1lfHw1PT09ZT9bMTQwLDEyM106WzE0MCwzOV0pO2U9bmV3IHMoZSk7Zm9yKHZhciByLG47Oyl7Zm9yKHI9bmV3IHMoZihNYXRoLmNlaWwodC84KSkpO3IuYml0TGVuZ3RoKCk+dDspci5pc2hybigxKTtpZihyLmlzRXZlbigpJiZyLmlhZGQoZCksci50ZXN0bigxKXx8ci5pYWRkKGwpLGUuY21wKGwpKXtpZighZS5jbXAocCkpZm9yKDtyLm1vZChiKS5jbXAodik7KXIuaWFkZChtKX1lbHNlIGZvcig7ci5tb2QodSkuY21wKHkpOylyLmlhZGQobSk7aWYobj1yLnNocm4oMSksaShuKSYmaShyKSYmbyhuKSYmbyhyKSYmYy50ZXN0KG4pJiZjLnRlc3QocikpcmV0dXJuIHJ9fXZhciBmPXIoNjEpO3QuZXhwb3J0cz1hLGEuc2ltcGxlU2lldmU9aSxhLmZlcm1hdFRlc3Q9bzt2YXIgcz1yKDE1MCksdT1uZXcgcygyNCksaD1yKDIzMCksYz1uZXcgaCxkPW5ldyBzKDEpLGw9bmV3IHMoMikscD1uZXcgcyg1KSxiPShuZXcgcygxNiksbmV3IHMoOCksbmV3IHMoMTApKSx2PW5ldyBzKDMpLHk9KG5ldyBzKDcpLG5ldyBzKDExKSksbT1uZXcgcyg0KSxnPShuZXcgcygxMiksbnVsbCl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fHxuZXcgby5SYW5kfXZhciBpPXIoMTUwKSxvPXIoNTc1KTt0LmV4cG9ydHM9bixuLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9LG4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYml0TGVuZ3RoKCkscj10aGlzLnJhbmQuZ2VuZXJhdGUoTWF0aC5jZWlsKGUvOCkpO3JbMF18PTM7dmFyIG49NyZlO3JldHVybiAwIT09biYmKHJbci5sZW5ndGgtMV0+Pj03LW4pLG5ldyBpKHIpfSxuLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmJpdExlbmd0aCgpLG89aS5tb250KHQpLGE9bmV3IGkoMSkudG9SZWQobyk7ZXx8KGU9TWF0aC5tYXgoMSxuLzQ4fDApKTtmb3IodmFyIGY9dC5zdWJuKDEpLHM9Zi5zdWJuKDEpLHU9MDshZi50ZXN0bih1KTt1KyspO2Zvcih2YXIgaD10LnNocm4odSksYz1mLnRvUmVkKG8pLGQ9ITA7ZT4wO2UtLSl7dmFyIGw9dGhpcy5fcmFuZChzKTtyJiZyKGwpO3ZhciBwPWwudG9SZWQobykucmVkUG93KGgpO2lmKDAhPT1wLmNtcChhKSYmMCE9PXAuY21wKGMpKXtmb3IodmFyIGI9MTtiPHU7YisrKXtpZihwPXAucmVkU3FyKCksMD09PXAuY21wKGEpKXJldHVybiExO2lmKDA9PT1wLmNtcChjKSlicmVha31pZihiPT09dSlyZXR1cm4hMX19cmV0dXJuIGR9LG4ucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmJpdExlbmd0aCgpLG49aS5tb250KHQpLG89bmV3IGkoMSkudG9SZWQobik7ZXx8KGU9TWF0aC5tYXgoMSxyLzQ4fDApKTtmb3IodmFyIGE9dC5zdWJuKDEpLGY9YS5zdWJuKDEpLHM9MDshYS50ZXN0bihzKTtzKyspO2Zvcih2YXIgdT10LnNocm4ocyksaD1hLnRvUmVkKG4pO2U+MDtlLS0pe3ZhciBjPXRoaXMuX3JhbmQoZiksZD10LmdjZChjKTtpZigwIT09ZC5jbXBuKDEpKXJldHVybiBkO3ZhciBsPWMudG9SZWQobikucmVkUG93KHUpO2lmKDAhPT1sLmNtcChvKSYmMCE9PWwuY21wKGgpKXtmb3IodmFyIHA9MTtwPHM7cCsrKXtpZihsPWwucmVkU3FyKCksMD09PWwuY21wKG8pKXJldHVybiBsLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh0KTtpZigwPT09bC5jbXAoaCkpYnJlYWt9aWYocD09PXMpcmV0dXJuIGw9bC5yZWRTcXIoKSxsLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh0KX19cmV0dXJuITF9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI9bmV3IGUoNCk7cmV0dXJuIHIud3JpdGVVSW50MzJCRSh0LDApLHJ9dmFyIGk9cig1OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBvLGE9bmV3IGUoXCJcIiksZj0wO2EubGVuZ3RoPHI7KW89bihmKyspLGE9ZS5jb25jYXQoW2EsaShcInNoYTFcIikudXBkYXRlKHQpLnVwZGF0ZShvKS5kaWdlc3QoKV0pO3JldHVybiBhLnNsaWNlKDAscil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW8odCkscj1lLnRvUmVkKGEubW9udCh0Lm1vZHVsdXMpKS5yZWRQb3cobmV3IGEodC5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKTtyZXR1cm57YmxpbmRlcjpyLHVuYmxpbmRlcjplLmludm0odC5tb2R1bHVzKX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBpPW4ociksbz1yLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGY9KGEubW9udChyLm1vZHVsdXMpLG5ldyBhKHQpLm11bChpLmJsaW5kZXIpLnVtb2Qoci5tb2R1bHVzKSkscz1mLnRvUmVkKGEubW9udChyLnByaW1lMSkpLHU9Zi50b1JlZChhLm1vbnQoci5wcmltZTIpKSxoPXIuY29lZmZpY2llbnQsYz1yLnByaW1lMSxkPXIucHJpbWUyLGw9cy5yZWRQb3coci5leHBvbmVudDEpLHA9dS5yZWRQb3coci5leHBvbmVudDIpO2w9bC5mcm9tUmVkKCkscD1wLmZyb21SZWQoKTt2YXIgYj1sLmlzdWIocCkuaW11bChoKS51bW9kKGMpO3JldHVybiBiLmltdWwoZCkscC5pYWRkKGIpLG5ldyBlKHAuaW11bChpLnVuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpLnRvQXJyYXkoITEsbykpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCkscj1uZXcgYShmKGUpKTtyLmNtcCh0Lm1vZHVsdXMpPj0wfHwhci51bW9kKHQucHJpbWUxKXx8IXIudW1vZCh0LnByaW1lMik7KXI9bmV3IGEoZihlKSk7cmV0dXJuIHJ9dmFyIGE9cig3MCksZj1yKDYxKTt0LmV4cG9ydHM9aSxpLmdldHI9b30pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgcjtcIm9iamVjdFwiIT10eXBlb2YgdHx8ZS5pc0J1ZmZlcih0KXx8KHI9dC5wYXNzcGhyYXNlLHQ9dC5rZXkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0KSk7dmFyIG4sYSxzPWYodCxyKSx1PXMudGFnLGg9cy5kYXRhO3N3aXRjaCh1KXtjYXNlXCJQVUJMSUMgS0VZXCI6c3dpdGNoKGE9by5QdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybiBhLnN1YmplY3RQcml2YXRlS2V5PWEuc3ViamVjdFB1YmxpY0tleSx7dHlwZTpcImVjXCIsZGF0YTphfTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKSx7dHlwZTpcImRzYVwiLGRhdGE6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCI6aD1vLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksaD1pKGgscik7Y2FzZVwiUFJJVkFURSBLRVlcIjpzd2l0Y2goYT1vLlByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybntjdXJ2ZTphLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5Om8uRUNQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLnByaXZhdGVLZXl9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIscGFyYW1zOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIlJTQSBQVUJMSUMgS0VZXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIlJTQSBQUklWQVRFIEtFWVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiRFNBIFBSSVZBVEUgS0VZXCI6cmV0dXJue3R5cGU6XCJkc2FcIixwYXJhbXM6by5EU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpfTtjYXNlXCJFQyBQUklWQVRFIEtFWVwiOnJldHVybiBoPW8uRUNQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLHtjdXJ2ZTpoLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpoLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LGk9cGFyc2VJbnQodC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLG89YVt0LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oXCIuXCIpXSxmPXQuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGg9dC5zdWJqZWN0UHJpdmF0ZUtleSxjPXBhcnNlSW50KG8uc3BsaXQoXCItXCIpWzFdLDEwKS84LGQ9dS5wYmtkZjJTeW5jKHIsbixpLGMpLGw9cy5jcmVhdGVEZWNpcGhlcml2KG8sZCxmKSxwPVtdO3JldHVybiBwLnB1c2gobC51cGRhdGUoaCkpLHAucHVzaChsLmZpbmFsKCkpLGUuY29uY2F0KHApfXZhciBvPXIoNTc4KSxhPXIoNDY5KSxmPXIoNTc5KSxzPXIoMjM5KSx1PXIoMTUxKTt0LmV4cG9ydHM9bixuLnNpZ25hdHVyZT1vLnNpZ25hdHVyZX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEuY2FsbCh0aGlzLGUpLGYuaXNCdWZmZXIodCk/KHRoaXMuYmFzZT10LHRoaXMub2Zmc2V0PTAsdm9pZCh0aGlzLmxlbmd0aD10Lmxlbmd0aCkpOnZvaWQgdGhpcy5lcnJvcihcIklucHV0IG5vdCBCdWZmZXJcIil9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXx8KHQ9bmV3IGkodCxlKSksdGhpcy5sZW5ndGgrPXQubGVuZ3RoLHR9LHRoaXMpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKCEoMDw9dCYmdDw9MjU1KSlyZXR1cm4gZS5lcnJvcihcIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWVcIik7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPTF9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9Zi5ieXRlTGVuZ3RoKHQpO2Vsc2V7aWYoIWYuaXNCdWZmZXIodCkpcmV0dXJuIGUuZXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlOiBcIit0eXBlb2YgdCk7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPXQubGVuZ3RofX12YXIgbz1yKDIpLGE9cig3MSkuUmVwb3J0ZXIsZj1yKDEpLkJ1ZmZlcjtvKG4sYSksZS5EZWNvZGVyQnVmZmVyPW4sbi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6YS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbih0aGlzLmJhc2UpO3JldHVybiBlLm9mZnNldD10Lm9mZnNldCxlLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD10Lm9mZnNldCxhLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyx0LnJlcG9ydGVyKSxlfSxuLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKHR8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpfSxuLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzLm9mZnNldCt0PD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoZXx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIik7dmFyIHI9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gci5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHIub2Zmc2V0PXRoaXMub2Zmc2V0LHIubGVuZ3RoPXRoaXMub2Zmc2V0K3QsdGhpcy5vZmZzZXQrPXQscn0sbi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UodD90Lm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LGUuRW5jb2RlckJ1ZmZlcj1pLGkucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHx8KHQ9bmV3IGYodGhpcy5sZW5ndGgpKSxlfHwoZT0wKSwwPT09dGhpcy5sZW5ndGg/dDooQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24ocil7ci5qb2luKHQsZSksZSs9ci5sZW5ndGh9KTooXCJudW1iZXJcIj09dHlwZW9mIHRoaXMudmFsdWU/dFtlXT10aGlzLnZhbHVlOlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3Qud3JpdGUodGhpcy52YWx1ZSxlKTpmLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkodCxlKSxlKz10aGlzLmxlbmd0aCksdCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLl9yZXZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSxuLmRlcj1yKDU4Myl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe3UuTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5yZWFkVUludDgoZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWMudGFnQ2xhc3Nbcj4+Nl0saT0wPT09KDMyJnIpO2lmKDMxPT09KDMxJnIpKXt2YXIgbz1yO2ZvcihyPTA7MTI4PT09KDEyOCZvKTspe2lmKG89dC5yZWFkVUludDgoZSksdC5pc0Vycm9yKG8pKXJldHVybiBvO3I8PD03LHJ8PTEyNyZvfX1lbHNlIHImPTMxO3ZhciBhPWMudGFnW3JdO3JldHVybntjbHM6bixwcmltaXRpdmU6aSx0YWc6cix0YWdTdHI6YX19ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO2lmKCFlJiYxMjg9PT1uKXJldHVybiBudWxsO2lmKDA9PT0oMTI4Jm4pKXJldHVybiBuO3ZhciBpPTEyNyZuO2lmKGk+PTQpcmV0dXJuIHQuZXJyb3IoXCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nXCIpO249MDtmb3IodmFyIG89MDtvPGk7bysrKXtuPDw9ODt2YXIgYT10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IoYSkpcmV0dXJuIGE7bnw9YX1yZXR1cm4gbn12YXIgZj1yKDIpLHM9cigxMDYpLHU9cy5iYXNlLGg9cy5iaWdudW0sYz1zLmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1LkRlY29kZXJCdWZmZXJ8fCh0PW5ldyB1LkRlY29kZXJCdWZmZXIodCxlKSksdGhpcy50cmVlLl9kZWNvZGUodCxlKX0sZihpLHUuTm9kZSksaS5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaXNFbXB0eSgpKXJldHVybiExO3ZhciBuPXQuc2F2ZSgpLGk9byh0LCdGYWlsZWQgdG8gcGVlayB0YWc6IFwiJytlKydcIicpO3JldHVybiB0LmlzRXJyb3IoaSk/aToodC5yZXN0b3JlKG4pLGkudGFnPT09ZXx8aS50YWdTdHI9PT1lfHxpLnRhZ1N0citcIm9mXCI9PT1lfHxyKX0saS5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbih0LGUscil7dmFyIG49byh0LCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk9YSh0LG4ucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoIXImJm4udGFnIT09ZSYmbi50YWdTdHIhPT1lJiZuLnRhZ1N0citcIm9mXCIhPT1lKXJldHVybiB0LmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicrZSsnXCInKTtpZihuLnByaW1pdGl2ZXx8bnVsbCE9PWkpcmV0dXJuIHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJyk7dmFyIGY9dC5zYXZlKCkscz10aGlzLl9za2lwVW50aWxFbmQodCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogXCInK3RoaXMudGFnKydcIicpO3JldHVybiB0LmlzRXJyb3Iocyk/czooaT10Lm9mZnNldC1mLm9mZnNldCx0LnJlc3RvcmUoZiksdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKSl9LGkucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24odCxlKXtmb3IoOzspe3ZhciByPW8odCxlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49YSh0LHIucHJpbWl0aXZlLGUpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaTtpZihpPXIucHJpbWl0aXZlfHxudWxsIT09bj90LnNraXAobik6dGhpcy5fc2tpcFVudGlsRW5kKHQsZSksdC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKFwiZW5kXCI9PT1yLnRhZ1N0cilicmVha319LGkucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1bXTshdC5pc0VtcHR5KCk7KXt2YXIgbz10aGlzLl9wZWVrVGFnKHQsXCJlbmRcIik7aWYodC5pc0Vycm9yKG8pKXJldHVybiBvO3ZhciBhPXIuZGVjb2RlKHQsXCJkZXJcIixuKTtpZih0LmlzRXJyb3IoYSkmJm8pYnJlYWs7aS5wdXNoKGEpfXJldHVybiBpfSxpLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpe3ZhciByPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihyKT9yOnt1bnVzZWQ6cixkYXRhOnQucmF3KCl9fWlmKFwiYm1wc3RyXCI9PT1lKXt2YXIgbj10LnJhdygpO2lmKG4ubGVuZ3RoJTI9PT0xKXJldHVybiB0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2hcIik7Zm9yKHZhciBpPVwiXCIsbz0wO288bi5sZW5ndGgvMjtvKyspaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuLnJlYWRVSW50MTZCRSgyKm8pKTtyZXR1cm4gaX1pZihcIm51bXN0clwiPT09ZSl7dmFyIGE9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc051bXN0cihhKT9hOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9aWYoXCJvY3RzdHJcIj09PWUpcmV0dXJuIHQucmF3KCk7aWYoXCJwcmludHN0clwiPT09ZSl7dmFyIGY9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKGYpP2Y6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfXJldHVybi9zdHIkLy50ZXN0KGUpP3QucmF3KCkudG9TdHJpbmcoKTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9W10sbz0wOyF0LmlzRW1wdHkoKTspe3ZhciBhPXQucmVhZFVJbnQ4KCk7bzw8PTcsb3w9MTI3JmEsMD09PSgxMjgmYSkmJihpLnB1c2gobyksbz0wKX0xMjgmYSYmaS5wdXNoKG8pO3ZhciBmPWlbMF0vNDB8MCxzPWlbMF0lNDA7aWYobj1yP2k6W2Ysc10uY29uY2F0KGkuc2xpY2UoMSkpLGUpe3ZhciB1PWVbbi5qb2luKFwiIFwiKV07dm9pZCAwPT09dSYmKHU9ZVtuLmpvaW4oXCIuXCIpXSksdm9pZCAwIT09dSYmKG49dSl9cmV0dXJuIG59LGkucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKS50b1N0cmluZygpO2lmKFwiZ2VudGltZVwiPT09ZSl2YXIgbj0wfHIuc2xpY2UoMCw0KSxpPTB8ci5zbGljZSg0LDYpLG89MHxyLnNsaWNlKDYsOCksYT0wfHIuc2xpY2UoOCwxMCksZj0wfHIuc2xpY2UoMTAsMTIpLHM9MHxyLnNsaWNlKDEyLDE0KTtlbHNle2lmKFwidXRjdGltZVwiIT09ZSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTt2YXIgbj0wfHIuc2xpY2UoMCwyKSxpPTB8ci5zbGljZSgyLDQpLG89MHxyLnNsaWNlKDQsNiksYT0wfHIuc2xpY2UoNiw4KSxmPTB8ci5zbGljZSg4LDEwKSxzPTB8ci5zbGljZSgxMCwxMik7bj1uPDcwPzJlMytuOjE5MDArbn1yZXR1cm4gRGF0ZS5VVEMobixpLTEsbyxhLGYscywwKX0saS5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihlKT9lOjAhPT1lfSxpLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKSxuPW5ldyBoKHIpO3JldHVybiBlJiYobj1lW24udG9TdHJpbmcoMTApXXx8biksbn0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldERlY29kZXIoXCJkZXJcIikudHJlZX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe2guTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PDEwP1wiMFwiK3Q6dH1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpO2lmKFwic2Vxb2ZcIj09PXQ/dD1cInNlcVwiOlwic2V0b2ZcIj09PXQmJih0PVwic2V0XCIpLGMudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHQpKWk9Yy50YWdCeU5hbWVbdF07ZWxzZXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8KDB8dCkhPT10KXJldHVybiBuLmVycm9yKFwiVW5rbm93biB0YWc6IFwiK3QpO2k9dH1yZXR1cm4gaT49MzE/bi5lcnJvcihcIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZFwiKTooZXx8KGl8PTMyKSxpfD1jLnRhZ0NsYXNzQnlOYW1lW3J8fFwidW5pdmVyc2FsXCJdPDw2KX12YXIgZj1yKDIpLHM9cigxKS5CdWZmZXIsdT1yKDEwNiksaD11LmJhc2UsYz11LmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKHQsZSkuam9pbigpfSxmKGksaC5Ob2RlKSxpLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWEodCxlLHIsdGhpcy5yZXBvcnRlcik7aWYobi5sZW5ndGg8MTI4KXt2YXIgbz1uZXcgcygyKTtyZXR1cm4gb1swXT1pLG9bMV09bi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9Zm9yKHZhciBmPTEsdT1uLmxlbmd0aDt1Pj0yNTY7dT4+PTgpZisrO3ZhciBvPW5ldyBzKDIrZik7b1swXT1pLG9bMV09MTI4fGY7Zm9yKHZhciB1PTErZixoPW4ubGVuZ3RoO2g+MDt1LS0saD4+PTgpb1t1XT0yNTUmaDtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9LGkucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHx0LnVudXNlZCx0LmRhdGFdKTtpZihcImJtcHN0clwiPT09ZSl7Zm9yKHZhciByPW5ldyBzKDIqdC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyLndyaXRlVUludDE2QkUodC5jaGFyQ29kZUF0KG4pLDIqbik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocil9cmV0dXJuXCJudW1zdHJcIj09PWU/dGhpcy5faXNOdW1zdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2VcIik6XCJwcmludHN0clwiPT09ZT90aGlzLl9pc1ByaW50c3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrXCIpOi9zdHIkLy50ZXN0KGUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmRcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcFwiKTt0PWVbdF0uc3BsaXQoL1tcXHNcXC5dKy9nKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dD10LnNsaWNlKCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogXCIrSlNPTi5zdHJpbmdpZnkodCkpO2lmKCFyKXtpZih0WzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQlwiKTt0LnNwbGljZSgwLDIsNDAqdFswXSt0WzFdKX1mb3IodmFyIGk9MCxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07Zm9yKGkrKztvPj0xMjg7bz4+PTcpaSsrfWZvcih2YXIgYT1uZXcgcyhpKSxmPWEubGVuZ3RoLTEsbj10Lmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz10W25dO2ZvcihhW2YtLV09MTI3Jm87KG8+Pj03KT4wOylhW2YtLV09MTI4fDEyNyZvfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpfSxpLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByLG49bmV3IERhdGUodCk7cmV0dXJuXCJnZW50aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6XCJ1dGN0aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpJTEwMCksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIiksdGhpcy5fZW5jb2RlU3RyKHIsXCJvY3RzdHJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoXCJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46IFwiK0pTT04uc3RyaW5naWZ5KHQpKTt0PWVbdF19aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJiFzLmlzQnVmZmVyKHQpKXt2YXIgcj10LnRvQXJyYXkoKTshdC5zaWduJiYxMjgmclswXSYmci51bnNoaWZ0KDApLHQ9bmV3IHMocil9aWYocy5pc0J1ZmZlcih0KSl7dmFyIG49dC5sZW5ndGg7MD09PXQubGVuZ3RoJiZuKys7dmFyIGk9bmV3IHMobik7cmV0dXJuIHQuY29weShpKSwwPT09dC5sZW5ndGgmJihpWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoaSl9aWYodDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7aWYodDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsdF0pO2Zvcih2YXIgbj0xLG89dDtvPj0yNTY7bz4+PTgpbisrO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksbz1pLmxlbmd0aC0xO28+PTA7by0tKWlbb109MjU1JnQsdD4+PTg7cmV0dXJuIDEyOCZpWzBdJiZpLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgcyhpKSl9LGkucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQ/MjU1OjApfSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RW5jb2RlcihcImRlclwiKS50cmVlfSxpLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1pLmRlZmF1bHQpcmV0dXJuITE7dmFyIG89dC5qb2luKCk7aWYodm9pZCAwPT09aS5kZWZhdWx0QnVmZmVyJiYoaS5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKGkuZGVmYXVsdCxlLHIpLmpvaW4oKSksby5sZW5ndGghPT1pLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspaWYob1tuXSE9PWkuZGVmYXVsdEJ1ZmZlcltuXSlyZXR1cm4hMTtyZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsaSxmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCxyLGkpO2EuY2FsbCh0aGlzKSx0aGlzLl9maW5JRD1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMV0pXSksaT1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMl0pXSksdGhpcy5fY2lwaGVyPW5ldyBvLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGkubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLGkuY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPXQ7dmFyIHU9bmV3IGUoNCk7dS5maWxsKDApLHRoaXMuX2doYXNoPW5ldyBzKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodSkpLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTA7dC5sZW5ndGghPT1lLmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0tMTsrK2k8bjspcis9dFtpXV5lW2ldO3JldHVybiByfXZhciBvPXIoMTA3KSxhPXIoMTA5KSxmPXIoMikscz1yKDU5MSksdT1yKDcyKTtmKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgcj0xNi10aGlzLl9hbGVuJTE2O3I8MTYmJihyPW5ldyBlKHIpLHIuZmlsbCgwKSx0aGlzLl9naGFzaC51cGRhdGUocikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KTtyZXR1cm4gdGhpcy5fZGVjcnlwdD90aGlzLl9naGFzaC51cGRhdGUodCk6dGhpcy5fZ2hhc2gudXBkYXRlKG4pLHRoaXMuX2xlbis9dC5sZW5ndGgsbn0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpO3ZhciB0PXUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCl7aWYoaSh0LHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKX1lbHNlIHRoaXMuX2F1dGhUYWc9dDt0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZWNyeXB0JiZlLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXJldHVybiB0aGlzLl9hdXRoVGFnO3Rocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2F1dGhUYWc9dH0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fZ2hhc2gudXBkYXRlKHQpLHRoaXMuX2FsZW4rPXQubGVuZ3RofX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfXZhciBpPXIoNTkwKTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1pLmNyZWF0ZUNpcGhlcixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9aS5jcmVhdGVDaXBoZXJpdjt2YXIgbz1yKDU4OSk7ZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPW8uY3JlYXRlRGVjaXBoZXIsZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1vLmNyZWF0ZURlY2lwaGVyaXY7dmFyIGE9cigxNTIpO2UubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPW59LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUsdC5fcHJldik7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSx0Ll9wcmV2fSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcmV2O3QuX3ByZXY9ZTt2YXIgaT10Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpO3JldHVybiBuKGkscil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG4pe3ZhciBvPXIubGVuZ3RoLGE9aShyLGUuX2NhY2hlKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2UobyksZS5fcHJldj10LmNvbmNhdChbZS5fcHJldixuP3I6YV0pLGF9dmFyIGk9cig3Mik7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscixpKXtmb3IodmFyIG8sYT1uZXcgdChcIlwiKTtyLmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bmV3IHQoXCJcIikpLCEoZS5fY2FjaGUubGVuZ3RoPD1yLmxlbmd0aCkpe2E9dC5jb25jYXQoW2EsbihlLHIsaSldKTticmVha31vPWUuX2NhY2hlLmxlbmd0aCxhPXQuY29uY2F0KFthLG4oZSxyLnNsaWNlKDAsbyksaSldKSxyPXIuc2xpY2Uobyl9cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSxyKXtmb3IodmFyIGksbyxhLGY9LTEscz04LHU9MDsrK2Y8czspaT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLG89ZSYxPDw3LWY/MTI4OjAsYT1pWzBdXm8sdSs9KDEyOCZhKT4+ZiU4LHQuX3ByZXY9bih0Ll9wcmV2LHI/bzphKTtyZXR1cm4gdX1mdW5jdGlvbiBuKGUscil7dmFyIG49ZS5sZW5ndGgsaT0tMSxvPW5ldyB0KGUubGVuZ3RoKTtmb3IoZT10LmNvbmNhdChbZSxuZXcgdChbcl0pXSk7KytpPG47KW9baV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxvPWlbMF1ecjtyZXR1cm4gZS5fcHJldj10LmNvbmNhdChbZS5fcHJldi5zbGljZSgxKSxuZXcgdChbbj9yOm9dKV0pLG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5lbmNyeXB0QmxvY2soZSl9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksdC5fcHJldn12YXIgaT1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLG4oZSldKTt2YXIgbz1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLGkocixvKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGEsZil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBpLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGEubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsYS5jb3B5KHRoaXMuX3ByZXYpLHZvaWQodGhpcy5fbW9kZT10KSk6bmV3IG4odCxyLGEpfXZhciBpPXIoMTA3KSxvPXIoMTA5KSxhPXIoMik7YShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQsdGhpcy5fZGVjcnlwdCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBuZXcgZSh0LnRvUmVkKGkubW9udChyLm1vZHVsdXMpKS5yZWRQb3cobmV3IGkoci5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfXZhciBpPXIoNzApO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0tMTsrK248cjspdFtuXV49ZVtuXTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj92b2lkIGkuY2FsbCh0aGlzLHQpOm5ldyBuKHQpfXQuZXhwb3J0cz1uO3ZhciBpPXIoMTU0KSxvPXIoNzMpO28uaW5oZXJpdHM9cig3NCksby5pbmhlcml0cyhuLGkpLG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobnVsbCx0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5wcmVwZW5kTGlzdGVuZXI/dC5wcmVwZW5kTGlzdGVuZXIoZSxyKTp2b2lkKHQuX2V2ZW50cyYmdC5fZXZlbnRzW2VdP08odC5fZXZlbnRzW2VdKT90Ll9ldmVudHNbZV0udW5zaGlmdChyKTp0Ll9ldmVudHNbZV09W3IsdC5fZXZlbnRzW2VdXTp0Lm9uKGUscikpfWZ1bmN0aW9uIGkodCxlKXtEPUR8fHIoNTEpLHQ9dHx8e30sdGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLGUgaW5zdGFuY2VvZiBEJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF0LnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIG49dC5oaWdoV2F0ZXJNYXJrLGk9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1ufHwwPT09bj9uOmksdGhpcy5oaWdoV2F0ZXJNYXJrPX5+dGhpcy5oaWdoV2F0ZXJNYXJrLHRoaXMuYnVmZmVyPW5ldyB6LHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz10LmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5yYW5PdXQ9ITEsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsdC5lbmNvZGluZyYmKFV8fChVPXIoNTIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgVSh0LmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEQ9RHx8cig1MSksdGhpcyBpbnN0YW5jZW9mIG8/KHRoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGkodCx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVhZCYmKHRoaXMuX3JlYWQ9dC5yZWFkKSx2b2lkIFIuY2FsbCh0aGlzKSk6bmV3IG8odCl9ZnVuY3Rpb24gYSh0LGUscixuLGkpe3ZhciBvPWgoZSxyKTtpZihvKXQuZW1pdChcImVycm9yXCIsbyk7ZWxzZSBpZihudWxsPT09cillLnJlYWRpbmc9ITEsYyh0LGUpO2Vsc2UgaWYoZS5vYmplY3RNb2RlfHxyJiZyLmxlbmd0aD4wKWlmKGUuZW5kZWQmJiFpKXt2YXIgYT1uZXcgRXJyb3IoXCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRlwiKTt0LmVtaXQoXCJlcnJvclwiLGEpfWVsc2UgaWYoZS5lbmRFbWl0dGVkJiZpKXt2YXIgcz1uZXcgRXJyb3IoXCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudFwiKTt0LmVtaXQoXCJlcnJvclwiLHMpfWVsc2V7dmFyIHU7IWUuZGVjb2Rlcnx8aXx8bnx8KHI9ZS5kZWNvZGVyLndyaXRlKHIpLHU9IWUub2JqZWN0TW9kZSYmMD09PXIubGVuZ3RoKSxpfHwoZS5yZWFkaW5nPSExKSx1fHwoZS5mbG93aW5nJiYwPT09ZS5sZW5ndGgmJiFlLnN5bmM/KHQuZW1pdChcImRhdGFcIixyKSx0LnJlYWQoMCkpOihlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgsaT9lLmJ1ZmZlci51bnNoaWZ0KHIpOmUuYnVmZmVyLnB1c2gociksZS5uZWVkUmVhZGFibGUmJmQodCkpKSxwKHQsZSl9ZWxzZSBpfHwoZS5yZWFkaW5nPSExKTtyZXR1cm4gZihlKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LmVuZGVkJiYodC5uZWVkUmVhZGFibGV8fHQubGVuZ3RoPHQuaGlnaFdhdGVyTWFya3x8MD09PXQubGVuZ3RoKX1mdW5jdGlvbiBzKHQpe3JldHVybiB0Pj1xP3Q9cToodC0tLHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LHR8PXQ+Pj4xNix0KyspLHR9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0PD0wfHwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/MDplLm9iamVjdE1vZGU/MTp0IT09dD9lLmZsb3dpbmcmJmUubGVuZ3RoP2UuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6ZS5sZW5ndGg6KHQ+ZS5oaWdoV2F0ZXJNYXJrJiYoZS5oaWdoV2F0ZXJNYXJrPXModCkpLHQ8PWUubGVuZ3RoP3Q6ZS5lbmRlZD9lLmxlbmd0aDooZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1udWxsO3JldHVybiBULmlzQnVmZmVyKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8bnVsbD09PWV8fHZvaWQgMD09PWV8fHQub2JqZWN0TW9kZXx8KHI9bmV3IFR5cGVFcnJvcihcIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmtcIikpLHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCFlLmVuZGVkKXtpZihlLmRlY29kZXIpe3ZhciByPWUuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKGUuYnVmZmVyLnB1c2gociksZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX1lLmVuZGVkPSEwLGQodCl9fWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KEwoXCJlbWl0UmVhZGFibGVcIixlLmZsb3dpbmcpLGUuZW1pdHRlZFJlYWRhYmxlPSEwLGUuc3luYz9CKGwsdCk6bCh0KSl9ZnVuY3Rpb24gbCh0KXtMKFwiZW1pdCByZWFkYWJsZVwiKSx0LmVtaXQoXCJyZWFkYWJsZVwiKSx3KHQpfWZ1bmN0aW9uIHAodCxlKXtlLnJlYWRpbmdNb3JlfHwoZS5yZWFkaW5nTW9yZT0hMCxCKGIsdCxlKSl9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aDshZS5yZWFkaW5nJiYhZS5mbG93aW5nJiYhZS5lbmRlZCYmZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrJiYoTChcIm1heWJlUmVhZE1vcmUgcmVhZCAwXCIpLHQucmVhZCgwKSxyIT09ZS5sZW5ndGgpOylyPWUubGVuZ3RoO2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gdih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO0woXCJwaXBlT25EcmFpblwiLGUuYXdhaXREcmFpbiksZS5hd2FpdERyYWluJiZlLmF3YWl0RHJhaW4tLSwwPT09ZS5hd2FpdERyYWluJiZQKHQsXCJkYXRhXCIpJiYoZS5mbG93aW5nPSEwLHcodCkpfX1mdW5jdGlvbiB5KHQpe0woXCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDBcIiksdC5yZWFkKDApfWZ1bmN0aW9uIG0odCxlKXtlLnJlc3VtZVNjaGVkdWxlZHx8KGUucmVzdW1lU2NoZWR1bGVkPSEwLEIoZyx0LGUpKX1mdW5jdGlvbiBnKHQsZSl7ZS5yZWFkaW5nfHwoTChcInJlc3VtZSByZWFkIDBcIiksdC5yZWFkKDApKSxlLnJlc3VtZVNjaGVkdWxlZD0hMSxlLmF3YWl0RHJhaW49MCx0LmVtaXQoXCJyZXN1bWVcIiksdyh0KSxlLmZsb3dpbmcmJiFlLnJlYWRpbmcmJnQucmVhZCgwKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7Zm9yKEwoXCJmbG93XCIsZS5mbG93aW5nKTtlLmZsb3dpbmcmJm51bGwhPT10LnJlYWQoKTspO31mdW5jdGlvbiBfKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciByO3JldHVybiBlLm9iamVjdE1vZGU/cj1lLmJ1ZmZlci5zaGlmdCgpOiF0fHx0Pj1lLmxlbmd0aD8ocj1lLmRlY29kZXI/ZS5idWZmZXIuam9pbihcIlwiKToxPT09ZS5idWZmZXIubGVuZ3RoP2UuYnVmZmVyLmhlYWQuZGF0YTplLmJ1ZmZlci5jb25jYXQoZS5sZW5ndGgpLGUuYnVmZmVyLmNsZWFyKCkpOnI9TSh0LGUuYnVmZmVyLGUuZGVjb2Rlcikscn1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbjtyZXR1cm4gdDxlLmhlYWQuZGF0YS5sZW5ndGg/KG49ZS5oZWFkLmRhdGEuc2xpY2UoMCx0KSxlLmhlYWQuZGF0YT1lLmhlYWQuZGF0YS5zbGljZSh0KSk6bj10PT09ZS5oZWFkLmRhdGEubGVuZ3RoP2Uuc2hpZnQoKTpyP1ModCxlKTpFKHQsZSksbn1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9ZS5oZWFkLG49MSxpPXIuZGF0YTtmb3IodC09aS5sZW5ndGg7cj1yLm5leHQ7KXt2YXIgbz1yLmRhdGEsYT10Pm8ubGVuZ3RoP28ubGVuZ3RoOnQ7aWYoaSs9YT09PW8ubGVuZ3RoP286by5zbGljZSgwLHQpLHQtPWEsMD09PXQpe2E9PT1vLmxlbmd0aD8oKytuLHIubmV4dD9lLmhlYWQ9ci5uZXh0OmUuaGVhZD1lLnRhaWw9bnVsbCk6KGUuaGVhZD1yLHIuZGF0YT1vLnNsaWNlKGEpKTticmVha30rK259cmV0dXJuIGUubGVuZ3RoLT1uLGl9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPWouYWxsb2NVbnNhZmUodCksbj1lLmhlYWQsaT0xO2ZvcihuLmRhdGEuY29weShyKSx0LT1uLmRhdGEubGVuZ3RoO249bi5uZXh0Oyl7dmFyIG89bi5kYXRhLGE9dD5vLmxlbmd0aD9vLmxlbmd0aDp0O2lmKG8uY29weShyLHIubGVuZ3RoLXQsMCxhKSx0LT1hLDA9PT10KXthPT09by5sZW5ndGg/KCsraSxuLm5leHQ/ZS5oZWFkPW4ubmV4dDplLmhlYWQ9ZS50YWlsPW51bGwpOihlLmhlYWQ9bixuLmRhdGE9by5zbGljZShhKSk7YnJlYWt9KytpfXJldHVybiBlLmxlbmd0aC09aSxyfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtpZihlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignXCJlbmRSZWFkYWJsZSgpXCIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtlLmVuZEVtaXR0ZWR8fChlLmVuZGVkPSEwLEIoayxlLHQpKX1mdW5jdGlvbiBrKHQsZSl7dC5lbmRFbWl0dGVkfHwwIT09dC5sZW5ndGh8fCh0LmVuZEVtaXR0ZWQ9ITAsZS5yZWFkYWJsZT0hMSxlLmVtaXQoXCJlbmRcIikpfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZSh0W3JdLHIpfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9dC5leHBvcnRzPW87dmFyIEI9cigxNTcpLE89cig1OTcpO28uUmVhZGFibGVTdGF0ZT1pO3ZhciBSLFA9KHIoMTEwKS5FdmVudEVtaXR0ZXIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lcnMoZSkubGVuZ3RofSk7IWZ1bmN0aW9uKCl7dHJ5e1I9cigzMSl9Y2F0Y2godCl7fWZpbmFsbHl7Unx8KFI9cigxMTApLkV2ZW50RW1pdHRlcil9fSgpO3ZhciBUPXIoMSkuQnVmZmVyLGo9cigxNTYpLEM9cig3Myk7Qy5pbmhlcml0cz1yKDc0KTt2YXIgTj1yKDYxMiksTD12b2lkIDA7TD1OJiZOLmRlYnVnbG9nP04uZGVidWdsb2coXCJzdHJlYW1cIik6ZnVuY3Rpb24oKXt9O3ZhciBVLHo9cig1OTYpO0MuaW5oZXJpdHMobyxSKTt2YXIgRCxEO28ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiByLm9iamVjdE1vZGV8fFwic3RyaW5nXCIhPXR5cGVvZiB0fHwoZT1lfHxyLmRlZmF1bHRFbmNvZGluZyxlIT09ci5lbmNvZGluZyYmKHQ9ai5mcm9tKHQsZSksZT1cIlwiKSksYSh0aGlzLHIsdCxlLCExKX0sby5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBhKHRoaXMsZSx0LFwiXCIsITApfSxvLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9PT0hMX0sby5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIFV8fChVPXIoNTIpLlN0cmluZ0RlY29kZXIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgVSh0KSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXQsdGhpc307dmFyIHE9ODM4ODYwODtvLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe0woXCJyZWFkXCIsdCksdD1wYXJzZUludCh0LDEwKTt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHI9dDtpZigwIT09dCYmKGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09dCYmZS5uZWVkUmVhZGFibGUmJihlLmxlbmd0aD49ZS5oaWdoV2F0ZXJNYXJrfHxlLmVuZGVkKSlyZXR1cm4gTChcInJlYWQ6IGVtaXRSZWFkYWJsZVwiLGUubGVuZ3RoLGUuZW5kZWQpLDA9PT1lLmxlbmd0aCYmZS5lbmRlZD9BKHRoaXMpOmQodGhpcyksbnVsbDtpZih0PXUodCxlKSwwPT09dCYmZS5lbmRlZClyZXR1cm4gMD09PWUubGVuZ3RoJiZBKHRoaXMpLG51bGw7dmFyIG49ZS5uZWVkUmVhZGFibGU7TChcIm5lZWQgcmVhZGFibGVcIixuKSwoMD09PWUubGVuZ3RofHxlLmxlbmd0aC10PGUuaGlnaFdhdGVyTWFyaykmJihuPSEwLEwoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLG4pKSxlLmVuZGVkfHxlLnJlYWRpbmc/KG49ITEsTChcInJlYWRpbmcgb3IgZW5kZWRcIixuKSk6biYmKEwoXCJkbyByZWFkXCIpLGUucmVhZGluZz0hMCxlLnN5bmM9ITAsMD09PWUubGVuZ3RoJiYoZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoZS5oaWdoV2F0ZXJNYXJrKSxlLnN5bmM9ITEsZS5yZWFkaW5nfHwodD11KHIsZSkpKTt2YXIgaTtyZXR1cm4gaT10PjA/Xyh0LGUpOm51bGwsbnVsbD09PWk/KGUubmVlZFJlYWRhYmxlPSEwLHQ9MCk6ZS5sZW5ndGgtPXQsMD09PWUubGVuZ3RoJiYoZS5lbmRlZHx8KGUubmVlZFJlYWRhYmxlPSEwKSxyIT09dCYmZS5lbmRlZCYmQSh0aGlzKSksbnVsbCE9PWkmJnRoaXMuZW1pdChcImRhdGFcIixpKSxpfSxvLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih0KXt0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKSl9LG8ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBpKHQpe0woXCJvbnVucGlwZVwiKSx0PT09ZCYmYSgpfWZ1bmN0aW9uIG8oKXtMKFwib25lbmRcIiksdC5lbmQoKX1mdW5jdGlvbiBhKCl7TChcImNsZWFudXBcIiksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdSksdC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLGgpLHQucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLHkpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHMpLHQucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIixpKSxkLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbyksZC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGEpLGQucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsZiksbT0hMCwhbC5hd2FpdERyYWlufHx0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHkoKX1mdW5jdGlvbiBmKGUpe0woXCJvbmRhdGFcIiksZz0hMTt2YXIgcj10LndyaXRlKGUpOyExIT09cnx8Z3x8KCgxPT09bC5waXBlc0NvdW50JiZsLnBpcGVzPT09dHx8bC5waXBlc0NvdW50PjEmJkkobC5waXBlcyx0KSE9PS0xKSYmIW0mJihMKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsZC5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKSxkLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKyxnPSEwKSxkLnBhdXNlKCkpfWZ1bmN0aW9uIHMoZSl7TChcIm9uZXJyb3JcIixlKSxjKCksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIscyksMD09PVAodCxcImVycm9yXCIpJiZ0LmVtaXQoXCJlcnJvclwiLGUpfWZ1bmN0aW9uIHUoKXt0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsaCksYygpfWZ1bmN0aW9uIGgoKXtMKFwib25maW5pc2hcIiksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdSksYygpfWZ1bmN0aW9uIGMoKXtMKFwidW5waXBlXCIpLGQudW5waXBlKHQpfXZhciBkPXRoaXMsbD10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChsLnBpcGVzQ291bnQpe2Nhc2UgMDpsLnBpcGVzPXQ7YnJlYWs7Y2FzZSAxOmwucGlwZXM9W2wucGlwZXMsdF07YnJlYWs7ZGVmYXVsdDpsLnBpcGVzLnB1c2godCl9bC5waXBlc0NvdW50Kz0xLEwoXCJwaXBlIGNvdW50PSVkIG9wdHM9JWpcIixsLnBpcGVzQ291bnQscik7dmFyIHA9KCFyfHxyLmVuZCE9PSExKSYmdCE9PWUuc3Rkb3V0JiZ0IT09ZS5zdGRlcnIsYj1wP286YTtsLmVuZEVtaXR0ZWQ/QihiKTpkLm9uY2UoXCJlbmRcIixiKSx0Lm9uKFwidW5waXBlXCIsaSk7dmFyIHk9dihkKTt0Lm9uKFwiZHJhaW5cIix5KTt2YXIgbT0hMSxnPSExO3JldHVybiBkLm9uKFwiZGF0YVwiLGYpLG4odCxcImVycm9yXCIscyksdC5vbmNlKFwiY2xvc2VcIix1KSx0Lm9uY2UoXCJmaW5pc2hcIixoKSx0LmVtaXQoXCJwaXBlXCIsZCksbC5mbG93aW5nfHwoTChcInBpcGUgcmVzdW1lXCIpLGQucmVzdW1lKCkpLHR9LG8ucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO2lmKDA9PT1lLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PWUucGlwZXNDb3VudClyZXR1cm4gdCYmdCE9PWUucGlwZXM/dGhpczoodHx8KHQ9ZS5waXBlcyksZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMSx0JiZ0LmVtaXQoXCJ1bnBpcGVcIix0aGlzKSx0aGlzKTtpZighdCl7dmFyIHI9ZS5waXBlcyxuPWUucGlwZXNDb3VudDtlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExO2Zvcih2YXIgaT0wO2k8bjtpKyspcltpXS5lbWl0KFwidW5waXBlXCIsdGhpcyk7cmV0dXJuIHRoaXN9dmFyIG89SShlLnBpcGVzLHQpO3JldHVybiBvPT09LTE/dGhpczooZS5waXBlcy5zcGxpY2UobywxKSxlLnBpcGVzQ291bnQtPTEsMT09PWUucGlwZXNDb3VudCYmKGUucGlwZXM9ZS5waXBlc1swXSksdC5lbWl0KFwidW5waXBlXCIsdGhpcyksdGhpcyl9LG8ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Ui5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSk7aWYoXCJkYXRhXCI9PT10KXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyE9PSExJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoXCJyZWFkYWJsZVwiPT09dCl7dmFyIG49dGhpcy5fcmVhZGFibGVTdGF0ZTtuLmVuZEVtaXR0ZWR8fG4ucmVhZGFibGVMaXN0ZW5pbmd8fChuLnJlYWRhYmxlTGlzdGVuaW5nPW4ubmVlZFJlYWRhYmxlPSEwLG4uZW1pdHRlZFJlYWRhYmxlPSExLG4ucmVhZGluZz9uLmxlbmd0aCYmZCh0aGlzLG4pOkIoeSx0aGlzKSl9cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmFkZExpc3RlbmVyPW8ucHJvdG90eXBlLm9uLG8ucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHQuZmxvd2luZ3x8KEwoXCJyZXN1bWVcIiksdC5mbG93aW5nPSEwLG0odGhpcyx0KSksdGhpc30sby5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTChcImNhbGwgcGF1c2UgZmxvd2luZz0lalwiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihMKFwicGF1c2VcIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdChcInBhdXNlXCIpKSx0aGlzfSxvLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj0hMSxuPXRoaXM7dC5vbihcImVuZFwiLGZ1bmN0aW9uKCl7aWYoTChcIndyYXBwZWQgZW5kXCIpLGUuZGVjb2RlciYmIWUuZW5kZWQpe3ZhciB0PWUuZGVjb2Rlci5lbmQoKTt0JiZ0Lmxlbmd0aCYmbi5wdXNoKHQpfW4ucHVzaChudWxsKX0pLHQub24oXCJkYXRhXCIsZnVuY3Rpb24oaSl7aWYoTChcIndyYXBwZWQgZGF0YVwiKSxlLmRlY29kZXImJihpPWUuZGVjb2Rlci53cml0ZShpKSksKCFlLm9iamVjdE1vZGV8fG51bGwhPT1pJiZ2b2lkIDAhPT1pKSYmKGUub2JqZWN0TW9kZXx8aSYmaS5sZW5ndGgpKXt2YXIgbz1uLnB1c2goaSk7b3x8KHI9ITAsdC5wYXVzZSgpKX19KTtmb3IodmFyIGkgaW4gdCl2b2lkIDA9PT10aGlzW2ldJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W2ldJiYodGhpc1tpXT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFtlXS5hcHBseSh0LGFyZ3VtZW50cyl9fShpKSk7dmFyIG89W1wiZXJyb3JcIixcImNsb3NlXCIsXCJkZXN0cm95XCIsXCJwYXVzZVwiLFwicmVzdW1lXCJdO3JldHVybiB4KG8sZnVuY3Rpb24oZSl7dC5vbihlLG4uZW1pdC5iaW5kKG4sZSkpfSksbi5fcmVhZD1mdW5jdGlvbihlKXtMKFwid3JhcHBlZCBfcmVhZFwiLGUpLHImJihyPSExLHQucmVzdW1lKCkpfSxufSxvLl9mcm9tTGlzdD1ffSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7ZnVuY3Rpb24gQ29udGV4dCgpe312YXIgaW5kZXhPZj1fX3dlYnBhY2tfcmVxdWlyZV9fKDYwNyksT2JqZWN0X2tleXM9ZnVuY3Rpb24odCl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKHQpO3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sZm9yRWFjaD1mdW5jdGlvbih0LGUpe2lmKHQuZm9yRWFjaClyZXR1cm4gdC5mb3JFYWNoKGUpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUodFtyXSxyLHQpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJfXCIse30pLGZ1bmN0aW9uKHQsZSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLFxuY29uZmlndXJhYmxlOiEwLHZhbHVlOnJ9KX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXJ9fX0oKSxnbG9iYWxzPVtcIkFycmF5XCIsXCJCb29sZWFuXCIsXCJEYXRlXCIsXCJFcnJvclwiLFwiRXZhbEVycm9yXCIsXCJGdW5jdGlvblwiLFwiSW5maW5pdHlcIixcIkpTT05cIixcIk1hdGhcIixcIk5hTlwiLFwiTnVtYmVyXCIsXCJPYmplY3RcIixcIlJhbmdlRXJyb3JcIixcIlJlZmVyZW5jZUVycm9yXCIsXCJSZWdFeHBcIixcIlN0cmluZ1wiLFwiU3ludGF4RXJyb3JcIixcIlR5cGVFcnJvclwiLFwiVVJJRXJyb3JcIixcImRlY29kZVVSSVwiLFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXCJlbmNvZGVVUklcIixcImVuY29kZVVSSUNvbXBvbmVudFwiLFwiZXNjYXBlXCIsXCJldmFsXCIsXCJpc0Zpbml0ZVwiLFwiaXNOYU5cIixcInBhcnNlRmxvYXRcIixcInBhcnNlSW50XCIsXCJ1bmRlZmluZWRcIixcInVuZXNjYXBlXCJdO0NvbnRleHQucHJvdG90eXBlPXt9O3ZhciBTY3JpcHQ9ZXhwb3J0cy5TY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQ/dm9pZCh0aGlzLmNvZGU9dCk6bmV3IFNjcmlwdCh0KX07U2NyaXB0LnByb3RvdHlwZS5ydW5JbkNvbnRleHQ9ZnVuY3Rpb24odCl7aWYoISh0IGluc3RhbmNlb2YgQ29udGV4dCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LlwiKTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO2Uuc3R5bGV8fChlLnN0eWxlPXt9KSxlLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgcj1lLmNvbnRlbnRXaW5kb3csbj1yLmV2YWwsaT1yLmV4ZWNTY3JpcHQ7IW4mJmkmJihpLmNhbGwocixcIm51bGxcIiksbj1yLmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXModCksZnVuY3Rpb24oZSl7cltlXT10W2VdfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKGUpe3RbZV0mJihyW2VdPXRbZV0pfSk7dmFyIG89T2JqZWN0X2tleXMociksYT1uLmNhbGwocix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKHIpLGZ1bmN0aW9uKGUpeyhlIGluIHR8fGluZGV4T2YobyxlKT09PS0xKSYmKHRbZV09cltlXSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24oZSl7ZSBpbiB0fHxkZWZpbmVQcm9wKHQsZSxyW2VdKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksYX0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9U2NyaXB0LmNyZWF0ZUNvbnRleHQodCkscj10aGlzLnJ1bkluQ29udGV4dChlKTtyZXR1cm4gZm9yRWFjaChPYmplY3Rfa2V5cyhlKSxmdW5jdGlvbihyKXt0W3JdPWVbcl19KSxyfSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKHQpe2V4cG9ydHNbdF09U2NyaXB0W3RdPWZ1bmN0aW9uKGUpe3ZhciByPVNjcmlwdChlKTtyZXR1cm4gclt0XS5hcHBseShyLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmNyZWF0ZVNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gZXhwb3J0cy5TY3JpcHQodCl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQ29udGV4dDtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmZm9yRWFjaChPYmplY3Rfa2V5cyh0KSxmdW5jdGlvbihyKXtlW3JdPXRbcl19KSxlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXt2YXIgbj1yKDc1KSxpPXIoNjMpLG89cigxMTUpLGE9cigyNjQpLGY9cigyNjMpLHM9cigyNjYpLHU9cigyNjUpLGg9cigyNjIpLGM9cigxMTYpLGQ9bmV3IGUoMCksbD1mdW5jdGlvbih0KXt2YXIgZT1uLmZyb21VcmkodCk7cmV0dXJuIGUudmFsaWRhdGUoKX0scD1mdW5jdGlvbih0LHIsbil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4mJihuPWQpLCFlLmlzQnVmZmVyKG4pKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIEJ1ZmZlclwiKTt2YXIgbz1pLmZyb21VcmkodCksYT1vLmdldENvbmRpdGlvblVyaSgpO2lmKGEhPT1yKXRocm93IG5ldyBFcnJvcihcIkZ1bGZpbGxtZW50IGRvZXMgbm90IG1hdGNoIGNvbmRpdGlvbiAoZXhwZWN0ZWQ6IFwiK3IrXCIsIGFjdHVhbDogXCIrYStcIilcIik7cmV0dXJuIG8udmFsaWRhdGUobil9LGI9ZnVuY3Rpb24odCl7dmFyIGU9aS5mcm9tVXJpKHQpO3JldHVybiBlLmdldENvbmRpdGlvblVyaSgpfTtvLnJlZ2lzdGVyVHlwZShhKSxvLnJlZ2lzdGVyVHlwZShmKSxvLnJlZ2lzdGVyVHlwZShzKSxvLnJlZ2lzdGVyVHlwZSh1KSxvLnJlZ2lzdGVyVHlwZShoKSx0LmV4cG9ydHM9e0NvbmRpdGlvbjpuLEZ1bGZpbGxtZW50OmksVHlwZVJlZ2lzdHJ5Om8sUHJlaW1hZ2VTaGEyNTY6YSxSc2FTaGEyNTY6dSxQcmVmaXhTaGEyNTY6ZixUaHJlc2hvbGRTaGEyNTY6cyxFZDI1NTE5OmgsdmFsaWRhdGVDb25kaXRpb246bCx2YWxpZGF0ZUZ1bGZpbGxtZW50OnAsZnVsZmlsbG1lbnRUb0NvbmRpdGlvbjpiLGJhc2U2NHVybDpjLGZyb21Db25kaXRpb25Vcmk6bi5mcm9tVXJpLmJpbmQobiksZnJvbUNvbmRpdGlvbkJpbmFyeTpuLmZyb21CaW5hcnkuYmluZChuKSxmcm9tRnVsZmlsbG1lbnRVcmk6aS5mcm9tVXJpLmJpbmQoaSksZnJvbUZ1bGZpbGxtZW50QmluYXJ5OmkuZnJvbUJpbmFyeS5iaW5kKGkpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUscil7dFtlXXx8T2JqZWN0W25dKHQsZSx7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOnJ9KX1pZihyKDQ2MSkscigyNjgpLHIoMjY5KSx0Ll9iYWJlbFBvbHlmaWxsKXRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7dC5fYmFiZWxQb2x5ZmlsbD0hMDt2YXIgbj1cImRlZmluZVByb3BlcnR5XCI7ZShTdHJpbmcucHJvdG90eXBlLFwicGFkTGVmdFwiLFwiXCIucGFkU3RhcnQpLGUoU3RyaW5nLnByb3RvdHlwZSxcInBhZFJpZ2h0XCIsXCJcIi5wYWRFbmQpLFwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24odCl7W11bdF0mJmUoQXJyYXksdCxGdW5jdGlvbi5jYWxsLmJpbmQoW11bdF0pKX0pfSkuY2FsbChlLHIoMzkpKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTExKSxpPXIoMTEyKSxvPXIoMjU1KSxhPXIoMjU2KTt0LmV4cG9ydHM9e1JlYWRlcjpvLFdyaXRlcjphfTtmb3IodmFyIGYgaW4gaSlpLmhhc093blByb3BlcnR5KGYpJiYodC5leHBvcnRzW2ZdPWlbZl0pO2Zvcih2YXIgcyBpbiBuKW4uaGFzT3duUHJvcGVydHkocykmJih0LmV4cG9ydHNbc109bltzXSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpZighdHx8IWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgbXVzdCBiZSBhIG5vZGUgQnVmZmVyXCIpO3RoaXMuX2J1Zj10LHRoaXMuX3NpemU9dC5sZW5ndGgsdGhpcy5fbGVuPTAsdGhpcy5fb2Zmc2V0PTB9dmFyIGk9cigyMDIpLG89cigxMTIpLGE9cigxMTEpLGY9YS5uZXdJbnZhbGlkQXNuMUVycm9yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcImxlbmd0aFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW59fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJyZW1haW5cIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemUtdGhpcy5fb2Zmc2V0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmLnNsaWNlKHRoaXMuX29mZnNldCl9fSksbi5wcm90b3R5cGUucmVhZEJ5dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc2l6ZS10aGlzLl9vZmZzZXQ8MSlyZXR1cm4gbnVsbDt2YXIgZT0yNTUmdGhpcy5fYnVmW3RoaXMuX29mZnNldF07cmV0dXJuIHR8fCh0aGlzLl9vZmZzZXQrPTEpLGV9LG4ucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkQnl0ZSghMCl9LG4ucHJvdG90eXBlLnJlYWRMZW5ndGg9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5fb2Zmc2V0KSx0Pj10aGlzLl9zaXplKXJldHVybiBudWxsO3ZhciBlPTI1NSZ0aGlzLl9idWZbdCsrXTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtpZigxMjg9PSgxMjgmZSkpe2lmKGUmPTEyNywwPT1lKXRocm93IGYoXCJJbmRlZmluaXRlIGxlbmd0aCBub3Qgc3VwcG9ydGVkXCIpO2lmKGU+NCl0aHJvdyBmKFwiZW5jb2RpbmcgdG9vIGxvbmdcIik7aWYodGhpcy5fc2l6ZS10PGUpcmV0dXJuIG51bGw7dGhpcy5fbGVuPTA7Zm9yKHZhciByPTA7cjxlO3IrKyl0aGlzLl9sZW49KHRoaXMuX2xlbjw8OCkrKDI1NSZ0aGlzLl9idWZbdCsrXSl9ZWxzZSB0aGlzLl9sZW49ZTtyZXR1cm4gdH0sbi5wcm90b3R5cGUucmVhZFNlcXVlbmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGVlaygpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKHZvaWQgMCE9PXQmJnQhPT1lKXRocm93IGYoXCJFeHBlY3RlZCAweFwiK3QudG9TdHJpbmcoMTYpK1wiOiBnb3QgMHhcIitlLnRvU3RyaW5nKDE2KSk7dmFyIHI9dGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCsxKTtyZXR1cm4gbnVsbD09PXI/bnVsbDoodGhpcy5fb2Zmc2V0PXIsZSl9LG4ucHJvdG90eXBlLnJlYWRJbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZFRhZyhvLkludGVnZXIpfSxuLnByb3RvdHlwZS5yZWFkQm9vbGVhbj1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5fcmVhZFRhZyhvLkJvb2xlYW4pfSxuLnByb3RvdHlwZS5yZWFkRW51bWVyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZFRhZyhvLkVudW1lcmF0aW9uKX0sbi5wcm90b3R5cGUucmVhZFN0cmluZz1mdW5jdGlvbih0LHIpe3R8fCh0PW8uT2N0ZXRTdHJpbmcpO3ZhciBuPXRoaXMucGVlaygpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO2lmKG4hPT10KXRocm93IGYoXCJFeHBlY3RlZCAweFwiK3QudG9TdHJpbmcoMTYpK1wiOiBnb3QgMHhcIituLnRvU3RyaW5nKDE2KSk7dmFyIGk9dGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCsxKTtpZihudWxsPT09aSlyZXR1cm4gbnVsbDtpZih0aGlzLmxlbmd0aD50aGlzLl9zaXplLWkpcmV0dXJuIG51bGw7aWYodGhpcy5fb2Zmc2V0PWksMD09PXRoaXMubGVuZ3RoKXJldHVybiByP25ldyBlKDApOlwiXCI7dmFyIGE9dGhpcy5fYnVmLnNsaWNlKHRoaXMuX29mZnNldCx0aGlzLl9vZmZzZXQrdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzLl9vZmZzZXQrPXRoaXMubGVuZ3RoLHI/YTphLnRvU3RyaW5nKFwidXRmOFwiKX0sbi5wcm90b3R5cGUucmVhZE9JRD1mdW5jdGlvbih0KXt0fHwodD1vLk9JRCk7dmFyIGU9dGhpcy5yZWFkU3RyaW5nKHQsITApO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2Zvcih2YXIgcj1bXSxuPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT0yNTUmZVtpXTtuPDw9NyxuKz0xMjcmYSwwPT0oMTI4JmEpJiYoci5wdXNoKG4pLG49MCl9cmV0dXJuIG49ci5zaGlmdCgpLHIudW5zaGlmdChuJTQwKSxyLnVuc2hpZnQobi80MD4+MCksci5qb2luKFwiLlwiKX0sbi5wcm90b3R5cGUuX3JlYWRUYWc9ZnVuY3Rpb24odCl7aS5vayh2b2lkIDAhPT10KTt2YXIgZT10aGlzLnBlZWsoKTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtpZihlIT09dCl0aHJvdyBmKFwiRXhwZWN0ZWQgMHhcIit0LnRvU3RyaW5nKDE2KStcIjogZ290IDB4XCIrZS50b1N0cmluZygxNikpO3ZhciByPXRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQrMSk7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7aWYodGhpcy5sZW5ndGg+NCl0aHJvdyBmKFwiSW50ZWdlciB0b28gbG9uZzogXCIrdGhpcy5sZW5ndGgpO2lmKHRoaXMubGVuZ3RoPnRoaXMuX3NpemUtcilyZXR1cm4gbnVsbDt0aGlzLl9vZmZzZXQ9cjtmb3IodmFyIG49dGhpcy5fYnVmW3RoaXMuX29mZnNldF0sbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPDw9OCxvfD0yNTUmdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXTtyZXR1cm4gMTI4PT0oMTI4Jm4pJiY0IT09YSYmKG8tPTE8PDgqYSksbz4+MH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtvLm9rKHQpLG8uZXF1YWwodHlwZW9mIHQsXCJvYmplY3RcIiksby5vayhlKSxvLmVxdWFsKHR5cGVvZiBlLFwib2JqZWN0XCIpO3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocil7aWYoIWVbcl0pe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG4pfX0pLGV9ZnVuY3Rpb24gaSh0KXt0PW4ocyx0fHx7fSksdGhpcy5fYnVmPW5ldyBlKHQuc2l6ZXx8MTAyNCksdGhpcy5fc2l6ZT10aGlzLl9idWYubGVuZ3RoLHRoaXMuX29mZnNldD0wLHRoaXMuX29wdGlvbnM9dCx0aGlzLl9zZXE9W119dmFyIG89cigyMDIpLGE9cigxMTIpLGY9cigxMTEpLHM9KGYubmV3SW52YWxpZEFzbjFFcnJvcix7c2l6ZToxMDI0LGdyb3d0aEZhY3Rvcjo4fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLFwiYnVmZmVyXCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3NlcS5sZW5ndGgpdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IodGhpcy5fc2VxLmxlbmd0aCtcIiB1bmVuZGVkIHNlcXVlbmNlKHMpXCIpO3JldHVybiB0aGlzLl9idWYuc2xpY2UoMCx0aGlzLl9vZmZzZXQpfX0pLGkucHJvdG90eXBlLndyaXRlQnl0ZT1mdW5jdGlvbih0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlclwiKTt0aGlzLl9lbnN1cmUoMSksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10fSxpLnByb3RvdHlwZS53cml0ZUludD1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO1wibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT1hLkludGVnZXIpO2Zvcih2YXIgcj00OygwPT09KDQyODY1Nzg2ODgmdCl8fCg0Mjg2NTc4Njg4JnQpPT09LTgzODg2MDgpJiZyPjE7KXItLSx0PDw9ODtpZihyPjQpdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IoXCJCRVIgaW50cyBjYW5ub3QgYmUgPiAweGZmZmZmZmZmXCIpO2Zvcih0aGlzLl9lbnN1cmUoMityKSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPWUsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT1yO3ItLSA+MDspdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0oNDI3ODE5MDA4MCZ0KT4+PjI0LHQ8PD04fSxpLnByb3RvdHlwZS53cml0ZU51bGw9ZnVuY3Rpb24oKXt0aGlzLndyaXRlQnl0ZShhLk51bGwpLHRoaXMud3JpdGVCeXRlKDApfSxpLnByb3RvdHlwZS53cml0ZUVudW1lcmF0aW9uPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuRW51bWVyYXRpb24pLHRoaXMud3JpdGVJbnQodCxlKX0saS5wcm90b3R5cGUud3JpdGVCb29sZWFuPWZ1bmN0aW9uKHQsZSl7aWYoXCJib29sZWFuXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgQm9vbGVhblwiKTtcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5Cb29sZWFuKSx0aGlzLl9lbnN1cmUoMyksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT1lLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ/MjU1OjB9LGkucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKHQscil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgKHdhczogXCIrdHlwZW9mIHQrXCIpXCIpO1wibnVtYmVyXCIhPXR5cGVvZiByJiYocj1hLk9jdGV0U3RyaW5nKTt2YXIgbj1lLmJ5dGVMZW5ndGgodCk7dGhpcy53cml0ZUJ5dGUociksdGhpcy53cml0ZUxlbmd0aChuKSxuJiYodGhpcy5fZW5zdXJlKG4pLHRoaXMuX2J1Zi53cml0ZSh0LHRoaXMuX29mZnNldCksdGhpcy5fb2Zmc2V0Kz1uKX0saS5wcm90b3R5cGUud3JpdGVCdWZmZXI9ZnVuY3Rpb24odCxyKXtpZihcIm51bWJlclwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKFwidGFnIG11c3QgYmUgYSBudW1iZXJcIik7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBidWZmZXJcIik7dGhpcy53cml0ZUJ5dGUociksdGhpcy53cml0ZUxlbmd0aCh0Lmxlbmd0aCksdGhpcy5fZW5zdXJlKHQubGVuZ3RoKSx0LmNvcHkodGhpcy5fYnVmLHRoaXMuX29mZnNldCwwLHQubGVuZ3RoKSx0aGlzLl9vZmZzZXQrPXQubGVuZ3RofSxpLnByb3RvdHlwZS53cml0ZVN0cmluZ0FycmF5PWZ1bmN0aW9uKHQpe2lmKCF0IGluc3RhbmNlb2YgQXJyYXkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlbU3RyaW5nXVwiKTt2YXIgZT10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLndyaXRlU3RyaW5nKHQpfSl9LGkucHJvdG90eXBlLndyaXRlT0lEPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2U8MTI4P3QucHVzaChlKTplPDE2Mzg0Pyh0LnB1c2goZT4+Pjd8MTI4KSx0LnB1c2goMTI3JmUpKTplPDIwOTcxNTI/KHQucHVzaChlPj4+MTR8MTI4KSx0LnB1c2goMjU1JihlPj4+N3wxMjgpKSx0LnB1c2goMTI3JmUpKTplPDI2ODQzNTQ1Nj8odC5wdXNoKGU+Pj4yMXwxMjgpLHQucHVzaCgyNTUmKGU+Pj4xNHwxMjgpKSx0LnB1c2goMjU1JihlPj4+N3wxMjgpKSx0LnB1c2goMTI3JmUpKToodC5wdXNoKDI1NSYoZT4+PjI4fDEyOCkpLHQucHVzaCgyNTUmKGU+Pj4yMXwxMjgpKSx0LnB1c2goMjU1JihlPj4+MTR8MTI4KSksdC5wdXNoKDI1NSYoZT4+Pjd8MTI4KSksdC5wdXNoKDEyNyZlKSl9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuT0lEKSwhL14oWzAtOV0rXFwuKXszLH1bMC05XSskLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcihcImFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIE9JRCBzdHJpbmdcIik7dmFyIG49dC5zcGxpdChcIi5cIiksaT1bXTtpLnB1c2goNDAqcGFyc2VJbnQoblswXSwxMCkrcGFyc2VJbnQoblsxXSwxMCkpLG4uc2xpY2UoMikuZm9yRWFjaChmdW5jdGlvbih0KXtyKGkscGFyc2VJbnQodCwxMCkpfSk7dmFyIG89dGhpczt0aGlzLl9lbnN1cmUoMitpLmxlbmd0aCksdGhpcy53cml0ZUJ5dGUoZSksdGhpcy53cml0ZUxlbmd0aChpLmxlbmd0aCksaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe28ud3JpdGVCeXRlKHQpfSl9LGkucHJvdG90eXBlLndyaXRlTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO2lmKHRoaXMuX2Vuc3VyZSg0KSx0PD0xMjcpdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10O2Vsc2UgaWYodDw9MjU1KXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MTI5LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dDtlbHNlIGlmKHQ8PTY1NTM1KXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MTMwLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD4+OCx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ7ZWxzZXtpZighKHQ8PTE2Nzc3MjE1KSl0aHJvdyBuZXcgSW52YWxpZEFzbjFFUnJvcihcIkxlbmd0aCB0b28gbG9uZyAoPiA0IGJ5dGVzKVwiKTt0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPTEzMSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ+PjE2LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD4+OCx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXR9fSxpLnByb3RvdHlwZS5zdGFydFNlcXVlbmNlPWZ1bmN0aW9uKHQpe1wibnVtYmVyXCIhPXR5cGVvZiB0JiYodD1hLlNlcXVlbmNlfGEuQ29uc3RydWN0b3IpLHRoaXMud3JpdGVCeXRlKHQpLHRoaXMuX3NlcS5wdXNoKHRoaXMuX29mZnNldCksdGhpcy5fZW5zdXJlKDMpLHRoaXMuX29mZnNldCs9M30saS5wcm90b3R5cGUuZW5kU2VxdWVuY2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZXEucG9wKCksZT10KzMscj10aGlzLl9vZmZzZXQtZTtpZihyPD0xMjcpdGhpcy5fc2hpZnQoZSxyLC0yKSx0aGlzLl9idWZbdF09cjtlbHNlIGlmKHI8PTI1NSl0aGlzLl9zaGlmdChlLHIsLTEpLHRoaXMuX2J1Zlt0XT0xMjksdGhpcy5fYnVmW3QrMV09cjtlbHNlIGlmKHI8PTY1NTM1KXRoaXMuX2J1Zlt0XT0xMzAsdGhpcy5fYnVmW3QrMV09cj4+OCx0aGlzLl9idWZbdCsyXT1yO2Vsc2V7aWYoIShyPD0xNjc3NzIxNSkpdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IoXCJTZXF1ZW5jZSB0b28gbG9uZ1wiKTt0aGlzLl9zaGlmdChlLHIsMSksdGhpcy5fYnVmW3RdPTEzMSx0aGlzLl9idWZbdCsxXT1yPj4xNix0aGlzLl9idWZbdCsyXT1yPj44LHRoaXMuX2J1Zlt0KzNdPXJ9fSxpLnByb3RvdHlwZS5fc2hpZnQ9ZnVuY3Rpb24odCxlLHIpe28ub2sodm9pZCAwIT09dCksby5vayh2b2lkIDAhPT1lKSxvLm9rKHIpLHRoaXMuX2J1Zi5jb3B5KHRoaXMuX2J1Zix0K3IsdCx0K2UpLHRoaXMuX29mZnNldCs9cn0saS5wcm90b3R5cGUuX2Vuc3VyZT1mdW5jdGlvbih0KXtpZihvLm9rKHQpLHRoaXMuX3NpemUtdGhpcy5fb2Zmc2V0PHQpe3ZhciByPXRoaXMuX3NpemUqdGhpcy5fb3B0aW9ucy5ncm93dGhGYWN0b3I7ci10aGlzLl9vZmZzZXQ8dCYmKHIrPXQpO3ZhciBuPW5ldyBlKHIpO3RoaXMuX2J1Zi5jb3B5KG4sMCwwLHRoaXMuX29mZnNldCksdGhpcy5fYnVmPW4sdGhpcy5fc2l6ZT1yfX0sdC5leHBvcnRzPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNTQpO3QuZXhwb3J0cz17QmVyOm4sQmVyUmVhZGVyOm4uUmVhZGVyLEJlcldyaXRlcjpuLldyaXRlcn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoOTMpLGE9cigxMTQpLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSxlPWV8fHt9LHRoaXMuaGFzaEFsZ29yaXRobT1lLmhhc2hBbGdvcml0aG18fFwic2hhMjU2XCIsdGhpcy5oYXNoTGVuZ3RoPWEuZ2V0TGVuZ3RoKHRoaXMuaGFzaEFsZ29yaXRobSksdGhpcy5zYWx0TGVuZ3RoPXRoaXMuaGFzaExlbmd0aH1yZXR1cm4gaSh0LFt7a2V5OlwiZ2VuZXJhdGVcIix2YWx1ZTpmdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1uZXcgZShyKSxpPU1hdGguY2VpbChyL3RoaXMuaGFzaExlbmd0aCksYT0wO2E8aTthKyspe3ZhciBmPW5ldyBlKDQpO2Yud3JpdGVJbnQzMkJFKGEsMCk7dmFyIHM9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKHQpLnVwZGF0ZShmKS5kaWdlc3QoKTtzLmNvcHkobixhKnRoaXMuaGFzaExlbmd0aCl9cmV0dXJuIG59fV0pLHR9KCk7dC5leHBvcnRzPWZ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDkzKSxhPXIoMjU4KSxmPXIoMjY3KSxzPXIoMTE0KSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksZT1lfHx7fSx0aGlzLmhhc2hBbGdvcml0aG09ZS5oYXNoQWxnb3JpdGhtfHxcInNoYTI1NlwiLHRoaXMuaGFzaExlbmd0aD1zLmdldExlbmd0aCh0aGlzLmhhc2hBbGdvcml0aG0pLHRoaXMuc2FsdExlbmd0aD10aGlzLmhhc2hMZW5ndGh9cmV0dXJuIGkodCxbe2tleTpcImVuY29kZVwiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5jZWlsKHIvOCksaT1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUodCkuZGlnZXN0KCk7aWYobjx0aGlzLmhhc2hMZW5ndGgrdGhpcy5zYWx0TGVuZ3RoKzIpdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgZXJyb3I6IFJTQSBtb2R1bHVzIGlzIHRvbyBzbWFsbCBmb3IgXCIrdGhpcy5oYXNoQWxnb3JpdGhtKTt2YXIgcz1vLnJhbmRvbUJ5dGVzKHRoaXMuc2FsdExlbmd0aCksdT1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUobmV3IGUoOCkuZmlsbCgwKSkudXBkYXRlKGkpLnVwZGF0ZShzKS5kaWdlc3QoKSxoPWUuY29uY2F0KFtuZXcgZShuLXRoaXMuc2FsdExlbmd0aC10aGlzLmhhc2hMZW5ndGgtMikuZmlsbCgwKSxuZXcgZShbMV0pLHNdKSxjPW5ldyBhKHtoYXNoQWxnb3JpdGhtOnRoaXMuaGFzaEFsZ29yaXRobX0pLGQ9Yy5nZW5lcmF0ZSh1LG4tdGhpcy5oYXNoTGVuZ3RoLTEpLGw9ZihoLGQpO3JldHVybiBsWzBdJj0yNTU+Pj44Km4tcixlLmNvbmNhdChbbCx1LG5ldyBlKFsxODhdKV0pfX0se2tleTpcInZlcmlmeVwiLHZhbHVlOmZ1bmN0aW9uKHQscixuKXt2YXIgaT1NYXRoLmNlaWwobi84KSxzPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZSh0KS5kaWdlc3QoKTtpZihpPHRoaXMuaGFzaExlbmd0aCt0aGlzLnNhbHRMZW5ndGgrMilyZXR1cm4hMTtpZigxODghPT1yW3IubGVuZ3RoLTFdKXJldHVybiExO3ZhciB1PWktdGhpcy5oYXNoTGVuZ3RoLTEsaD1yLnNsaWNlKDAsdSksYz1yLnNsaWNlKHUsdSt0aGlzLmhhc2hMZW5ndGgpLGQ9MjU1Pj4+OCppLW47aWYoaFswXSZ+ZClyZXR1cm4hMTt2YXIgbD1uZXcgYSh7aGFzaEFsZ29yaXRobTp0aGlzLmhhc2hBbGdvcml0aG19KSxwPWwuZ2VuZXJhdGUoYyxpLXRoaXMuaGFzaExlbmd0aC0xKSxiPWYoaCxwKTtiWzBdJj1kO2Zvcih2YXIgdj1pLXRoaXMuaGFzaExlbmd0aC10aGlzLnNhbHRMZW5ndGgtMix5PTA7eTx2O3krKylpZigwIT09Ylt5XSlyZXR1cm4hMTtpZigxIT09Ylt2XSlyZXR1cm4hMTt2YXIgbT1iLnNsaWNlKGIubGVuZ3RoLXRoaXMuc2FsdExlbmd0aCksZz1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUobmV3IGUoOCkuZmlsbCgwKSkudXBkYXRlKHMpLnVwZGF0ZShtKS5kaWdlc3QoKTtyZXR1cm4gMD09PWUuY29tcGFyZShjLGcpfX1dKSx0fSgpO3UuRU1QVFlfQlVGRkVSPW5ldyBlKDApLHQuZXhwb3J0cz11fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig5MyksYT1yKDQ2NCksZj1yKDI1OSkscz1yKDE2MSksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7bih0aGlzLHQpLGU9ZXx8e30sdGhpcy5oYXNoQWxnb3JpdGhtPWUuaGFzaEFsZ29yaXRobXx8XCJzaGEyNTZcIix0aGlzLnBzcz1uZXcgZih7aGFzaEFsZ29yaXRobTp0aGlzLmhhc2hBbGdvcml0aG19KX1yZXR1cm4gaSh0LFt7a2V5Olwic2lnblwiLHZhbHVlOmZ1bmN0aW9uKHIsbil7dmFyIGk9cy5tb2R1bHVzRnJvbVByaXZhdGVLZXkociksZj1pWzBdLnRvU3RyaW5nKDIpLmxlbmd0aCx1PTgqKGkubGVuZ3RoLTEpK2YsaD10aGlzLnBzcy5lbmNvZGUobix1LTEpLGM9aC5sZW5ndGg8aS5sZW5ndGg/ZS5jb25jYXQoW3QuWkVST19CWVRFLGhdKTpoO3JldHVybiBvLnByaXZhdGVFbmNyeXB0KHtrZXk6cixwYWRkaW5nOmEuUlNBX05PX1BBRERJTkd9LGMpfX0se2tleTpcInZlcmlmeVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLm1vZHVsdXNUb1BlbSh0KSxpPW8ucHVibGljRGVjcnlwdCh7a2V5Om4scGFkZGluZzphLlJTQV9OT19QQURESU5HfSxyKSxmPXRbMF0udG9TdHJpbmcoMikubGVuZ3RoLHU9OCoodC5sZW5ndGgtMSkrZixoPXUlOD09PTE/aS5zbGljZSgxKTppO3JldHVybiB0aGlzLnBzcy52ZXJpZnkoZSxoLHUtMSl9fV0pLHR9KCk7dS5aRVJPX0JZVEU9bmV3IGUoWzBdKSx0LmV4cG9ydHM9dX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig0ODgpLHM9cig2MyksdT1yKDUzKSxoPXIoMTYwKSxjPXZvaWQgMDt0cnl7Yz1yKDQ2Mil9Y2F0Y2godCl7fXZhciBkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5wdWJsaWNLZXk9bnVsbCx0LnNpZ25hdHVyZT1udWxsLHR9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJzZXRQdWJsaWNLZXlcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHVibGljIGtleSBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3QpO2lmKDMyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiUHVibGljIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCB3YXM6IFwiK3QubGVuZ3RoKTt0aGlzLnB1YmxpY0tleT10fX0se2tleTpcInNldFNpZ25hdHVyZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTaWduYXR1cmUgbXVzdCBiZSBhIEJ1ZmZlciwgd2FzOiBcIit0KTtpZig2NCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBtdXN0IGJlIDY0IGJ5dGVzLCB3YXM6IFwiK3QubGVuZ3RoKTt0aGlzLnNpZ25hdHVyZT10fX0se2tleTpcInNpZ25cIix2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyB1KFwiTWVzc2FnZSBtdXN0IGJlIGEgQnVmZmVyXCIpO2lmKCFlLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGtleSBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3IpO2lmKDMyIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiUHJpdmF0ZSBrZXkgbXVzdCBiZSAzMiBieXRlcywgd2FzOiBcIityLmxlbmd0aCk7aWYoYyl7dmFyIG49Yy5NYWtlS2V5cGFpcihyKTt0aGlzLnNldFB1YmxpY0tleShuLnB1YmxpY0tleSksdGhpcy5zaWduYXR1cmU9Yy5TaWduKHQsbil9ZWxzZXt2YXIgaT1mLnNpZ24ua2V5UGFpci5mcm9tU2VlZChyKTt0aGlzLnNldFB1YmxpY0tleShuZXcgZShpLnB1YmxpY0tleSkpLHRoaXMuc2lnbmF0dXJlPW5ldyBlKGYuc2lnbi5kZXRhY2hlZCh0LGkuc2VjcmV0S2V5KSl9fX0se2tleTpcImdlbmVyYXRlSGFzaFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMucHVibGljS2V5KXRocm93IG5ldyB1KFwiUmVxdWlyZXMgYSBwdWJsaWMga2V5XCIpO3JldHVybiB0aGlzLnB1YmxpY0tleX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFB1YmxpY0tleSh0LnJlYWRPY3RldFN0cmluZyhyLlBVQktFWV9MRU5HVEgpKSx0aGlzLnNldFNpZ25hdHVyZSh0LnJlYWRPY3RldFN0cmluZyhyLlNJR05BVFVSRV9MRU5HVEgpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0LndyaXRlT2N0ZXRTdHJpbmcodGhpcy5wdWJsaWNLZXksci5QVUJLRVlfTEVOR1RIKSx0LndyaXRlT2N0ZXRTdHJpbmcodGhpcy5zaWduYXR1cmUsci5TSUdOQVRVUkVfTEVOR1RIKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHIuRlVMRklMTE1FTlRfTEVOR1RIfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBhIEJ1ZmZlclwiKTt2YXIgcj12b2lkIDA7aWYocj1jP2MuVmVyaWZ5KHQsdGhpcy5zaWduYXR1cmUsdGhpcy5wdWJsaWNLZXkpOmYuc2lnbi5kZXRhY2hlZC52ZXJpZnkodCx0aGlzLnNpZ25hdHVyZSx0aGlzLnB1YmxpY0tleSksciE9PSEwKXRocm93IG5ldyBoKFwiSW52YWxpZCBlZDI1NTE5IHNpZ25hdHVyZVwiKTtyZXR1cm4hMH19XSkscn0ocyk7ZC5UWVBFX0lEPTQsZC5GRUFUVVJFX0JJVE1BU0s9MzIsZC5QVUJLRVlfTEVOR1RIPTMyLGQuU0lHTkFUVVJFX0xFTkdUSD02NCxkLkZVTEZJTExNRU5UX0xFTkdUSD1kLlBVQktFWV9MRU5HVEgrZC5TSUdOQVRVUkVfTEVOR1RILHQuZXhwb3J0cz1kfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1mdW5jdGlvbiB0KGUscixuKXtudWxsPT09ZSYmKGU9RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7aWYodm9pZCAwPT09aSl7dmFyIG89T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09bz92b2lkIDA6dChvLHIsbil9aWYoXCJ2YWx1ZVwiaW4gaSlyZXR1cm4gaS52YWx1ZTt2YXIgYT1pLmdldDtpZih2b2lkIDAhPT1hKXJldHVybiBhLmNhbGwobil9LHM9cig3NSksdT1yKDYzKSxoPXIoNzYpLGM9cig5MCksZD1yKDUzKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5zdWJjb25kaXRpb249bnVsbCx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwic2V0U3ViY29uZGl0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD1zLmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiBzKSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb25zIG11c3QgYmUgVVJJcyBvciBvYmplY3RzIG9mIHR5cGUgQ29uZGl0aW9uXCIpO3RoaXMuc3ViY29uZGl0aW9uPXR9fSx7a2V5Olwic2V0U3ViZnVsZmlsbG1lbnRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXUuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcihcIlN1YmZ1bGZpbGxtZW50cyBtdXN0IGJlIG9iamVjdHMgb2YgdHlwZSBGdWxmaWxsbWVudFwiKTt0aGlzLnN1YmNvbmRpdGlvbj10fX0se2tleTpcInNldFByZWZpeFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcmVmaXggbXVzdCBiZSBhIEJ1ZmZlciwgd2FzOiBcIit0KTt0aGlzLnByZWZpeD10fX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmKHIucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIucHJvdG90eXBlKSxcImdldEJpdG1hc2tcIix0aGlzKS5jYWxsKHRoaXMpfHRoaXMuc3ViY29uZGl0aW9uLmdldEJpdG1hc2soKX19LHtrZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuc3ViY29uZGl0aW9uKXRocm93IG5ldyBkKFwiUmVxdWlyZXMgc3ViY29uZGl0aW9uXCIpO3Qud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnByZWZpeCksdC53cml0ZSh0aGlzLnN1YmNvbmRpdGlvbiBpbnN0YW5jZW9mIHM/dGhpcy5zdWJjb25kaXRpb24uc2VyaWFsaXplQmluYXJ5KCk6dGhpcy5zdWJjb25kaXRpb24uZ2V0Q29uZGl0aW9uQmluYXJ5KCkpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN1YmNvbmRpdGlvbiBpbnN0YW5jZW9mIHM/dGhpcy5zdWJjb25kaXRpb24uZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKTp0aGlzLnN1YmNvbmRpdGlvbi5nZXRDb25kaXRpb24oKS5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpLGU9bmV3IGM7cmV0dXJuIGUud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnByZWZpeCksZS5za2lwKHQpLGUuZ2V0U2l6ZSgpfX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0UHJlZml4KHQucmVhZFZhck9jdGV0U3RyaW5nKCkpLHRoaXMuc2V0U3ViZnVsZmlsbG1lbnQodS5mcm9tQmluYXJ5KHQpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViY29uZGl0aW9uIG11c3QgYmUgZnVsZmlsbGVkXCIpO3Qud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnByZWZpeCksdC53cml0ZSh0aGlzLnN1YmNvbmRpdGlvbi5zZXJpYWxpemVCaW5hcnkoKSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViY29uZGl0aW9uIGlzIG5vdCBhIGZ1bGZpbGxtZW50XCIpO2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIEJ1ZmZlciwgd2FzOiBcIit0KTtyZXR1cm4gdGhpcy5zdWJjb25kaXRpb24udmFsaWRhdGUoZS5jb25jYXQoW3RoaXMucHJlZml4LHRdKSl9fV0pLHJ9KGgpO2wuVFlQRV9JRD0xLGwuRkVBVFVSRV9CSVRNQVNLPTUsbC5wcm90b3R5cGUuc2V0U3ViY29uZGl0aW9uVXJpPWwucHJvdG90eXBlLnNldFN1YmNvbmRpdGlvbixsLnByb3RvdHlwZS5zZXRTdWJmdWxmaWxsbWVudFVyaT1sLnByb3RvdHlwZS5zZXRTdWJmdWxmaWxsbWVudCx0LmV4cG9ydHM9bH0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig3Nikscz1yKDUzKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gbih0aGlzLHIpLGkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcIndyaXRlSGFzaFBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5wcmVpbWFnZSl0aHJvdyBuZXcgcyhcIkNvdWxkIG5vdCBjYWxjdWxhdGUgaGFzaCwgbm8gcHJlaW1hZ2UgcHJvdmlkZWRcIik7dC53cml0ZSh0aGlzLnByZWltYWdlKX19LHtrZXk6XCJzZXRQcmVpbWFnZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcmVpbWFnZSBtdXN0IGJlIGEgYnVmZmVyLCB3YXM6IFwiK3QpO3RoaXMucHJlaW1hZ2U9dH19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0UHJlaW1hZ2UodC5yZWFkKGUpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5wcmVpbWFnZSl0aHJvdyBuZXcgcyhcIlByZWltYWdlIG11c3QgYmUgc3BlY2lmaWVkXCIpO3Qud3JpdGUodGhpcy5wcmVpbWFnZSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4hMH19XSkscn0oZik7dS5UWVBFX0lEPTAsdS5GRUFUVVJFX0JJVE1BU0s9Myx0LmV4cG9ydHM9dX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cigyNjApLHM9cigxNjEpLHU9cig3NiksaD1yKDkwKSxjPXIoNTMpLGQ9cigxNjApLGw9bmV3IGYscD1mdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7bih0aGlzLHIpO3ZhciB0PWkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQubW9kdWx1cz1udWxsLHQuc2lnbmF0dXJlPW51bGwsdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcIndyaXRlQ29tbW9uSGVhZGVyXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMubW9kdWx1cyl0aHJvdyBuZXcgYyhcIlJlcXVpcmVzIGEgcHVibGljIG1vZHVsdXNcIik7dC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMubW9kdWx1cyl9fSx7a2V5Olwic2V0UHVibGljTW9kdWx1c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2R1bHVzIG11c3QgYmUgYSBidWZmZXIsIHdhczogXCIrdCk7aWYoMD09PXRbMF0pdGhyb3cgbmV3IEVycm9yKFwiTW9kdWx1cyBtYXkgbm90IGNvbnRhaW4gbGVhZGluZyB6ZXJvc1wiKTtpZih0Lmxlbmd0aD41MTJ8fHQubGVuZ3RoPDEyOCl0aHJvdyBuZXcgRXJyb3IoXCJNb2R1bHVzIG11c3QgYmUgYmV0d2VlbiAxMjggYnl0ZXMgKDEwMTcgYml0cykgYW5kIDUxMiBieXRlcyAoNDA5NiBiaXRzKSwgd2FzOiBcIit0Lmxlbmd0aCtcIiBieXRlc1wiKTt0aGlzLm1vZHVsdXM9dH19LHtrZXk6XCJzZXRTaWduYXR1cmVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2lnbmF0dXJlIG11c3QgYmUgYSBidWZmZXIsIHdhczogXCIrdCk7dGhpcy5zaWduYXR1cmU9dH19LHtrZXk6XCJzaWduXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLm1vZHVsdXN8fHRoaXMuc2V0UHVibGljTW9kdWx1cyhzLm1vZHVsdXNGcm9tUHJpdmF0ZUtleShlKSksdGhpcy5zaWduYXR1cmU9bC5zaWduKGUsdCl9fSx7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVDb21tb25IZWFkZXIodCl9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRQdWJsaWNNb2R1bHVzKHQucmVhZFZhck9jdGV0U3RyaW5nKCkpLHRoaXMuc2V0U2lnbmF0dXJlKHQucmVhZFZhck9jdGV0U3RyaW5nKCkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnNpZ25hdHVyZSl0aHJvdyBuZXcgYyhcIlJlcXVpcmVzIGEgc2lnbmF0dXJlXCIpO3RoaXMud3JpdGVDb21tb25IZWFkZXIodCksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMuc2lnbmF0dXJlKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGg7aWYoIXRoaXMubW9kdWx1cyl0aHJvdyBuZXcgYyhcIlJlcXVpcmVzIGEgcHVibGljIG1vZHVsdXNcIik7cmV0dXJuIHRoaXMud3JpdGVDb21tb25IZWFkZXIodCksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMubW9kdWx1cyksdC5nZXRTaXplKCl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgYXMgYSBCdWZmZXIsIHdhczogXCIrdCk7dmFyIHI9bC52ZXJpZnkodGhpcy5tb2R1bHVzLHQsdGhpcy5zaWduYXR1cmUpO2lmKCFyKXRocm93IG5ldyBkKFwiSW52YWxpZCBSU0Egc2lnbmF0dXJlXCIpO3JldHVybiEwfX1dKSxyfSh1KTtwLlRZUEVfSUQ9MyxwLkZFQVRVUkVfQklUTUFTSz0xNyx0LmV4cG9ydHM9cH0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9ZnVuY3Rpb24gdChlLHIsbil7bnVsbD09PWUmJihlPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO2lmKHZvaWQgMD09PWkpe3ZhciBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PW8/dm9pZCAwOnQobyxyLG4pfWlmKFwidmFsdWVcImluIGkpcmV0dXJuIGkudmFsdWU7dmFyIGE9aS5nZXQ7aWYodm9pZCAwIT09YSlyZXR1cm4gYS5jYWxsKG4pfSxzPXIoNzUpLHU9cig2MyksaD1yKDc2KSxjPXIoOTApLGQ9cig5MSksbD1yKDUzKSxwPXIoMTEzKSxiPXIoMTYyKSx2PW5ldyBlKDApLHk9XCJjb25kaXRpb25cIixtPVwiZnVsZmlsbG1lbnRcIixnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC50aHJlc2hvbGQ9bnVsbCx0LnN1YmNvbmRpdGlvbnM9W10sdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcImFkZFN1YmNvbmRpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD1zLmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiBzKSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb25zIG11c3QgYmUgVVJJcyBvciBvYmplY3RzIG9mIHR5cGUgQ29uZGl0aW9uXCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKWU9MTtlbHNlIGlmKCFiKGUpfHxlPDEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgd2VpZ2h0LCBub3QgYW4gaW50ZWdlcjogXCIrZSk7dGhpcy5zdWJjb25kaXRpb25zLnB1c2goe3R5cGU6eSxib2R5OnQsd2VpZ2h0OmV9KX19LHtrZXk6XCJhZGRTdWJmdWxmaWxsbWVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD11LmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJmdWxmaWxsbWVudHMgbXVzdCBiZSBVUklzIG9yIG9iamVjdHMgb2YgdHlwZSBGdWxmaWxsbWVudFwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSllPTE7ZWxzZSBpZighYihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHdlaWdodCwgbm90IGFuIGludGVnZXI6IFwiK2UpO3RoaXMuc3ViY29uZGl0aW9ucy5wdXNoKHt0eXBlOm0sYm9keTp0LHdlaWdodDplfSl9fSx7a2V5Olwic2V0VGhyZXNob2xkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWIodCl8fHQ8MSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhyZXNob2xkIG11c3QgYmUgYSBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3YXM6IFwiK3QpO3RoaXMudGhyZXNob2xkPXR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9ZihyLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyLnByb3RvdHlwZSksXCJnZXRCaXRtYXNrXCIsdGhpcykuY2FsbCh0aGlzKSxlPSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPXRoaXMuc3ViY29uZGl0aW9uc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShlPShvPWEubmV4dCgpKS5kb25lKTtlPSEwKXt2YXIgcz1vLnZhbHVlO3R8PXMuYm9keS5nZXRCaXRtYXNrKCl9fWNhdGNoKHQpe249ITAsaT10fWZpbmFsbHl7dHJ5eyFlJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIHR9fSx7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnN1YmNvbmRpdGlvbnMubGVuZ3RoKXRocm93IG5ldyBsKFwiUmVxdWlyZXMgc3ViY29uZGl0aW9uc1wiKTt2YXIgZT10aGlzLnN1YmNvbmRpdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkO3JldHVybiBlLndyaXRlVmFyVUludCh0LndlaWdodCksZS53cml0ZSh0LnR5cGU9PT1tP3QuYm9keS5nZXRDb25kaXRpb25CaW5hcnkoKTp0LmJvZHkuc2VyaWFsaXplQmluYXJ5KCkpLGUuZ2V0QnVmZmVyKCl9KSxyPXRoaXMuY29uc3RydWN0b3Iuc29ydEJ1ZmZlcnMoZSk7dC53cml0ZVVJbnQzMih0aGlzLnRocmVzaG9sZCksdC53cml0ZVZhclVJbnQoci5sZW5ndGgpLHIuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC53cml0ZShlKX0pfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9MCxyPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24ocil7dmFyIG49dC5jb25zdHJ1Y3Rvci5wcmVkaWN0U3ViY29uZGl0aW9uTGVuZ3RoKHIpLGk9dC5jb25zdHJ1Y3Rvci5wcmVkaWN0U3ViZnVsZmlsbG1lbnRMZW5ndGgocik7cmV0dXJuIGUrPW4se3dlaWdodDpyLndlaWdodCxzaXplOmktbn19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2VpZ2h0LXQud2VpZ2h0fSksbj1lK3RoaXMuY29uc3RydWN0b3IuY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoKHRoaXMudGhyZXNob2xkLHIpO2lmKG49PT0tKDEvMCkpdGhyb3cgbmV3IGwoXCJJbnN1ZmZpY2llbnQgc3ViY29uZGl0aW9ucy93ZWlnaHRzIHRvIG1lZXQgdGhlIHRocmVzaG9sZFwiKTt2YXIgaT1uZXcgYztyZXR1cm4gaS53cml0ZVVJbnQzMih0aGlzLnRocmVzaG9sZCksaS53cml0ZVZhclVJbnQodGhpcy5zdWJjb25kaXRpb25zLmxlbmd0aCksdGhpcy5zdWJjb25kaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7aS53cml0ZVVJbnQ4KCksMSE9PXQud2VpZ2h0JiZpLndyaXRlVUludDMyKHQud2VpZ2h0KX0pLGkuc2tpcChuKSxpLmdldFNpemUoKX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFRocmVzaG9sZCh0LnJlYWRWYXJVSW50KCkpO2Zvcih2YXIgZT10LnJlYWRWYXJVSW50KCkscj0wO3I8ZTtyKyspe3ZhciBuPXQucmVhZFZhclVJbnQoKSxpPXQucmVhZFZhck9jdGV0U3RyaW5nKCksbz10LnJlYWRWYXJPY3RldFN0cmluZygpO2lmKGkubGVuZ3RoJiZvLmxlbmd0aCl0aHJvdyBuZXcgcChcIlN1YmNvbmRpdGlvbnMgbWF5IG5vdCBwcm92aWRlIGJvdGggc3ViY29uZGl0aW9uIGFuZCBmdWxmaWxsbWVudC5cIik7aWYoaS5sZW5ndGgpdGhpcy5hZGRTdWJmdWxmaWxsbWVudCh1LmZyb21CaW5hcnkoaSksbik7ZWxzZXtpZighby5sZW5ndGgpdGhyb3cgbmV3IHAoXCJTdWJjb25kaXRpb25zIG11c3QgcHJvdmlkZSBlaXRoZXIgc3ViY29uZGl0aW9uIG9yIGZ1bGZpbGxtZW50LlwiKTt0aGlzLmFkZFN1YmNvbmRpdGlvbihzLmZyb21CaW5hcnkobyksbil9fX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YmNvbmRpdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHlwZT09PW0/T2JqZWN0LmFzc2lnbih7fSx0LHtpbmRleDplLHNpemU6dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpLmxlbmd0aCxvbWl0U2l6ZTp0LmJvZHkuZ2V0Q29uZGl0aW9uQmluYXJ5KCkubGVuZ3RofSk6bnVsbH0pLmZpbHRlcihCb29sZWFuKSxyPXRoaXMuY29uc3RydWN0b3IuY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0KHRoaXMudGhyZXNob2xkLGUpLnNldCxuPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50eXBlPT09bSYmci5pbmRleE9mKGUpPT09LTE/T2JqZWN0LmFzc2lnbih7fSx0LHt0eXBlOnksYm9keTp0LmJvZHkuZ2V0Q29uZGl0aW9uKCl9KTp0fSksaT1uLm1hcChmdW5jdGlvbih0KXt2YXIgZT1uZXcgZDtyZXR1cm4gZS53cml0ZVZhclVJbnQodC53ZWlnaHQpLGUud3JpdGVWYXJPY3RldFN0cmluZyh0LnR5cGU9PT1tP3QuYm9keS5zZXJpYWxpemVCaW5hcnkoKTp2KSxlLndyaXRlVmFyT2N0ZXRTdHJpbmcodC50eXBlPT09eT90LmJvZHkuc2VyaWFsaXplQmluYXJ5KCk6diksZS5nZXRCdWZmZXIoKX0pLG89dGhpcy5jb25zdHJ1Y3Rvci5zb3J0QnVmZmVycyhpKTt0LndyaXRlVmFyVUludCh0aGlzLnRocmVzaG9sZCksdC53cml0ZVZhclVJbnQoby5sZW5ndGgpLG8uZm9yRWFjaCh0LndyaXRlLmJpbmQodCkpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJjb25kaXRpb25zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09bX0pLHI9MS8wLG49ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gcj1NYXRoLm1pbihyLGUud2VpZ2h0KSx0K2Uud2VpZ2h0fSwwKTtpZihuPHRoaXMudGhyZXNob2xkKXRocm93IG5ldyBFcnJvcihcIlRocmVzaG9sZCBub3QgbWV0XCIpO2lmKHRoaXMudGhyZXNob2xkK3I8PW4pdGhyb3cgbmV3IEVycm9yKFwiRnVsZmlsbG1lbnQgaXMgbm90IG1pbmltYWxcIik7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYm9keS52YWxpZGF0ZSh0KX0pfX1dLFt7a2V5OlwicHJlZGljdFN1YmNvbmRpdGlvbkxlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT1tP3QuYm9keS5nZXRDb25kaXRpb25CaW5hcnkoKS5sZW5ndGg6dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpLmxlbmd0aH19LHtrZXk6XCJwcmVkaWN0U3ViZnVsZmlsbG1lbnRMZW5ndGhcIixcbnZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZT09PW0/dC5ib2R5LmdldENvbmRpdGlvbigpLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCk6dC5ib2R5LmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCkscj1uZXcgYztyZXR1cm4gci53cml0ZVVJbnQxNigpLHIud3JpdGVWYXJPY3RldFN0cmluZyh7bGVuZ3RoOmV9KSxyLmdldFNpemUoKX19LHtrZXk6XCJjYWxjdWxhdGVXb3JzdENhc2VMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYocj1yfHwwLHQ8PTApcmV0dXJuIDA7aWYocjxlLmxlbmd0aCl7dmFyIG49ZVtyXTtyZXR1cm4gTWF0aC5tYXgobi5zaXplK3RoaXMuY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoKHQtbi53ZWlnaHQsZSxyKzEpLHRoaXMuY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoKHQsZSxyKzEpKX1yZXR1cm4tKDEvMCl9fSx7a2V5OlwiY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0XCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe2lmKHI9cnx8e2luZGV4OjAsc2l6ZTowLHNldDpbXX0sdDw9MClyZXR1cm57c2l6ZTpyLnNpemUsc2V0OnIuc2V0fTtpZihyLmluZGV4PGUubGVuZ3RoKXt2YXIgbj1lW3IuaW5kZXhdLGk9dGhpcy5jYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXQodC1uLndlaWdodCxlLHtzaXplOnIuc2l6ZStuLnNpemUsaW5kZXg6ci5pbmRleCsxLHNldDpyLnNldC5jb25jYXQobi5pbmRleCl9KSxvPXRoaXMuY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0KHQsZSx7c2l6ZTpyLnNpemUrbi5vbWl0U2l6ZSxpbmRleDpyLmluZGV4KzEsc2V0OnIuc2V0fSk7cmV0dXJuIGkuc2l6ZTxvLnNpemU/aTpvfXJldHVybntzaXplOjEvMH19fSx7a2V5Olwic29ydEJ1ZmZlcnNcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5sZW5ndGghPT1yLmxlbmd0aD90Lmxlbmd0aC1yLmxlbmd0aDplLmNvbXBhcmUodCxyKX0pfX1dKSxyfShoKTtnLlRZUEVfSUQ9MixnLkZFQVRVUkVfQklUTUFTSz05LGcucHJvdG90eXBlLmFkZFN1YmNvbmRpdGlvblVyaT1nLnByb3RvdHlwZS5hZGRTdWJjb25kaXRpb24sZy5wcm90b3R5cGUuYWRkU3ViZnVsZmlsbG1lbnRVcmk9Zy5wcm90b3R5cGUuYWRkU3ViZnVsZmlsbG1lbnQsdC5leHBvcnRzPWd9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyKXtpZighZS5pc0J1ZmZlcih0KXx8IWUuaXNCdWZmZXIocikpdGhyb3cgbmV3IEVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgYnVmZmVyc1wiKTtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlcnMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGhcIik7Zm9yKHZhciBuPW5ldyBlKHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT10W2ldXnJbaV07cmV0dXJuIG59dC5leHBvcnRzPXJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUscil7IWZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9T2JqZWN0LmNyZWF0ZSgoZXx8bykucHJvdG90eXBlKSxhPW5ldyBwKG58fFtdKTtyZXR1cm4gaS5faW52b2tlPWModCxyLGEpLGl9ZnVuY3Rpb24gaSh0LGUscil7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOnR9fX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEoKXt9ZnVuY3Rpb24gZigpe31mdW5jdGlvbiBzKHQpe1tcIm5leHRcIixcInRocm93XCIsXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX19KX1mdW5jdGlvbiB1KHQpe3RoaXMuYXJnPXR9ZnVuY3Rpb24gaCh0KXtmdW5jdGlvbiBlKHIsbixvLGEpe3ZhciBmPWkodFtyXSx0LG4pO2lmKFwidGhyb3dcIiE9PWYudHlwZSl7dmFyIHM9Zi5hcmcsaD1zLnZhbHVlO3JldHVybiBoIGluc3RhbmNlb2YgdT9Qcm9taXNlLnJlc29sdmUoaC5hcmcpLnRoZW4oZnVuY3Rpb24odCl7ZShcIm5leHRcIix0LG8sYSl9LGZ1bmN0aW9uKHQpe2UoXCJ0aHJvd1wiLHQsbyxhKX0pOlByb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKHQpe3MudmFsdWU9dCxvKHMpfSxhKX1hKGYuYXJnKX1mdW5jdGlvbiBuKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe2UodCxyLG4saSl9KX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX1cIm9iamVjdFwiPT10eXBlb2YgciYmci5kb21haW4mJihlPXIuZG9tYWluLmJpbmQoZSkpO3ZhciBvO3RoaXMuX2ludm9rZT1ufWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPUU7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aWYobj09PWspdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtpZihuPT09eCl7aWYoXCJ0aHJvd1wiPT09byl0aHJvdyBhO3JldHVybiB2KCl9Zm9yKDs7KXt2YXIgZj1yLmRlbGVnYXRlO2lmKGYpe2lmKFwicmV0dXJuXCI9PT1vfHxcInRocm93XCI9PT1vJiZmLml0ZXJhdG9yW29dPT09eSl7ci5kZWxlZ2F0ZT1udWxsO3ZhciBzPWYuaXRlcmF0b3IucmV0dXJuO2lmKHMpe3ZhciB1PWkocyxmLml0ZXJhdG9yLGEpO2lmKFwidGhyb3dcIj09PXUudHlwZSl7bz1cInRocm93XCIsYT11LmFyZztjb250aW51ZX19aWYoXCJyZXR1cm5cIj09PW8pY29udGludWV9dmFyIHU9aShmLml0ZXJhdG9yW29dLGYuaXRlcmF0b3IsYSk7aWYoXCJ0aHJvd1wiPT09dS50eXBlKXtyLmRlbGVnYXRlPW51bGwsbz1cInRocm93XCIsYT11LmFyZztjb250aW51ZX1vPVwibmV4dFwiLGE9eTt2YXIgaD11LmFyZztpZighaC5kb25lKXJldHVybiBuPUEsaDtyW2YucmVzdWx0TmFtZV09aC52YWx1ZSxyLm5leHQ9Zi5uZXh0TG9jLHIuZGVsZWdhdGU9bnVsbH1pZihcIm5leHRcIj09PW8pci5zZW50PXIuX3NlbnQ9YTtlbHNlIGlmKFwidGhyb3dcIj09PW8pe2lmKG49PT1FKXRocm93IG49eCxhO3IuZGlzcGF0Y2hFeGNlcHRpb24oYSkmJihvPVwibmV4dFwiLGE9eSl9ZWxzZVwicmV0dXJuXCI9PT1vJiZyLmFicnVwdChcInJldHVyblwiLGEpO249azt2YXIgdT1pKHQsZSxyKTtpZihcIm5vcm1hbFwiPT09dS50eXBlKXtuPXIuZG9uZT94OkE7dmFyIGg9e3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfTtpZih1LmFyZyE9PUkpcmV0dXJuIGg7ci5kZWxlZ2F0ZSYmXCJuZXh0XCI9PT1vJiYoYT15KX1lbHNlXCJ0aHJvd1wiPT09dS50eXBlJiYobj14LG89XCJ0aHJvd1wiLGE9dS5hcmcpfX19ZnVuY3Rpb24gZCh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPVwibm9ybWFsXCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIHAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOlwicm9vdFwifV0sdC5mb3JFYWNoKGQsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gYih0KXtpZih0KXt2YXIgZT10W3ddO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIHI9LTEsbj1mdW5jdGlvbiBlKCl7Zm9yKDsrK3I8dC5sZW5ndGg7KWlmKG0uY2FsbCh0LHIpKXJldHVybiBlLnZhbHVlPXRbcl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9eSxlLmRvbmU9ITAsZX07cmV0dXJuIG4ubmV4dD1ufX1yZXR1cm57bmV4dDp2fX1mdW5jdGlvbiB2KCl7cmV0dXJue3ZhbHVlOnksZG9uZTohMH19dmFyIHksbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSx3PWcuaXRlcmF0b3J8fFwiQEBpdGVyYXRvclwiLF89Zy50b1N0cmluZ1RhZ3x8XCJAQHRvU3RyaW5nVGFnXCIsTT1cIm9iamVjdFwiPT10eXBlb2YgdCxTPWUucmVnZW5lcmF0b3JSdW50aW1lO2lmKFMpcmV0dXJuIHZvaWQoTSYmKHQuZXhwb3J0cz1TKSk7Uz1lLnJlZ2VuZXJhdG9yUnVudGltZT1NP3QuZXhwb3J0czp7fSxTLndyYXA9bjt2YXIgRT1cInN1c3BlbmRlZFN0YXJ0XCIsQT1cInN1c3BlbmRlZFlpZWxkXCIsaz1cImV4ZWN1dGluZ1wiLHg9XCJjb21wbGV0ZWRcIixJPXt9LEI9Zi5wcm90b3R5cGU9by5wcm90b3R5cGU7YS5wcm90b3R5cGU9Qi5jb25zdHJ1Y3Rvcj1mLGYuY29uc3RydWN0b3I9YSxmW19dPWEuZGlzcGxheU5hbWU9XCJHZW5lcmF0b3JGdW5jdGlvblwiLFMuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1hfHxcIkdlbmVyYXRvckZ1bmN0aW9uXCI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LFMubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGYpOih0Ll9fcHJvdG9fXz1mLF8gaW4gdHx8KHRbX109XCJHZW5lcmF0b3JGdW5jdGlvblwiKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCKSx0fSxTLmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh0KX0scyhoLnByb3RvdHlwZSksUy5hc3luYz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1uZXcgaChuKHQsZSxyLGkpKTtyZXR1cm4gUy5pc0dlbmVyYXRvckZ1bmN0aW9uKGUpP286by5uZXh0KCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KX0scyhCKSxCW3ddPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEJbX109XCJHZW5lcmF0b3JcIixCLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IEdlbmVyYXRvcl1cIn0sUy5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgbj1lLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LFMudmFsdWVzPWIscC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9eSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKGwpLCF0KWZvcih2YXIgZSBpbiB0aGlzKVwidFwiPT09ZS5jaGFyQXQoMCkmJm0uY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT15KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0sZT10LmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gby50eXBlPVwidGhyb3dcIixvLmFyZz10LHIubmV4dD1lLCEhbn1pZih0aGlzLmRvbmUpdGhyb3cgdDtmb3IodmFyIHI9dGhpcyxuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dLG89aS5jb21wbGV0aW9uO2lmKFwicm9vdFwiPT09aS50cnlMb2MpcmV0dXJuIGUoXCJlbmRcIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIGE9bS5jYWxsKGksXCJjYXRjaExvY1wiKSxmPW0uY2FsbChpLFwiZmluYWxseUxvY1wiKTtpZihhJiZmKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gZShpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBlKGkuZmluYWxseUxvYyl9ZWxzZSBpZihhKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gZShpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFmKXRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIGUoaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG49dGhpcy50cnlFbnRyaWVzW3JdO2lmKG4udHJ5TG9jPD10aGlzLnByZXYmJm0uY2FsbChuLFwiZmluYWxseUxvY1wiKSYmdGhpcy5wcmV2PG4uZmluYWxseUxvYyl7dmFyIGk9bjticmVha319aSYmKFwiYnJlYWtcIj09PXR8fFwiY29udGludWVcIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxpP3RoaXMubmV4dD1pLmZpbmFsbHlMb2M6dGhpcy5jb21wbGV0ZShvKSxJfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKFwidGhyb3dcIj09PXQudHlwZSl0aHJvdyB0LmFyZztcImJyZWFrXCI9PT10LnR5cGV8fFwiY29udGludWVcIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6XCJyZXR1cm5cIj09PXQudHlwZT8odGhpcy5ydmFsPXQuYXJnLHRoaXMubmV4dD1cImVuZFwiKTpcIm5vcm1hbFwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLGwociksSX19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO2wocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOmIodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sSX19fShcIm9iamVjdFwiPT10eXBlb2YgZT9lOlwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3c/d2luZG93Olwib2JqZWN0XCI9PXR5cGVvZiBzZWxmP3NlbGY6dGhpcyl9KS5jYWxsKGUscigzOSkscigyNikpfSxmdW5jdGlvbih0LGUscil7cigyOTApLHQuZXhwb3J0cz1yKDMyKS5SZWdFeHAuZXNjYXBlfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpLGk9cigxNjUpLmRvY3VtZW50LG89bihpKSYmbihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNjUpLGk9cigxNjMpLG89cigyNzIpLGE9cigyNzUpLGY9XCJwcm90b3R5cGVcIixzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoLGMsZD10JnMuRixsPXQmcy5HLHA9dCZzLlMsYj10JnMuUCx2PXQmcy5CLHk9dCZzLlcsbT1sP2k6aVtlXXx8KGlbZV09e30pLGc9bVtmXSx3PWw/bjpwP25bZV06KG5bZV18fHt9KVtmXTtsJiYocj1lKTtmb3IodSBpbiByKWg9IWQmJncmJnZvaWQgMCE9PXdbdV0saCYmdSBpbiBtfHwoYz1oP3dbdV06clt1XSxtW3VdPWwmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHdbdV0/clt1XTp2JiZoP28oYyxuKTp5JiZ3W3VdPT1jP2Z1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKGUscixuKXtpZih0aGlzIGluc3RhbmNlb2YgdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGUscil9cmV0dXJuIG5ldyB0KGUscixuKX1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlW2ZdPXRbZl0sZX0oYyk6YiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYz9vKEZ1bmN0aW9uLmNhbGwsYyk6YyxiJiYoKG0udmlydHVhbHx8KG0udmlydHVhbD17fSkpW3VdPWMsdCZzLlImJmcmJiFnW3VdJiZhKGcsdSxjKSkpfTtzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHMuVT02NCxzLlI9MTI4LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzgpLGk9cigyNzkpO3QuZXhwb3J0cz1yKDExNyk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmYodCxlLGkoMSxyKSl9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDExNykmJiFyKDE2NCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMjczKShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3NyksaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hbih0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjcxKSxpPXIoMjc2KSxvPXIoMjgwKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cigxMTcpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7aWYobih0KSxlPW8oZSwhMCksbihyKSxpKXRyeXtyZXR1cm4gYSh0LGUscil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbZV09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFuKHQpKXJldHVybiB0O3ZhciByLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjc0KTtuKG4uUyxcIk51bWJlclwiLHtpc0ludGVnZXI6cigyNzcpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigxMjYpLG89cig3KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBpKHQpJiYoZT10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fGUhPT1BcnJheSYmIWkoZS5wcm90b3R5cGUpfHwoZT12b2lkIDApLG4oZSkmJihlPWVbb10sbnVsbD09PWUmJihlPXZvaWQgMCkpKSx2b2lkIDA9PT1lP0FycmF5OmV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyODIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcobih0KSkoZSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzKSxpPXIoMjkpLG89XCJudW1iZXJcIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9PXQmJnQhPT1vJiZcImRlZmF1bHRcIiE9PXQpdGhyb3cgVHlwZUVycm9yKFwiSW5jb3JyZWN0IGhpbnRcIik7cmV0dXJuIGkobih0aGlzKSx0IT1vKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ0KSxpPXIoODYpLG89cig2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7aWYocilmb3IodmFyIGEsZj1yKHQpLHM9by5mLHU9MDtmLmxlbmd0aD51OylzLmNhbGwodCxhPWZbdSsrXSkmJmUucHVzaChhKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ0KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvPWkodCksYT1uKG8pLGY9YS5sZW5ndGgscz0wO2Y+czspaWYob1tyPWFbcysrXV09PT1lKXJldHVybiByfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMjg4KSxpPXIoODIpLG89cigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW8odGhpcyksZT1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkoZSksYT0wLGY9bi5fLHM9ITE7ZT5hOykoclthXT1hcmd1bWVudHNbYSsrXSk9PT1mJiYocz0hMCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4sbz10aGlzLGE9YXJndW1lbnRzLmxlbmd0aCx1PTAsaD0wO2lmKCFzJiYhYSlyZXR1cm4gaSh0LHIsbyk7aWYobj1yLnNsaWNlKCkscylmb3IoO2U+dTt1Kyspblt1XT09PWYmJihuW3VdPWFyZ3VtZW50c1toKytdKTtmb3IoO2E+aDspbi5wdXNoKGFyZ3VtZW50c1toKytdKTtyZXR1cm4gaSh0LG4sbyl9fX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU9PT1PYmplY3QoZSk/ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19OmU7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSh0LHIpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyODkpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKTtuKG4uUyxcIlJlZ0V4cFwiLHtlc2NhcGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QLFwiQXJyYXlcIix7Y29weVdpdGhpbjpyKDE2Nyl9KSxyKDU0KShcImNvcHlXaXRoaW5cIil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoNCk7bihuLlArbi5GKiFyKDI1KShbXS5ldmVyeSwhMCksXCJBcnJheVwiLHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJBcnJheVwiLHtmaWxsOnIoMTE4KX0pLHIoNTQpKFwiZmlsbFwiKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgyKTtuKG4uUCtuLkYqIXIoMjUpKFtdLmZpbHRlciwhMCksXCJBcnJheVwiLHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoNiksbz1cImZpbmRJbmRleFwiLGE9ITA7byBpbltdJiZBcnJheSgxKVtvXShmdW5jdGlvbigpe2E9ITF9KSxuKG4uUCtuLkYqYSxcIkFycmF5XCIse2ZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTQpKG8pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDUpLG89XCJmaW5kXCIsYT0hMDtvIGluW10mJkFycmF5KDEpW29dKGZ1bmN0aW9uKCl7YT0hMX0pLG4obi5QK24uRiphLFwiQXJyYXlcIix7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTQpKG8pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDApLG89cigyNSkoW10uZm9yRWFjaCwhMCk7bihuLlArbi5GKiFvLFwiQXJyYXlcIix7Zm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMzMpLGk9cigwKSxvPXIoMTEpLGE9cigxNzYpLGY9cigxMjUpLHM9cigxMCksdT1yKDExOSksaD1yKDE0Mik7aShpLlMraS5GKiFyKDg0KShmdW5jdGlvbih0KXtBcnJheS5mcm9tKHQpfSksXCJBcnJheVwiLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxjLGQ9byh0KSxsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSxwPWFyZ3VtZW50cy5sZW5ndGgsYj1wPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2PXZvaWQgMCE9PWIseT0wLG09aChkKTtpZih2JiYoYj1uKGIscD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLHZvaWQgMD09bXx8bD09QXJyYXkmJmYobSkpZm9yKGU9cyhkLmxlbmd0aCkscj1uZXcgbChlKTtlPnk7eSsrKXUocix5LHY/YihkW3ldLHkpOmRbeV0pO2Vsc2UgZm9yKGM9bS5jYWxsKGQpLHI9bmV3IGw7IShpPWMubmV4dCgpKS5kb25lO3krKyl1KHIseSx2P2EoYyxiLFtpLnZhbHVlLHldLCEwKTppLnZhbHVlKTtyZXR1cm4gci5sZW5ndGg9eSxyfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNzgpKCExKSxvPVtdLmluZGV4T2YsYT0hIW8mJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGF8fCFyKDI1KShvKSksXCJBcnJheVwiLHtpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBhP28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOmkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiQXJyYXlcIix7aXNBcnJheTpyKDEyNil9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE3KSxvPVtdLmpvaW47bihuLlArbi5GKihyKDY1KSE9T2JqZWN0fHwhcigyNSkobykpLFwiQXJyYXlcIix7am9pbjpmdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKGkodGhpcyksdm9pZCAwPT09dD9cIixcIjp0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE3KSxvPXIoMzgpLGE9cigxMCksZj1bXS5sYXN0SW5kZXhPZixzPSEhZiYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKHN8fCFyKDI1KShmKSksXCJBcnJheVwiLHtsYXN0SW5kZXhPZjpmdW5jdGlvbih0KXtpZihzKXJldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgZT1pKHRoaXMpLHI9YShlLmxlbmd0aCksbj1yLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKG49TWF0aC5taW4obixvKGFyZ3VtZW50c1sxXSkpKSxuPDAmJihuPXIrbik7bj49MDtuLS0paWYobiBpbiBlJiZlW25dPT09dClyZXR1cm4gbnx8MDtyZXR1cm4tMX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgxKTtuKG4uUCtuLkYqIXIoMjUpKFtdLm1hcCwhMCksXCJBcnJheVwiLHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMTkpO24obi5TK24uRipyKDUpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwodClpbnN0YW5jZW9mIHQpfSksXCJBcnJheVwiLHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKGUpO2U+dDspaShyLHQsYXJndW1lbnRzW3QrK10pO3JldHVybiByLmxlbmd0aD1lLHJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxNjkpO24obi5QK24uRiohcigyNSkoW10ucmVkdWNlUmlnaHQsITApLFwiQXJyYXlcIix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCEwKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE2OSk7bihuLlArbi5GKiFyKDI1KShbXS5yZWR1Y2UsITApLFwiQXJyYXlcIix7cmVkdWNlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMjMpLG89cigyMyksYT1yKDQ3KSxmPXIoMTApLHM9W10uc2xpY2U7bihuLlArbi5GKnIoNSkoZnVuY3Rpb24oKXtpJiZzLmNhbGwoaSl9KSxcIkFycmF5XCIse3NsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Zih0aGlzLmxlbmd0aCksbj1vKHRoaXMpO2lmKGU9dm9pZCAwPT09ZT9yOmUsXCJBcnJheVwiPT1uKXJldHVybiBzLmNhbGwodGhpcyx0LGUpO2Zvcih2YXIgaT1hKHQsciksdT1hKGUsciksaD1mKHUtaSksYz1BcnJheShoKSxkPTA7ZDxoO2QrKyljW2RdPVwiU3RyaW5nXCI9PW4/dGhpcy5jaGFyQXQoaStkKTp0aGlzW2krZF07cmV0dXJuIGN9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoMyk7bihuLlArbi5GKiFyKDI1KShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMyksbz1yKDExKSxhPXIoNSksZj1bXS5zb3J0LHM9WzEsMiwzXTtuKG4uUCtuLkYqKGEoZnVuY3Rpb24oKXtzLnNvcnQodm9pZCAwKX0pfHwhYShmdW5jdGlvbigpe3Muc29ydChudWxsKX0pfHwhcigyNSkoZikpLFwiQXJyYXlcIix7c29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9mLmNhbGwobyh0aGlzKSk6Zi5jYWxsKG8odGhpcyksaSh0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDQ2KShcIkFycmF5XCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIkRhdGVcIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig1KSxvPURhdGUucHJvdG90eXBlLmdldFRpbWUsYT1mdW5jdGlvbih0KXtyZXR1cm4gdD45P3Q6XCIwXCIrdH07bihuLlArbi5GKihpKGZ1bmN0aW9uKCl7cmV0dXJuXCIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVpcIiE9bmV3IERhdGUoLTVlMTMtMSkudG9JU09TdHJpbmcoKX0pfHwhaShmdW5jdGlvbigpe25ldyBEYXRlKE5hTikudG9JU09TdHJpbmcoKX0pKSxcIkRhdGVcIix7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoby5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO3ZhciB0PXRoaXMsZT10LmdldFVUQ0Z1bGxZZWFyKCkscj10LmdldFVUQ01pbGxpc2Vjb25kcygpLG49ZTwwP1wiLVwiOmU+OTk5OT9cIitcIjpcIlwiO3JldHVybiBuKyhcIjAwMDAwXCIrTWF0aC5hYnMoZSkpLnNsaWNlKG4/LTY6LTQpK1wiLVwiK2EodC5nZXRVVENNb250aCgpKzEpK1wiLVwiK2EodC5nZXRVVENEYXRlKCkpK1wiVFwiK2EodC5nZXRVVENIb3VycygpKStcIjpcIithKHQuZ2V0VVRDTWludXRlcygpKStcIjpcIithKHQuZ2V0VVRDU2Vjb25kcygpKStcIi5cIisocj45OT9yOlwiMFwiK2EocikpK1wiWlwifX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigyOSk7bihuLlArbi5GKnIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pLFwiRGF0ZVwiLHt0b0pTT046ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxyPW8oZSk7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHJ8fGlzRmluaXRlKHIpP2UudG9JU09TdHJpbmcoKTpudWxsfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcInRvUHJpbWl0aXZlXCIpLGk9RGF0ZS5wcm90b3R5cGU7biBpbiBpfHxyKDE0KShpLG4scigyODQpKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPURhdGUucHJvdG90eXBlLGk9XCJJbnZhbGlkIERhdGVcIixvPVwidG9TdHJpbmdcIixhPW5bb10sZj1uLmdldFRpbWU7bmV3IERhdGUoTmFOKStcIlwiIT1pJiZyKDE1KShuLG8sZnVuY3Rpb24oKXt2YXIgdD1mLmNhbGwodGhpcyk7cmV0dXJuIHQ9PT10P2EuY2FsbCh0aGlzKTppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QLFwiRnVuY3Rpb25cIix7YmluZDpyKDE3MCl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNiksaT1yKDIxKSxvPXIoNykoXCJoYXNJbnN0YW5jZVwiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZTtvIGluIGF8fHIoOSkuZihhLG8se3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXN8fCFuKHQpKXJldHVybiExO2lmKCFuKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt0PWkodCk7KWlmKHRoaXMucHJvdG90eXBlPT09dClyZXR1cm4hMDtyZXR1cm4hMX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSkuZixpPXIoMzcpLG89cigxMiksYT1GdW5jdGlvbi5wcm90b3R5cGUsZj0vXlxccypmdW5jdGlvbiAoW14gKF0qKS8scz1cIm5hbWVcIix1PU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9O3MgaW4gYXx8cig4KSYmbihhLHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9dGhpcyxlPShcIlwiK3QpLm1hdGNoKGYpWzFdO3JldHVybiBvKHQscyl8fCF1KHQpfHxuKHQscyxpKDUsZSkpLGV9Y2F0Y2godCl7cmV0dXJuXCJcIn19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxNzgpLG89TWF0aC5zcXJ0LGE9TWF0aC5hY29zaDtuKG4uUytuLkYqIShhJiY3MTA9PU1hdGguZmxvb3IoYShOdW1iZXIuTUFYX1ZBTFVFKSkmJmEoMS8wKT09MS8wKSxcIk1hdGhcIix7YWNvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPDE/TmFOOnQ+OTQ5MDYyNjUuNjI0MjUxNTY/TWF0aC5sb2codCkrTWF0aC5MTjI6aSh0LTErbyh0LTEpKm8odCsxKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiBpc0Zpbml0ZSh0PSt0KSYmMCE9dD90PDA/LW4oLXQpOk1hdGgubG9nKHQrTWF0aC5zcXJ0KHQqdCsxKSk6dH12YXIgaT1yKDApLG89TWF0aC5hc2luaDtpKGkuUytpLkYqIShvJiYxL28oMCk+MCksXCJNYXRoXCIse2FzaW5oOm59KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmF0YW5oO24obi5TK24uRiohKGkmJjEvaSgtMCk8MCksXCJNYXRoXCIse2F0YW5oOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDpNYXRoLmxvZygoMSt0KS8oMS10KSkvMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMCk7bihuLlMsXCJNYXRoXCIse2NicnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodD0rdCkqTWF0aC5wb3coTWF0aC5hYnModCksMS8zKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2NsejMyOmZ1bmN0aW9uKHQpe3JldHVybih0Pj4+PTApPzMxLU1hdGguZmxvb3IoTWF0aC5sb2codCsuNSkqTWF0aC5MT0cyRSk6MzJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9TWF0aC5leHA7bihuLlMsXCJNYXRoXCIse2Nvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKGkodD0rdCkraSgtdCkpLzJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMjkpO24obi5TK24uRiooaSE9TWF0aC5leHBtMSksXCJNYXRoXCIse2V4cG0xOml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMCksbz1NYXRoLnBvdyxhPW8oMiwtNTIpLGY9bygyLC0yMykscz1vKDIsMTI3KSooMi1mKSx1PW8oMiwtMTI2KSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0KzEvYS0xL2F9O24obi5TLFwiTWF0aFwiLHtmcm91bmQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPU1hdGguYWJzKHQpLG89aSh0KTtyZXR1cm4gbjx1P28qaChuL3UvZikqdSpmOihlPSgxK2YvYSkqbixyPWUtKGUtbikscj5zfHxyIT1yP28qKDEvMCk6bypyKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmFicztuKG4uUyxcIk1hdGhcIix7aHlwb3Q6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixvPTAsYT0wLGY9YXJndW1lbnRzLmxlbmd0aCxzPTA7YTxmOylyPWkoYXJndW1lbnRzW2ErK10pLHM8cj8obj1zL3Isbz1vKm4qbisxLHM9cik6cj4wPyhuPXIvcyxvKz1uKm4pOm8rPXI7cmV0dXJuIHM9PT0xLzA/MS8wOnMqTWF0aC5zcXJ0KG8pfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguaW11bDtuKG4uUytuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiBpKDQyOTQ5NjcyOTUsNSkhPS01fHwyIT1pLmxlbmd0aH0pLFwiTWF0aFwiLHtpbXVsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9NjU1MzUsbj0rdCxpPStlLG89ciZuLGE9ciZpO3JldHVybiAwfG8qYSsoKHImbj4+PjE2KSphK28qKHImaT4+PjE2KTw8MTY+Pj4wKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2xvZzEwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMTB9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtsb2cxcDpyKDE3OCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2xvZzI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7c2lnbjpyKDEzMCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEyOSksbz1NYXRoLmV4cDtuKG4uUytuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiFNYXRoLnNpbmgoLTJlLTE3KSE9LTJlLTE3fSksXCJNYXRoXCIse3Npbmg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQ9K3QpPDE/KGkodCktaSgtdCkpLzI6KG8odC0xKS1vKC10LTEpKSooTWF0aC5FLzIpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTI5KSxvPU1hdGguZXhwO24obi5TLFwiTWF0aFwiLHt0YW5oOmZ1bmN0aW9uKHQpe3ZhciBlPWkodD0rdCkscj1pKC10KTtyZXR1cm4gZT09MS8wPzE6cj09MS8wPy0xOihlLXIpLyhvKHQpK28oLXQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse3RydW5jOmZ1bmN0aW9uKHQpe3JldHVybih0PjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoMTIpLG89cigyMyksYT1yKDEyNCksZj1yKDI5KSxzPXIoNSksdT1yKDQzKS5mLGg9cigyMCkuZixjPXIoOSkuZixkPXIoNTgpLnRyaW0sbD1cIk51bWJlclwiLHA9bltsXSxiPXAsdj1wLnByb3RvdHlwZSx5PW8ocig0MikodikpPT1sLG09XCJ0cmltXCJpbiBTdHJpbmcucHJvdG90eXBlLGc9ZnVuY3Rpb24odCl7dmFyIGU9Zih0LCExKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5sZW5ndGg+Mil7ZT1tP2UudHJpbSgpOmQoZSwzKTt2YXIgcixuLGksbz1lLmNoYXJDb2RlQXQoMCk7aWYoNDM9PT1vfHw0NT09PW8pe2lmKHI9ZS5jaGFyQ29kZUF0KDIpLDg4PT09cnx8MTIwPT09cilyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1vKXtzd2l0Y2goZS5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6bj0yLGk9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpuPTgsaT01NTticmVhaztkZWZhdWx0OnJldHVybitlfWZvcih2YXIgYSxzPWUuc2xpY2UoMiksdT0wLGg9cy5sZW5ndGg7dTxoO3UrKylpZihhPXMuY2hhckNvZGVBdCh1KSxhPDQ4fHxhPmkpcmV0dXJuIE5hTjtyZXR1cm4gcGFyc2VJbnQocyxuKX19cmV0dXJuK2V9O2lmKCFwKFwiIDBvMVwiKXx8IXAoXCIwYjFcIil8fHAoXCIrMHgxXCIpKXtwPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MT8wOnQscj10aGlzO3JldHVybiByIGluc3RhbmNlb2YgcCYmKHk/cyhmdW5jdGlvbigpe3YudmFsdWVPZi5jYWxsKHIpfSk6byhyKSE9bCk/YShuZXcgYihnKGUpKSxyLHApOmcoZSl9O2Zvcih2YXIgdyxfPXIoOCk/dShiKTpcIk1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyXCIuc3BsaXQoXCIsXCIpLE09MDtfLmxlbmd0aD5NO00rKylpKGIsdz1fW01dKSYmIWkocCx3KSYmYyhwLHcsaChiLHcpKTtwLnByb3RvdHlwZT12LHYuY29uc3RydWN0b3I9cCxyKDE1KShuLGwscCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNCkuaXNGaW5pdGU7bihuLlMsXCJOdW1iZXJcIix7aXNGaW5pdGU6ZnVuY3Rpb24odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJmkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse2lzSW50ZWdlcjpyKDE3NSl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7aXNOYU46ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxNzUpLG89TWF0aC5hYnM7bihuLlMsXCJOdW1iZXJcIix7aXNTYWZlSW50ZWdlcjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmbyh0KTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4NSk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9aSksXCJOdW1iZXJcIix7cGFyc2VGbG9hdDppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODYpO24obi5TK24uRiooTnVtYmVyLnBhcnNlSW50IT1pKSxcIk51bWJlclwiLHtwYXJzZUludDppfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigzOCksbz1yKDE2NiksYT1yKDEzNyksZj0xLi50b0ZpeGVkLHM9TWF0aC5mbG9vcix1PVswLDAsMCwwLDAsMF0saD1cIk51bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIixjPVwiMFwiLGQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTEsbj1lOysrcjw2OyluKz10KnVbcl0sdVtyXT1uJTFlNyxuPXMobi8xZTcpfSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT02LHI9MDstLWU+PTA7KXIrPXVbZV0sdVtlXT1zKHIvdCkscj1yJXQqMWU3fSxwPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTYsZT1cIlwiOy0tdD49MDspaWYoXCJcIiE9PWV8fDA9PT10fHwwIT09dVt0XSl7dmFyIHI9U3RyaW5nKHVbdF0pO2U9XCJcIj09PWU/cjplK2EuY2FsbChjLDctci5sZW5ndGgpK3J9cmV0dXJuIGV9LGI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiAwPT09ZT9yOmUlMj09PTE/Yih0LGUtMSxyKnQpOmIodCp0LGUvMixyKX0sdj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7cj49NDA5NjspZSs9MTIsci89NDA5Njtmb3IoO3I+PTI7KWUrPTEsci89MjtyZXR1cm4gZX07bihuLlArbi5GKighIWYmJihcIjAuMDAwXCIhPT04ZS01LnRvRml4ZWQoMyl8fFwiMVwiIT09LjkudG9GaXhlZCgwKXx8XCIxLjI1XCIhPT0xLjI1NS50b0ZpeGVkKDIpfHxcIjEwMDAwMDAwMDAwMDAwMDAxMjhcIiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFyKDUpKGZ1bmN0aW9uKCl7Zi5jYWxsKHt9KX0pKSxcIk51bWJlclwiLHt0b0ZpeGVkOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixmLHM9byh0aGlzLGgpLHU9aSh0KSx5PVwiXCIsbT1jO2lmKHU8MHx8dT4yMCl0aHJvdyBSYW5nZUVycm9yKGgpO2lmKHMhPXMpcmV0dXJuXCJOYU5cIjtpZihzPD0tMWUyMXx8cz49MWUyMSlyZXR1cm4gU3RyaW5nKHMpO2lmKHM8MCYmKHk9XCItXCIscz0tcykscz4xZS0yMSlpZihlPXYocypiKDIsNjksMSkpLTY5LHI9ZTwwP3MqYigyLC1lLDEpOnMvYigyLGUsMSkscio9NDUwMzU5OTYyNzM3MDQ5NixlPTUyLWUsZT4wKXtmb3IoZCgwLHIpLG49dTtuPj03OylkKDFlNywwKSxuLT03O2ZvcihkKGIoMTAsbiwxKSwwKSxuPWUtMTtuPj0yMzspbCgxPDwyMyksbi09MjM7bCgxPDxuKSxkKDEsMSksbCgyKSxtPXAoKX1lbHNlIGQoMCxyKSxkKDE8PC1lLDApLG09cCgpK2EuY2FsbChjLHUpO3JldHVybiB1PjA/KGY9bS5sZW5ndGgsbT15KyhmPD11P1wiMC5cIithLmNhbGwoYyx1LWYpK206bS5zbGljZSgwLGYtdSkrXCIuXCIrbS5zbGljZShmLXUpKSk6bT15K20sbX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDUpLG89cigxNjYpLGE9MS4udG9QcmVjaXNpb247bihuLlArbi5GKihpKGZ1bmN0aW9uKCl7cmV0dXJuXCIxXCIhPT1hLmNhbGwoMSx2b2lkIDApfSl8fCFpKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKSxcIk51bWJlclwiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMsXCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdm9pZCAwPT09dD9hLmNhbGwoZSk6YS5jYWxsKGUsdCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TK24uRixcIk9iamVjdFwiLHthc3NpZ246cigxNzkpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiT2JqZWN0XCIse2NyZWF0ZTpyKDQyKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUytuLkYqIXIoOCksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydGllczpyKDE4MCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMrbi5GKiFyKDgpLFwiT2JqZWN0XCIse2RlZmluZVByb3BlcnR5OnIoOSkuZn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMzYpLm9uRnJlZXplO3IoMjgpKFwiZnJlZXplXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiZuKGUpP3QoaShlKSk6ZX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTcpLGk9cigyMCkuZjtyKDI4KShcImdldE93blByb3BlcnR5RGVzY3JpcHRvclwiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0KSxlKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMjgpKFwiZ2V0T3duUHJvcGVydHlOYW1lc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHIoMTgxKS5mfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDExKSxpPXIoMjEpO3IoMjgpKFwiZ2V0UHJvdG90eXBlT2ZcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7cigyOCkoXCJpc0V4dGVuc2libGVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuISFuKGUpJiYoIXR8fHQoZSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTtyKDI4KShcImlzRnJvemVuXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiFuKGUpfHwhIXQmJnQoZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3IoMjgpKFwiaXNTZWFsZWRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIW4oZSl8fCEhdCYmdChlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJPYmplY3RcIix7aXM6cigxODcpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDExKSxpPXIoNDQpO3IoMjgpKFwia2V5c1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMzYpLm9uRnJlZXplO3IoMjgpKFwicHJldmVudEV4dGVuc2lvbnNcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm4oZSk/dChpKGUpKTplfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMzYpLm9uRnJlZXplO3IoMjgpKFwic2VhbFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCYmbihlKT90KGkoZSkpOmV9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiT2JqZWN0XCIse3NldFByb3RvdHlwZU9mOnIoMTMyKS5zZXR9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNjQpLGk9e307aVtyKDcpKFwidG9TdHJpbmdUYWdcIildPVwielwiLGkrXCJcIiE9XCJbb2JqZWN0IHpdXCImJnIoMTUpKE9iamVjdC5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK24odGhpcykrXCJdXCJ9LCEwKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4NSk7bihuLkcrbi5GKihwYXJzZUZsb2F0IT1pKSx7cGFyc2VGbG9hdDppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODYpO24obi5HK24uRioocGFyc2VJbnQhPWkpLHtwYXJzZUludDppfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLG8sYT1yKDQxKSxmPXIoNCkscz1yKDMzKSx1PXIoNjQpLGg9cigwKSxjPXIoNiksZD1yKDEzKSxsPXIoNDApLHA9cig1NSksYj1yKDEzNCksdj1yKDEzOSkuc2V0LHk9cigxMzEpKCksbT1cIlByb21pc2VcIixnPWYuVHlwZUVycm9yLHc9Zi5wcm9jZXNzLF89ZlttXSx3PWYucHJvY2VzcyxNPVwicHJvY2Vzc1wiPT11KHcpLFM9ZnVuY3Rpb24oKXt9LEU9ISFmdW5jdGlvbigpe3RyeXt2YXIgdD1fLnJlc29sdmUoMSksZT0odC5jb25zdHJ1Y3Rvcj17fSlbcig3KShcInNwZWNpZXNcIildPWZ1bmN0aW9uKHQpe3QoUyxTKX07cmV0dXJuKE18fFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJnQudGhlbihTKWluc3RhbmNlb2YgZX1jYXRjaCh0KXt9fSgpLEE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQ9PT1fJiZlPT09b30saz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFjKHQpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZihlPXQudGhlbikpJiZlfSx4PWZ1bmN0aW9uKHQpe3JldHVybiBBKF8sdCk/bmV3IEkodCk6bmV3IGkodCl9LEk9aT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMucHJvbWlzZT1uZXcgdChmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PXIpdGhyb3cgZyhcIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yXCIpO2U9dCxyPW59KSx0aGlzLnJlc29sdmU9ZChlKSx0aGlzLnJlamVjdD1kKHIpfSxCPWZ1bmN0aW9uKHQpe3RyeXt0KCl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOnR9fX0sTz1mdW5jdGlvbih0LGUpe2lmKCF0Ll9uKXt0Ll9uPSEwO3ZhciByPXQuX2M7eShmdW5jdGlvbigpe2Zvcih2YXIgbj10Ll92LGk9MT09dC5fcyxvPTAsYT1mdW5jdGlvbihlKXt2YXIgcixvLGE9aT9lLm9rOmUuZmFpbCxmPWUucmVzb2x2ZSxzPWUucmVqZWN0LHU9ZS5kb21haW47dHJ5e2E/KGl8fCgyPT10Ll9oJiZUKHQpLHQuX2g9MSksYT09PSEwP3I9bjoodSYmdS5lbnRlcigpLHI9YShuKSx1JiZ1LmV4aXQoKSkscj09PWUucHJvbWlzZT9zKGcoXCJQcm9taXNlLWNoYWluIGN5Y2xlXCIpKToobz1rKHIpKT9vLmNhbGwocixmLHMpOmYocikpOnMobil9Y2F0Y2godCl7cyh0KX19O3IubGVuZ3RoPm87KWEocltvKytdKTt0Ll9jPVtdLHQuX249ITEsZSYmIXQuX2gmJlIodCl9KX19LFI9ZnVuY3Rpb24odCl7di5jYWxsKGYsZnVuY3Rpb24oKXt2YXIgZSxyLG4saT10Ll92O2lmKFAodCkmJihlPUIoZnVuY3Rpb24oKXtNP3cuZW1pdChcInVuaGFuZGxlZFJlamVjdGlvblwiLGksdCk6KHI9Zi5vbnVuaGFuZGxlZHJlamVjdGlvbik/cih7cHJvbWlzZTp0LHJlYXNvbjppfSk6KG49Zi5jb25zb2xlKSYmbi5lcnJvciYmbi5lcnJvcihcIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvblwiLGkpfSksdC5faD1NfHxQKHQpPzI6MSksdC5fYT12b2lkIDAsZSl0aHJvdyBlLmVycm9yfSl9LFA9ZnVuY3Rpb24odCl7aWYoMT09dC5faClyZXR1cm4hMTtmb3IodmFyIGUscj10Ll9hfHx0Ll9jLG49MDtyLmxlbmd0aD5uOylpZihlPXJbbisrXSxlLmZhaWx8fCFQKGUucHJvbWlzZSkpcmV0dXJuITE7cmV0dXJuITB9LFQ9ZnVuY3Rpb24odCl7di5jYWxsKGYsZnVuY3Rpb24oKXt2YXIgZTtNP3cuZW1pdChcInJlamVjdGlvbkhhbmRsZWRcIix0KTooZT1mLm9ucmVqZWN0aW9uaGFuZGxlZCkmJmUoe3Byb21pc2U6dCxyZWFzb246dC5fdn0pfSl9LGo9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLl9kfHwoZS5fZD0hMCxlPWUuX3d8fGUsZS5fdj10LGUuX3M9MixlLl9hfHwoZS5fYT1lLl9jLnNsaWNlKCkpLE8oZSwhMCkpfSxDPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcztpZighci5fZCl7ci5fZD0hMCxyPXIuX3d8fHI7dHJ5e2lmKHI9PT10KXRocm93IGcoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTsoZT1rKHQpKT95KGZ1bmN0aW9uKCl7dmFyIG49e193OnIsX2Q6ITF9O3RyeXtlLmNhbGwodCxzKEMsbiwxKSxzKGosbiwxKSl9Y2F0Y2godCl7ai5jYWxsKG4sdCl9fSk6KHIuX3Y9dCxyLl9zPTEsTyhyLCExKSl9Y2F0Y2godCl7ai5jYWxsKHtfdzpyLF9kOiExfSx0KX19fTtFfHwoXz1mdW5jdGlvbih0KXtsKHRoaXMsXyxtLFwiX2hcIiksZCh0KSxuLmNhbGwodGhpcyk7dHJ5e3QocyhDLHRoaXMsMSkscyhqLHRoaXMsMSkpfWNhdGNoKHQpe2ouY2FsbCh0aGlzLHQpfX0sbj1mdW5jdGlvbih0KXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSxuLnByb3RvdHlwZT1yKDQ1KShfLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciByPXgoYih0aGlzLF8pKTtyZXR1cm4gci5vaz1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0LHIuZmFpbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLHIuZG9tYWluPU0/dy5kb21haW46dm9pZCAwLHRoaXMuX2MucHVzaChyKSx0aGlzLl9hJiZ0aGlzLl9hLnB1c2gociksdGhpcy5fcyYmTyh0aGlzLCExKSxyLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLEk9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cyhDLHQsMSksdGhpcy5yZWplY3Q9cyhqLHQsMSl9KSxoKGguRytoLlcraC5GKiFFLHtQcm9taXNlOl99KSxyKDU3KShfLG0pLHIoNDYpKG0pLG89cigzMilbbV0saChoLlMraC5GKiFFLG0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT14KHRoaXMpLHI9ZS5yZWplY3Q7cmV0dXJuIHIodCksZS5wcm9taXNlfX0pLGgoaC5TK2guRiooYXx8IUUpLG0se3Jlc29sdmU6ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIF8mJkEodC5jb25zdHJ1Y3Rvcix0aGlzKSlyZXR1cm4gdDt2YXIgZT14KHRoaXMpLHI9ZS5yZXNvbHZlO3JldHVybiByKHQpLGUucHJvbWlzZX19KSxoKGguUytoLkYqIShFJiZyKDg0KShmdW5jdGlvbih0KXtfLmFsbCh0KS5jYXRjaChTKX0pKSxtLHthbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXgoZSksbj1yLnJlc29sdmUsaT1yLnJlamVjdCxvPUIoZnVuY3Rpb24oKXt2YXIgcj1bXSxvPTAsYT0xO3AodCwhMSxmdW5jdGlvbih0KXt2YXIgZj1vKysscz0hMTtyLnB1c2godm9pZCAwKSxhKyssZS5yZXNvbHZlKHQpLnRoZW4oZnVuY3Rpb24odCl7c3x8KHM9ITAscltmXT10LC0tYXx8bihyKSl9LGkpfSksLS1hfHxuKHIpfSk7cmV0dXJuIG8mJmkoby5lcnJvciksci5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj14KGUpLG49ci5yZWplY3QsaT1CKGZ1bmN0aW9uKCl7cCh0LCExLGZ1bmN0aW9uKHQpe2UucmVzb2x2ZSh0KS50aGVuKHIucmVzb2x2ZSxuKX0pfSk7cmV0dXJuIGkmJm4oaS5lcnJvciksci5wcm9taXNlfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMpLG89cigzKSxhPShyKDQpLlJlZmxlY3R8fHt9KS5hcHBseSxmPUZ1bmN0aW9uLmFwcGx5O24obi5TK24uRiohcig1KShmdW5jdGlvbigpe2EoZnVuY3Rpb24oKXt9KX0pLFwiUmVmbGVjdFwiLHthcHBseTpmdW5jdGlvbih0LGUscil7dmFyIG49aSh0KSxzPW8ocik7cmV0dXJuIGE/YShuLGUscyk6Zi5jYWxsKG4sZSxzKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDQyKSxvPXIoMTMpLGE9cigzKSxmPXIoNikscz1yKDUpLHU9cigxNzApLGg9KHIoNCkuUmVmbGVjdHx8e30pLmNvbnN0cnVjdCxjPXMoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoaChmdW5jdGlvbigpe30sW10sdClpbnN0YW5jZW9mIHQpfSksZD0hcyhmdW5jdGlvbigpe2goZnVuY3Rpb24oKXt9KX0pO24obi5TK24uRiooY3x8ZCksXCJSZWZsZWN0XCIse2NvbnN0cnVjdDpmdW5jdGlvbih0LGUpe28odCksYShlKTt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDM/dDpvKGFyZ3VtZW50c1syXSk7aWYoZCYmIWMpcmV0dXJuIGgodCxlLHIpO2lmKHQ9PXIpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdLGVbM10pfXZhciBuPVtudWxsXTtyZXR1cm4gbi5wdXNoLmFwcGx5KG4sZSksbmV3KHUuYXBwbHkodCxuKSl9dmFyIHM9ci5wcm90b3R5cGUsbD1pKGYocyk/czpPYmplY3QucHJvdG90eXBlKSxwPUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxsLGUpO3JldHVybiBmKHApP3A6bH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSksaT1yKDApLG89cigzKSxhPXIoMjkpO2koaS5TK2kuRipyKDUpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShuLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLFwiUmVmbGVjdFwiLHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7byh0KSxlPWEoZSwhMCksbyhyKTt0cnl7cmV0dXJuIG4uZih0LGUsciksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjApLmYsbz1yKDMpO24obi5TLFwiUmVmbGVjdFwiLHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3ZhciByPWkobyh0KSxlKTtyZXR1cm4hKHImJiFyLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB0W2VdfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMyksbz1mdW5jdGlvbih0KXt0aGlzLl90PWkodCksdGhpcy5faT0wO3ZhciBlLHI9dGhpcy5faz1bXTtmb3IoZSBpbiB0KXIucHVzaChlKX07cigxMjcpKG8sXCJPYmplY3RcIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcyxyPWUuX2s7ZG8gaWYoZS5faT49ci5sZW5ndGgpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt3aGlsZSghKCh0PXJbZS5faSsrXSlpbiBlLl90KSk7cmV0dXJue3ZhbHVlOnQsZG9uZTohMX19KSxuKG4uUyxcIlJlZmxlY3RcIix7ZW51bWVyYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjApLGk9cigwKSxvPXIoMyk7aShpLlMsXCJSZWZsZWN0XCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuLmYobyh0KSxlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDIxKSxvPXIoMyk7bihuLlMsXCJSZWZsZWN0XCIse2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByLGYsaD1hcmd1bWVudHMubGVuZ3RoPDM/dDphcmd1bWVudHNbMl07cmV0dXJuIHUodCk9PT1oP3RbZV06KHI9aS5mKHQsZSkpP2EocixcInZhbHVlXCIpP3IudmFsdWU6dm9pZCAwIT09ci5nZXQ/ci5nZXQuY2FsbChoKTp2b2lkIDA6cyhmPW8odCkpP24oZixlLGgpOnZvaWQgMH12YXIgaT1yKDIwKSxvPXIoMjEpLGE9cigxMiksZj1yKDApLHM9cig2KSx1PXIoMyk7ZihmLlMsXCJSZWZsZWN0XCIse2dldDpufSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiUmVmbGVjdFwiLHtoYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMyksbz1PYmplY3QuaXNFeHRlbnNpYmxlO24obi5TLFwiUmVmbGVjdFwiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCksIW98fG8odCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiUmVmbGVjdFwiLHtvd25LZXlzOnIoMTg0KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMyksbz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsXCJSZWZsZWN0XCIse3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe2kodCk7dHJ5e3JldHVybiBvJiZvKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMik7aSYmbihuLlMsXCJSZWZsZWN0XCIse3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQsZSl7aS5jaGVjayh0LGUpO3RyeXtyZXR1cm4gaS5zZXQodCxlKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgcyxkLGw9YXJndW1lbnRzLmxlbmd0aDw0P3Q6YXJndW1lbnRzWzNdLHA9by5mKGgodCksZSk7aWYoIXApe2lmKGMoZD1hKHQpKSlyZXR1cm4gbihkLGUscixsKTtwPXUoMCl9cmV0dXJuIGYocCxcInZhbHVlXCIpPyEocC53cml0YWJsZT09PSExfHwhYyhsKSkmJihzPW8uZihsLGUpfHx1KDApLHMudmFsdWU9cixpLmYobCxlLHMpLCEwKTp2b2lkIDAhPT1wLnNldCYmKHAuc2V0LmNhbGwobCxyKSwhMCl9dmFyIGk9cig5KSxvPXIoMjApLGE9cigyMSksZj1yKDEyKSxzPXIoMCksdT1yKDM3KSxoPXIoMyksYz1yKDYpO3Mocy5TLFwiUmVmbGVjdFwiLHtzZXQ6bn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMTI0KSxvPXIoOSkuZixhPXIoNDMpLmYsZj1yKDgzKSxzPXIoODEpLHU9bi5SZWdFeHAsaD11LGM9dS5wcm90b3R5cGUsZD0vYS9nLGw9L2EvZyxwPW5ldyB1KGQpIT09ZDtpZihyKDgpJiYoIXB8fHIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gbFtyKDcpKFwibWF0Y2hcIildPSExLHUoZCkhPWR8fHUobCk9PWx8fFwiL2EvaVwiIT11KGQsXCJpXCIpfSkpKXt1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyBpbnN0YW5jZW9mIHUsbj1mKHQpLG89dm9pZCAwPT09ZTtyZXR1cm4hciYmbiYmdC5jb25zdHJ1Y3Rvcj09PXUmJm8/dDppKHA/bmV3IGgobiYmIW8/dC5zb3VyY2U6dCxlKTpoKChuPXQgaW5zdGFuY2VvZiB1KT90LnNvdXJjZTp0LG4mJm8/cy5jYWxsKHQpOmUpLHI/dGhpczpjLHUpfTtmb3IodmFyIGI9KGZ1bmN0aW9uKHQpe3QgaW4gdXx8byh1LHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaFt0XX0sc2V0OmZ1bmN0aW9uKGUpe2hbdF09ZX19KX0pLHY9YShoKSx5PTA7di5sZW5ndGg+eTspYih2W3krK10pO2MuY29uc3RydWN0b3I9dSx1LnByb3RvdHlwZT1jLHIoMTUpKG4sXCJSZWdFeHBcIix1KX1yKDQ2KShcIlJlZ0V4cFwiKX0sZnVuY3Rpb24odCxlLHIpe3IoODApKFwibWF0Y2hcIiwxLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dCh0aGlzKSxpPXZvaWQgMD09cj92b2lkIDA6cltlXTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwocixuKTpuZXcgUmVnRXhwKHIpW2VdKFN0cmluZyhuKSl9LHJdfSl9LGZ1bmN0aW9uKHQsZSxyKXtcbnIoODApKFwicmVwbGFjZVwiLDIsZnVuY3Rpb24odCxlLHIpe3JldHVybltmdW5jdGlvbihuLGkpe1widXNlIHN0cmljdFwiO3ZhciBvPXQodGhpcyksYT12b2lkIDA9PW4/dm9pZCAwOm5bZV07cmV0dXJuIHZvaWQgMCE9PWE/YS5jYWxsKG4sbyxpKTpyLmNhbGwoU3RyaW5nKG8pLG4saSl9LHJdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDgwKShcInNlYXJjaFwiLDEsZnVuY3Rpb24odCxlLHIpe3JldHVybltmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KHRoaXMpLGk9dm9pZCAwPT1yP3ZvaWQgMDpyW2VdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChyLG4pOm5ldyBSZWdFeHAocilbZV0oU3RyaW5nKG4pKX0scl19KX0sZnVuY3Rpb24odCxlLHIpe3IoODApKFwic3BsaXRcIiwyLGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1yKDgzKSxvPW4sYT1bXS5wdXNoLGY9XCJzcGxpdFwiLHM9XCJsZW5ndGhcIix1PVwibGFzdEluZGV4XCI7aWYoXCJjXCI9PVwiYWJiY1wiW2ZdKC8oYikqLylbMV18fDQhPVwidGVzdFwiW2ZdKC8oPzopLywtMSlbc118fDIhPVwiYWJcIltmXSgvKD86YWIpKi8pW3NdfHw0IT1cIi5cIltmXSgvKC4/KSguPykvKVtzXXx8XCIuXCJbZl0oLygpKCkvKVtzXT4xfHxcIlwiW2ZdKC8uPy8pW3NdKXt2YXIgaD12b2lkIDA9PT0vKCk/Py8uZXhlYyhcIlwiKVsxXTtuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9U3RyaW5nKHRoaXMpO2lmKHZvaWQgMD09PXQmJjA9PT1lKXJldHVybltdO2lmKCFpKHQpKXJldHVybiBvLmNhbGwocix0LGUpO3ZhciBuLGYsYyxkLGwscD1bXSxiPSh0Lmlnbm9yZUNhc2U/XCJpXCI6XCJcIikrKHQubXVsdGlsaW5lP1wibVwiOlwiXCIpKyh0LnVuaWNvZGU/XCJ1XCI6XCJcIikrKHQuc3RpY2t5P1wieVwiOlwiXCIpLHY9MCx5PXZvaWQgMD09PWU/NDI5NDk2NzI5NTplPj4+MCxtPW5ldyBSZWdFeHAodC5zb3VyY2UsYitcImdcIik7Zm9yKGh8fChuPW5ldyBSZWdFeHAoXCJeXCIrbS5zb3VyY2UrXCIkKD8hXFxcXHMpXCIsYikpOyhmPW0uZXhlYyhyKSkmJihjPWYuaW5kZXgrZlswXVtzXSwhKGM+diYmKHAucHVzaChyLnNsaWNlKHYsZi5pbmRleCkpLCFoJiZmW3NdPjEmJmZbMF0ucmVwbGFjZShuLGZ1bmN0aW9uKCl7Zm9yKGw9MTtsPGFyZ3VtZW50c1tzXS0yO2wrKyl2b2lkIDA9PT1hcmd1bWVudHNbbF0mJihmW2xdPXZvaWQgMCl9KSxmW3NdPjEmJmYuaW5kZXg8cltzXSYmYS5hcHBseShwLGYuc2xpY2UoMSkpLGQ9ZlswXVtzXSx2PWMscFtzXT49eSkpKTspbVt1XT09PWYuaW5kZXgmJm1bdV0rKztyZXR1cm4gdj09PXJbc10/IWQmJm0udGVzdChcIlwiKXx8cC5wdXNoKFwiXCIpOnAucHVzaChyLnNsaWNlKHYpKSxwW3NdPnk/cC5zbGljZSgwLHkpOnB9fWVsc2VcIjBcIltmXSh2b2lkIDAsMClbc10mJihuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXQmJjA9PT1lP1tdOm8uY2FsbCh0aGlzLHQsZSl9KTtyZXR1cm5bZnVuY3Rpb24ocixpKXt2YXIgbz10KHRoaXMpLGE9dm9pZCAwPT1yP3ZvaWQgMDpyW2VdO3JldHVybiB2b2lkIDAhPT1hP2EuY2FsbChyLG8saSk6bi5jYWxsKFN0cmluZyhvKSxyLGkpfSxuXX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxOTEpO3ZhciBuPXIoMyksaT1yKDgxKSxvPXIoOCksYT1cInRvU3RyaW5nXCIsZj0vLi9bYV0scz1mdW5jdGlvbih0KXtyKDE1KShSZWdFeHAucHJvdG90eXBlLGEsdCwhMCl9O3IoNSkoZnVuY3Rpb24oKXtyZXR1cm5cIi9hL2JcIiE9Zi5jYWxsKHtzb3VyY2U6XCJhXCIsZmxhZ3M6XCJiXCJ9KX0pP3MoZnVuY3Rpb24oKXt2YXIgdD1uKHRoaXMpO3JldHVyblwiL1wiLmNvbmNhdCh0LnNvdXJjZSxcIi9cIixcImZsYWdzXCJpbiB0P3QuZmxhZ3M6IW8mJnQgaW5zdGFuY2VvZiBSZWdFeHA/aS5jYWxsKHQpOnZvaWQgMCl9KTpmLm5hbWUhPWEmJnMoZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLFwiYVwiLFwibmFtZVwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJiaWdcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYmlnXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiYmxpbmtcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYmxpbmtcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJib2xkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImJcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTM1KSghMSk7bihuLlAsXCJTdHJpbmdcIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEwKSxvPXIoMTM2KSxhPVwiZW5kc1dpdGhcIixmPVwiXCJbYV07bihuLlArbi5GKnIoMTIyKShhKSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMsdCxhKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLG49aShlLmxlbmd0aCkscz12b2lkIDA9PT1yP246TWF0aC5taW4oaShyKSxuKSx1PVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSx1LHMpOmUuc2xpY2Uocy11Lmxlbmd0aCxzKT09PXV9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImZpeGVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInR0XCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiZm9udGNvbG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJmb250XCIsXCJjb2xvclwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJmb250c2l6ZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLFwiZm9udFwiLFwic2l6ZVwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNDcpLG89U3RyaW5nLmZyb21DaGFyQ29kZSxhPVN0cmluZy5mcm9tQ29kZVBvaW50O24obi5TK24uRiooISFhJiYxIT1hLmxlbmd0aCksXCJTdHJpbmdcIix7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGgsYT0wO24+YTspe2lmKGU9K2FyZ3VtZW50c1thKytdLGkoZSwxMTE0MTExKSE9PWUpdGhyb3cgUmFuZ2VFcnJvcihlK1wiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnRcIik7ci5wdXNoKGU8NjU1MzY/byhlKTpvKCgoZS09NjU1MzYpPj4xMCkrNTUyOTYsZSUxMDI0KzU2MzIwKSl9cmV0dXJuIHIuam9pbihcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzNiksbz1cImluY2x1ZGVzXCI7bihuLlArbi5GKnIoMTIyKShvKSxcIlN0cmluZ1wiLHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4hIX5pKHRoaXMsdCxvKS5pbmRleE9mKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJpdGFsaWNzXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImlcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMzUpKCEwKTtyKDEyOCkoU3RyaW5nLFwiU3RyaW5nXCIsZnVuY3Rpb24odCl7dGhpcy5fdD1TdHJpbmcodCksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fdCxyPXRoaXMuX2k7cmV0dXJuIHI+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9bihlLHIpLHRoaXMuX2krPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJsaW5rXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJhXCIsXCJocmVmXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxNyksbz1yKDEwKTtuKG4uUyxcIlN0cmluZ1wiLHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodC5yYXcpLHI9byhlLmxlbmd0aCksbj1hcmd1bWVudHMubGVuZ3RoLGE9W10sZj0wO3I+ZjspYS5wdXNoKFN0cmluZyhlW2YrK10pKSxmPG4mJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW2ZdKSk7cmV0dXJuIGEuam9pbihcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJTdHJpbmdcIix7cmVwZWF0OnIoMTM3KX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzbWFsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzbWFsbFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMCksbz1yKDEzNiksYT1cInN0YXJ0c1dpdGhcIixmPVwiXCJbYV07bihuLlArbi5GKnIoMTIyKShhKSxcIlN0cmluZ1wiLHtzdGFydHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcyx0LGEpLHI9aShNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlLmxlbmd0aCkpLG49U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLG4scik6ZS5zbGljZShyLHIrbi5sZW5ndGgpPT09bn19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwic3RyaWtlXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInN0cmlrZVwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInN1YlwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzdWJcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzdXBcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic3VwXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoNTgpKFwidHJpbVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMyl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cigxMiksbz1yKDgpLGE9cigwKSxmPXIoMTUpLHM9cigzNikuS0VZLHU9cig1KSxoPXIoODcpLGM9cig1NyksZD1yKDQ4KSxsPXIoNykscD1yKDE4OSksYj1yKDE0MSksdj1yKDI4NikseT1yKDI4NSksbT1yKDEyNiksZz1yKDMpLHc9cigxNyksXz1yKDI5KSxNPXIoMzcpLFM9cig0MiksRT1yKDE4MSksQT1yKDIwKSxrPXIoOSkseD1yKDQ0KSxJPUEuZixCPWsuZixPPUUuZixSPW4uU3ltYm9sLFA9bi5KU09OLFQ9UCYmUC5zdHJpbmdpZnksaj1cInByb3RvdHlwZVwiLEM9bChcIl9oaWRkZW5cIiksTj1sKFwidG9QcmltaXRpdmVcIiksTD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxVPWgoXCJzeW1ib2wtcmVnaXN0cnlcIiksej1oKFwic3ltYm9sc1wiKSxEPWgoXCJvcC1zeW1ib2xzXCIpLHE9T2JqZWN0W2pdLEY9XCJmdW5jdGlvblwiPT10eXBlb2YgUixLPW4uUU9iamVjdCxHPSFLfHwhS1tqXXx8IUtbal0uZmluZENoaWxkLFY9byYmdShmdW5jdGlvbigpe3JldHVybiA3IT1TKEIoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBCKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUkocSxlKTtuJiZkZWxldGUgcVtlXSxCKHQsZSxyKSxuJiZ0IT09cSYmQihxLGUsbil9OkIsSD1mdW5jdGlvbih0KXt2YXIgZT16W3RdPVMoUltqXSk7cmV0dXJuIGUuX2s9dCxlfSxYPUYmJlwic3ltYm9sXCI9PXR5cGVvZiBSLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFJ9LFk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PT09cSYmWShELGUsciksZyh0KSxlPV8oZSwhMCksZyhyKSxpKHosZSk/KHIuZW51bWVyYWJsZT8oaSh0LEMpJiZ0W0NdW2VdJiYodFtDXVtlXT0hMSkscj1TKHIse2VudW1lcmFibGU6TSgwLCExKX0pKTooaSh0LEMpfHxCKHQsQyxNKDEse30pKSx0W0NdW2VdPSEwKSxWKHQsZSxyKSk6Qih0LGUscil9LFc9ZnVuY3Rpb24odCxlKXtnKHQpO2Zvcih2YXIgcixuPXkoZT13KGUpKSxpPTAsbz1uLmxlbmd0aDtvPmk7KVkodCxyPW5baSsrXSxlW3JdKTtyZXR1cm4gdH0sWj1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP1ModCk6VyhTKHQpLGUpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPUwuY2FsbCh0aGlzLHQ9Xyh0LCEwKSk7cmV0dXJuISh0aGlzPT09cSYmaSh6LHQpJiYhaShELHQpKSYmKCEoZXx8IWkodGhpcyx0KXx8IWkoeix0KXx8aSh0aGlzLEMpJiZ0aGlzW0NdW3RdKXx8ZSl9LCQ9ZnVuY3Rpb24odCxlKXtpZih0PXcodCksZT1fKGUsITApLHQhPT1xfHwhaSh6LGUpfHxpKEQsZSkpe3ZhciByPUkodCxlKTtyZXR1cm4hcnx8IWkoeixlKXx8aSh0LEMpJiZ0W0NdW2VdfHwoci5lbnVtZXJhYmxlPSEwKSxyfX0sUT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1PKHcodCkpLG49W10sbz0wO3IubGVuZ3RoPm87KWkoeixlPXJbbysrXSl8fGU9PUN8fGU9PXN8fG4ucHVzaChlKTtyZXR1cm4gbn0sdHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dD09PXEsbj1PKHI/RDp3KHQpKSxvPVtdLGE9MDtuLmxlbmd0aD5hOykhaSh6LGU9blthKytdKXx8ciYmIWkocSxlKXx8by5wdXNoKHpbZV0pO3JldHVybiBvfTtGfHwoUj1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBSKXRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciFcIik7dmFyIHQ9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksZT1mdW5jdGlvbihyKXt0aGlzPT09cSYmZS5jYWxsKEQsciksaSh0aGlzLEMpJiZpKHRoaXNbQ10sdCkmJih0aGlzW0NdW3RdPSExKSxWKHRoaXMsdCxNKDEscikpfTtyZXR1cm4gbyYmRyYmVihxLHQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6ZX0pLEgodCl9LGYoUltqXSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLEEuZj0kLGsuZj1ZLHIoNDMpLmY9RS5mPVEscig2NikuZj1KLHIoODYpLmY9dHQsbyYmIXIoNDEpJiZmKHEsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLEosITApLHAuZj1mdW5jdGlvbih0KXtyZXR1cm4gSChsKHQpKX0pLGEoYS5HK2EuVythLkYqIUYse1N5bWJvbDpSfSk7Zm9yKHZhciBldD1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLHJ0PTA7ZXQubGVuZ3RoPnJ0OylsKGV0W3J0KytdKTtmb3IodmFyIGV0PXgobC5zdG9yZSkscnQ9MDtldC5sZW5ndGg+cnQ7KWIoZXRbcnQrK10pO2EoYS5TK2EuRiohRixcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGkoVSx0Kz1cIlwiKT9VW3RdOlVbdF09Uih0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKFgodCkpcmV0dXJuIHYoVSx0KTt0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBzeW1ib2whXCIpfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtHPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtHPSExfX0pLGEoYS5TK2EuRiohRixcIk9iamVjdFwiLHtjcmVhdGU6WixkZWZpbmVQcm9wZXJ0eTpZLGRlZmluZVByb3BlcnRpZXM6VyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6JCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlEsZ2V0T3duUHJvcGVydHlTeW1ib2xzOnR0fSksUCYmYShhLlMrYS5GKighRnx8dShmdW5jdGlvbigpe3ZhciB0PVIoKTtyZXR1cm5cIltudWxsXVwiIT1UKFt0XSl8fFwie31cIiE9VCh7YTp0fSl8fFwie31cIiE9VChPYmplY3QodCkpfSkpLFwiSlNPTlwiLHtzdHJpbmdpZnk6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCYmIVgodCkpe2Zvcih2YXIgZSxyLG49W3RdLGk9MTthcmd1bWVudHMubGVuZ3RoPmk7KW4ucHVzaChhcmd1bWVudHNbaSsrXSk7cmV0dXJuIGU9blsxXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYocj1lKSwhciYmbShlKXx8KGU9ZnVuY3Rpb24odCxlKXtpZihyJiYoZT1yLmNhbGwodGhpcyx0LGUpKSwhWChlKSlyZXR1cm4gZX0pLG5bMV09ZSxULmFwcGx5KFAsbil9fX0pLFJbal1bTl18fHIoMTQpKFJbal0sTixSW2pdLnZhbHVlT2YpLGMoUixcIlN5bWJvbFwiKSxjKE1hdGgsXCJNYXRoXCIsITApLGMobi5KU09OLFwiSlNPTlwiLCEwKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDg4KSxvPXIoMTQwKSxhPXIoMyksZj1yKDQ3KSxzPXIoMTApLHU9cig2KSxoPXIoNCkuQXJyYXlCdWZmZXIsYz1yKDEzNCksZD1vLkFycmF5QnVmZmVyLGw9by5EYXRhVmlldyxwPWkuQUJWJiZoLmlzVmlldyxiPWQucHJvdG90eXBlLnNsaWNlLHY9aS5WSUVXLHk9XCJBcnJheUJ1ZmZlclwiO24obi5HK24uVytuLkYqKGghPT1kKSx7QXJyYXlCdWZmZXI6ZH0pLG4obi5TK24uRiohaS5DT05TVFIseSx7aXNWaWV3OmZ1bmN0aW9uKHQpe3JldHVybiBwJiZwKHQpfHx1KHQpJiZ2IGluIHR9fSksbihuLlArbi5VK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIW5ldyBkKDIpLnNsaWNlKDEsdm9pZCAwKS5ieXRlTGVuZ3RofSkseSx7c2xpY2U6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1iJiZ2b2lkIDA9PT1lKXJldHVybiBiLmNhbGwoYSh0aGlzKSx0KTtmb3IodmFyIHI9YSh0aGlzKS5ieXRlTGVuZ3RoLG49Zih0LHIpLGk9Zih2b2lkIDA9PT1lP3I6ZSxyKSxvPW5ldyhjKHRoaXMsZCkpKHMoaS1uKSksdT1uZXcgbCh0aGlzKSxoPW5ldyBsKG8pLHA9MDtuPGk7KWguc2V0VWludDgocCsrLHUuZ2V0VWludDgobisrKSk7cmV0dXJuIG99fSkscig0NikoeSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5HK24uVytuLkYqIXIoODgpLkFCVix7RGF0YVZpZXc6cigxNDApLkRhdGFWaWV3fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkZsb2F0MzJcIiw0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkZsb2F0NjRcIiw4LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkludDE2XCIsMixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJJbnQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiSW50OFwiLDEsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiVWludDE2XCIsMixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50MzJcIiw0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50OFwiLDEsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19LCEwKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTczKTtyKDc5KShcIldlYWtTZXRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4uZGVmKHRoaXMsdCwhMCl9fSxuLCExLCEwKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDc4KSghMCk7bihuLlAsXCJBcnJheVwiLHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTQpKFwiaW5jbHVkZXNcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzEpKCksbz1yKDQpLnByb2Nlc3MsYT1cInByb2Nlc3NcIj09cigyMykobyk7bihuLkcse2FzYXA6ZnVuY3Rpb24odCl7dmFyIGU9YSYmby5kb21haW47aShlP2UuYmluZCh0KTp0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDIzKTtuKG4uUyxcIkVycm9yXCIse2lzRXJyb3I6ZnVuY3Rpb24odCl7cmV0dXJuXCJFcnJvclwiPT09aSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlArbi5SLFwiTWFwXCIse3RvSlNPTjpyKDE3MikoXCJNYXBcIil9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2lhZGRoOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ+Pj4wLG89ZT4+PjAsYT1yPj4+MDtyZXR1cm4gbysobj4+PjApKygoaSZhfChpfGEpJn4oaSthPj4+MCkpPj4+MzEpfDB9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtpbXVsaDpmdW5jdGlvbih0LGUpe3ZhciByPTY1NTM1LG49K3QsaT0rZSxvPW4mcixhPWkmcixmPW4+PjE2LHM9aT4+MTYsdT0oZiphPj4+MCkrKG8qYT4+PjE2KTtyZXR1cm4gZipzKyh1Pj4xNikrKChvKnM+Pj4wKSsodSZyKT4+MTYpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7aXN1Ymg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dD4+PjAsbz1lPj4+MCxhPXI+Pj4wO3JldHVybiBvLShuPj4+MCktKCh+aSZhfH4oaV5hKSZpLWE+Pj4wKT4+PjMxKXwwfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7dW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgcj02NTUzNSxuPSt0LGk9K2Usbz1uJnIsYT1pJnIsZj1uPj4+MTYscz1pPj4+MTYsdT0oZiphPj4+MCkrKG8qYT4+PjE2KTtyZXR1cm4gZipzKyh1Pj4+MTYpKygobypzPj4+MCkrKHUmcik+Pj4xNil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDEzKSxhPXIoOSk7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19kZWZpbmVHZXR0ZXJfXzpmdW5jdGlvbih0LGUpe2EuZihpKHRoaXMpLHQse2dldDpvKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDEzKSxhPXIoOSk7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19kZWZpbmVTZXR0ZXJfXzpmdW5jdGlvbih0LGUpe2EuZihpKHRoaXMpLHQse3NldDpvKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODMpKCEwKTtuKG4uUyxcIk9iamVjdFwiLHtlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg0KSxvPXIoMTcpLGE9cigyMCksZj1yKDExOSk7bihuLlMsXCJPYmplY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczpmdW5jdGlvbih0KXtmb3IodmFyIGUscj1vKHQpLG49YS5mLHM9aShyKSx1PXt9LGg9MDtzLmxlbmd0aD5oOylmKHUsZT1zW2grK10sbihyLGUpKTtyZXR1cm4gdX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMjkpLGE9cigyMSksZj1yKDIwKS5mO3IoOCkmJm4obi5QK3IoODUpLFwiT2JqZWN0XCIse19fbG9va3VwR2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUscj1pKHRoaXMpLG49byh0LCEwKTtkbyBpZihlPWYocixuKSlyZXR1cm4gZS5nZXQ7d2hpbGUocj1hKHIpKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMjkpLGE9cigyMSksZj1yKDIwKS5mO3IoOCkmJm4obi5QK3IoODUpLFwiT2JqZWN0XCIse19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUscj1pKHRoaXMpLG49byh0LCEwKTtkbyBpZihlPWYocixuKSlyZXR1cm4gZS5zZXQ7d2hpbGUocj1hKHIpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4MykoITEpO24obi5TLFwiT2JqZWN0XCIse3ZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDQpLG89cigzMiksYT1yKDEzMSkoKSxmPXIoNykoXCJvYnNlcnZhYmxlXCIpLHM9cigxMyksdT1yKDMpLGg9cig0MCksYz1yKDQ1KSxkPXIoMTQpLGw9cig1NSkscD1sLlJFVFVSTixiPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDpzKHQpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2M7ZSYmKHQuX2M9dm9pZCAwLGUoKSl9LHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQuX299LG09ZnVuY3Rpb24odCl7eSh0KXx8KHQuX289dm9pZCAwLHYodCkpfSxnPWZ1bmN0aW9uKHQsZSl7dSh0KSx0aGlzLl9jPXZvaWQgMCx0aGlzLl9vPXQsdD1uZXcgdyh0aGlzKTt0cnl7dmFyIHI9ZSh0KSxuPXI7bnVsbCE9ciYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIudW5zdWJzY3JpYmU/cj1mdW5jdGlvbigpe24udW5zdWJzY3JpYmUoKX06cyhyKSx0aGlzLl9jPXIpfWNhdGNoKGUpe3JldHVybiB2b2lkIHQuZXJyb3IoZSl9eSh0aGlzKSYmdih0aGlzKX07Zy5wcm90b3R5cGU9Yyh7fSx7dW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXttKHRoaXMpfX0pO3ZhciB3PWZ1bmN0aW9uKHQpe3RoaXMuX3M9dH07dy5wcm90b3R5cGU9Yyh7fSx7bmV4dDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zO2lmKCF5KGUpKXt2YXIgcj1lLl9vO3RyeXt2YXIgbj1iKHIubmV4dCk7aWYobilyZXR1cm4gbi5jYWxsKHIsdCl9Y2F0Y2godCl7dHJ5e20oZSl9ZmluYWxseXt0aHJvdyB0fX19fSxlcnJvcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zO2lmKHkoZSkpdGhyb3cgdDt2YXIgcj1lLl9vO2UuX289dm9pZCAwO3RyeXt2YXIgbj1iKHIuZXJyb3IpO2lmKCFuKXRocm93IHQ7dD1uLmNhbGwocix0KX1jYXRjaCh0KXt0cnl7dihlKX1maW5hbGx5e3Rocm93IHR9fXJldHVybiB2KGUpLHR9LGNvbXBsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3M7aWYoIXkoZSkpe3ZhciByPWUuX287ZS5fbz12b2lkIDA7dHJ5e3ZhciBuPWIoci5jb21wbGV0ZSk7dD1uP24uY2FsbChyLHQpOnZvaWQgMH1jYXRjaCh0KXt0cnl7dihlKX1maW5hbGx5e3Rocm93IHR9fXJldHVybiB2KGUpLHR9fX0pO3ZhciBfPWZ1bmN0aW9uKHQpe2godGhpcyxfLFwiT2JzZXJ2YWJsZVwiLFwiX2ZcIikuX2Y9cyh0KX07YyhfLnByb3RvdHlwZSx7c3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0LHRoaXMuX2YpfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyhvLlByb21pc2V8fGkuUHJvbWlzZSkoZnVuY3Rpb24ocixuKXtzKHQpO3ZhciBpPWUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtuKHQpLGkudW5zdWJzY3JpYmUoKX19LGVycm9yOm4sY29tcGxldGU6cn0pfSl9fSksYyhfLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpfLHI9Yih1KHQpW2ZdKTtpZihyKXt2YXIgbj11KHIuY2FsbCh0KSk7cmV0dXJuIG4uY29uc3RydWN0b3I9PT1lP246bmV3IGUoZnVuY3Rpb24odCl7cmV0dXJuIG4uc3Vic2NyaWJlKHQpfSl9cmV0dXJuIG5ldyBlKGZ1bmN0aW9uKGUpe3ZhciByPSExO3JldHVybiBhKGZ1bmN0aW9uKCl7aWYoIXIpe3RyeXtpZihsKHQsITEsZnVuY3Rpb24odCl7aWYoZS5uZXh0KHQpLHIpcmV0dXJuIHB9KT09PXApcmV0dXJufWNhdGNoKHQpe2lmKHIpdGhyb3cgdDtyZXR1cm4gdm9pZCBlLmVycm9yKHQpfWUuY29tcGxldGUoKX19KSxmdW5jdGlvbigpe3I9ITB9fSl9LG9mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkoZSk7dDxlOylyW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiBuZXcoXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOl8pKGZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBhKGZ1bmN0aW9uKCl7aWYoIWUpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKWlmKHQubmV4dChyW25dKSxlKXJldHVybjt0LmNvbXBsZXRlKCl9fSksZnVuY3Rpb24oKXtlPSEwfX0pfX0pLGQoXy5wcm90b3R5cGUsZixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksbihuLkcse09ic2VydmFibGU6X30pLHIoNDYpKFwiT2JzZXJ2YWJsZVwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4ua2V5LGE9bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSxyLG4pe2EodCxlLGkociksbyhuKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmtleSxhPW4ubWFwLGY9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOm8oYXJndW1lbnRzWzJdKSxuPWEoaShlKSxyLCExKTtpZih2b2lkIDA9PT1ufHwhbi5kZWxldGUodCkpcmV0dXJuITE7aWYobi5zaXplKXJldHVybiEwO3ZhciBzPWYuZ2V0KGUpO3JldHVybiBzLmRlbGV0ZShyKSwhIXMuc2l6ZXx8Zi5kZWxldGUoZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE5MiksaT1yKDE2OCksbz1yKDM0KSxhPXIoMyksZj1yKDIxKSxzPW8ua2V5cyx1PW8ua2V5LGg9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKHQsZSksbz1mKHQpO2lmKG51bGw9PT1vKXJldHVybiByO3ZhciBhPWgobyxlKTtyZXR1cm4gYS5sZW5ndGg/ci5sZW5ndGg/aShuZXcgbihyLmNvbmNhdChhKSkpOmE6cn07by5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaChhKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6dShhcmd1bWVudHNbMV0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPXIoMjEpLGE9bi5oYXMsZj1uLmdldCxzPW4ua2V5LHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWEodCxlLHIpO2lmKG4pcmV0dXJuIGYodCxlLHIpO3ZhciBpPW8oZSk7cmV0dXJuIG51bGwhPT1pP3UodCxpLHIpOnZvaWQgMH07bi5leHAoe2dldE1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6cyhhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4ua2V5cyxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0KSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmdldCxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBvKHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1yKDIxKSxhPW4uaGFzLGY9bi5rZXkscz1mdW5jdGlvbih0LGUscil7dmFyIG49YSh0LGUscik7aWYobilyZXR1cm4hMDt2YXIgaT1vKGUpO3JldHVybiBudWxsIT09aSYmcyh0LGkscil9O24uZXhwKHtoYXNNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBzKHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmYoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmhhcyxhPW4ua2V5O24uZXhwKHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBvKHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1yKDEzKSxhPW4ua2V5LGY9bi5zZXQ7bi5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zih0LGUsKHZvaWQgMCE9PW4/aTpvKShyKSxhKG4pKX19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QK24uUixcIlNldFwiLHt0b0pTT046cigxNzIpKFwiU2V0XCIpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMzUpKCEwKTtuKG4uUCxcIlN0cmluZ1wiLHthdDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjQpLG89cigxMCksYT1yKDgzKSxmPXIoODEpLHM9UmVnRXhwLnByb3RvdHlwZSx1PWZ1bmN0aW9uKHQsZSl7dGhpcy5fcj10LHRoaXMuX3M9ZX07cigxMjcpKHUsXCJSZWdFeHAgU3RyaW5nXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yLmV4ZWModGhpcy5fcyk7cmV0dXJue3ZhbHVlOnQsZG9uZTpudWxsPT09dH19KSxuKG4uUCxcIlN0cmluZ1wiLHttYXRjaEFsbDpmdW5jdGlvbih0KXtpZihpKHRoaXMpLCFhKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHJlZ2V4cCFcIik7dmFyIGU9U3RyaW5nKHRoaXMpLHI9XCJmbGFnc1wiaW4gcz9TdHJpbmcodC5mbGFncyk6Zi5jYWxsKHQpLG49bmV3IFJlZ0V4cCh0LnNvdXJjZSx+ci5pbmRleE9mKFwiZ1wiKT9yOlwiZ1wiK3IpO3JldHVybiBuLmxhc3RJbmRleD1vKHQubGFzdEluZGV4KSxuZXcgdShuLGUpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTg4KTtuKG4uUCxcIlN0cmluZ1wiLHtwYWRFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLCExKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE4OCk7bihuLlAsXCJTdHJpbmdcIix7cGFkU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLCEwKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoNTgpKFwidHJpbUxlZnRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLDEpfX0sXCJ0cmltU3RhcnRcIil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDU4KShcInRyaW1SaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMil9fSxcInRyaW1FbmRcIil9LGZ1bmN0aW9uKHQsZSxyKXtyKDE0MSkoXCJhc3luY0l0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LGUscil7cigxNDEpKFwib2JzZXJ2YWJsZVwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJTeXN0ZW1cIix7Z2xvYmFsOnIoNCl9KX0sZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yKDE0MyksaT1yKDE1KSxvPXIoNCksYT1yKDE0KSxmPXIoNTYpLHM9cig3KSx1PXMoXCJpdGVyYXRvclwiKSxoPXMoXCJ0b1N0cmluZ1RhZ1wiKSxjPWYuQXJyYXksZD1bXCJOb2RlTGlzdFwiLFwiRE9NVG9rZW5MaXN0XCIsXCJNZWRpYUxpc3RcIixcIlN0eWxlU2hlZXRMaXN0XCIsXCJDU1NSdWxlTGlzdFwiXSxsPTA7bDw1O2wrKyl7dmFyIHAsYj1kW2xdLHY9b1tiXSx5PXYmJnYucHJvdG90eXBlO2lmKHkpe3lbdV18fGEoeSx1LGMpLHlbaF18fGEoeSxoLGIpLGZbYl09Yztmb3IocCBpbiBuKXlbcF18fGkoeSxwLG5bcF0sITApfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzkpO24obi5HK24uQix7c2V0SW1tZWRpYXRlOmkuc2V0LGNsZWFySW1tZWRpYXRlOmkuY2xlYXJ9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDApLG89cig4MiksYT1yKDI4NyksZj1uLm5hdmlnYXRvcixzPSEhZiYmL01TSUUgLlxcLi8udGVzdChmLnVzZXJBZ2VudCksdT1mdW5jdGlvbih0KXtyZXR1cm4gcz9mdW5jdGlvbihlLHIpe3JldHVybiB0KG8oYSxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSkpLHIpfTp0fTtpKGkuRytpLkIraS5GKnMse3NldFRpbWVvdXQ6dShuLnNldFRpbWVvdXQpLHNldEludGVydmFsOnUobi5zZXRJbnRlcnZhbCl9KX0sZnVuY3Rpb24odCxlLHIpe3IoNDEwKSxyKDM0OSkscigzNTEpLHIoMzUwKSxyKDM1MykscigzNTUpLHIoMzYwKSxyKDM1NCkscigzNTIpLHIoMzYyKSxyKDM2MSkscigzNTcpLHIoMzU4KSxyKDM1NikscigzNDgpLHIoMzU5KSxyKDM2MykscigzNjQpLHIoMzE2KSxyKDMxOCkscigzMTcpLHIoMzY2KSxyKDM2NSkscigzMzYpLHIoMzQ2KSxyKDM0NykscigzMzcpLHIoMzM4KSxyKDMzOSkscigzNDApLHIoMzQxKSxyKDM0MikscigzNDMpLHIoMzQ0KSxyKDM0NSkscigzMTkpLHIoMzIwKSxyKDMyMSkscigzMjIpLHIoMzIzKSxyKDMyNCkscigzMjUpLHIoMzI2KSxyKDMyNykscigzMjgpLHIoMzI5KSxyKDMzMCkscigzMzEpLHIoMzMyKSxyKDMzMykscigzMzQpLHIoMzM1KSxyKDM5Nykscig0MDIpLHIoNDA5KSxyKDQwMCkscigzOTIpLHIoMzkzKSxyKDM5OCkscig0MDMpLHIoNDA1KSxyKDM4OCkscigzODkpLHIoMzkwKSxyKDM5MSkscigzOTQpLHIoMzk1KSxyKDM5NikscigzOTkpLHIoNDAxKSxyKDQwNCkscig0MDYpLHIoNDA3KSxyKDQwOCkscigzMTEpLHIoMzEzKSxyKDMxMikscigzMTUpLHIoMzE0KSxyKDMwMCkscigyOTgpLHIoMzA0KSxyKDMwMSkscigzMDcpLHIoMzA5KSxyKDI5NykscigzMDMpLHIoMjk0KSxyKDMwOCkscigyOTIpLHIoMzA2KSxyKDMwNSkscigyOTkpLHIoMzAyKSxyKDI5MSkscigyOTMpLHIoMjk2KSxyKDI5NSkscigzMTApLHIoMTQzKSxyKDM4MikscigzODcpLHIoMTkxKSxyKDM4MykscigzODQpLHIoMzg1KSxyKDM4NikscigzNjcpLHIoMTkwKSxyKDE5MikscigxOTMpLHIoNDIyKSxyKDQxMSkscig0MTIpLHIoNDE3KSxyKDQyMCkscig0MjEpLHIoNDE1KSxyKDQxOCkscig0MTYpLHIoNDE5KSxyKDQxMykscig0MTQpLHIoMzY4KSxyKDM2OSkscigzNzApLHIoMzcxKSxyKDM3MikscigzNzUpLHIoMzczKSxyKDM3NCkscigzNzYpLHIoMzc3KSxyKDM3OCkscigzNzkpLHIoMzgxKSxyKDM4MCkscig0MjMpLHIoNDQ5KSxyKDQ1Mikscig0NTEpLHIoNDUzKSxyKDQ1NCkscig0NTApLHIoNDU1KSxyKDQ1Nikscig0MzQpLHIoNDM3KSxyKDQzMykscig0MzEpLHIoNDMyKSxyKDQzNSkscig0MzYpLHIoNDI2KSxyKDQ0OCkscig0NTcpLHIoNDI1KSxyKDQyNykscig0MjkpLHIoNDI4KSxyKDQzMCkscig0MzkpLHIoNDQwKSxyKDQ0Mikscig0NDEpLHIoNDQ0KSxyKDQ0Mykscig0NDUpLHIoNDQ2KSxyKDQ0Nykscig0MjQpLHIoNDM4KSxyKDQ2MCkscig0NTkpLHIoNDU4KSx0LmV4cG9ydHM9cigzMil9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cig0NjMpKFwiZWQyNTUxOVwiKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuLGkpe2Z1bmN0aW9uIG8odCl7XCJzdHJpbmdcIj09dHlwZW9mIHQ/dD17YmluZGluZ3M6dH06dHx8KHQ9e30pLHQuX19wcm90b19fPWMsdC5tb2R1bGVfcm9vdHx8KHQubW9kdWxlX3Jvb3Q9ZS5nZXRSb290KGUuZ2V0RmlsZU5hbWUoKSkpLFwiLm5vZGVcIiE9Zi5leHRuYW1lKHQuYmluZGluZ3MpJiYodC5iaW5kaW5ncys9XCIubm9kZVwiKTtmb3IodmFyIHIsbixpLG89W10sYT0wLHU9dC50cnkubGVuZ3RoO2E8dTthKyspe3I9cy5hcHBseShudWxsLHQudHJ5W2FdLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXXx8ZX0pKSxvLnB1c2gocik7dHJ5e3JldHVybiBuPXQucGF0aD8hZnVuY3Rpb24oKXt2YXIgdD1uZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIG1vZHVsZSBcIi5cIicpO3Rocm93IHQuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIix0fSgpOiFmdW5jdGlvbigpe3ZhciB0PW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlIFwiLlwiJyk7dGhyb3cgdC5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLHR9KCksdC5wYXRofHwobi5wYXRoPXIpLG59Y2F0Y2godCl7aWYoIS9ub3QgZmluZC9pLnRlc3QodC5tZXNzYWdlKSl0aHJvdyB0fX10aHJvdyBpPW5ldyBFcnJvcihcIkNvdWxkIG5vdCBsb2NhdGUgdGhlIGJpbmRpbmdzIGZpbGUuIFRyaWVkOlxcblwiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFycm93K2V9KS5qb2luKFwiXFxuXCIpKSxpLnRyaWVzPW8saX12YXIgYT1yKDQ4OSksZj1yKDU5NCkscz1mLmpvaW4sdT1mLmRpcm5hbWUsaD1hLmV4aXN0c1N5bmN8fGYuZXhpc3RzU3luYyxjPXthcnJvdzpuLmVudi5OT0RFX0JJTkRJTkdTX0FSUk9XfHxcIiDihpIgXCIsY29tcGlsZWQ6bi5lbnYuTk9ERV9CSU5ESU5HU19DT01QSUxFRF9ESVJ8fFwiY29tcGlsZWRcIixwbGF0Zm9ybTpuLnBsYXRmb3JtLGFyY2g6bi5hcmNoLHZlcnNpb246bi52ZXJzaW9ucy5ub2RlLGJpbmRpbmdzOlwiYmluZGluZ3Mubm9kZVwiLHRyeTpbW1wibW9kdWxlX3Jvb3RcIixcImJ1aWxkXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcIkRlYnVnXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcIlJlbGVhc2VcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJvdXRcIixcIkRlYnVnXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiRGVidWdcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJvdXRcIixcIlJlbGVhc2VcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJSZWxlYXNlXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcImRlZmF1bHRcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJjb21waWxlZFwiLFwidmVyc2lvblwiLFwicGxhdGZvcm1cIixcImFyY2hcIixcImJpbmRpbmdzXCJdXX07dC5leHBvcnRzPWU9byxlLmdldEZpbGVOYW1lPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RXJyb3IucHJlcGFyZVN0YWNrVHJhY2Usbj1FcnJvci5zdGFja1RyYWNlTGltaXQsbz17fTtyZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTEwLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBvPTAsYT1uLmxlbmd0aDtvPGE7bysrKWlmKGU9bltvXS5nZXRGaWxlTmFtZSgpLGUhPT1pKXtpZighdClyZXR1cm47aWYoZSE9PXQpcmV0dXJufX0sRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobyksby5zdGFjayxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1yLEVycm9yLnN0YWNrVHJhY2VMaW1pdD1uLGV9LGUuZ2V0Um9vdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj11KHQpOzspe2lmKFwiLlwiPT09ciYmKHI9bi5jd2QoKSksaChzKHIsXCJwYWNrYWdlLmpzb25cIikpfHxoKHMocixcIm5vZGVfbW9kdWxlc1wiKSkpcmV0dXJuIHI7aWYoZT09PXIpdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBtb2R1bGUgcm9vdCBnaXZlbiBmaWxlOiBcIicrdCsnXCIuIERvIHlvdSBoYXZlIGEgYHBhY2thZ2UuanNvbmAgZmlsZT8gJyk7ZT1yLHI9cyhyLFwiLi5cIil9fX0pLmNhbGwoZSxyKDI2KSxcIi9pbmRleC5qc1wiKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e09fUkRPTkxZOjAsT19XUk9OTFk6MSxPX1JEV1I6MixTX0lGTVQ6NjE0NDAsU19JRlJFRzozMjc2OCxTX0lGRElSOjE2Mzg0LFNfSUZDSFI6ODE5MixTX0lGQkxLOjI0NTc2LFNfSUZJRk86NDA5NixTX0lGTE5LOjQwOTYwLFNfSUZTT0NLOjQ5MTUyLE9fQ1JFQVQ6NTEyLE9fRVhDTDoyMDQ4LE9fTk9DVFRZOjEzMTA3MixPX1RSVU5DOjEwMjQsT19BUFBFTkQ6OCxPX0RJUkVDVE9SWToxMDQ4NTc2LE9fTk9GT0xMT1c6MjU2LE9fU1lOQzoxMjgsT19TWU1MSU5LOjIwOTcxNTIsT19OT05CTE9DSzo0LFNfSVJXWFU6NDQ4LFNfSVJVU1I6MjU2LFNfSVdVU1I6MTI4LFNfSVhVU1I6NjQsU19JUldYRzo1NixTX0lSR1JQOjMyLFNfSVdHUlA6MTYsU19JWEdSUDo4LFNfSVJXWE86NyxTX0lST1RIOjQsU19JV09USDoyLFNfSVhPVEg6MSxFMkJJRzo3LEVBQ0NFUzoxMyxFQUREUklOVVNFOjQ4LEVBRERSTk9UQVZBSUw6NDksRUFGTk9TVVBQT1JUOjQ3LEVBR0FJTjozNSxFQUxSRUFEWTozNyxFQkFERjo5LEVCQURNU0c6OTQsRUJVU1k6MTYsRUNBTkNFTEVEOjg5LEVDSElMRDoxMCxFQ09OTkFCT1JURUQ6NTMsRUNPTk5SRUZVU0VEOjYxLEVDT05OUkVTRVQ6NTQsRURFQURMSzoxMSxFREVTVEFERFJSRVE6MzksRURPTTozMyxFRFFVT1Q6NjksRUVYSVNUOjE3LEVGQVVMVDoxNCxFRkJJRzoyNyxFSE9TVFVOUkVBQ0g6NjUsRUlEUk06OTAsRUlMU0VROjkyLEVJTlBST0dSRVNTOjM2LEVJTlRSOjQsRUlOVkFMOjIyLEVJTzo1LEVJU0NPTk46NTYsRUlTRElSOjIxLEVMT09QOjYyLEVNRklMRToyNCxFTUxJTks6MzEsRU1TR1NJWkU6NDAsRU1VTFRJSE9QOjk1LEVOQU1FVE9PTE9ORzo2MyxFTkVURE9XTjo1MCxFTkVUUkVTRVQ6NTIsRU5FVFVOUkVBQ0g6NTEsRU5GSUxFOjIzLEVOT0JVRlM6NTUsRU5PREFUQTo5NixFTk9ERVY6MTksRU5PRU5UOjIsRU5PRVhFQzo4LEVOT0xDSzo3NyxFTk9MSU5LOjk3LEVOT01FTToxMixFTk9NU0c6OTEsRU5PUFJPVE9PUFQ6NDIsRU5PU1BDOjI4LEVOT1NSOjk4LEVOT1NUUjo5OSxFTk9TWVM6NzgsRU5PVENPTk46NTcsRU5PVERJUjoyMCxFTk9URU1QVFk6NjYsRU5PVFNPQ0s6MzgsRU5PVFNVUDo0NSxFTk9UVFk6MjUsRU5YSU86NixFT1BOT1RTVVBQOjEwMixFT1ZFUkZMT1c6ODQsRVBFUk06MSxFUElQRTozMixFUFJPVE86MTAwLEVQUk9UT05PU1VQUE9SVDo0MyxFUFJPVE9UWVBFOjQxLEVSQU5HRTozNCxFUk9GUzozMCxFU1BJUEU6MjksRVNSQ0g6MyxFU1RBTEU6NzAsRVRJTUU6MTAxLEVUSU1FRE9VVDo2MCxFVFhUQlNZOjI2LEVXT1VMREJMT0NLOjM1LEVYREVWOjE4LFNJR0hVUDoxLFNJR0lOVDoyLFNJR1FVSVQ6MyxTSUdJTEw6NCxTSUdUUkFQOjUsU0lHQUJSVDo2LFNJR0lPVDo2LFNJR0JVUzoxMCxTSUdGUEU6OCxTSUdLSUxMOjksU0lHVVNSMTozMCxTSUdTRUdWOjExLFNJR1VTUjI6MzEsU0lHUElQRToxMyxTSUdBTFJNOjE0LFNJR1RFUk06MTUsU0lHQ0hMRDoyMCxTSUdDT05UOjE5LFNJR1NUT1A6MTcsU0lHVFNUUDoxOCxTSUdUVElOOjIxLFNJR1RUT1U6MjIsU0lHVVJHOjE2LFNJR1hDUFU6MjQsU0lHWEZTWjoyNSxTSUdWVEFMUk06MjYsU0lHUFJPRjoyNyxTSUdXSU5DSDoyOCxTSUdJTzoyMyxTSUdTWVM6MTIsU1NMX09QX0FMTDoyMTQ3NDg2NzE5LFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT046MjYyMTQ0LFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U6NDE5NDMwNCxTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVDozMjc2OCxTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFOjgxOTIsU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHOjIxNDc0ODM2NDgsU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUzoyMDQ4LFNTTF9PUF9FUEhFTUVSQUxfUlNBOjAsU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVDo0LFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUjozMixTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHOjEsU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkc6MCxTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHOjUzNjg3MDkxMixTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRzoyLFNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHOjEwNzM3NDE4MjQsU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHOjgsU1NMX09QX05PX0NPTVBSRVNTSU9OOjEzMTA3MixTU0xfT1BfTk9fUVVFUllfTVRVOjQwOTYsU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OOjY1NTM2LFNTTF9PUF9OT19TU0x2MjoxNjc3NzIxNixTU0xfT1BfTk9fU1NMdjM6MzM1NTQ0MzIsU1NMX09QX05PX1RJQ0tFVDoxNjM4NCxTU0xfT1BfTk9fVExTdjE6NjcxMDg4NjQsU1NMX09QX05PX1RMU3YxXzE6MjY4NDM1NDU2LFNTTF9PUF9OT19UTFN2MV8yOjEzNDIxNzcyOCxTU0xfT1BfUEtDUzFfQ0hFQ0tfMTowLFNTTF9PUF9QS0NTMV9DSEVDS18yOjAsU1NMX09QX1NJTkdMRV9ESF9VU0U6MTA0ODU3NixTU0xfT1BfU0lOR0xFX0VDREhfVVNFOjUyNDI4OCxTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHOjEyOCxTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHOjAsU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRzo1MTIsU1NMX09QX1RMU19ENV9CVUc6MjU2LFNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHOjgzODg2MDgsRU5HSU5FX01FVEhPRF9EU0E6MixFTkdJTkVfTUVUSE9EX0RIOjQsRU5HSU5FX01FVEhPRF9SQU5EOjgsRU5HSU5FX01FVEhPRF9FQ0RIOjE2LEVOR0lORV9NRVRIT0RfRUNEU0E6MzIsRU5HSU5FX01FVEhPRF9DSVBIRVJTOjY0LEVOR0lORV9NRVRIT0RfRElHRVNUUzoxMjgsRU5HSU5FX01FVEhPRF9TVE9SRToyNTYsRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTOjUxMixFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUzoxMDI0LEVOR0lORV9NRVRIT0RfQUxMOjY1NTM1LEVOR0lORV9NRVRIT0RfTk9ORTowLERIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjYsRl9PSzowLFJfT0s6NCxXX09LOjIsWF9PSzoxLFVWX1VEUF9SRVVTRUFERFI6NH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtuYW1lOlwiZWxsaXB0aWNcIix2ZXJzaW9uOlwiNi4zLjJcIixkZXNjcmlwdGlvbjpcIkVDIGNyeXB0b2dyYXBoeVwiLG1haW46XCJsaWIvZWxsaXB0aWMuanNcIixmaWxlczpbXCJsaWJcIl0sc2NyaXB0czp7anNjczpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixqc2hpbnQ6XCJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzXCIsbGludDpcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLHVuaXQ6XCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLHRlc3Q6XCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB1bml0XCIsdmVyc2lvbjpcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wifSxyZXBvc2l0b3J5Ont0eXBlOlwiZ2l0XCIsdXJsOlwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0XCJ9LGtleXdvcmRzOltcIkVDXCIsXCJFbGxpcHRpY1wiLFwiY3VydmVcIixcIkNyeXB0b2dyYXBoeVwiXSxhdXRob3I6e25hbWU6XCJGZWRvciBJbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifSxsaWNlbnNlOlwiTUlUXCIsYnVnczp7dXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJ9LGhvbWVwYWdlOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixkZXZEZXBlbmRlbmNpZXM6e2JyZnM6XCJeMS40LjNcIixjb3ZlcmFsbHM6XCJeMi4xMS4zXCIsZ3J1bnQ6XCJeMC40LjVcIixcImdydW50LWJyb3dzZXJpZnlcIjpcIl41LjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItY29weVwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLXVnbGlmeVwiOlwiXjEuMC4xXCIsXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOlwiXjMuMC4xXCIsXCJncnVudC1zYXVjZWxhYnNcIjpcIl44LjYuMlwiLGlzdGFuYnVsOlwiXjAuNC4yXCIsanNjczpcIl4yLjkuMFwiLGpzaGludDpcIl4yLjYuMFwiLG1vY2hhOlwiXjIuMS4wXCJ9LGRlcGVuZGVuY2llczp7XCJibi5qc1wiOlwiXjQuNC4wXCIsYnJvcmFuZDpcIl4xLjAuMVwiLFwiaGFzaC5qc1wiOlwiXjEuMC4wXCIsaW5oZXJpdHM6XCJeMi4wLjFcIn0sZ2l0SGVhZDpcImNiYWNlNDY4M2E0YTU0OGRjMDMwNmVmMzY3NTYxNTFhMjAyOTljZDVcIixfaWQ6XCJlbGxpcHRpY0A2LjMuMlwiLF9zaGFzdW06XCJlNGM4MWUwODI5Y2YwYTY1YWI3MGU5OThiODIzMjcyM2I1YzFiYzQ4XCIsX2Zyb206XCJlbGxpcHRpY0A+PTYuMC4wIDw3LjAuMFwiLF9ucG1WZXJzaW9uOlwiMy4xMC4zXCIsX25vZGVWZXJzaW9uOlwiNi4zLjBcIixfbnBtVXNlcjp7bmFtZTpcImluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGRpc3Q6e3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIix0YXJiYWxsOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn0sbWFpbnRhaW5lcnM6W3tuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn1dLF9ucG1PcGVyYXRpb25hbEludGVybmFsOntob3N0OlwicGFja2FnZXMtMTYtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb21cIix0bXA6XCJ0bXAvZWxsaXB0aWMtNi4zLjIudGd6XzE0NzM5Mzg4MzcyMDVfMC4zMTA4OTAzNDYyOTk4NTY5XCJ9LGRpcmVjdG9yaWVzOnt9LF9yZXNvbHZlZDpcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi4zLjIudGd6XCJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17XCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xXCI6XCJhZXMtMTI4LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMlwiOlwiYWVzLTEyOC1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjNcIjpcImFlcy0xMjgtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40XCI6XCJhZXMtMTI4LWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjFcIjpcImFlcy0xOTItZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMlwiOlwiYWVzLTE5Mi1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzXCI6XCJhZXMtMTkyLW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjRcIjpcImFlcy0xOTItY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MVwiOlwiYWVzLTI1Ni1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyXCI6XCJhZXMtMjU2LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDNcIjpcImFlcy0yNTYtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NFwiOlwiYWVzLTI1Ni1jZmJcIn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtuYW1lOlwiZWxsaXB0aWNcIix2ZXJzaW9uOlwiNi4zLjJcIixkZXNjcmlwdGlvbjpcIkVDIGNyeXB0b2dyYXBoeVwiLG1haW46XCJsaWIvZWxsaXB0aWMuanNcIixmaWxlczpbXCJsaWJcIl0sc2NyaXB0czp7anNjczpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixqc2hpbnQ6XCJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzXCIsbGludDpcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLHVuaXQ6XCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLHRlc3Q6XCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB1bml0XCIsdmVyc2lvbjpcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wifSxyZXBvc2l0b3J5Ont0eXBlOlwiZ2l0XCIsdXJsOlwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0XCJ9LGtleXdvcmRzOltcIkVDXCIsXCJFbGxpcHRpY1wiLFwiY3VydmVcIixcIkNyeXB0b2dyYXBoeVwiXSxhdXRob3I6e25hbWU6XCJGZWRvciBJbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifSxsaWNlbnNlOlwiTUlUXCIsYnVnczp7dXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJ9LGhvbWVwYWdlOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixkZXZEZXBlbmRlbmNpZXM6e2JyZnM6XCJeMS40LjNcIixjb3ZlcmFsbHM6XCJeMi4xMS4zXCIsZ3J1bnQ6XCJeMC40LjVcIixcImdydW50LWJyb3dzZXJpZnlcIjpcIl41LjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItY29weVwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLXVnbGlmeVwiOlwiXjEuMC4xXCIsXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOlwiXjMuMC4xXCIsXCJncnVudC1zYXVjZWxhYnNcIjpcIl44LjYuMlwiLGlzdGFuYnVsOlwiXjAuNC4yXCIsanNjczpcIl4yLjkuMFwiLGpzaGludDpcIl4yLjYuMFwiLG1vY2hhOlwiXjIuMS4wXCJ9LGRlcGVuZGVuY2llczp7XCJibi5qc1wiOlwiXjQuNC4wXCIsYnJvcmFuZDpcIl4xLjAuMVwiLFwiaGFzaC5qc1wiOlwiXjEuMC4wXCIsaW5oZXJpdHM6XCJeMi4wLjFcIn0sZ2l0SGVhZDpcImNiYWNlNDY4M2E0YTU0OGRjMDMwNmVmMzY3NTYxNTFhMjAyOTljZDVcIixfaWQ6XCJlbGxpcHRpY0A2LjMuMlwiLF9zaGFzdW06XCJlNGM4MWUwODI5Y2YwYTY1YWI3MGU5OThiODIzMjcyM2I1YzFiYzQ4XCIsX2Zyb206XCJlbGxpcHRpY0A+PTYuMC4wIDw3LjAuMFwiLF9ucG1WZXJzaW9uOlwiMy4xMC4zXCIsX25vZGVWZXJzaW9uOlwiNi4zLjBcIixfbnBtVXNlcjp7bmFtZTpcImluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGRpc3Q6e3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIix0YXJiYWxsOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn0sbWFpbnRhaW5lcnM6W3tuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn1dLF9ucG1PcGVyYXRpb25hbEludGVybmFsOntob3N0OlwicGFja2FnZXMtMTYtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb21cIix0bXA6XCJ0bXAvZWxsaXB0aWMtNi4zLjIudGd6XzE0NzM5Mzg4MzcyMDVfMC4zMTA4OTAzNDYyOTk4NTY5XCJ9LGRpcmVjdG9yaWVzOnt9LF9yZXNvbHZlZDpcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi4zLjIudGd6XCJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17bW9kcDE6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDI6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHA1OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxNDp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxNTp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTY6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmXCJcbn0sbW9kcDE3OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxODp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmXCJ9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e1wiMi4xNi44NDAuMS4xMDEuMy40LjEuMVwiOlwiYWVzLTEyOC1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjJcIjpcImFlcy0xMjgtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zXCI6XCJhZXMtMTI4LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNFwiOlwiYWVzLTEyOC1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxXCI6XCJhZXMtMTkyLWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjJcIjpcImFlcy0xOTItY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yM1wiOlwiYWVzLTE5Mi1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0XCI6XCJhZXMtMTkyLWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDFcIjpcImFlcy0yNTYtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MlwiOlwiYWVzLTI1Ni1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzXCI6XCJhZXMtMjU2LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDRcIjpcImFlcy0yNTYtY2ZiXCJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDE5NSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cigxOTUpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTk2KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KSx0aGlzLnNpemU9MH1yZXR1cm4gaSh0LFt7a2V5Olwid3JpdGVVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUrPWV9fSx7a2V5Olwid3JpdGVWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoZS5pc0J1ZmZlcih0KSlyZXR1cm4gdm9pZCB0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcodCk7aWYoIW8odCkpdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYodDwwKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBwb3NpdGl2ZVwiKTt2YXIgcj1NYXRoLmNlaWwodC50b1N0cmluZygyKS5sZW5ndGgvOCk7dGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKHtsZW5ndGg6cn0pfX0se2tleTpcIndyaXRlT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2tpcChlKX19LHtrZXk6XCJ3cml0ZVZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5za2lwKDEpLHQubGVuZ3RoPjEyNyl7dmFyIGU9TWF0aC5jZWlsKHQubGVuZ3RoLnRvU3RyaW5nKDIpLmxlbmd0aC84KTt0aGlzLnNraXAoZSl9dGhpcy5za2lwKHQubGVuZ3RoKX19LHtrZXk6XCJ3cml0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2l6ZSs9dC5sZW5ndGh9fSx7a2V5Olwic2tpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2l6ZSs9dH19LHtrZXk6XCJnZXRTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfX1dKSx0fSgpO1sxLDIsNCw4XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2EucHJvdG90eXBlW1wid3JpdGVVSW50XCIrOCp0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53cml0ZVVJbnQoZSx0KX19KSx0LmV4cG9ydHM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoNDcxKSxhPXIoNDcwKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksdGhpcy5idWZmZXI9ZSx0aGlzLmN1cnNvcj0wLHRoaXMuYm9va21hcmtzPVtdfXJldHVybiBpKHQsW3trZXk6XCJib29rbWFya1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFya3MucHVzaCh0aGlzLmN1cnNvcil9fSx7a2V5OlwicmVzdG9yZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJzb3I9dGhpcy5ib29rbWFya3MucG9wKCl9fSx7a2V5OlwiZW5zdXJlQXZhaWxhYmxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5idWZmZXIubGVuZ3RoPHRoaXMuY3Vyc29yK3QpdGhyb3cgbmV3IG8oXCJUcmllZCB0byByZWFkIFwiK3QrXCIgYnl0ZXMsIGJ1dCBvbmx5IFwiKyh0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5jdXJzb3IpK1wiIGJ5dGVzIGF2YWlsYWJsZVwiKX19LHtrZXk6XCJyZWFkVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGVla1VJbnQodCk7cmV0dXJuIHRoaXMuY3Vyc29yKz10LGV9fSx7a2V5OlwicGVla1VJbnRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZigwPT09ZSlyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IEVycm9yKFwiVHJpZWQgdG8gcmVhZCBpbnRlZ2VyIHdpdGggbmVnYXRpdmUgbGVuZ3RoIChwcm92aWRlZDogXCIrZStcIilcIik7aWYoZT50Lk1BWF9JTlRfQllURVMpdGhyb3cgbmV3IEVycm9yKFwiVHJpZWQgdG8gcmVhZCB0b28gbGFyZ2UgaW50ZWdlciAocmVxdWVzdGVkOiBcIitlK1wiLCBtYXg6IFwiK3QuTUFYX0lOVF9CWVRFUytcIilcIik7dGhpcy5lbnN1cmVBdmFpbGFibGUoZSk7dmFyIHI9dGhpcy5idWZmZXIucmVhZFVJbnRCRSh0aGlzLmN1cnNvcixlKTtyZXR1cm4gcn19LHtrZXk6XCJza2lwVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2tpcCh0KX19LHtrZXk6XCJyZWFkVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5yZWFkVUludDMyKCksdGhpcy5yZWFkVUludDMyKCldfX0se2tleTpcInBlZWtVSW50NjRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYm9va21hcmsoKTt2YXIgdD10aGlzLnJlYWRVSW50NjQoKTtyZXR1cm4gdGhpcy5yZXN0b3JlKCksdH19LHtrZXk6XCJza2lwVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNraXAoOCl9fSx7a2V5OlwicmVhZFZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFZhck9jdGV0U3RyaW5nKCk7aWYoZS5sZW5ndGg+dC5NQVhfSU5UX0JZVEVTKXRocm93IG5ldyBhKFwiVUludCBvZiBsZW5ndGggXCIrZS5sZW5ndGgrXCIgdG9vIGxhcmdlIHRvIHBhcnNlIGFzIGludGVnZXIgKG1heDogXCIrdC5NQVhfSU5UX0JZVEVTK1wiKVwiKTtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IGEoXCJVSW50IG9mIGxlbmd0aCAwIGlzIGludmFsaWRcIik7cmV0dXJuIGUucmVhZFVJbnRCRSgwLGUubGVuZ3RoKX19LHtrZXk6XCJwZWVrVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFyaygpO3ZhciB0PXRoaXMucmVhZFZhclVJbnQoKTtyZXR1cm4gdGhpcy5yZXN0b3JlKCksdH19LHtrZXk6XCJza2lwVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5za2lwVmFyT2N0ZXRTdHJpbmcoKX19LHtrZXk6XCJyZWFkT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWFkKHQpfX0se2tleTpcInBlZWtPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlZWsodCl9fSx7a2V5Olwic2tpcE9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2tpcCh0KX19LHtrZXk6XCJyZWFkTGVuZ3RoUHJlZml4XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVSW50OCgpO2lmKGUmdC5ISUdIX0JJVCl7dmFyIHI9ZSZ0LkxPV0VSX1NFVkVOX0JJVFMsbj10aGlzLnJlYWRVSW50KHIpLGk9TWF0aC5tYXgoMTI4LDE8PDgqKHItMSkpO2lmKG48aSl0aHJvdyBuZXcgYShcIkxlbmd0aCBwcmVmaXggZW5jb2RpbmcgaXMgbm90IGNhbm9uaWNhbDogXCIrbitcIiBlbmNvZGVkIGluIFwiK3IrXCIgYnl0ZXNcIik7cmV0dXJuIG59cmV0dXJuIGV9fSx7a2V5OlwicmVhZFZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRMZW5ndGhQcmVmaXgoKTtyZXR1cm4gdGhpcy5yZWFkKHQpfX0se2tleTpcInBlZWtWYXJPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFyaygpO3ZhciB0PXRoaXMucmVhZFZhck9jdGV0U3RyaW5nKCk7cmV0dXJuIHRoaXMucmVzdG9yZSgpLHR9fSx7a2V5Olwic2tpcFZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRMZW5ndGhQcmVmaXgoKTtyZXR1cm4gdGhpcy5za2lwKHQpfX0se2tleTpcInJlYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmVuc3VyZUF2YWlsYWJsZSh0KTt2YXIgZT10aGlzLmJ1ZmZlci5zbGljZSh0aGlzLmN1cnNvcix0aGlzLmN1cnNvcit0KTtyZXR1cm4gdGhpcy5jdXJzb3IrPXQsZX19LHtrZXk6XCJwZWVrXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKHQpLHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuY3Vyc29yLHRoaXMuY3Vyc29yK3QpfX0se2tleTpcInNraXBcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmVuc3VyZUF2YWlsYWJsZSh0KSx0aGlzLmN1cnNvcis9dH19XSxbe2tleTpcImZyb21cIix2YWx1ZTpmdW5jdGlvbihyKXtpZihlLmlzQnVmZmVyKHIpKXJldHVybiBuZXcgdChyKTtpZihyIGluc3RhbmNlb2YgdClyZXR1cm4gbmV3IHQoci5idWZmZXIuc2xpY2Uoci5jdXJzb3IpKTt0aHJvdyBuZXcgRXJyb3IoXCJSZWFkZXIgbXVzdCBiZSBnaXZlbiBhIEJ1ZmZlclwiKX19XSksdH0oKTtmLkhJR0hfQklUPTEyOCxmLkxPV0VSX1NFVkVOX0JJVFM9MTI3LGYuTUFYX0lOVF9CWVRFUz02LFtcInJlYWRcIixcInBlZWtcIixcInNraXBcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtbMSwyLDRdLmZvckVhY2goZnVuY3Rpb24oZSl7Zi5wcm90b3R5cGVbdCtcIlVJbnRcIis4KmVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdCtcIlVJbnRcIl0oZSl9fSl9KSx0LmV4cG9ydHM9Zn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTk2KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KSx0aGlzLmNvbXBvbmVudHM9W119cmV0dXJuIGkodCxbe2tleTpcIndyaXRlVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoIW8odCkpdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYodDwwKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBwb3NpdGl2ZVwiKTtpZihyPD0wKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cIik7aWYodC50b1N0cmluZygyKS5sZW5ndGg+OCpyKXRocm93IG5ldyBFcnJvcihcIlVJbnQgXCIrdCtcIiBkb2VzIG5vdCBmaXQgaW4gXCIrcitcIiBieXRlc1wiKTt2YXIgbj1uZXcgZShyKTtuLndyaXRlVUludEJFKHQsMCxyKSx0aGlzLndyaXRlKG4pfX0se2tleTpcIndyaXRlVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKGUuaXNCdWZmZXIocikpcmV0dXJuIHZvaWQgdGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKHIpO2lmKCFvKHIpKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgcG9zaXRpdmVcIik7aWYocj50Lk1BWF9TQUZFX0lOVEVHRVIpdGhyb3cgbmV3IEVycm9yKFwiVUludCBpcyB0b28gbGFyZ2VcIik7dmFyIG49TWF0aC5jZWlsKHIudG9TdHJpbmcoMikubGVuZ3RoLzgpLGk9bmV3IGUobik7aS53cml0ZVVJbnRCRShyLDAsbiksdGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKGkpfX0se2tleTpcIndyaXRlVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYobyhlKSYmZTw9dC5NQVhfU0FGRV9JTlRFR0VSKXJldHVybiB0aGlzLndyaXRlVUludDMyKE1hdGguZmxvb3IoZS80Mjk0OTY3Mjk2KSksdm9pZCB0aGlzLndyaXRlVUludDMyKDQyOTQ5NjcyOTUmZSk7aWYoIUFycmF5LmlzQXJyYXkoZSl8fDIhPT1lLmxlbmd0aHx8IW8oZVswXSl8fCFvKGVbMV0pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCA2NC1iaXQgaW50ZWdlciBhcyBhbiBhcnJheSBvZiB0d28gMzItYml0IHdvcmRzXCIpO3RoaXMud3JpdGVVSW50MzIoZVswXSksdGhpcy53cml0ZVVJbnQzMihlWzFdKX19LHtrZXk6XCJ3cml0ZU9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUpdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGxlbmd0aCBmb3Igb2N0ZXQgc3RyaW5nIChhY3R1YWw6IFwiK3QubGVuZ3RoK1wiLCBleHBlY3RlZDogXCIrZStcIilcIik7dGhpcy53cml0ZSh0KX19LHtrZXk6XCJ3cml0ZVZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdHMgYSBidWZmZXJcIik7dmFyIHI9MTI4O2lmKHQubGVuZ3RoPD0xMjcpdGhpcy53cml0ZVVJbnQ4KHQubGVuZ3RoKTtlbHNle3ZhciBuPU1hdGguY2VpbCh0Lmxlbmd0aC50b1N0cmluZygyKS5sZW5ndGgvOCk7dGhpcy53cml0ZVVJbnQ4KHJ8biksdGhpcy53cml0ZVVJbnQodC5sZW5ndGgsbil9dGhpcy53cml0ZSh0KX19LHtrZXk6XCJ3cml0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY29tcG9uZW50cy5wdXNoKHQpfX0se2tleTpcImdldEJ1ZmZlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuY29uY2F0KHRoaXMuY29tcG9uZW50cyl9fV0pLHR9KCk7YS5NQVhfU0FGRV9JTlRFR0VSPXIoNDc1KSxbMSwyLDRdLmZvckVhY2goZnVuY3Rpb24odCl7YS5wcm90b3R5cGVbXCJ3cml0ZVVJbnRcIis4KnRdPWZ1bmN0aW9uKGUpe3RoaXMud3JpdGVVSW50KGUsdCl9fSksdC5leHBvcnRzPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7cig0ODcpLHQuZXhwb3J0cz05MDA3MTk5MjU0NzQwOTkxfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpLGk9cigyMDApLmRvY3VtZW50LG89bihpKSYmbihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0ODMpLGk9cig0ODQpO3QuZXhwb3J0cz1yKDE0NCk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmYodCxlLGkoMSxyKSl9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDE0NCkmJiFyKDE5OSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoNDc5KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSksaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hbih0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDc3KSxpPXIoNDgxKSxvPXIoNDg1KSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cigxNDQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7aWYobih0KSxlPW8oZSwhMCksbihyKSxpKXRyeXtyZXR1cm4gYSh0LGUscil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbZV09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFuKHQpKXJldHVybiB0O3ZhciByLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTk4KTtuKG4uUyxcIk51bWJlclwiLHtpc0ludGVnZXI6cig0ODIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE5OCk7bihuLlMsXCJOdW1iZXJcIix7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LGZ1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscixuKXt0W2VdPXI+PjI0JjI1NSx0W2UrMV09cj4+MTYmMjU1LHRbZSsyXT1yPj44JjI1NSx0W2UrM109MjU1JnIsdFtlKzRdPW4+PjI0JjI1NSx0W2UrNV09bj4+MTYmMjU1LHRbZSs2XT1uPj44JjI1NSx0W2UrN109MjU1Jm59ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBvLGE9MDtmb3Iobz0wO288aTtvKyspYXw9dFtlK29dXnJbbitvXTtyZXR1cm4oMSZhLTE+Pj44KS0xfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG4odCxlLHIsaSwxNil9ZnVuY3Rpb24gbyh0LGUscixpKXtyZXR1cm4gbih0LGUscixpLDMyKX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgaSxvPTI1NSZuWzBdfCgyNTUmblsxXSk8PDh8KDI1NSZuWzJdKTw8MTZ8KDI1NSZuWzNdKTw8MjQsYT0yNTUmclswXXwoMjU1JnJbMV0pPDw4fCgyNTUmclsyXSk8PDE2fCgyNTUmclszXSk8PDI0LGY9MjU1JnJbNF18KDI1NSZyWzVdKTw8OHwoMjU1JnJbNl0pPDwxNnwoMjU1JnJbN10pPDwyNCxzPTI1NSZyWzhdfCgyNTUmcls5XSk8PDh8KDI1NSZyWzEwXSk8PDE2fCgyNTUmclsxMV0pPDwyNCx1PTI1NSZyWzEyXXwoMjU1JnJbMTNdKTw8OHwoMjU1JnJbMTRdKTw8MTZ8KDI1NSZyWzE1XSk8PDI0LGg9MjU1Jm5bNF18KDI1NSZuWzVdKTw8OHwoMjU1Jm5bNl0pPDwxNnwoMjU1Jm5bN10pPDwyNCxjPTI1NSZlWzBdfCgyNTUmZVsxXSk8PDh8KDI1NSZlWzJdKTw8MTZ8KDI1NSZlWzNdKTw8MjQsZD0yNTUmZVs0XXwoMjU1JmVbNV0pPDw4fCgyNTUmZVs2XSk8PDE2fCgyNTUmZVs3XSk8PDI0LGw9MjU1JmVbOF18KDI1NSZlWzldKTw8OHwoMjU1JmVbMTBdKTw8MTZ8KDI1NSZlWzExXSk8PDI0LHA9MjU1JmVbMTJdfCgyNTUmZVsxM10pPDw4fCgyNTUmZVsxNF0pPDwxNnwoMjU1JmVbMTVdKTw8MjQsYj0yNTUmbls4XXwoMjU1Jm5bOV0pPDw4fCgyNTUmblsxMF0pPDwxNnwoMjU1Jm5bMTFdKTw8MjQsdj0yNTUmclsxNl18KDI1NSZyWzE3XSk8PDh8KDI1NSZyWzE4XSk8PDE2fCgyNTUmclsxOV0pPDwyNCx5PTI1NSZyWzIwXXwoMjU1JnJbMjFdKTw8OHwoMjU1JnJbMjJdKTw8MTZ8KDI1NSZyWzIzXSk8PDI0LG09MjU1JnJbMjRdfCgyNTUmclsyNV0pPDw4fCgyNTUmclsyNl0pPDwxNnwoMjU1JnJbMjddKTw8MjQsZz0yNTUmclsyOF18KDI1NSZyWzI5XSk8PDh8KDI1NSZyWzMwXSk8PDE2fCgyNTUmclszMV0pPDwyNCx3PTI1NSZuWzEyXXwoMjU1Jm5bMTNdKTw8OHwoMjU1Jm5bMTRdKTw8MTZ8KDI1NSZuWzE1XSk8PDI0LF89byxNPWEsUz1mLEU9cyxBPXUsaz1oLHg9YyxJPWQsQj1sLE89cCxSPWIsUD12LFQ9eSxqPW0sQz1nLE49dyxMPTA7TDwyMDtMKz0yKWk9XytUfDAsQV49aTw8N3xpPj4+MjUsaT1BK198MCxCXj1pPDw5fGk+Pj4yMyxpPUIrQXwwLFRePWk8PDEzfGk+Pj4xOSxpPVQrQnwwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrTXwwLE9ePWk8PDd8aT4+PjI1LGk9TytrfDAsal49aTw8OXxpPj4+MjMsaT1qK098MCxNXj1pPDwxM3xpPj4+MTksaT1NK2p8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK3h8MCxDXj1pPDw3fGk+Pj4yNSxpPUMrUnwwLFNePWk8PDl8aT4+PjIzLGk9UytDfDAseF49aTw8MTN8aT4+PjE5LGk9eCtTfDAsUl49aTw8MTh8aT4+PjE0LGk9TitQfDAsRV49aTw8N3xpPj4+MjUsaT1FK058MCxJXj1pPDw5fGk+Pj4yMyxpPUkrRXwwLFBePWk8PDEzfGk+Pj4xOSxpPVArSXwwLE5ePWk8PDE4fGk+Pj4xNCxpPV8rRXwwLE1ePWk8PDd8aT4+PjI1LGk9TStffDAsU149aTw8OXxpPj4+MjMsaT1TK018MCxFXj1pPDwxM3xpPj4+MTksaT1FK1N8MCxfXj1pPDwxOHxpPj4+MTQsaT1rK0F8MCx4Xj1pPDw3fGk+Pj4yNSxpPXgra3wwLElePWk8PDl8aT4+PjIzLGk9SSt4fDAsQV49aTw8MTN8aT4+PjE5LGk9QStJfDAsa149aTw8MTh8aT4+PjE0LGk9UitPfDAsUF49aTw8N3xpPj4+MjUsaT1QK1J8MCxCXj1pPDw5fGk+Pj4yMyxpPUIrUHwwLE9ePWk8PDEzfGk+Pj4xOSxpPU8rQnwwLFJePWk8PDE4fGk+Pj4xNCxpPU4rQ3wwLFRePWk8PDd8aT4+PjI1LGk9VCtOfDAsal49aTw8OXxpPj4+MjMsaT1qK1R8MCxDXj1pPDwxM3xpPj4+MTksaT1DK2p8MCxOXj1pPDwxOHxpPj4+MTQ7Xz1fK298MCxNPU0rYXwwLFM9UytmfDAsRT1FK3N8MCxBPUErdXwwLGs9aytofDAseD14K2N8MCxJPUkrZHwwLEI9QitsfDAsTz1PK3B8MCxSPVIrYnwwLFA9UCt2fDAsVD1UK3l8MCxqPWorbXwwLEM9QytnfDAsTj1OK3d8MCx0WzBdPV8+Pj4wJjI1NSx0WzFdPV8+Pj44JjI1NSx0WzJdPV8+Pj4xNiYyNTUsdFszXT1fPj4+MjQmMjU1LHRbNF09TT4+PjAmMjU1LHRbNV09TT4+PjgmMjU1LHRbNl09TT4+PjE2JjI1NSx0WzddPU0+Pj4yNCYyNTUsdFs4XT1TPj4+MCYyNTUsdFs5XT1TPj4+OCYyNTUsdFsxMF09Uz4+PjE2JjI1NSx0WzExXT1TPj4+MjQmMjU1LHRbMTJdPUU+Pj4wJjI1NSx0WzEzXT1FPj4+OCYyNTUsdFsxNF09RT4+PjE2JjI1NSx0WzE1XT1FPj4+MjQmMjU1LHRbMTZdPUE+Pj4wJjI1NSx0WzE3XT1BPj4+OCYyNTUsdFsxOF09QT4+PjE2JjI1NSx0WzE5XT1BPj4+MjQmMjU1LHRbMjBdPWs+Pj4wJjI1NSx0WzIxXT1rPj4+OCYyNTUsdFsyMl09az4+PjE2JjI1NSx0WzIzXT1rPj4+MjQmMjU1LHRbMjRdPXg+Pj4wJjI1NSx0WzI1XT14Pj4+OCYyNTUsdFsyNl09eD4+PjE2JjI1NSx0WzI3XT14Pj4+MjQmMjU1LHRbMjhdPUk+Pj4wJjI1NSx0WzI5XT1JPj4+OCYyNTUsdFszMF09ST4+PjE2JjI1NSx0WzMxXT1JPj4+MjQmMjU1LHRbMzJdPUI+Pj4wJjI1NSx0WzMzXT1CPj4+OCYyNTUsdFszNF09Qj4+PjE2JjI1NSx0WzM1XT1CPj4+MjQmMjU1LHRbMzZdPU8+Pj4wJjI1NSx0WzM3XT1PPj4+OCYyNTUsdFszOF09Tz4+PjE2JjI1NSx0WzM5XT1PPj4+MjQmMjU1LHRbNDBdPVI+Pj4wJjI1NSx0WzQxXT1SPj4+OCYyNTUsdFs0Ml09Uj4+PjE2JjI1NSx0WzQzXT1SPj4+MjQmMjU1LHRbNDRdPVA+Pj4wJjI1NSx0WzQ1XT1QPj4+OCYyNTUsdFs0Nl09UD4+PjE2JjI1NSx0WzQ3XT1QPj4+MjQmMjU1LHRbNDhdPVQ+Pj4wJjI1NSx0WzQ5XT1UPj4+OCYyNTUsdFs1MF09VD4+PjE2JjI1NSx0WzUxXT1UPj4+MjQmMjU1LHRbNTJdPWo+Pj4wJjI1NSx0WzUzXT1qPj4+OCYyNTUsdFs1NF09aj4+PjE2JjI1NSx0WzU1XT1qPj4+MjQmMjU1LHRbNTZdPUM+Pj4wJjI1NSx0WzU3XT1DPj4+OCYyNTUsdFs1OF09Qz4+PjE2JjI1NSx0WzU5XT1DPj4+MjQmMjU1LHRbNjBdPU4+Pj4wJjI1NSx0WzYxXT1OPj4+OCYyNTUsdFs2Ml09Tj4+PjE2JjI1NSx0WzYzXT1OPj4+MjQmMjU1fWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpLG89MjU1Jm5bMF18KDI1NSZuWzFdKTw8OHwoMjU1Jm5bMl0pPDwxNnwoMjU1Jm5bM10pPDwyNCxhPTI1NSZyWzBdfCgyNTUmclsxXSk8PDh8KDI1NSZyWzJdKTw8MTZ8KDI1NSZyWzNdKTw8MjQsZj0yNTUmcls0XXwoMjU1JnJbNV0pPDw4fCgyNTUmcls2XSk8PDE2fCgyNTUmcls3XSk8PDI0LHM9MjU1JnJbOF18KDI1NSZyWzldKTw8OHwoMjU1JnJbMTBdKTw8MTZ8KDI1NSZyWzExXSk8PDI0LHU9MjU1JnJbMTJdfCgyNTUmclsxM10pPDw4fCgyNTUmclsxNF0pPDwxNnwoMjU1JnJbMTVdKTw8MjQsaD0yNTUmbls0XXwoMjU1Jm5bNV0pPDw4fCgyNTUmbls2XSk8PDE2fCgyNTUmbls3XSk8PDI0LGM9MjU1JmVbMF18KDI1NSZlWzFdKTw8OHwoMjU1JmVbMl0pPDwxNnwoMjU1JmVbM10pPDwyNCxkPTI1NSZlWzRdfCgyNTUmZVs1XSk8PDh8KDI1NSZlWzZdKTw8MTZ8KDI1NSZlWzddKTw8MjQsbD0yNTUmZVs4XXwoMjU1JmVbOV0pPDw4fCgyNTUmZVsxMF0pPDwxNnwoMjU1JmVbMTFdKTw8MjQscD0yNTUmZVsxMl18KDI1NSZlWzEzXSk8PDh8KDI1NSZlWzE0XSk8PDE2fCgyNTUmZVsxNV0pPDwyNCxiPTI1NSZuWzhdfCgyNTUmbls5XSk8PDh8KDI1NSZuWzEwXSk8PDE2fCgyNTUmblsxMV0pPDwyNCx2PTI1NSZyWzE2XXwoMjU1JnJbMTddKTw8OHwoMjU1JnJbMThdKTw8MTZ8KDI1NSZyWzE5XSk8PDI0LHk9MjU1JnJbMjBdfCgyNTUmclsyMV0pPDw4fCgyNTUmclsyMl0pPDwxNnwoMjU1JnJbMjNdKTw8MjQsbT0yNTUmclsyNF18KDI1NSZyWzI1XSk8PDh8KDI1NSZyWzI2XSk8PDE2fCgyNTUmclsyN10pPDwyNCxnPTI1NSZyWzI4XXwoMjU1JnJbMjldKTw8OHwoMjU1JnJbMzBdKTw8MTZ8KDI1NSZyWzMxXSk8PDI0LHc9MjU1Jm5bMTJdfCgyNTUmblsxM10pPDw4fCgyNTUmblsxNF0pPDwxNnwoMjU1Jm5bMTVdKTw8MjQsXz1vLE09YSxTPWYsRT1zLEE9dSxrPWgseD1jLEk9ZCxCPWwsTz1wLFI9YixQPXYsVD15LGo9bSxDPWcsTj13LEw9MDtMPDIwO0wrPTIpaT1fK1R8MCxBXj1pPDw3fGk+Pj4yNSxpPUErX3wwLEJePWk8PDl8aT4+PjIzLGk9QitBfDAsVF49aTw8MTN8aT4+PjE5LGk9VCtCfDAsX149aTw8MTh8aT4+PjE0LGk9aytNfDAsT149aTw8N3xpPj4+MjUsaT1PK2t8MCxqXj1pPDw5fGk+Pj4yMyxpPWorT3wwLE1ePWk8PDEzfGk+Pj4xOSxpPU0ranwwLGtePWk8PDE4fGk+Pj4xNCxpPVIreHwwLENePWk8PDd8aT4+PjI1LGk9QytSfDAsU149aTw8OXxpPj4+MjMsaT1TK0N8MCx4Xj1pPDwxM3xpPj4+MTksaT14K1N8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK1B8MCxFXj1pPDw3fGk+Pj4yNSxpPUUrTnwwLElePWk8PDl8aT4+PjIzLGk9SStFfDAsUF49aTw8MTN8aT4+PjE5LGk9UCtJfDAsTl49aTw8MTh8aT4+PjE0LGk9XytFfDAsTV49aTw8N3xpPj4+MjUsaT1NK198MCxTXj1pPDw5fGk+Pj4yMyxpPVMrTXwwLEVePWk8PDEzfGk+Pj4xOSxpPUUrU3wwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrQXwwLHhePWk8PDd8aT4+PjI1LGk9eCtrfDAsSV49aTw8OXxpPj4+MjMsaT1JK3h8MCxBXj1pPDwxM3xpPj4+MTksaT1BK0l8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK098MCxQXj1pPDw3fGk+Pj4yNSxpPVArUnwwLEJePWk8PDl8aT4+PjIzLGk9QitQfDAsT149aTw8MTN8aT4+PjE5LGk9TytCfDAsUl49aTw8MTh8aT4+PjE0LGk9TitDfDAsVF49aTw8N3xpPj4+MjUsaT1UK058MCxqXj1pPDw5fGk+Pj4yMyxpPWorVHwwLENePWk8PDEzfGk+Pj4xOSxpPUMranwwLE5ePWk8PDE4fGk+Pj4xNDt0WzBdPV8+Pj4wJjI1NSx0WzFdPV8+Pj44JjI1NSx0WzJdPV8+Pj4xNiYyNTUsdFszXT1fPj4+MjQmMjU1LHRbNF09az4+PjAmMjU1LHRbNV09az4+PjgmMjU1LHRbNl09az4+PjE2JjI1NSx0WzddPWs+Pj4yNCYyNTUsdFs4XT1SPj4+MCYyNTUsdFs5XT1SPj4+OCYyNTUsdFsxMF09Uj4+PjE2JjI1NSx0WzExXT1SPj4+MjQmMjU1LHRbMTJdPU4+Pj4wJjI1NSx0WzEzXT1OPj4+OCYyNTUsdFsxNF09Tj4+PjE2JjI1NSx0WzE1XT1OPj4+MjQmMjU1LHRbMTZdPXg+Pj4wJjI1NSx0WzE3XT14Pj4+OCYyNTUsdFsxOF09eD4+PjE2JjI1NSx0WzE5XT14Pj4+MjQmMjU1LHRbMjBdPUk+Pj4wJjI1NSx0WzIxXT1JPj4+OCYyNTUsdFsyMl09ST4+PjE2JjI1NSx0WzIzXT1JPj4+MjQmMjU1LHRbMjRdPUI+Pj4wJjI1NSx0WzI1XT1CPj4+OCYyNTUsdFsyNl09Qj4+PjE2JjI1NSx0WzI3XT1CPj4+MjQmMjU1LHRbMjhdPU8+Pj4wJjI1NSx0WzI5XT1PPj4+OCYyNTUsdFszMF09Tz4+PjE2JjI1NSx0WzMxXT1PPj4+MjQmMjU1fWZ1bmN0aW9uIHModCxlLHIsbil7YSh0LGUscixuKX1mdW5jdGlvbiB1KHQsZSxyLG4pe2YodCxlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixuLGksbyxhKXt2YXIgZix1LGg9bmV3IFVpbnQ4QXJyYXkoMTYpLGM9bmV3IFVpbnQ4QXJyYXkoNjQpO2Zvcih1PTA7dTwxNjt1KyspaFt1XT0wO2Zvcih1PTA7dTw4O3UrKyloW3VdPW9bdV07Zm9yKDtpPj02NDspe2ZvcihzKGMsaCxhLGR0KSx1PTA7dTw2NDt1KyspdFtlK3VdPXJbbit1XV5jW3VdO2ZvcihmPTEsdT04O3U8MTY7dSsrKWY9ZisoMjU1JmhbdV0pfDAsaFt1XT0yNTUmZixmPj4+PTg7aS09NjQsZSs9NjQsbis9NjR9aWYoaT4wKWZvcihzKGMsaCxhLGR0KSx1PTA7dTxpO3UrKyl0W2UrdV09cltuK3VdXmNbdV07cmV0dXJuIDB9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBvLGEsZj1uZXcgVWludDhBcnJheSgxNiksdT1uZXcgVWludDhBcnJheSg2NCk7Zm9yKGE9MDthPDE2O2ErKylmW2FdPTA7Zm9yKGE9MDthPDg7YSsrKWZbYV09blthXTtmb3IoO3I+PTY0Oyl7Zm9yKHModSxmLGksZHQpLGE9MDthPDY0O2ErKyl0W2UrYV09dVthXTtmb3Iobz0xLGE9ODthPDE2O2ErKylvPW8rKDI1NSZmW2FdKXwwLGZbYV09MjU1Jm8sbz4+Pj04O3ItPTY0LGUrPTY0fWlmKHI+MClmb3Iocyh1LGYsaSxkdCksYT0wO2E8cjthKyspdFtlK2FdPXVbYV07cmV0dXJuIDB9ZnVuY3Rpb24gZCh0LGUscixuLGkpe3ZhciBvPW5ldyBVaW50OEFycmF5KDMyKTt1KG8sbixpLGR0KTtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkoOCksZj0wO2Y8ODtmKyspYVtmXT1uW2YrMTZdO3JldHVybiBjKHQsZSxyLGEsbyl9ZnVuY3Rpb24gbCh0LGUscixuLGksbyxhKXt2YXIgZj1uZXcgVWludDhBcnJheSgzMik7dShmLG8sYSxkdCk7Zm9yKHZhciBzPW5ldyBVaW50OEFycmF5KDgpLGM9MDtjPDg7YysrKXNbY109b1tjKzE2XTtyZXR1cm4gaCh0LGUscixuLGkscyxmKX1mdW5jdGlvbiBwKHQsZSxyLG4saSxvKXt2YXIgYT1uZXcgbHQobyk7cmV0dXJuIGEudXBkYXRlKHIsbixpKSxhLmZpbmlzaCh0LGUpLDB9ZnVuY3Rpb24gYih0LGUscixuLG8sYSl7dmFyIGY9bmV3IFVpbnQ4QXJyYXkoMTYpO3JldHVybiBwKGYsMCxyLG4sbyxhKSxpKHQsZSxmLDApfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgbztpZihyPDMyKXJldHVybi0xO2ZvcihsKHQsMCxlLDAscixuLGkpLHAodCwxNix0LDMyLHItMzIsdCksbz0wO288MTY7bysrKXRbb109MDtyZXR1cm4gMH1mdW5jdGlvbiB5KHQsZSxyLG4saSl7dmFyIG8sYT1uZXcgVWludDhBcnJheSgzMik7aWYocjwzMilyZXR1cm4tMTtpZihkKGEsMCwzMixuLGkpLDAhPT1iKGUsMTYsZSwzMixyLTMyLGEpKXJldHVybi0xO2ZvcihsKHQsMCxlLDAscixuLGkpLG89MDtvPDMyO28rKyl0W29dPTA7cmV0dXJuIDB9ZnVuY3Rpb24gbSh0LGUpe3ZhciByO2ZvcihyPTA7cjwxNjtyKyspdFtyXT0wfGVbcl19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG49MTtmb3IoZT0wO2U8MTY7ZSsrKXI9dFtlXStuKzY1NTM1LG49TWF0aC5mbG9vcihyLzY1NTM2KSx0W2VdPXItNjU1MzYqbjt0WzBdKz1uLTErMzcqKG4tMSl9ZnVuY3Rpb24gdyh0LGUscil7Zm9yKHZhciBuLGk9fihyLTEpLG89MDtvPDE2O28rKyluPWkmKHRbb11eZVtvXSksdFtvXV49bixlW29dXj1ufWZ1bmN0aW9uIF8odCxlKXt2YXIgcixuLGksbz10dCgpLGE9dHQoKTtmb3Iocj0wO3I8MTY7cisrKWFbcl09ZVtyXTtmb3IoZyhhKSxnKGEpLGcoYSksbj0wO248MjtuKyspe2ZvcihvWzBdPWFbMF0tNjU1MTcscj0xO3I8MTU7cisrKW9bcl09YVtyXS02NTUzNS0ob1tyLTFdPj4xNiYxKSxvW3ItMV0mPTY1NTM1O29bMTVdPWFbMTVdLTMyNzY3LShvWzE0XT4+MTYmMSksaT1vWzE1XT4+MTYmMSxvWzE0XSY9NjU1MzUsdyhhLG8sMS1pKX1mb3Iocj0wO3I8MTY7cisrKXRbMipyXT0yNTUmYVtyXSx0WzIqcisxXT1hW3JdPj44fWZ1bmN0aW9uIE0odCxlKXt2YXIgcj1uZXcgVWludDhBcnJheSgzMiksbj1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIF8ocix0KSxfKG4sZSksbyhyLDAsbiwwKX1mdW5jdGlvbiBTKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gXyhlLHQpLDEmZVswXX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPWVbMipyXSsoZVsyKnIrMV08PDgpO3RbMTVdJj0zMjc2N31mdW5jdGlvbiBBKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0W25dPWVbbl0rcltuXX1mdW5jdGlvbiBrKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0W25dPWVbbl0tcltuXX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLG89MCxhPTAsZj0wLHM9MCx1PTAsaD0wLGM9MCxkPTAsbD0wLHA9MCxiPTAsdj0wLHk9MCxtPTAsZz0wLHc9MCxfPTAsTT0wLFM9MCxFPTAsQT0wLGs9MCx4PTAsST0wLEI9MCxPPTAsUj0wLFA9MCxUPTAsaj0wLEM9MCxOPXJbMF0sTD1yWzFdLFU9clsyXSx6PXJbM10sRD1yWzRdLHE9cls1XSxGPXJbNl0sSz1yWzddLEc9cls4XSxWPXJbOV0sSD1yWzEwXSxYPXJbMTFdLFk9clsxMl0sVz1yWzEzXSxaPXJbMTRdLEo9clsxNV07bj1lWzBdLG8rPW4qTixhKz1uKkwsZis9bipVLHMrPW4qeix1Kz1uKkQsaCs9bipxLGMrPW4qRixkKz1uKkssbCs9bipHLHArPW4qVixiKz1uKkgsdis9bipYLHkrPW4qWSxtKz1uKlcsZys9bipaLHcrPW4qSixuPWVbMV0sYSs9bipOLGYrPW4qTCxzKz1uKlUsdSs9bip6LGgrPW4qRCxjKz1uKnEsZCs9bipGLGwrPW4qSyxwKz1uKkcsYis9bipWLHYrPW4qSCx5Kz1uKlgsbSs9bipZLGcrPW4qVyx3Kz1uKlosXys9bipKLG49ZVsyXSxmKz1uKk4scys9bipMLHUrPW4qVSxoKz1uKnosYys9bipELGQrPW4qcSxsKz1uKkYscCs9bipLLGIrPW4qRyx2Kz1uKlYseSs9bipILG0rPW4qWCxnKz1uKlksdys9bipXLF8rPW4qWixNKz1uKkosbj1lWzNdLHMrPW4qTix1Kz1uKkwsaCs9bipVLGMrPW4qeixkKz1uKkQsbCs9bipxLHArPW4qRixiKz1uKkssdis9bipHLHkrPW4qVixtKz1uKkgsZys9bipYLHcrPW4qWSxfKz1uKlcsTSs9bipaLFMrPW4qSixuPWVbNF0sdSs9bipOLGgrPW4qTCxjKz1uKlUsZCs9bip6LGwrPW4qRCxwKz1uKnEsYis9bipGLHYrPW4qSyx5Kz1uKkcsbSs9bipWLGcrPW4qSCx3Kz1uKlgsXys9bipZLE0rPW4qVyxTKz1uKlosRSs9bipKLG49ZVs1XSxoKz1uKk4sYys9bipMLGQrPW4qVSxsKz1uKnoscCs9bipELGIrPW4qcSx2Kz1uKkYseSs9bipLLG0rPW4qRyxnKz1uKlYsdys9bipILF8rPW4qWCxNKz1uKlksUys9bipXLEUrPW4qWixBKz1uKkosbj1lWzZdLGMrPW4qTixkKz1uKkwsbCs9bipVLHArPW4qeixiKz1uKkQsdis9bipxLHkrPW4qRixtKz1uKkssZys9bipHLHcrPW4qVixfKz1uKkgsTSs9bipYLFMrPW4qWSxFKz1uKlcsQSs9bipaLGsrPW4qSixuPWVbN10sZCs9bipOLGwrPW4qTCxwKz1uKlUsYis9bip6LHYrPW4qRCx5Kz1uKnEsbSs9bipGLGcrPW4qSyx3Kz1uKkcsXys9bipWLE0rPW4qSCxTKz1uKlgsRSs9bipZLEErPW4qVyxrKz1uKloseCs9bipKLG49ZVs4XSxsKz1uKk4scCs9bipMLGIrPW4qVSx2Kz1uKnoseSs9bipELG0rPW4qcSxnKz1uKkYsdys9bipLLF8rPW4qRyxNKz1uKlYsUys9bipILEUrPW4qWCxBKz1uKlksays9bipXLHgrPW4qWixJKz1uKkosbj1lWzldLHArPW4qTixiKz1uKkwsdis9bipVLHkrPW4qeixtKz1uKkQsZys9bipxLHcrPW4qRixfKz1uKkssTSs9bipHLFMrPW4qVixFKz1uKkgsQSs9bipYLGsrPW4qWSx4Kz1uKlcsSSs9bipaLEIrPW4qSixuPWVbMTBdLGIrPW4qTix2Kz1uKkwseSs9bipVLG0rPW4qeixnKz1uKkQsdys9bipxLF8rPW4qRixNKz1uKkssUys9bipHLEUrPW4qVixBKz1uKkgsays9bipYLHgrPW4qWSxJKz1uKlcsQis9bipaLE8rPW4qSixuPWVbMTFdLHYrPW4qTix5Kz1uKkwsbSs9bipVLGcrPW4qeix3Kz1uKkQsXys9bipxLE0rPW4qRixTKz1uKkssRSs9bipHLEErPW4qVixrKz1uKkgseCs9bipYO0krPW4qWTtCKz1uKlcsTys9bipaLFIrPW4qSixuPWVbMTJdLHkrPW4qTixtKz1uKkwsZys9bipVLHcrPW4qeixfKz1uKkQsTSs9bipxLFMrPW4qRixFKz1uKkssQSs9bipHLGsrPW4qVix4Kz1uKkgsSSs9bipYLEIrPW4qWSxPKz1uKlcsUis9bipaLFArPW4qSixuPWVbMTNdLG0rPW4qTixnKz1uKkwsdys9bipVLF8rPW4qeixNKz1uKkQsUys9bipxLEUrPW4qRixBKz1uKkssays9bipHLHgrPW4qVixJKz1uKkgsQis9bipYLE8rPW4qWSxSKz1uKlcsUCs9bipaLFQrPW4qSixuPWVbMTRdLGcrPW4qTix3Kz1uKkwsXys9bipVLE0rPW4qeixTKz1uKkQsRSs9bipxLEErPW4qRixrKz1uKksseCs9bipHLEkrPW4qVixCKz1uKkgsTys9bipYLFIrPW4qWSxQKz1uKlcsVCs9bipaLGorPW4qSixuPWVbMTVdLHcrPW4qTixfKz1uKkwsTSs9bipVLFMrPW4qeixFKz1uKkQsQSs9bipxLGsrPW4qRix4Kz1uKkssSSs9bipHLEIrPW4qVixPKz1uKkgsUis9bipYLFArPW4qWSxUKz1uKlcsais9bipaLEMrPW4qSixvKz0zOCpfLGErPTM4Kk0sZis9MzgqUyxzKz0zOCpFLHUrPTM4KkEsaCs9MzgqayxjKz0zOCp4LGQrPTM4KkksbCs9MzgqQixwKz0zOCpPLGIrPTM4KlIsdis9MzgqUCx5Kz0zOCpULG0rPTM4KmosZys9MzgqQyxpPTEsbj1vK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG89bi02NTUzNippLG49YStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxhPW4tNjU1MzYqaSxuPWYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZj1uLTY1NTM2Kmksbj1zK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHM9bi02NTUzNippLG49dStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx1PW4tNjU1MzYqaSxuPWgraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksaD1uLTY1NTM2Kmksbj1jK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGM9bi02NTUzNippLG49ZCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxkPW4tNjU1MzYqaSxuPWwraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbD1uLTY1NTM2Kmksbj1wK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHA9bi02NTUzNippLG49YitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxiPW4tNjU1MzYqaSxuPXYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdj1uLTY1NTM2Kmksbj15K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHk9bi02NTUzNippLG49bStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxtPW4tNjU1MzYqaSxuPWcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZz1uLTY1NTM2Kmksbj13K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHc9bi02NTUzNippLG8rPWktMSszNyooaS0xKSxpPTEsbj1vK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG89bi02NTUzNippLG49YStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxhPW4tNjU1MzYqaSxuPWYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZj1uLTY1NTM2Kmksbj1zK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHM9bi02NTUzNippLG49dStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx1PW4tNjU1MzYqaSxuPWgraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksaD1uLTY1NTM2Kmksbj1jK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGM9bi02NTUzNippLG49ZCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxkPW4tNjU1MzYqaSxuPWwraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbD1uLTY1NTM2Kmksbj1wK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHA9bi02NTUzNippLG49YitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxiPW4tNjU1MzYqaSxuPXYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdj1uLTY1NTM2Kmksbj15K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHk9bi02NTUzNippLG49bStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxtPW4tNjU1MzYqaSxuPWcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZz1uLTY1NTM2Kmksbj13K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHc9bi02NTUzNippLG8rPWktMSszNyooaS0xKSx0WzBdPW8sdFsxXT1hLHRbMl09Zix0WzNdPXMsdFs0XT11LHRbNV09aCx0WzZdPWMsdFs3XT1kLHRbOF09bCx0WzldPXAsdFsxMF09Yix0WzExXT12LHRbMTJdPXksdFsxM109bTt0WzE0XT1nO3RbMTVdPXd9ZnVuY3Rpb24gSSh0LGUpe3godCxlLGUpfWZ1bmN0aW9uIEIodCxlKXt2YXIgcixuPXR0KCk7Zm9yKHI9MDtyPDE2O3IrKyluW3JdPWVbcl07Zm9yKHI9MjUzO3I+PTA7ci0tKUkobixuKSwyIT09ciYmNCE9PXImJngobixuLGUpO2ZvcihyPTA7cjwxNjtyKyspdFtyXT1uW3JdfWZ1bmN0aW9uIE8odCxlKXt2YXIgcixuPXR0KCk7Zm9yKHI9MDtyPDE2O3IrKyluW3JdPWVbcl07Zm9yKHI9MjUwO3I+PTA7ci0tKUkobixuKSwxIT09ciYmeChuLG4sZSk7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPW5bcl19ZnVuY3Rpb24gUih0LGUscil7dmFyIG4saSxvPW5ldyBVaW50OEFycmF5KDMyKSxhPW5ldyBGbG9hdDY0QXJyYXkoODApLGY9dHQoKSxzPXR0KCksdT10dCgpLGg9dHQoKSxjPXR0KCksZD10dCgpO2ZvcihpPTA7aTwzMTtpKyspb1tpXT1lW2ldO2ZvcihvWzMxXT0xMjcmZVszMV18NjQsb1swXSY9MjQ4LEUoYSxyKSxpPTA7aTwxNjtpKyspc1tpXT1hW2ldLGhbaV09ZltpXT11W2ldPTA7Zm9yKGZbMF09aFswXT0xLGk9MjU0O2k+PTA7LS1pKW49b1tpPj4+M10+Pj4oNyZpKSYxLHcoZixzLG4pLHcodSxoLG4pLEEoYyxmLHUpLGsoZixmLHUpLEEodSxzLGgpLGsocyxzLGgpLEkoaCxjKSxJKGQsZikseChmLHUsZikseCh1LHMsYyksQShjLGYsdSksayhmLGYsdSksSShzLGYpLGsodSxoLGQpLHgoZix1LGF0KSxBKGYsZixoKSx4KHUsdSxmKSx4KGYsaCxkKSx4KGgscyxhKSxJKHMsYyksdyhmLHMsbiksdyh1LGgsbik7Zm9yKGk9MDtpPDE2O2krKylhW2krMTZdPWZbaV0sYVtpKzMyXT11W2ldLGFbaSs0OF09c1tpXSxhW2krNjRdPWhbaV07dmFyIGw9YS5zdWJhcnJheSgzMikscD1hLnN1YmFycmF5KDE2KTtyZXR1cm4gQihsLGwpLHgocCxwLGwpLF8odCxwKSwwfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gUih0LGUsbnQpfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gZXQoZSwzMiksUCh0LGUpfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gUihuLHIsZSksdSh0LHJ0LG4sZHQpfWZ1bmN0aW9uIEModCxlLHIsbixpLG8pe3ZhciBhPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gaihhLGksbykscHQodCxlLHIsbixhKX1mdW5jdGlvbiBOKHQsZSxyLG4saSxvKXt2YXIgYT1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIGooYSxpLG8pLGJ0KHQsZSxyLG4sYSl9ZnVuY3Rpb24gTCh0LGUscixuKXtmb3IodmFyIGksbyxhLGYscyx1LGgsYyxkLGwscCxiLHYseSxtLGcsdyxfLE0sUyxFLEEsayx4LEksQixPPW5ldyBJbnQzMkFycmF5KDE2KSxSPW5ldyBJbnQzMkFycmF5KDE2KSxQPXRbMF0sVD10WzFdLGo9dFsyXSxDPXRbM10sTj10WzRdLEw9dFs1XSxVPXRbNl0sej10WzddLEQ9ZVswXSxxPWVbMV0sRj1lWzJdLEs9ZVszXSxHPWVbNF0sVj1lWzVdLEg9ZVs2XSxYPWVbN10sWT0wO24+PTEyODspe2ZvcihNPTA7TTwxNjtNKyspUz04Kk0rWSxPW01dPXJbUyswXTw8MjR8cltTKzFdPDwxNnxyW1MrMl08PDh8cltTKzNdLFJbTV09cltTKzRdPDwyNHxyW1MrNV08PDE2fHJbUys2XTw8OHxyW1MrN107Zm9yKE09MDtNPDgwO00rKylpZihpPVAsbz1ULGE9aixmPUMscz1OLHU9TCxoPVUsYz16LGQ9RCxsPXEscD1GLGI9Syx2PUcseT1WLG09SCxnPVgsRT16LEE9WCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9KE4+Pj4xNHxHPDwxOCleKE4+Pj4xOHxHPDwxNCleKEc+Pj45fE48PDIzKSxBPShHPj4+MTR8Tjw8MTgpXihHPj4+MTh8Tjw8MTQpXihOPj4+OXxHPDwyMyksays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsRT1OJkxefk4mVSxBPUcmVl5+RyZILGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9dnRbMipNXSxBPXZ0WzIqTSsxXSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPU9bTSUxNl0sQT1SW00lMTZdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHc9NjU1MzUmSXxCPDwxNixfPTY1NTM1Jmt8eDw8MTYsRT13LEE9XyxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9KFA+Pj4yOHxEPDw0KV4oRD4+PjJ8UDw8MzApXihEPj4+N3xQPDwyNSksQT0oRD4+PjI4fFA8PDQpXihQPj4+MnxEPDwzMCleKFA+Pj43fEQ8PDI1KSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPVAmVF5QJmpeVCZqLEE9RCZxXkQmRl5xJkYsays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsYz02NTUzNSZJfEI8PDE2LGc9NjU1MzUma3x4PDwxNixFPWYsQT1iLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT13LEE9XyxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNixmPTY1NTM1Jkl8Qjw8MTYsYj02NTUzNSZrfHg8PDE2LFQ9aSxqPW8sQz1hLE49ZixMPXMsVT11LHo9aCxQPWMscT1kLEY9bCxLPXAsRz1iLFY9dixIPXksWD1tLEQ9ZyxNJTE2PT09MTUpZm9yKFM9MDtTPDE2O1MrKylFPU9bU10sQT1SW1NdLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT1PWyhTKzkpJTE2XSxBPVJbKFMrOSklMTZdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHc9T1soUysxKSUxNl0sXz1SWyhTKzEpJTE2XSxFPSh3Pj4+MXxfPDwzMSleKHc+Pj44fF88PDI0KV53Pj4+NyxBPShfPj4+MXx3PDwzMSleKF8+Pj44fHc8PDI0KV4oXz4+Pjd8dzw8MjUpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHc9T1soUysxNCklMTZdLF89UlsoUysxNCklMTZdLEU9KHc+Pj4xOXxfPDwxMyleKF8+Pj4yOXx3PDwzKV53Pj4+NixBPShfPj4+MTl8dzw8MTMpXih3Pj4+Mjl8Xzw8MyleKF8+Pj42fHc8PDI2KSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNixPW1NdPTY1NTM1Jkl8Qjw8MTYsUltTXT02NTUzNSZrfHg8PDE2O0U9UCxBPUQsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbMF0sQT1lWzBdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbMF09UD02NTUzNSZJfEI8PDE2LGVbMF09RD02NTUzNSZrfHg8PDE2LEU9VCxBPXEsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbMV0sQT1lWzFdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbMV09VD02NTUzNSZJfEI8PDE2LGVbMV09cT02NTUzNSZrfHg8PDE2LEU9aixBPUYsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbMl0sQT1lWzJdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbMl09aj02NTUzNSZJfEI8PDE2LGVbMl09Rj02NTUzNSZrfHg8PDE2LEU9QyxBPUssaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbM10sQT1lWzNdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbM109Qz02NTUzNSZJfEI8PDE2LGVbM109Sz02NTUzNSZrfHg8PDE2LEU9TixBPUcsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbNF0sQT1lWzRdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbNF09Tj02NTUzNSZJfEI8PDE2LGVbNF09Rz02NTUzNSZrfHg8PDE2LEU9TCxBPVYsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbNV0sQT1lWzVdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbNV09TD02NTUzNSZJfEI8PDE2LGVbNV09Vj02NTUzNSZrfHg8PDE2LEU9VSxBPUgsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbNl0sQT1lWzZdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbNl09VT02NTUzNSZJfEI8PDE2LGVbNl09SD02NTUzNSZrfHg8PDE2LEU9eixBPVgsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbN10sQT1lWzddLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbN109ej02NTUzNSZJfEI8PDE2LGVbN109WD02NTUzNSZrfHg8PDE2LFkrPTEyOCxuLT0xMjh9cmV0dXJuIG59ZnVuY3Rpb24gVSh0LHIsbil7dmFyIGksbz1uZXcgSW50MzJBcnJheSg4KSxhPW5ldyBJbnQzMkFycmF5KDgpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxzPW47Zm9yKG9bMF09MTc3OTAzMzcwMyxvWzFdPTMxNDQxMzQyNzcsb1syXT0xMDEzOTA0MjQyLG9bM109Mjc3MzQ4MDc2MixvWzRdPTEzNTk4OTMxMTksb1s1XT0yNjAwODIyOTI0LG9bNl09NTI4NzM0NjM1LG9bN109MTU0MTQ1OTIyNSxhWzBdPTQwODkyMzU3MjAsYVsxXT0yMjI3ODczNTk1LGFbMl09NDI3MTE3NTcyMyxhWzNdPTE1OTU3NTAxMjksYVs0XT0yOTE3NTY1MTM3LGFbNV09NzI1NTExMTk5LGFbNl09NDIxNTM4OTU0NyxhWzddPTMyNzAzMzIwOSxMKG8sYSxyLG4pLG4lPTEyOCxpPTA7aTxuO2krKylmW2ldPXJbcy1uK2ldO2ZvcihmW25dPTEyOCxuPTI1Ni0xMjgqKG48MTEyPzE6MCksZltuLTldPTAsZShmLG4tOCxzLzUzNjg3MDkxMnwwLHM8PDMpLEwobyxhLGYsbiksaT0wO2k8ODtpKyspZSh0LDgqaSxvW2ldLGFbaV0pO3JldHVybiAwfWZ1bmN0aW9uIHoodCxlKXt2YXIgcj10dCgpLG49dHQoKSxpPXR0KCksbz10dCgpLGE9dHQoKSxmPXR0KCkscz10dCgpLHU9dHQoKSxoPXR0KCk7ayhyLHRbMV0sdFswXSksayhoLGVbMV0sZVswXSkseChyLHIsaCksQShuLHRbMF0sdFsxXSksQShoLGVbMF0sZVsxXSkseChuLG4saCkseChpLHRbM10sZVszXSkseChpLGksc3QpLHgobyx0WzJdLGVbMl0pLEEobyxvLG8pLGsoYSxuLHIpLGsoZixvLGkpLEEocyxvLGkpLEEodSxuLHIpLHgodFswXSxhLGYpLHgodFsxXSx1LHMpLHgodFsyXSxzLGYpLHgodFszXSxhLHUpfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuO2ZvcihuPTA7bjw0O24rKyl3KHRbbl0sZVtuXSxyKX1mdW5jdGlvbiBxKHQsZSl7dmFyIHI9dHQoKSxuPXR0KCksaT10dCgpO0IoaSxlWzJdKSx4KHIsZVswXSxpKSx4KG4sZVsxXSxpKSxfKHQsbiksdFszMV1ePVMocik8PDd9ZnVuY3Rpb24gRih0LGUscil7dmFyIG4saTtmb3IobSh0WzBdLGl0KSxtKHRbMV0sb3QpLG0odFsyXSxvdCksbSh0WzNdLGl0KSxpPTI1NTtpPj0wOy0taSluPXJbaS84fDBdPj4oNyZpKSYxLEQodCxlLG4pLHooZSx0KSx6KHQsdCksRCh0LGUsbil9ZnVuY3Rpb24gSyh0LGUpe3ZhciByPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtcbm0oclswXSx1dCksbShyWzFdLGh0KSxtKHJbMl0sb3QpLHgoclszXSx1dCxodCksRih0LHIsZSl9ZnVuY3Rpb24gRyh0LGUscil7dmFyIG4saT1uZXcgVWludDhBcnJheSg2NCksbz1bdHQoKSx0dCgpLHR0KCksdHQoKV07Zm9yKHJ8fGV0KGUsMzIpLFUoaSxlLDMyKSxpWzBdJj0yNDgsaVszMV0mPTEyNyxpWzMxXXw9NjQsSyhvLGkpLHEodCxvKSxuPTA7bjwzMjtuKyspZVtuKzMyXT10W25dO3JldHVybiAwfWZ1bmN0aW9uIFYodCxlKXt2YXIgcixuLGksbztmb3Iobj02MztuPj0zMjstLW4pe2ZvcihyPTAsaT1uLTMyLG89bi0xMjtpPG87KytpKWVbaV0rPXItMTYqZVtuXSp5dFtpLShuLTMyKV0scj1lW2ldKzEyOD4+OCxlW2ldLT0yNTYqcjtlW2ldKz1yLGVbbl09MH1mb3Iocj0wLGk9MDtpPDMyO2krKyllW2ldKz1yLShlWzMxXT4+NCkqeXRbaV0scj1lW2ldPj44LGVbaV0mPTI1NTtmb3IoaT0wO2k8MzI7aSsrKWVbaV0tPXIqeXRbaV07Zm9yKG49MDtuPDMyO24rKyllW24rMV0rPWVbbl0+PjgsdFtuXT0yNTUmZVtuXX1mdW5jdGlvbiBIKHQpe3ZhciBlLHI9bmV3IEZsb2F0NjRBcnJheSg2NCk7Zm9yKGU9MDtlPDY0O2UrKylyW2VdPXRbZV07Zm9yKGU9MDtlPDY0O2UrKyl0W2VdPTA7Vih0LHIpfWZ1bmN0aW9uIFgodCxlLHIsbil7dmFyIGksbyxhPW5ldyBVaW50OEFycmF5KDY0KSxmPW5ldyBVaW50OEFycmF5KDY0KSxzPW5ldyBVaW50OEFycmF5KDY0KSx1PW5ldyBGbG9hdDY0QXJyYXkoNjQpLGg9W3R0KCksdHQoKSx0dCgpLHR0KCldO1UoYSxuLDMyKSxhWzBdJj0yNDgsYVszMV0mPTEyNyxhWzMxXXw9NjQ7dmFyIGM9cis2NDtmb3IoaT0wO2k8cjtpKyspdFs2NCtpXT1lW2ldO2ZvcihpPTA7aTwzMjtpKyspdFszMitpXT1hWzMyK2ldO2ZvcihVKHMsdC5zdWJhcnJheSgzMiksciszMiksSChzKSxLKGgscykscSh0LGgpLGk9MzI7aTw2NDtpKyspdFtpXT1uW2ldO2ZvcihVKGYsdCxyKzY0KSxIKGYpLGk9MDtpPDY0O2krKyl1W2ldPTA7Zm9yKGk9MDtpPDMyO2krKyl1W2ldPXNbaV07Zm9yKGk9MDtpPDMyO2krKylmb3Iobz0wO288MzI7bysrKXVbaStvXSs9ZltpXSphW29dO3JldHVybiBWKHQuc3ViYXJyYXkoMzIpLHUpLGN9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPXR0KCksbj10dCgpLGk9dHQoKSxvPXR0KCksYT10dCgpLGY9dHQoKSxzPXR0KCk7cmV0dXJuIG0odFsyXSxvdCksRSh0WzFdLGUpLEkoaSx0WzFdKSx4KG8saSxmdCksayhpLGksdFsyXSksQShvLHRbMl0sbyksSShhLG8pLEkoZixhKSx4KHMsZixhKSx4KHIscyxpKSx4KHIscixvKSxPKHIscikseChyLHIsaSkseChyLHIsbykseChyLHIsbykseCh0WzBdLHIsbyksSShuLHRbMF0pLHgobixuLG8pLE0obixpKSYmeCh0WzBdLHRbMF0sY3QpLEkobix0WzBdKSx4KG4sbixvKSxNKG4saSk/LTE6KFModFswXSk9PT1lWzMxXT4+NyYmayh0WzBdLGl0LHRbMF0pLHgodFszXSx0WzBdLHRbMV0pLDApfWZ1bmN0aW9uIFcodCxlLHIsbil7dmFyIGksYSxmPW5ldyBVaW50OEFycmF5KDMyKSxzPW5ldyBVaW50OEFycmF5KDY0KSx1PVt0dCgpLHR0KCksdHQoKSx0dCgpXSxoPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtpZihhPS0xLHI8NjQpcmV0dXJuLTE7aWYoWShoLG4pKXJldHVybi0xO2ZvcihpPTA7aTxyO2krKyl0W2ldPWVbaV07Zm9yKGk9MDtpPDMyO2krKyl0W2krMzJdPW5baV07aWYoVShzLHQsciksSChzKSxGKHUsaCxzKSxLKGgsZS5zdWJhcnJheSgzMikpLHoodSxoKSxxKGYsdSksci09NjQsbyhlLDAsZiwwKSl7Zm9yKGk9MDtpPHI7aSsrKXRbaV09MDtyZXR1cm4tMX1mb3IoaT0wO2k8cjtpKyspdFtpXT1lW2krNjRdO3JldHVybiBhPXJ9ZnVuY3Rpb24gWih0LGUpe2lmKHQubGVuZ3RoIT09bXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIGtleSBzaXplXCIpO2lmKGUubGVuZ3RoIT09Z3QpdGhyb3cgbmV3IEVycm9yKFwiYmFkIG5vbmNlIHNpemVcIil9ZnVuY3Rpb24gSih0LGUpe2lmKHQubGVuZ3RoIT09RXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHB1YmxpYyBrZXkgc2l6ZVwiKTtpZihlLmxlbmd0aCE9PUF0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIil9ZnVuY3Rpb24gJCgpe3ZhciB0LGU7Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKWlmKFwiW29iamVjdCBVaW50OEFycmF5XVwiIT09KHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1tlXSkpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bmV4cGVjdGVkIHR5cGUgXCIrdCtcIiwgdXNlIFVpbnQ4QXJyYXlcIil9ZnVuY3Rpb24gUSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPTB9dmFyIHR0PWZ1bmN0aW9uKHQpe3ZhciBlLHI9bmV3IEZsb2F0NjRBcnJheSgxNik7aWYodClmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXJbZV09dFtlXTtyZXR1cm4gcn0sZXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJubyBQUk5HXCIpfSxydD1uZXcgVWludDhBcnJheSgxNiksbnQ9bmV3IFVpbnQ4QXJyYXkoMzIpO250WzBdPTk7dmFyIGl0PXR0KCksb3Q9dHQoWzFdKSxhdD10dChbNTYxMjksMV0pLGZ0PXR0KFszMDg4Myw0OTUzLDE5OTE0LDMwMTg3LDU1NDY3LDE2NzA1LDI2MzcsMTEyLDU5NTQ0LDMwNTg1LDE2NTA1LDM2MDM5LDY1MTM5LDExMTE5LDI3ODg2LDIwOTk1XSksc3Q9dHQoWzYxNzg1LDk5MDYsMzk4MjgsNjAzNzQsNDUzOTgsMzM0MTEsNTI3NCwyMjQsNTM1NTIsNjExNzEsMzMwMTAsNjU0Miw2NDc0MywyMjIzOSw1NTc3Miw5MjIyXSksdXQ9dHQoWzU0NTU0LDM2NjQ1LDExNjE2LDUxNTQyLDQyOTMwLDM4MTgxLDUxMDQwLDI2OTI0LDU2NDEyLDY0OTgyLDU3OTA1LDQ5MzE2LDIxNTAyLDUyNTkwLDE0MDM1LDg1NTNdKSxodD10dChbMjYyMDAsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTRdKSxjdD10dChbNDExMzYsMTg5NTgsNjk1MSw1MDQxNCw1ODQ4OCw0NDMzNSw2MTUwLDEyMDk5LDU1MjA3LDE1ODY3LDE1MywxMTA4NSw1NzA5OSwyMDQxNyw5MzQ0LDExMTM5XSksZHQ9bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMjAsMTEyLDk3LDExMCwxMDAsMzIsNTEsNTAsNDUsOTgsMTIxLDExNiwxMDEsMzIsMTA3XSksbHQ9ZnVuY3Rpb24odCl7dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMucj1uZXcgVWludDE2QXJyYXkoMTApLHRoaXMuaD1uZXcgVWludDE2QXJyYXkoMTApLHRoaXMucGFkPW5ldyBVaW50MTZBcnJheSg4KSx0aGlzLmxlZnRvdmVyPTAsdGhpcy5maW49MDt2YXIgZSxyLG4saSxvLGEsZixzO2U9MjU1JnRbMF18KDI1NSZ0WzFdKTw8OCx0aGlzLnJbMF09ODE5MSZlLHI9MjU1JnRbMl18KDI1NSZ0WzNdKTw8OCx0aGlzLnJbMV09ODE5MSYoZT4+PjEzfHI8PDMpLG49MjU1JnRbNF18KDI1NSZ0WzVdKTw8OCx0aGlzLnJbMl09NzkzOSYocj4+PjEwfG48PDYpLGk9MjU1JnRbNl18KDI1NSZ0WzddKTw8OCx0aGlzLnJbM109ODE5MSYobj4+Pjd8aTw8OSksbz0yNTUmdFs4XXwoMjU1JnRbOV0pPDw4LHRoaXMucls0XT0yNTUmKGk+Pj40fG88PDEyKSx0aGlzLnJbNV09bz4+PjEmODE5MCxhPTI1NSZ0WzEwXXwoMjU1JnRbMTFdKTw8OCx0aGlzLnJbNl09ODE5MSYobz4+PjE0fGE8PDIpLGY9MjU1JnRbMTJdfCgyNTUmdFsxM10pPDw4LHRoaXMucls3XT04MDY1JihhPj4+MTF8Zjw8NSkscz0yNTUmdFsxNF18KDI1NSZ0WzE1XSk8PDgsdGhpcy5yWzhdPTgxOTEmKGY+Pj44fHM8PDgpLHRoaXMucls5XT1zPj4+NSYxMjcsdGhpcy5wYWRbMF09MjU1JnRbMTZdfCgyNTUmdFsxN10pPDw4LHRoaXMucGFkWzFdPTI1NSZ0WzE4XXwoMjU1JnRbMTldKTw8OCx0aGlzLnBhZFsyXT0yNTUmdFsyMF18KDI1NSZ0WzIxXSk8PDgsdGhpcy5wYWRbM109MjU1JnRbMjJdfCgyNTUmdFsyM10pPDw4LHRoaXMucGFkWzRdPTI1NSZ0WzI0XXwoMjU1JnRbMjVdKTw8OCx0aGlzLnBhZFs1XT0yNTUmdFsyNl18KDI1NSZ0WzI3XSk8PDgsdGhpcy5wYWRbNl09MjU1JnRbMjhdfCgyNTUmdFsyOV0pPDw4LHRoaXMucGFkWzddPTI1NSZ0WzMwXXwoMjU1JnRbMzFdKTw8OH07bHQucHJvdG90eXBlLmJsb2Nrcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksbyxhLGYscyx1LGgsYyxkLGwscCxiLHYseSxtLGcsdyxfLE09dGhpcy5maW4/MDoyMDQ4LFM9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLEE9dGhpcy5oWzJdLGs9dGhpcy5oWzNdLHg9dGhpcy5oWzRdLEk9dGhpcy5oWzVdLEI9dGhpcy5oWzZdLE89dGhpcy5oWzddLFI9dGhpcy5oWzhdLFA9dGhpcy5oWzldLFQ9dGhpcy5yWzBdLGo9dGhpcy5yWzFdLEM9dGhpcy5yWzJdLE49dGhpcy5yWzNdLEw9dGhpcy5yWzRdLFU9dGhpcy5yWzVdLHo9dGhpcy5yWzZdLEQ9dGhpcy5yWzddLHE9dGhpcy5yWzhdLEY9dGhpcy5yWzldO3I+PTE2OyluPTI1NSZ0W2UrMF18KDI1NSZ0W2UrMV0pPDw4LFMrPTgxOTEmbixpPTI1NSZ0W2UrMl18KDI1NSZ0W2UrM10pPDw4LEUrPTgxOTEmKG4+Pj4xM3xpPDwzKSxvPTI1NSZ0W2UrNF18KDI1NSZ0W2UrNV0pPDw4LEErPTgxOTEmKGk+Pj4xMHxvPDw2KSxhPTI1NSZ0W2UrNl18KDI1NSZ0W2UrN10pPDw4LGsrPTgxOTEmKG8+Pj43fGE8PDkpLGY9MjU1JnRbZSs4XXwoMjU1JnRbZSs5XSk8PDgseCs9ODE5MSYoYT4+PjR8Zjw8MTIpLEkrPWY+Pj4xJjgxOTEscz0yNTUmdFtlKzEwXXwoMjU1JnRbZSsxMV0pPDw4LEIrPTgxOTEmKGY+Pj4xNHxzPDwyKSx1PTI1NSZ0W2UrMTJdfCgyNTUmdFtlKzEzXSk8PDgsTys9ODE5MSYocz4+PjExfHU8PDUpLGg9MjU1JnRbZSsxNF18KDI1NSZ0W2UrMTVdKTw8OCxSKz04MTkxJih1Pj4+OHxoPDw4KSxQKz1oPj4+NXxNLGM9MCxkPWMsZCs9UypULGQrPUUqKDUqRiksZCs9QSooNSpxKSxkKz1rKig1KkQpLGQrPXgqKDUqeiksYz1kPj4+MTMsZCY9ODE5MSxkKz1JKig1KlUpLGQrPUIqKDUqTCksZCs9TyooNSpOKSxkKz1SKig1KkMpLGQrPVAqKDUqaiksYys9ZD4+PjEzLGQmPTgxOTEsbD1jLGwrPVMqaixsKz1FKlQsbCs9QSooNSpGKSxsKz1rKig1KnEpLGwrPXgqKDUqRCksYz1sPj4+MTMsbCY9ODE5MSxsKz1JKig1KnopLGwrPUIqKDUqVSksbCs9TyooNSpMKSxsKz1SKig1Kk4pLGwrPVAqKDUqQyksYys9bD4+PjEzLGwmPTgxOTEscD1jLHArPVMqQyxwKz1FKmoscCs9QSpULHArPWsqKDUqRikscCs9eCooNSpxKSxjPXA+Pj4xMyxwJj04MTkxLHArPUkqKDUqRCkscCs9QiooNSp6KSxwKz1PKig1KlUpLHArPVIqKDUqTCkscCs9UCooNSpOKSxjKz1wPj4+MTMscCY9ODE5MSxiPWMsYis9UypOLGIrPUUqQyxiKz1BKmosYis9aypULGIrPXgqKDUqRiksYz1iPj4+MTMsYiY9ODE5MSxiKz1JKig1KnEpLGIrPUIqKDUqRCksYis9TyooNSp6KSxiKz1SKig1KlUpLGIrPVAqKDUqTCksYys9Yj4+PjEzLGImPTgxOTEsdj1jLHYrPVMqTCx2Kz1FKk4sdis9QSpDLHYrPWsqaix2Kz14KlQsYz12Pj4+MTMsdiY9ODE5MSx2Kz1JKig1KkYpLHYrPUIqKDUqcSksdis9TyooNSpEKSx2Kz1SKig1KnopLHYrPVAqKDUqVSksYys9dj4+PjEzLHYmPTgxOTEseT1jLHkrPVMqVSx5Kz1FKkwseSs9QSpOLHkrPWsqQyx5Kz14KmosYz15Pj4+MTMseSY9ODE5MSx5Kz1JKlQseSs9QiooNSpGKSx5Kz1PKig1KnEpLHkrPVIqKDUqRCkseSs9UCooNSp6KSxjKz15Pj4+MTMseSY9ODE5MSxtPWMsbSs9Uyp6LG0rPUUqVSxtKz1BKkwsbSs9aypOLG0rPXgqQyxjPW0+Pj4xMyxtJj04MTkxLG0rPUkqaixtKz1CKlQsbSs9TyooNSpGKSxtKz1SKig1KnEpLG0rPVAqKDUqRCksYys9bT4+PjEzLG0mPTgxOTEsZz1jLGcrPVMqRCxnKz1FKnosZys9QSpVLGcrPWsqTCxnKz14Kk4sYz1nPj4+MTMsZyY9ODE5MSxnKz1JKkMsZys9QipqLGcrPU8qVCxnKz1SKig1KkYpLGcrPVAqKDUqcSksYys9Zz4+PjEzLGcmPTgxOTEsdz1jLHcrPVMqcSx3Kz1FKkQsdys9QSp6LHcrPWsqVSx3Kz14KkwsYz13Pj4+MTMsdyY9ODE5MSx3Kz1JKk4sdys9QipDLHcrPU8qaix3Kz1SKlQsdys9UCooNSpGKSxjKz13Pj4+MTMsdyY9ODE5MSxfPWMsXys9UypGLF8rPUUqcSxfKz1BKkQsXys9ayp6LF8rPXgqVSxjPV8+Pj4xMyxfJj04MTkxLF8rPUkqTCxfKz1CKk4sXys9TypDLF8rPVIqaixfKz1QKlQsYys9Xz4+PjEzLF8mPTgxOTEsYz0oYzw8MikrY3wwLGM9YytkfDAsZD04MTkxJmMsYz4+Pj0xMyxsKz1jLFM9ZCxFPWwsQT1wLGs9Yix4PXYsST15LEI9bSxPPWcsUj13LFA9XyxlKz0xNixyLT0xNjt0aGlzLmhbMF09Uyx0aGlzLmhbMV09RSx0aGlzLmhbMl09QSx0aGlzLmhbM109ayx0aGlzLmhbNF09eCx0aGlzLmhbNV09SSx0aGlzLmhbNl09Qix0aGlzLmhbN109Tyx0aGlzLmhbOF09Uix0aGlzLmhbOV09UH0sbHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvLGE9bmV3IFVpbnQxNkFycmF5KDEwKTtpZih0aGlzLmxlZnRvdmVyKXtmb3Iobz10aGlzLmxlZnRvdmVyLHRoaXMuYnVmZmVyW28rK109MTtvPDE2O28rKyl0aGlzLmJ1ZmZlcltvXT0wO3RoaXMuZmluPTEsdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsMCwxNil9Zm9yKHI9dGhpcy5oWzFdPj4+MTMsdGhpcy5oWzFdJj04MTkxLG89MjtvPDEwO28rKyl0aGlzLmhbb10rPXIscj10aGlzLmhbb10+Pj4xMyx0aGlzLmhbb10mPTgxOTE7Zm9yKHRoaXMuaFswXSs9NSpyLHI9dGhpcy5oWzBdPj4+MTMsdGhpcy5oWzBdJj04MTkxLHRoaXMuaFsxXSs9cixyPXRoaXMuaFsxXT4+PjEzLHRoaXMuaFsxXSY9ODE5MSx0aGlzLmhbMl0rPXIsYVswXT10aGlzLmhbMF0rNSxyPWFbMF0+Pj4xMyxhWzBdJj04MTkxLG89MTtvPDEwO28rKylhW29dPXRoaXMuaFtvXStyLHI9YVtvXT4+PjEzLGFbb10mPTgxOTE7Zm9yKGFbOV0tPTgxOTIsbj0oMV5yKS0xLG89MDtvPDEwO28rKylhW29dJj1uO2ZvcihuPX5uLG89MDtvPDEwO28rKyl0aGlzLmhbb109dGhpcy5oW29dJm58YVtvXTtmb3IodGhpcy5oWzBdPTY1NTM1Jih0aGlzLmhbMF18dGhpcy5oWzFdPDwxMyksdGhpcy5oWzFdPTY1NTM1Jih0aGlzLmhbMV0+Pj4zfHRoaXMuaFsyXTw8MTApLHRoaXMuaFsyXT02NTUzNSYodGhpcy5oWzJdPj4+Nnx0aGlzLmhbM108PDcpLHRoaXMuaFszXT02NTUzNSYodGhpcy5oWzNdPj4+OXx0aGlzLmhbNF08PDQpLHRoaXMuaFs0XT02NTUzNSYodGhpcy5oWzRdPj4+MTJ8dGhpcy5oWzVdPDwxfHRoaXMuaFs2XTw8MTQpLHRoaXMuaFs1XT02NTUzNSYodGhpcy5oWzZdPj4+Mnx0aGlzLmhbN108PDExKSx0aGlzLmhbNl09NjU1MzUmKHRoaXMuaFs3XT4+PjV8dGhpcy5oWzhdPDw4KSx0aGlzLmhbN109NjU1MzUmKHRoaXMuaFs4XT4+Pjh8dGhpcy5oWzldPDw1KSxpPXRoaXMuaFswXSt0aGlzLnBhZFswXSx0aGlzLmhbMF09NjU1MzUmaSxvPTE7bzw4O28rKylpPSh0aGlzLmhbb10rdGhpcy5wYWRbb118MCkrKGk+Pj4xNil8MCx0aGlzLmhbb109NjU1MzUmaTt0W2UrMF09dGhpcy5oWzBdPj4+MCYyNTUsdFtlKzFdPXRoaXMuaFswXT4+PjgmMjU1LHRbZSsyXT10aGlzLmhbMV0+Pj4wJjI1NSx0W2UrM109dGhpcy5oWzFdPj4+OCYyNTUsdFtlKzRdPXRoaXMuaFsyXT4+PjAmMjU1LHRbZSs1XT10aGlzLmhbMl0+Pj44JjI1NSx0W2UrNl09dGhpcy5oWzNdPj4+MCYyNTUsdFtlKzddPXRoaXMuaFszXT4+PjgmMjU1LHRbZSs4XT10aGlzLmhbNF0+Pj4wJjI1NSx0W2UrOV09dGhpcy5oWzRdPj4+OCYyNTUsdFtlKzEwXT10aGlzLmhbNV0+Pj4wJjI1NSx0W2UrMTFdPXRoaXMuaFs1XT4+PjgmMjU1LHRbZSsxMl09dGhpcy5oWzZdPj4+MCYyNTUsdFtlKzEzXT10aGlzLmhbNl0+Pj44JjI1NSx0W2UrMTRdPXRoaXMuaFs3XT4+PjAmMjU1LHRbZSsxNV09dGhpcy5oWzddPj4+OCYyNTV9LGx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYodGhpcy5sZWZ0b3Zlcil7Zm9yKGk9MTYtdGhpcy5sZWZ0b3ZlcixpPnImJihpPXIpLG49MDtuPGk7bisrKXRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIrbl09dFtlK25dO2lmKHItPWksZSs9aSx0aGlzLmxlZnRvdmVyKz1pLHRoaXMubGVmdG92ZXI8MTYpcmV0dXJuO3RoaXMuYmxvY2tzKHRoaXMuYnVmZmVyLDAsMTYpLHRoaXMubGVmdG92ZXI9MH1pZihyPj0xNiYmKGk9ci1yJTE2LHRoaXMuYmxvY2tzKHQsZSxpKSxlKz1pLHItPWkpLHIpe2ZvcihuPTA7bjxyO24rKyl0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyK25dPXRbZStuXTt0aGlzLmxlZnRvdmVyKz1yfX07dmFyIHB0PXYsYnQ9eSx2dD1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHl0PW5ldyBGbG9hdDY0QXJyYXkoWzIzNywyMTEsMjQ1LDkyLDI2LDk5LDE4LDg4LDIxNCwxNTYsMjQ3LDE2MiwyMjIsMjQ5LDIyMiwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNl0pLG10PTMyLGd0PTI0LHd0PTMyLF90PTE2LE10PTMyLFN0PTMyLEV0PTMyLEF0PTMyLGt0PTMyLHh0PWd0LEl0PXd0LEJ0PV90LE90PTY0LFJ0PTMyLFB0PTY0LFR0PTMyLGp0PTY0O3QubG93bGV2ZWw9e2NyeXB0b19jb3JlX2hzYWxzYTIwOnUsY3J5cHRvX3N0cmVhbV94b3I6bCxjcnlwdG9fc3RyZWFtOmQsY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjpoLGNyeXB0b19zdHJlYW1fc2Fsc2EyMDpjLGNyeXB0b19vbmV0aW1lYXV0aDpwLGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnk6YixjcnlwdG9fdmVyaWZ5XzE2OmksY3J5cHRvX3ZlcmlmeV8zMjpvLGNyeXB0b19zZWNyZXRib3g6dixjcnlwdG9fc2VjcmV0Ym94X29wZW46eSxjcnlwdG9fc2NhbGFybXVsdDpSLGNyeXB0b19zY2FsYXJtdWx0X2Jhc2U6UCxjcnlwdG9fYm94X2JlZm9yZW5tOmosY3J5cHRvX2JveF9hZnRlcm5tOnB0LGNyeXB0b19ib3g6QyxjcnlwdG9fYm94X29wZW46TixjcnlwdG9fYm94X2tleXBhaXI6VCxjcnlwdG9faGFzaDpVLGNyeXB0b19zaWduOlgsY3J5cHRvX3NpZ25fa2V5cGFpcjpHLGNyeXB0b19zaWduX29wZW46VyxjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOm10LGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUzpndCxjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUzp3dCxjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzpfdCxjcnlwdG9fc2NhbGFybXVsdF9CWVRFUzpNdCxjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUzpTdCxjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOkV0LGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVM6QXQsY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTOmt0LGNyeXB0b19ib3hfTk9OQ0VCWVRFUzp4dCxjcnlwdG9fYm94X1pFUk9CWVRFUzpJdCxjcnlwdG9fYm94X0JPWFpFUk9CWVRFUzpCdCxjcnlwdG9fc2lnbl9CWVRFUzpPdCxjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUzpSdCxjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUzpQdCxjcnlwdG9fc2lnbl9TRUVEQllURVM6VHQsY3J5cHRvX2hhc2hfQllURVM6anR9LHQudXRpbHx8KHQudXRpbD17fSx0LnV0aWwuZGVjb2RlVVRGOD10LnV0aWwuZW5jb2RlVVRGOD10LnV0aWwuZW5jb2RlQmFzZTY0PXQudXRpbC5kZWNvZGVCYXNlNjQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJuYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzXCIpfSksdC5yYW5kb21CeXRlcz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZXQoZSx0KSxlfSx0LnNlY3JldGJveD1mdW5jdGlvbih0LGUscil7JCh0LGUsciksWihyLGUpO2Zvcih2YXIgbj1uZXcgVWludDhBcnJheSh3dCt0Lmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuLmxlbmd0aCksbz0wO288dC5sZW5ndGg7bysrKW5bbyt3dF09dFtvXTtyZXR1cm4gdihpLG4sbi5sZW5ndGgsZSxyKSxpLnN1YmFycmF5KF90KX0sdC5zZWNyZXRib3gub3Blbj1mdW5jdGlvbih0LGUscil7JCh0LGUsciksWihyLGUpO2Zvcih2YXIgbj1uZXcgVWludDhBcnJheShfdCt0Lmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuLmxlbmd0aCksbz0wO288dC5sZW5ndGg7bysrKW5bbytfdF09dFtvXTtyZXR1cm4hKG4ubGVuZ3RoPDMyKSYmKDA9PT15KGksbixuLmxlbmd0aCxlLHIpJiZpLnN1YmFycmF5KHd0KSl9LHQuc2VjcmV0Ym94LmtleUxlbmd0aD1tdCx0LnNlY3JldGJveC5ub25jZUxlbmd0aD1ndCx0LnNlY3JldGJveC5vdmVyaGVhZExlbmd0aD1fdCx0LnNjYWxhck11bHQ9ZnVuY3Rpb24odCxlKXtpZigkKHQsZSksdC5sZW5ndGghPT1TdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbiBzaXplXCIpO2lmKGUubGVuZ3RoIT09TXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHAgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheShNdCk7cmV0dXJuIFIocix0LGUpLHJ9LHQuc2NhbGFyTXVsdC5iYXNlPWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1TdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbiBzaXplXCIpO3ZhciBlPW5ldyBVaW50OEFycmF5KE10KTtyZXR1cm4gUChlLHQpLGV9LHQuc2NhbGFyTXVsdC5zY2FsYXJMZW5ndGg9U3QsdC5zY2FsYXJNdWx0Lmdyb3VwRWxlbWVudExlbmd0aD1NdCx0LmJveD1mdW5jdGlvbihlLHIsbixpKXt2YXIgbz10LmJveC5iZWZvcmUobixpKTtyZXR1cm4gdC5zZWNyZXRib3goZSxyLG8pfSx0LmJveC5iZWZvcmU9ZnVuY3Rpb24odCxlKXskKHQsZSksSih0LGUpO3ZhciByPW5ldyBVaW50OEFycmF5KGt0KTtyZXR1cm4gaihyLHQsZSkscn0sdC5ib3guYWZ0ZXI9dC5zZWNyZXRib3gsdC5ib3gub3Blbj1mdW5jdGlvbihlLHIsbixpKXt2YXIgbz10LmJveC5iZWZvcmUobixpKTtyZXR1cm4gdC5zZWNyZXRib3gub3BlbihlLHIsbyl9LHQuYm94Lm9wZW4uYWZ0ZXI9dC5zZWNyZXRib3gub3Blbix0LmJveC5rZXlQYWlyPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoRXQpLGU9bmV3IFVpbnQ4QXJyYXkoQXQpO3JldHVybiBUKHQsZSkse3B1YmxpY0tleTp0LHNlY3JldEtleTplfX0sdC5ib3gua2V5UGFpci5mcm9tU2VjcmV0S2V5PWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1BdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO3ZhciBlPW5ldyBVaW50OEFycmF5KEV0KTtyZXR1cm4gUChlLHQpLHtwdWJsaWNLZXk6ZSxzZWNyZXRLZXk6bmV3IFVpbnQ4QXJyYXkodCl9fSx0LmJveC5wdWJsaWNLZXlMZW5ndGg9RXQsdC5ib3guc2VjcmV0S2V5TGVuZ3RoPUF0LHQuYm94LnNoYXJlZEtleUxlbmd0aD1rdCx0LmJveC5ub25jZUxlbmd0aD14dCx0LmJveC5vdmVyaGVhZExlbmd0aD10LnNlY3JldGJveC5vdmVyaGVhZExlbmd0aCx0LnNpZ249ZnVuY3Rpb24odCxlKXtpZigkKHQsZSksZS5sZW5ndGghPT1QdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO3ZhciByPW5ldyBVaW50OEFycmF5KE90K3QubGVuZ3RoKTtyZXR1cm4gWChyLHQsdC5sZW5ndGgsZSkscn0sdC5zaWduLm9wZW49ZnVuY3Rpb24odCxlKXtpZigyIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJuYWNsLnNpZ24ub3BlbiBhY2NlcHRzIDIgYXJndW1lbnRzOyBkaWQgeW91IG1lYW4gdG8gdXNlIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnk/XCIpO2lmKCQodCxlKSxlLmxlbmd0aCE9PVJ0KXRocm93IG5ldyBFcnJvcihcImJhZCBwdWJsaWMga2V5IHNpemVcIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpLG49VyhyLHQsdC5sZW5ndGgsZSk7aWYobjwwKXJldHVybiBudWxsO2Zvcih2YXIgaT1uZXcgVWludDhBcnJheShuKSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1yW29dO3JldHVybiBpfSx0LnNpZ24uZGV0YWNoZWQ9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5zaWduKGUsciksaT1uZXcgVWludDhBcnJheShPdCksbz0wO288aS5sZW5ndGg7bysrKWlbb109bltvXTtyZXR1cm4gaX0sdC5zaWduLmRldGFjaGVkLnZlcmlmeT1mdW5jdGlvbih0LGUscil7aWYoJCh0LGUsciksZS5sZW5ndGghPT1PdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2lnbmF0dXJlIHNpemVcIik7aWYoci5sZW5ndGghPT1SdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO3ZhciBuLGk9bmV3IFVpbnQ4QXJyYXkoT3QrdC5sZW5ndGgpLG89bmV3IFVpbnQ4QXJyYXkoT3QrdC5sZW5ndGgpO2ZvcihuPTA7bjxPdDtuKyspaVtuXT1lW25dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaVtuK090XT10W25dO3JldHVybiBXKG8saSxpLmxlbmd0aCxyKT49MH0sdC5zaWduLmtleVBhaXI9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVWludDhBcnJheShSdCksZT1uZXcgVWludDhBcnJheShQdCk7cmV0dXJuIEcodCxlKSx7cHVibGljS2V5OnQsc2VjcmV0S2V5OmV9fSx0LnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5PWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1QdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO2Zvcih2YXIgZT1uZXcgVWludDhBcnJheShSdCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dFszMityXTtyZXR1cm57cHVibGljS2V5OmUsc2VjcmV0S2V5Om5ldyBVaW50OEFycmF5KHQpfX0sdC5zaWduLmtleVBhaXIuZnJvbVNlZWQ9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PVR0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWVkIHNpemVcIik7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KFJ0KSxyPW5ldyBVaW50OEFycmF5KFB0KSxuPTA7bjwzMjtuKyspcltuXT10W25dO3JldHVybiBHKGUsciwhMCkse3B1YmxpY0tleTplLHNlY3JldEtleTpyfX0sdC5zaWduLnB1YmxpY0tleUxlbmd0aD1SdCx0LnNpZ24uc2VjcmV0S2V5TGVuZ3RoPVB0LHQuc2lnbi5zZWVkTGVuZ3RoPVR0LHQuc2lnbi5zaWduYXR1cmVMZW5ndGg9T3QsdC5oYXNoPWZ1bmN0aW9uKHQpeyQodCk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoanQpO3JldHVybiBVKGUsdCx0Lmxlbmd0aCksZX0sdC5oYXNoLmhhc2hMZW5ndGg9anQsdC52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJCh0LGUpLDAhPT10Lmxlbmd0aCYmMCE9PWUubGVuZ3RoJiYodC5sZW5ndGg9PT1lLmxlbmd0aCYmMD09PW4odCwwLGUsMCx0Lmxlbmd0aCkpfSx0LnNldFBSTkc9ZnVuY3Rpb24odCl7ZXQ9dH0sZnVuY3Rpb24oKXt2YXIgZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmLmNyeXB0b3x8c2VsZi5tc0NyeXB0bzpudWxsO2lmKGUmJmUuZ2V0UmFuZG9tVmFsdWVzKXt2YXIgbj02NTUzNjt0LnNldFBSTkcoZnVuY3Rpb24odCxyKXt2YXIgaSxvPW5ldyBVaW50OEFycmF5KHIpO2ZvcihpPTA7aTxyO2krPW4pZS5nZXRSYW5kb21WYWx1ZXMoby5zdWJhcnJheShpLGkrTWF0aC5taW4oci1pLG4pKSk7Zm9yKGk9MDtpPHI7aSsrKXRbaV09b1tpXTtRKG8pfSl9ZWxzZSBlPXIoNjA4KSxlJiZlLnJhbmRvbUJ5dGVzJiZ0LnNldFBSTkcoZnVuY3Rpb24odCxyKXt2YXIgbixpPWUucmFuZG9tQnl0ZXMocik7Zm9yKG49MDtuPHI7bisrKXRbbl09aVtuXTtRKGkpfSl9KCl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0JiZ0LmV4cG9ydHM/dC5leHBvcnRzOnNlbGYubmFjbD1zZWxmLm5hY2x8fHt9KX0sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3JldHVyblwiPVwiPT09dFtlLTJdPzI6XCI9XCI9PT10W2UtMV0/MTowfWZ1bmN0aW9uIG4odCl7cmV0dXJuIDMqdC5sZW5ndGgvNC1yKHQpfWZ1bmN0aW9uIGkodCl7dmFyIGUsbixpLG8sYSxmLHM9dC5sZW5ndGg7YT1yKHQpLGY9bmV3IGgoMypzLzQtYSksaT1hPjA/cy00OnM7dmFyIGM9MDtmb3IoZT0wLG49MDtlPGk7ZSs9NCxuKz0zKW89dVt0LmNoYXJDb2RlQXQoZSldPDwxOHx1W3QuY2hhckNvZGVBdChlKzEpXTw8MTJ8dVt0LmNoYXJDb2RlQXQoZSsyKV08PDZ8dVt0LmNoYXJDb2RlQXQoZSszKV0sZltjKytdPW8+PjE2JjI1NSxmW2MrK109bz4+OCYyNTUsZltjKytdPTI1NSZvO3JldHVybiAyPT09YT8obz11W3QuY2hhckNvZGVBdChlKV08PDJ8dVt0LmNoYXJDb2RlQXQoZSsxKV0+PjQsZltjKytdPTI1NSZvKToxPT09YSYmKG89dVt0LmNoYXJDb2RlQXQoZSldPDwxMHx1W3QuY2hhckNvZGVBdChlKzEpXTw8NHx1W3QuY2hhckNvZGVBdChlKzIpXT4+MixmW2MrK109bz4+OCYyNTUsZltjKytdPTI1NSZvKSxmfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHNbdD4+MTgmNjNdK3NbdD4+MTImNjNdK3NbdD4+NiY2M10rc1s2MyZ0XX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG4saT1bXSxhPWU7YTxyO2ErPTMpbj0odFthXTw8MTYpKyh0W2ErMV08PDgpK3RbYSsyXSxpLnB1c2gobyhuKSk7cmV0dXJuIGkuam9pbihcIlwiKX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49ciUzLGk9XCJcIixvPVtdLGY9MTYzODMsdT0wLGg9ci1uO3U8aDt1Kz1mKW8ucHVzaChhKHQsdSx1K2Y+aD9oOnUrZikpO3JldHVybiAxPT09bj8oZT10W3ItMV0saSs9c1tlPj4yXSxpKz1zW2U8PDQmNjNdLGkrPVwiPT1cIik6Mj09PW4mJihlPSh0W3ItMl08PDgpK3Rbci0xXSxpKz1zW2U+PjEwXSxpKz1zW2U+PjQmNjNdLGkrPXNbZTw8MiY2M10saSs9XCI9XCIpLG8ucHVzaChpKSxvLmpvaW4oXCJcIil9ZS5ieXRlTGVuZ3RoPW4sZS50b0J5dGVBcnJheT1pLGUuZnJvbUJ5dGVBcnJheT1mO2Zvcih2YXIgcz1bXSx1PVtdLGg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxjPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGQ9MCxsPWMubGVuZ3RoO2Q8bDsrK2Qpc1tkXT1jW2RdLHVbYy5jaGFyQ29kZUF0KGQpXT1kO3VbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsdVtcIl9cIi5jaGFyQ29kZUF0KDApXT02M30sZnVuY3Rpb24odCxlKXtlLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxhLGY9OCppLW4tMSxzPSgxPDxmKS0xLHU9cz4+MSxoPS03LGM9cj9pLTE6MCxkPXI/LTE6MSxsPXRbZStjXTtmb3IoYys9ZCxvPWwmKDE8PC1oKS0xLGw+Pj0taCxoKz1mO2g+MDtvPTI1NipvK3RbZStjXSxjKz1kLGgtPTgpO2ZvcihhPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDthPTI1NiphK3RbZStjXSxjKz1kLGgtPTgpO2lmKDA9PT1vKW89MS11O2Vsc2V7aWYobz09PXMpcmV0dXJuIGE/TmFOOihsPy0xOjEpKigxLzApO2ErPU1hdGgucG93KDIsbiksby09dX1yZXR1cm4obD8tMToxKSphKk1hdGgucG93KDIsby1uKX0sZS53cml0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7dmFyIGEsZixzLHU9OCpvLWktMSxoPSgxPDx1KS0xLGM9aD4+MSxkPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsbD1uPzA6by0xLHA9bj8xOi0xLGI9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhmPWlzTmFOKGUpPzE6MCxhPWgpOihhPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKHM9TWF0aC5wb3coMiwtYSkpPDEmJihhLS0scyo9MiksZSs9YStjPj0xP2QvczpkKk1hdGgucG93KDIsMS1jKSxlKnM+PTImJihhKysscy89MiksYStjPj1oPyhmPTAsYT1oKTphK2M+PTE/KGY9KGUqcy0xKSpNYXRoLnBvdygyLGkpLGErPWMpOihmPWUqTWF0aC5wb3coMixjLTEpKk1hdGgucG93KDIsaSksYT0wKSk7aT49ODt0W3IrbF09MjU1JmYsbCs9cCxmLz0yNTYsaS09OCk7Zm9yKGE9YTw8aXxmLHUrPWk7dT4wO3RbcitsXT0yNTUmYSxsKz1wLGEvPTI1Nix1LT04KTt0W3IrbC1wXXw9MTI4KmJ9fSxmdW5jdGlvbih0LGUpe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PXIuY2FsbCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbjtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXI9ZFt0XS5rZXksbj1kW3RdLml2O2Vsc2V7aWYoIWNbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtyPTgqY1t0XS5rZXksbj1jW3RdLml2fXZhciBpPXMoZSwhMSxyLG4pO3JldHVybiBvKHQsaS5rZXksaS5pdil9ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG47aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyPWRbdF0ua2V5LG49ZFt0XS5pdjtlbHNle2lmKCFjW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7cj04KmNbdF0ua2V5LG49Y1t0XS5pdn12YXIgaT1zKGUsITEscixuKTtyZXR1cm4gYSh0LGkua2V5LGkuaXYpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGRbdF0pcmV0dXJuIHUuY3JlYXRlQ2lwaGVyaXYodCxlLHIpO2lmKGNbdF0pcmV0dXJuIG5ldyBoKHtrZXk6ZSxpdjpyLG1vZGU6dH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIil9ZnVuY3Rpb24gYSh0LGUscil7aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyZXR1cm4gdS5jcmVhdGVEZWNpcGhlcml2KHQsZSxyKTtpZihjW3RdKXJldHVybiBuZXcgaCh7a2V5OmUsaXY6cixtb2RlOnQsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIil9ZnVuY3Rpb24gZigpe3JldHVybiBPYmplY3Qua2V5cyhjKS5jb25jYXQodS5nZXRDaXBoZXJzKCkpfXZhciBzPXIoMTQ2KSx1PXIoNDk0KSxoPXIoNDk4KSxjPXIoNDk5KSxkPXIoOTUpO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPW4sZS5jcmVhdGVDaXBoZXJpdj1lLkNpcGhlcml2PW8sZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPWksZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1hLGUubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfXZhciBpPXIoNDk2KTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1pLmNyZWF0ZUNpcGhlcixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9aS5jcmVhdGVDaXBoZXJpdjt2YXIgbz1yKDQ5NSk7ZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPW8uY3JlYXRlRGVjaXBoZXIsZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1vLmNyZWF0ZURlY2lwaGVyaXY7dmFyIGE9cig5NSk7ZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9bn0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHUuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IHMuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dFsxNV0scj0tMTsrK3I8ZTspaWYodFtyKygxNi1lKV0hPT1lKXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7aWYoMTYhPT1lKXJldHVybiB0LnNsaWNlKDAsMTYtZSl9ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG89Y1tlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKGJbby5tb2RlXSxyLGksITApOlwiYXV0aFwiPT09by50eXBlP25ldyBsKGJbby5tb2RlXSxyLGksITApOm5ldyBuKGJbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1jW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1wKGUsITEsci5rZXksci5pdik7cmV0dXJuIGEodCxuLmtleSxuLml2KX12YXIgcz1yKDk0KSx1PXIoOTcpLGg9cigyKSxjPXIoOTUpLGQ9cigyMTApLGw9cigyMDMpLHA9cigxNDYpO2gobix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspbj10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBvKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHQpKTtpZih0KXRocm93IG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZTtpZih0KXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZTtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX07dmFyIGI9e0VDQjpyKDIwOCksQ0JDOnIoMjA0KSxDRkI6cigyMDUpLENGQjg6cigyMDcpLENGQjE6cigyMDYpLE9GQjpyKDIwOSksQ1RSOnIoOTYpLEdDTTpyKDk2KX07ZS5jcmVhdGVEZWNpcGhlcj1mLGUuY3JlYXRlRGVjaXBoZXJpdj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHMuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9jaXBoZXI9bmV3IGYuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyhlLHIsaSl7dmFyIG89aFtlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKHBbby5tb2RlXSxyLGkpOlwiYXV0aFwiPT09by50eXBlP25ldyBsKHBbby5tb2RlXSxyLGkpOm5ldyBuKHBbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1oW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKGUsITEsci5rZXksci5pdik7cmV0dXJuIG8odCxuLmtleSxuLml2KX12YXIgZj1yKDk0KSxzPXIoOTcpLHU9cigyKSxoPXIoOTUpLGM9cigxNDYpLGQ9cigyMTApLGw9cigyMDMpO3UobixzKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KCk7KW49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx0O2lmKFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTBcIiE9PXQudG9TdHJpbmcoXCJoZXhcIikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdH1yZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgscj1uZXcgdChlKSxuPS0xOysrbjxlOylyLndyaXRlVUludDgoZSxuKTt2YXIgaT10LmNvbmNhdChbdGhpcy5jYWNoZSxyXSk7cmV0dXJuIGl9O3ZhciBwPXtFQ0I6cigyMDgpLENCQzpyKDIwNCksQ0ZCOnIoMjA1KSxDRkI4OnIoMjA3KSxDRkIxOnIoMjA2KSxPRkI6cigyMDkpLENUUjpyKDk2KSxHQ006cig5Nil9O2UuY3JlYXRlQ2lwaGVyaXY9byxlLmNyZWF0ZUNpcGhlcj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9bmV3IGUoMTYpLHRoaXMuc3RhdGUuZmlsbCgwKSx0aGlzLmNhY2hlPW5ldyBlKFwiXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuW3QucmVhZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV19ZnVuY3Rpb24gaSh0KXt0PXQubWFwKG8pO3ZhciByPW5ldyBlKDE2KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHRbMF0sMCksci53cml0ZVVJbnQzMkJFKHRbMV0sNCksci53cml0ZVVJbnQzMkJFKHRbMl0sOCksci53cml0ZVVJbnQzMkJFKHRbM10sMTIpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPXQ+c3x8dDwwPyhyPU1hdGguYWJzKHQpJXMsdDwwP3MtcjpyKTp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bdFswXV5lWzBdLHRbMV1eZVsxXSx0WzJdXmVbMl0sdFszXV5lWzNdXX12YXIgZj1uZXcgZSgxNik7Zi5maWxsKDApLHQuZXhwb3J0cz1yLHIucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMTsrK2U8dC5sZW5ndGg7KXRoaXMuc3RhdGVbZV1ePXRbZV07dGhpcy5fbXVsdGlwbHkoKX0sci5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixvPW4odGhpcy5oKSxmPVswLDAsMCwwXSxzPS0xOysrczwxMjg7KXtmb3IoZT0wIT09KHRoaXMuc3RhdGVbfn4ocy84KV0mMTw8Ny1zJTgpLGUmJihmPWEoZixvKSkscj0wIT09KDEmb1szXSksdD0zO3Q+MDt0LS0pb1t0XT1vW3RdPj4+MXwoMSZvW3QtMV0pPDwzMTtvWzBdPW9bMF0+Pj4xLHImJihvWzBdPW9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1pKGYpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5jYWNoZT1lLmNvbmNhdChbdGhpcy5jYWNoZSx0XSk7Zm9yKHZhciByO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspcj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChyKX0sci5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goZS5jb25jYXQoW3RoaXMuY2FjaGUsZl0sMTYpKSx0aGlzLmdoYXNoKGkoWzAsdCwwLHJdKSksdGhpcy5zdGF0ZX07dmFyIHM9TWF0aC5wb3coMiwzMil9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpO3ZhciByLG49dC5tb2RlLnRvTG93ZXJDYXNlKCksbz1mW25dO3I9dC5kZWNyeXB0P1wiZGVjcnlwdFwiOlwiZW5jcnlwdFwiO3ZhciBhPXQua2V5O1wiZGVzLWVkZVwiIT09biYmXCJkZXMtZWRlLWNiY1wiIT09bnx8KGE9ZS5jb25jYXQoW2EsYS5zbGljZSgwLDgpXSkpO3ZhciBzPXQuaXY7dGhpcy5fZGVzPW8uY3JlYXRlKHtrZXk6YSxpdjpzLHR5cGU6cn0pfXZhciBpPXIoNTAwKSxvPXIoMTQ1KSxhPXIoMiksZj17XCJkZXMtZWRlMy1jYmNcIjpvLkNCQy5pbnN0YW50aWF0ZShvLkVERSksXCJkZXMtZWRlM1wiOm8uRURFLFwiZGVzLWVkZS1jYmNcIjpvLkNCQy5pbnN0YW50aWF0ZShvLkVERSksXCJkZXMtZWRlXCI6by5FREUsXCJkZXMtY2JjXCI6by5DQkMuaW5zdGFudGlhdGUoby5ERVMpLFwiZGVzLWVjYlwiOm8uREVTfTtmLmRlcz1mW1wiZGVzLWNiY1wiXSxmLmRlczM9ZltcImRlcy1lZGUzLWNiY1wiXSx0LmV4cG9ydHM9bixhKG4saSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodGhpcy5fZGVzLnVwZGF0ZSh0KSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLl9kZXMuZmluYWwoKSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiZGVzLWVjYlwiXT17a2V5OjgsaXY6MH0sZVtcImRlcy1jYmNcIl09ZS5kZXM9e2tleTo4LGl2Ojh9LGVbXCJkZXMtZWRlMy1jYmNcIl09ZS5kZXMzPXtrZXk6MjQsaXY6OH0sZVtcImRlcy1lZGUzXCJdPXtrZXk6MjQsaXY6MH0sZVtcImRlcy1lZGUtY2JjXCJdPXtrZXk6MTYsaXY6OH0sZVtcImRlcy1lZGVcIl09e2tleToxNixpdjowfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7by5lcXVhbCh0Lmxlbmd0aCw4LFwiSW52YWxpZCBJViBsZW5ndGhcIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBlPTA7ZTx0aGlzLml2Lmxlbmd0aDtlKyspdGhpcy5pdltlXT10W2VdfWZ1bmN0aW9uIGkodCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlKSx0aGlzLl9jYmNJbml0KCl9YShlLHQpO2Zvcih2YXIgcj1PYmplY3Qua2V5cyhmKSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07ZS5wcm90b3R5cGVbaV09ZltpXX1yZXR1cm4gZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQpfSxlfXZhciBvPXIoOTgpLGE9cigyKSxmPXt9O2UuaW5zdGFudGlhdGU9aSxmLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4odGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT10fSxmLl91cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fY2JjU3RhdGUsbz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsYT1pLml2O2lmKFwiZW5jcnlwdFwiPT09dGhpcy50eXBlKXtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylhW2ZdXj10W2UrZl07by5fdXBkYXRlLmNhbGwodGhpcyxhLDAscixuKTtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylhW2ZdPXJbbitmXX1lbHNle28uX3VwZGF0ZS5jYWxsKHRoaXMsdCxlLHIsbik7Zm9yKHZhciBmPTA7Zjx0aGlzLmJsb2NrU2l6ZTtmKyspcltuK2ZdXj1hW2ZdO2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKWFbZl09dFtlK2ZdfX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMub3B0aW9ucz10LHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTB9dmFyIGk9cig5OCk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RoP1tdOlwiZGVjcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQodCk6dGhpcy5fdXBkYXRlRW5jcnlwdCh0KX0sbi5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsdC5sZW5ndGgtZSksbj0wO248cjtuKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrbl09dFtlK25dO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9cixyfSxuLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsdCxlKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxuLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPSh0aGlzLmJ1ZmZlck9mZit0Lmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCxpPW5ldyBBcnJheShuKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihlKz10aGlzLl9idWZmZXIodCxlKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKHIrPXRoaXMuX2ZsdXNoQnVmZmVyKGkscikpKTtmb3IodmFyIG89dC5sZW5ndGgtKHQubGVuZ3RoLWUpJXRoaXMuYmxvY2tTaXplO2U8bztlKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUodCxlLGkscikscis9dGhpcy5ibG9ja1NpemU7Zm9yKDtlPHQubGVuZ3RoO2UrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT10W2VdO3JldHVybiBpfSxuLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK3QubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxpPW5ldyBBcnJheShuKnRoaXMuYmxvY2tTaXplKTtuPjA7bi0tKWUrPXRoaXMuX2J1ZmZlcih0LGUpLHIrPXRoaXMuX2ZsdXNoQnVmZmVyKGkscik7cmV0dXJuIGUrPXRoaXMuX2J1ZmZlcih0LGUpLGl9LG4ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQpe3ZhciBlO3QmJihlPXRoaXMudXBkYXRlKHQpKTt2YXIgcjtyZXR1cm4gcj1cImVuY3J5cHRcIj09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxlP2UuY29uY2F0KHIpOnJ9LG4ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24odCxlKXtpZigwPT09ZSlyZXR1cm4hMTtmb3IoO2U8dC5sZW5ndGg7KXRbZSsrXT0wO3JldHVybiEwfSxuLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIHQ9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsdCwwKSx0fSxuLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG4ucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXtpLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLFwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHRcIik7dmFyIHQ9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIodCwwKSx0aGlzLl91bnBhZCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIGkodCl7dS5jYWxsKHRoaXMsdCk7dmFyIGU9bmV3IG47dGhpcy5fZGVzU3RhdGU9ZSx0aGlzLmRlcml2ZUtleXMoZSx0LmtleSl9dmFyIG89cig5OCksYT1yKDIpLGY9cigxNDUpLHM9Zi51dGlscyx1PWYuQ2lwaGVyO2EoaSx1KSx0LmV4cG9ydHM9aSxpLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9O3ZhciBoPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtpLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKHQsZSl7dC5rZXlzPW5ldyBBcnJheSgzMiksby5lcXVhbChlLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSxcIkludmFsaWQga2V5IGxlbmd0aFwiKTt2YXIgcj1zLnJlYWRVSW50MzJCRShlLDApLG49cy5yZWFkVUludDMyQkUoZSw0KTtzLnBjMShyLG4sdC50bXAsMCkscj10LnRtcFswXSxuPXQudG1wWzFdO2Zvcih2YXIgaT0wO2k8dC5rZXlzLmxlbmd0aDtpKz0yKXt2YXIgYT1oW2k+Pj4xXTtyPXMucjI4c2hsKHIsYSksbj1zLnIyOHNobChuLGEpLHMucGMyKHIsbix0LmtleXMsaSl9fSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuX2Rlc1N0YXRlLG89cy5yZWFkVUludDMyQkUodCxlKSxhPXMucmVhZFVJbnQzMkJFKHQsZSs0KTtzLmlwKG8sYSxpLnRtcCwwKSxvPWkudG1wWzBdLGE9aS50bXBbMV0sXCJlbmNyeXB0XCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChpLG8sYSxpLnRtcCwwKTp0aGlzLl9kZWNyeXB0KGksbyxhLGkudG1wLDApLG89aS50bXBbMF0sYT1pLnRtcFsxXSxzLndyaXRlVUludDMyQkUocixvLG4pLHMud3JpdGVVSW50MzJCRShyLGEsbis0KX0saS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aC1lLG49ZTtuPHQubGVuZ3RoO24rKyl0W25dPXI7cmV0dXJuITB9LGkucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFt0Lmxlbmd0aC0xXSxyPXQubGVuZ3RoLWU7cjx0Lmxlbmd0aDtyKyspby5lcXVhbCh0W3JdLGUpO3JldHVybiB0LnNsaWNlKDAsdC5sZW5ndGgtZSl9LGkucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPWUsYT1yLGY9MDtmPHQua2V5cy5sZW5ndGg7Zis9Mil7dmFyIHU9dC5rZXlzW2ZdLGg9dC5rZXlzW2YrMV07cy5leHBhbmQoYSx0LnRtcCwwKSx1Xj10LnRtcFswXSxoXj10LnRtcFsxXTt2YXIgYz1zLnN1YnN0aXR1dGUodSxoKSxkPXMucGVybXV0ZShjKSxsPWE7YT0ob15kKT4+PjAsbz1sfXMucmlwKGEsbyxuLGkpfSxpLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz1yLGE9ZSxmPXQua2V5cy5sZW5ndGgtMjtmPj0wO2YtPTIpe3ZhciB1PXQua2V5c1tmXSxoPXQua2V5c1tmKzFdO3MuZXhwYW5kKG8sdC50bXAsMCksdV49dC50bXBbMF0saF49dC50bXBbMV07dmFyIGM9cy5zdWJzdGl0dXRlKHUsaCksZD1zLnBlcm11dGUoYyksbD1vO289KGFeZCk+Pj4wLGE9bH1zLnJpcChvLGEsbixpKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7by5lcXVhbChlLmxlbmd0aCwyNCxcIkludmFsaWQga2V5IGxlbmd0aFwiKTt2YXIgcj1lLnNsaWNlKDAsOCksbj1lLnNsaWNlKDgsMTYpLGk9ZS5zbGljZSgxNiwyNCk7XCJlbmNyeXB0XCI9PT10P3RoaXMuY2lwaGVycz1bdS5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5OnJ9KSx1LmNyZWF0ZSh7dHlwZTpcImRlY3J5cHRcIixrZXk6bn0pLHUuY3JlYXRlKHt0eXBlOlwiZW5jcnlwdFwiLGtleTppfSldOnRoaXMuY2lwaGVycz1bdS5jcmVhdGUoe3R5cGU6XCJkZWNyeXB0XCIsa2V5Oml9KSx1LmNyZWF0ZSh7dHlwZTpcImVuY3J5cHRcIixrZXk6bn0pLHUuY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTpyfSldfWZ1bmN0aW9uIGkodCl7cy5jYWxsKHRoaXMsdCk7dmFyIGU9bmV3IG4odGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPWV9dmFyIG89cig5OCksYT1yKDIpLGY9cigxNDUpLHM9Zi5DaXBoZXIsdT1mLkRFUzthKGkscyksdC5leHBvcnRzPWksaS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuX2VkZVN0YXRlO2kuY2lwaGVyc1swXS5fdXBkYXRlKHQsZSxyLG4pLGkuY2lwaGVyc1sxXS5fdXBkYXRlKHIsbixyLG4pLGkuY2lwaGVyc1syXS5fdXBkYXRlKHIsbixyLG4pfSxpLnByb3RvdHlwZS5fcGFkPXUucHJvdG90eXBlLl9wYWQsaS5wcm90b3R5cGUuX3VucGFkPXUucHJvdG90eXBlLl91bnBhZH0sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMCtlXTw8MjR8dFsxK2VdPDwxNnx0WzIrZV08PDh8dFszK2VdO3JldHVybiByPj4+MH0sZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXt0WzArcl09ZT4+PjI0LHRbMStyXT1lPj4+MTYmMjU1LHRbMityXT1lPj4+OCYyNTUsdFszK3JdPTI1NSZlfSxlLmlwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89MCxhPTY7YT49MDthLT0yKXtmb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PWU+Pj5mK2EmMTtmb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PXQ+Pj5mK2EmMX1mb3IodmFyIGE9NjthPj0wO2EtPTIpe2Zvcih2YXIgZj0xO2Y8PTI1O2YrPTgpbzw8PTEsb3w9ZT4+PmYrYSYxO2Zvcih2YXIgZj0xO2Y8PTI1O2YrPTgpbzw8PTEsb3w9dD4+PmYrYSYxfXJbbiswXT1pPj4+MCxyW24rMV09bz4+PjB9LGUucmlwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89MCxhPTA7YTw0O2ErKylmb3IodmFyIGY9MjQ7Zj49MDtmLT04KWk8PD0xLGl8PWU+Pj5mK2EmMSxpPDw9MSxpfD10Pj4+ZithJjE7Zm9yKHZhciBhPTQ7YTw4O2ErKylmb3IodmFyIGY9MjQ7Zj49MDtmLT04KW88PD0xLG98PWU+Pj5mK2EmMSxvPDw9MSxvfD10Pj4+ZithJjE7cltuKzBdPWk+Pj4wLHJbbisxXT1vPj4+MH0sZS5wYzE9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsbz0wLGE9NzthPj01O2EtLSl7XG5mb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PWU+PmYrYSYxO2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9dD4+ZithJjF9Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD1lPj5mK2EmMTtmb3IodmFyIGE9MTthPD0zO2ErKyl7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClvPDw9MSxvfD1lPj5mK2EmMTtmb3IodmFyIGY9MDtmPD0yNDtmKz04KW88PD0xLG98PXQ+PmYrYSYxfWZvcih2YXIgZj0wO2Y8PTI0O2YrPTgpbzw8PTEsb3w9dD4+ZithJjE7cltuKzBdPWk+Pj4wLHJbbisxXT1vPj4+MH0sZS5yMjhzaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw8ZSYyNjg0MzU0NTV8dD4+PjI4LWV9O3ZhciByPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO2UucGMyPWZ1bmN0aW9uKHQsZSxuLGkpe2Zvcih2YXIgbz0wLGE9MCxmPXIubGVuZ3RoPj4+MSxzPTA7czxmO3MrKylvPDw9MSxvfD10Pj4+cltzXSYxO2Zvcih2YXIgcz1mO3M8ci5sZW5ndGg7cysrKWE8PD0xLGF8PWU+Pj5yW3NdJjE7bltpKzBdPW8+Pj4wLG5baSsxXT1hPj4+MH0sZS5leHBhbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsaT0wO249KDEmdCk8PDV8dD4+PjI3O2Zvcih2YXIgbz0yMztvPj0xNTtvLT00KW48PD02LG58PXQ+Pj5vJjYzO2Zvcih2YXIgbz0xMTtvPj0zO28tPTQpaXw9dD4+Pm8mNjMsaTw8PTY7aXw9KDMxJnQpPDwxfHQ+Pj4zMSxlW3IrMF09bj4+PjAsZVtyKzFdPWk+Pj4wfTt2YXIgbj1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtlLnN1YnN0aXR1dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTA7aTw0O2krKyl7dmFyIG89dD4+PjE4LTYqaSY2MyxhPW5bNjQqaStvXTtyPDw9NCxyfD1hfWZvcih2YXIgaT0wO2k8NDtpKyspe3ZhciBvPWU+Pj4xOC02KmkmNjMsYT1uWzI1Nis2NCppK29dO3I8PD00LHJ8PWF9cmV0dXJuIHI+Pj4wfTt2YXIgaT1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107ZS5wZXJtdXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPGkubGVuZ3RoO3IrKyllPDw9MSxlfD10Pj4+aVtyXSYxO3JldHVybiBlPj4+MH0sZS5wYWRTcGxpdD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQudG9TdHJpbmcoMik7bi5sZW5ndGg8ZTspbj1cIjBcIituO2Zvcih2YXIgaT1bXSxvPTA7bzxlO28rPXIpaS5wdXNoKG4uc2xpY2UobyxvK3IpKTtyZXR1cm4gaS5qb2luKFwiIFwiKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtjLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGU9bFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0XCIpO3RoaXMuX2hhc2hUeXBlPWUuaGFzaCx0aGlzLl9oYXNoPXMoZS5oYXNoKSx0aGlzLl90YWc9ZS5pZCx0aGlzLl9zaWduVHlwZT1lLnNpZ259ZnVuY3Rpb24gaSh0KXtjLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGU9bFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0XCIpO3RoaXMuX2hhc2g9cyhlLmhhc2gpLHRoaXMuX3RhZz1lLmlkLHRoaXMuX3NpZ25UeXBlPWUuc2lnbn1mdW5jdGlvbiBvKHQpe3JldHVybiBuZXcgbih0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgaSh0KX12YXIgZj1yKDIxMSkscz1yKDU5KSx1PXIoMiksaD1yKDU0MiksYz1yKDMxKSxkPXIoNTQzKSxsPXt9O09iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1sW3QudG9Mb3dlckNhc2UoKV09Zlt0XX0pLHUobixjLldyaXRhYmxlKSxuLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhc2gudXBkYXRlKHQpLHIoKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscil7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpLHRoaXMuX2hhc2gudXBkYXRlKHQpLHRoaXN9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxyKXt0aGlzLmVuZCgpO3ZhciBuPXRoaXMuX2hhc2guZGlnZXN0KCksaT1oKGUuY29uY2F0KFt0aGlzLl90YWcsbl0pLHQsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUpO3JldHVybiByP2kudG9TdHJpbmcocik6aX0sdShpLGMuV3JpdGFibGUpLGkucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5faGFzaC51cGRhdGUodCkscigpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSksdGhpcy5faGFzaC51cGRhdGUodCksdGhpc30saS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IGUocixuKSksdGhpcy5lbmQoKTt2YXIgaT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBkKHIsZS5jb25jYXQoW3RoaXMuX3RhZyxpXSksdCx0aGlzLl9zaWduVHlwZSl9LHQuZXhwb3J0cz17U2lnbjpvLFZlcmlmeTphLGNyZWF0ZVNpZ246byxjcmVhdGVWZXJpZnk6YX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIGU9byh0KSxyPWUudG9SZWQoYS5tb250KHQubW9kdWx1cykpLnJlZFBvdyhuZXcgYSh0LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO3JldHVybntibGluZGVyOnIsdW5ibGluZGVyOmUuaW52bSh0Lm1vZHVsdXMpfX1mdW5jdGlvbiBpKHQscil7dmFyIGk9bihyKSxvPXIubW9kdWx1cy5ieXRlTGVuZ3RoKCksZj0oYS5tb250KHIubW9kdWx1cyksbmV3IGEodCkubXVsKGkuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpKSxzPWYudG9SZWQoYS5tb250KHIucHJpbWUxKSksdT1mLnRvUmVkKGEubW9udChyLnByaW1lMikpLGg9ci5jb2VmZmljaWVudCxjPXIucHJpbWUxLGQ9ci5wcmltZTIsbD1zLnJlZFBvdyhyLmV4cG9uZW50MSkscD11LnJlZFBvdyhyLmV4cG9uZW50Mik7bD1sLmZyb21SZWQoKSxwPXAuZnJvbVJlZCgpO3ZhciBiPWwuaXN1YihwKS5pbXVsKGgpLnVtb2QoYyk7cmV0dXJuIGIuaW11bChkKSxwLmlhZGQoYiksbmV3IGUocC5pbXVsKGkudW5ibGluZGVyKS51bW9kKHIubW9kdWx1cykudG9BcnJheSghMSxvKSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxyPW5ldyBhKGYoZSkpO3IuY21wKHQubW9kdWx1cyk+PTB8fCFyLnVtb2QodC5wcmltZTEpfHwhci51bW9kKHQucHJpbWUyKTspcj1uZXcgYShmKGUpKTtyZXR1cm4gcn12YXIgYT1yKDE4KSxmPXIoNjEpO3QuZXhwb3J0cz1pLGkuZ2V0cj1vfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnA9bmV3IG8oZS5wLDE2KSx0aGlzLnJlZD1lLnByaW1lP28ucmVkKGUucHJpbWUpOm8ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgbygwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IG8oMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBvKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ZS5uJiZuZXcgbyhlLm4sMTYpLHRoaXMuZz1lLmcmJnRoaXMucG9pbnRGcm9tSlNPTihlLmcsZS5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpO3ZhciByPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFyfHxyLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIGkodCxlKXt0aGlzLmN1cnZlPXQsdGhpcy50eXBlPWUsdGhpcy5wcmVjb21wdXRlZD1udWxsfXZhciBvPXIoMTgpLGE9cigxOSksZj1hLnV0aWxzLHM9Zi5nZXROQUYsdT1mLmdldEpTRixoPWYuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHQsZSl7aCh0LnByZWNvbXB1dGVkKTt2YXIgcj10Ll9nZXREb3VibGVzKCksbj1zKGUsMSksaT0oMTw8ci5zdGVwKzEpLShyLnN0ZXAlMj09PTA/MjoxKTtpLz0zO2Zvcih2YXIgbz1bXSxhPTA7YTxuLmxlbmd0aDthKz1yLnN0ZXApe2Zvcih2YXIgZj0wLGU9YStyLnN0ZXAtMTtlPj1hO2UtLSlmPShmPDwxKStuW2VdO28ucHVzaChmKX1mb3IodmFyIHU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGM9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGQ9aTtkPjA7ZC0tKXtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGY9b1thXTtmPT09ZD9jPWMubWl4ZWRBZGQoci5wb2ludHNbYV0pOmY9PT0tZCYmKGM9Yy5taXhlZEFkZChyLnBvaW50c1thXS5uZWcoKSkpfXU9dS5hZGQoYyl9cmV0dXJuIHUudG9QKCl9LG4ucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9NCxuPXQuX2dldE5BRlBvaW50cyhyKTtyPW4ud25kO2Zvcih2YXIgaT1uLnBvaW50cyxvPXMoZSxyKSxhPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxmPW8ubGVuZ3RoLTE7Zj49MDtmLS0pe2Zvcih2YXIgZT0wO2Y+PTAmJjA9PT1vW2ZdO2YtLSllKys7aWYoZj49MCYmZSsrLGE9YS5kYmxwKGUpLGY8MClicmVhazt2YXIgdT1vW2ZdO2goMCE9PXUpLGE9XCJhZmZpbmVcIj09PXQudHlwZT91PjA/YS5taXhlZEFkZChpW3UtMT4+MV0pOmEubWl4ZWRBZGQoaVstdS0xPj4xXS5uZWcoKSk6dT4wP2EuYWRkKGlbdS0xPj4xXSk6YS5hZGQoaVstdS0xPj4xXS5uZWcoKSl9cmV0dXJuXCJhZmZpbmVcIj09PXQudHlwZT9hLnRvUCgpOmF9LG4ucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPXRoaXMuX3duYWZUMSxhPXRoaXMuX3duYWZUMixmPXRoaXMuX3duYWZUMyxoPTAsYz0wO2M8bjtjKyspe3ZhciBkPWVbY10sbD1kLl9nZXROQUZQb2ludHModCk7b1tjXT1sLnduZCxhW2NdPWwucG9pbnRzfWZvcih2YXIgYz1uLTE7Yz49MTtjLT0yKXt2YXIgcD1jLTEsYj1jO2lmKDE9PT1vW3BdJiYxPT09b1tiXSl7dmFyIHY9W2VbcF0sbnVsbCxudWxsLGVbYl1dOzA9PT1lW3BdLnkuY21wKGVbYl0ueSk/KHZbMV09ZVtwXS5hZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTowPT09ZVtwXS55LmNtcChlW2JdLnkucmVkTmVnKCkpPyh2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLmFkZChlW2JdLm5lZygpKSk6KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpO3ZhciB5PVstMywtMSwtNSwtNywwLDcsNSwxLDNdLG09dShyW3BdLHJbYl0pO2g9TWF0aC5tYXgobVswXS5sZW5ndGgsaCksZltwXT1uZXcgQXJyYXkoaCksZltiXT1uZXcgQXJyYXkoaCk7Zm9yKHZhciBnPTA7ZzxoO2crKyl7dmFyIHc9MHxtWzBdW2ddLF89MHxtWzFdW2ddO2ZbcF1bZ109eVszKih3KzEpKyhfKzEpXSxmW2JdW2ddPTAsYVtwXT12fX1lbHNlIGZbcF09cyhyW3BdLG9bcF0pLGZbYl09cyhyW2JdLG9bYl0pLGg9TWF0aC5tYXgoZltwXS5sZW5ndGgsaCksaD1NYXRoLm1heChmW2JdLmxlbmd0aCxoKX1mb3IodmFyIE09dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFM9dGhpcy5fd25hZlQ0LGM9aDtjPj0wO2MtLSl7Zm9yKHZhciBFPTA7Yz49MDspe2Zvcih2YXIgQT0hMCxnPTA7ZzxuO2crKylTW2ddPTB8ZltnXVtjXSwwIT09U1tnXSYmKEE9ITEpO2lmKCFBKWJyZWFrO0UrKyxjLS19aWYoYz49MCYmRSsrLE09TS5kYmxwKEUpLGM8MClicmVhaztmb3IodmFyIGc9MDtnPG47ZysrKXt2YXIgZCxrPVNbZ107MCE9PWsmJihrPjA/ZD1hW2ddW2stMT4+MV06azwwJiYoZD1hW2ddWy1rLTE+PjFdLm5lZygpKSxNPVwiYWZmaW5lXCI9PT1kLnR5cGU/TS5taXhlZEFkZChkKTpNLmFkZChkKSl9fWZvcih2YXIgYz0wO2M8bjtjKyspYVtjXT1udWxsO3JldHVybiBpP006TS50b1AoKX0sbi5CYXNlUG9pbnQ9aSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0saS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXt0PWYudG9BcnJheSh0LGUpO3ZhciByPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT10WzBdfHw2PT09dFswXXx8Nz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09MipyKXs2PT09dFswXT9oKHRbdC5sZW5ndGgtMV0lMj09PTApOjc9PT10WzBdJiZoKHRbdC5sZW5ndGgtMV0lMj09PTEpO3ZhciBuPXRoaXMucG9pbnQodC5zbGljZSgxLDErciksdC5zbGljZSgxK3IsMSsyKnIpKTtyZXR1cm4gbn1pZigoMj09PXRbMF18fDM9PT10WzBdKSYmdC5sZW5ndGgtMT09PXIpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh0LnNsaWNlKDEsMStyKSwzPT09dFswXSk7dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwb2ludCBmb3JtYXRcIil9LGkucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW5jb2RlKHQsITApfSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkscj10aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIixlKTtyZXR1cm4gdD9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQocik6WzRdLmNvbmNhdChyLHRoaXMuZ2V0WSgpLnRvQXJyYXkoXCJiZVwiLGUpKX0saS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYuZW5jb2RlKHRoaXMuX2VuY29kZShlKSx0KX0saS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBlPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gZS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLGUuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsdCksZS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPWUsdGhpc30saS5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIGU9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhZSYmZS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHQuYml0TGVuZ3RoKCkrMSkvZS5zdGVwKX0saS5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIHI9W3RoaXNdLG49dGhpcyxpPTA7aTxlO2krPXQpe2Zvcih2YXIgbz0wO288dDtvKyspbj1uLmRibCgpO3IucHVzaChuKX1yZXR1cm57c3RlcDp0LHBvaW50czpyfX0saS5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBlPVt0aGlzXSxyPSgxPDx0KS0xLG49MT09PXI/bnVsbDp0aGlzLmRibCgpLGk9MTtpPHI7aSsrKWVbaV09ZVtpLTFdLmFkZChuKTtyZXR1cm57d25kOnQscG9pbnRzOmV9fSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQ7cisrKWU9ZS5kYmwoKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMudHdpc3RlZD0xIT09KDB8dC5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmKDB8dC5hKT09PS0xLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSx1LmNhbGwodGhpcyxcImVkd2FyZHNcIix0KSx0aGlzLmE9bmV3IGYodC5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgZih0LmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IGYodC5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksaCghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09PSgwfHQuYyl9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3UuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IGYoZSwxNiksdGhpcy55PW5ldyBmKHIsMTYpLHRoaXMuej1uP25ldyBmKG4sMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1pJiZuZXcgZihpLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX12YXIgbz1yKDk5KSxhPXIoMTkpLGY9cigxOCkscz1yKDIpLHU9by5iYXNlLGg9YS51dGlscy5hc3NlcnQ7cyhuLHUpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1PbmVBP3QucmVkTmVnKCk6dGhpcy5hLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub25lQz90OnRoaXMuYy5yZWRNdWwodCl9LG4ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5wb2ludCh0LGUscixuKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IGYodCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLG49dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChyKSksaT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwocikpLG89bi5yZWRNdWwoaS5yZWRJbnZtKCkpLGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIHM9YS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oZSYmIXN8fCFlJiZzKSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludCh0LGEpfSxuLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj1yLnJlZFN1Yih0aGlzLm9uZSksaT1yLnJlZE11bCh0aGlzLmQpLnJlZEFkZCh0aGlzLm9uZSksbz1uLnJlZE11bChpLnJlZEludm0oKSk7aWYoMD09PW8uY21wKHRoaXMuemVybykpe2lmKGUpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sdCl9dmFyIGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIGEuaXNPZGQoKSE9PWUmJihhPWEucmVkTmVnKCkpLHRoaXMucG9pbnQoYSx0KX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuITA7dC5ub3JtYWxpemUoKTt2YXIgZT10LngucmVkU3FyKCkscj10LnkucmVkU3FyKCksbj1lLnJlZE11bCh0aGlzLmEpLnJlZEFkZChyKSxpPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKGUpLnJlZE11bChyKSkpO3JldHVybiAwPT09bi5jbXAoaSl9LHMoaSx1LkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUscixuKX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0LGVbMF0sZVsxXSxlWzJdKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJjA9PT10aGlzLnkuY21wKHRoaXMueil9LGkucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCk7cj1yLnJlZElBZGQocik7dmFyIG49dGhpcy5jdXJ2ZS5fbXVsQSh0KSxpPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHQpLnJlZElTdWIoZSksbz1uLnJlZEFkZChlKSxhPW8ucmVkU3ViKHIpLGY9bi5yZWRTdWIoZSkscz1pLnJlZE11bChhKSx1PW8ucmVkTXVsKGYpLGg9aS5yZWRNdWwoZiksYz1hLnJlZE11bChvKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzLHUsYyxoKX0saS5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksaT10aGlzLngucmVkU3FyKCksbz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgYT10aGlzLmN1cnZlLl9tdWxBKGkpLGY9YS5yZWRBZGQobyk7aWYodGhpcy56T25lKXQ9bi5yZWRTdWIoaSkucmVkU3ViKG8pLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLGU9Zi5yZWRNdWwoYS5yZWRTdWIobykpLHI9Zi5yZWRTcXIoKS5yZWRTdWIoZikucmVkU3ViKGYpO2Vsc2V7dmFyIHM9dGhpcy56LnJlZFNxcigpLHU9Zi5yZWRTdWIocykucmVkSVN1YihzKTt0PW4ucmVkU3ViKGkpLnJlZElTdWIobykucmVkTXVsKHUpLGU9Zi5yZWRNdWwoYS5yZWRTdWIobykpLHI9Zi5yZWRNdWwodSl9fWVsc2V7dmFyIGE9aS5yZWRBZGQobykscz10aGlzLmN1cnZlLl9tdWxDKHRoaXMuYy5yZWRNdWwodGhpcy56KSkucmVkU3FyKCksdT1hLnJlZFN1YihzKS5yZWRTdWIocyk7dD10aGlzLmN1cnZlLl9tdWxDKG4ucmVkSVN1YihhKSkucmVkTXVsKHUpLGU9dGhpcy5jdXJ2ZS5fbXVsQyhhKS5yZWRNdWwoaS5yZWRJU3ViKG8pKSxyPWEucmVkTXVsKHUpfXJldHVybiB0aGlzLmN1cnZlLnBvaW50KHQsZSxyKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LGkucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh0LnkucmVkU3ViKHQueCkpLHI9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh0LnkucmVkQWRkKHQueCkpLG49dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwodC50KSxpPXRoaXMuei5yZWRNdWwodC56LnJlZEFkZCh0LnopKSxvPXIucmVkU3ViKGUpLGE9aS5yZWRTdWIobiksZj1pLnJlZEFkZChuKSxzPXIucmVkQWRkKGUpLHU9by5yZWRNdWwoYSksaD1mLnJlZE11bChzKSxjPW8ucmVkTXVsKHMpLGQ9YS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodSxoLGQsYyl9LGkucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLnoucmVkTXVsKHQueiksaT1uLnJlZFNxcigpLG89dGhpcy54LnJlZE11bCh0LngpLGE9dGhpcy55LnJlZE11bCh0LnkpLGY9dGhpcy5jdXJ2ZS5kLnJlZE11bChvKS5yZWRNdWwoYSkscz1pLnJlZFN1YihmKSx1PWkucmVkQWRkKGYpLGg9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh0LngucmVkQWRkKHQueSkpLnJlZElTdWIobykucmVkSVN1YihhKSxjPW4ucmVkTXVsKHMpLnJlZE11bChoKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhlPW4ucmVkTXVsKHUpLnJlZE11bChhLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKG8pKSkscj1zLnJlZE11bCh1KSk6KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKG8pKSxyPXRoaXMuY3VydmUuX211bEMocykucmVkTXVsKHUpKSx0aGlzLmN1cnZlLnBvaW50KGMsZSxyKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90OnQuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQodCk6dGhpcy5fcHJvakFkZCh0KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKHQpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsdCk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsZV0sW3Qscl0sMiwhMSl9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsZV0sW3Qscl0sMiwhMCl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0KSx0aGlzLnk9dGhpcy55LnJlZE11bCh0KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh0KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxpLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHwwPT09dGhpcy5nZXRYKCkuY21wKHQuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcCh0LmdldFkoKSl9LGkucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChlKSlyZXR1cm4hMDtmb3IodmFyIHI9dC5jbG9uZSgpLG49dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKHIuaWFkZCh0aGlzLmN1cnZlLm4pLHIuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoZS5yZWRJQWRkKG4pLDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwfXJldHVybiExfSxpLnByb3RvdHlwZS50b1A9aS5wcm90b3R5cGUubm9ybWFsaXplLGkucHJvdG90eXBlLm1peGVkQWRkPWkucHJvdG90eXBlLmFkZH0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cy5jYWxsKHRoaXMsXCJtb250XCIsdCksdGhpcy5hPW5ldyBhKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYSh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBhKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IGEoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBpKHQsZSxyKXtzLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcInByb2plY3RpdmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYShlLDE2KSx0aGlzLno9bmV3IGEociwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX12YXIgbz1yKDk5KSxhPXIoMTgpLGY9cigyKSxzPW8uYmFzZSx1PXIoMTkpLGg9dS51dGlscztmKG4scyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3JtYWxpemUoKS54LHI9ZS5yZWRTcXIoKSxuPXIucmVkTXVsKGUpLnJlZEFkZChyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoZSksaT1uLnJlZFNxcnQoKTtyZXR1cm4gMD09PWkucmVkU3FyKCkuY21wKG4pfSxmKGkscy5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucG9pbnQoaC50b0FycmF5KHQsZSksMSl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdfHx0Lm9uZSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZEFkZCh0aGlzLnopLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRTdWIodGhpcy56KSxuPXIucmVkU3FyKCksaT1lLnJlZFN1YihuKSxvPWUucmVkTXVsKG4pLGE9aS5yZWRNdWwobi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKGkpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy54LnJlZEFkZCh0aGlzLnopLG49dGhpcy54LnJlZFN1Yih0aGlzLnopLGk9dC54LnJlZEFkZCh0LnopLG89dC54LnJlZFN1Yih0LnopLGE9by5yZWRNdWwociksZj1pLnJlZE11bChuKSxzPWUuei5yZWRNdWwoYS5yZWRBZGQoZikucmVkU3FyKCkpLHU9ZS54LnJlZE11bChhLnJlZElTdWIoZikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPXRoaXMsbz1bXTswIT09ZS5jbXBuKDApO2UuaXVzaHJuKDEpKW8ucHVzaChlLmFuZGxuKDEpKTtmb3IodmFyIGE9by5sZW5ndGgtMTthPj0wO2EtLSkwPT09b1thXT8ocj1yLmRpZmZBZGQobixpKSxuPW4uZGJsKCkpOihuPXIuZGlmZkFkZChuLGkpLHI9ci5kYmwoKSk7cmV0dXJuIG59LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aC5jYWxsKHRoaXMsXCJzaG9ydFwiLHQpLHRoaXMuYT1uZXcgcyh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHModC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbSh0KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBpKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiYWZmaW5lXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLG4mJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gbyh0LGUscixuKXtoLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcImphY29iaWFuXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBzKDApKToodGhpcy54PW5ldyBzKGUsMTYpLHRoaXMueT1uZXcgcyhyLDE2KSx0aGlzLno9bmV3IHMobiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX12YXIgYT1yKDk5KSxmPXIoMTkpLHM9cigxOCksdT1yKDIpLGg9YS5iYXNlLGM9Zi51dGlscy5hc3NlcnQ7dShuLGgpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24odCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGUscjtpZih0LmJldGEpZT1uZXcgcyh0LmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBuPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO2U9blswXS5jbXAoblsxXSk8MD9uWzBdOm5bMV0sZT1lLnRvUmVkKHRoaXMucmVkKX1pZih0LmxhbWJkYSlyPW5ldyBzKHQubGFtYmRhLDE2KTtlbHNle3ZhciBpPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGlbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChlKSk/cj1pWzBdOihyPWlbMV0sYygwPT09dGhpcy5nLm11bChyKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpKSl9dmFyIG87cmV0dXJuIG89dC5iYXNpcz90LmJhc2lzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57YTpuZXcgcyh0LmEsMTYpLGI6bmV3IHModC5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocikse2JldGE6ZSxsYW1iZGE6cixiYXNpczpvfX19LG4ucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXRoaXMucD90aGlzLnJlZDpzLm1vbnQodCkscj1uZXcgcygyKS50b1JlZChlKS5yZWRJbnZtKCksbj1yLnJlZE5lZygpLGk9bmV3IHMoMykudG9SZWQoZSkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChyKSxvPW4ucmVkQWRkKGkpLmZyb21SZWQoKSxhPW4ucmVkU3ViKGkpLmZyb21SZWQoKTtyZXR1cm5bbyxhXX0sbi5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksbyxhLGYsdSxoLGM9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxkPXQsbD10aGlzLm4uY2xvbmUoKSxwPW5ldyBzKDEpLGI9bmV3IHMoMCksdj1uZXcgcygwKSx5PW5ldyBzKDEpLG09MDswIT09ZC5jbXBuKDApOyl7dmFyIGc9bC5kaXYoZCk7dT1sLnN1YihnLm11bChkKSksaD12LnN1YihnLm11bChwKSk7dmFyIHc9eS5zdWIoZy5tdWwoYikpO2lmKCFuJiZ1LmNtcChjKTwwKWU9Zi5uZWcoKSxyPXAsbj11Lm5lZygpLGk9aDtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7Zj11LGw9ZCxkPXUsdj1wLHA9aCx5PWIsYj13fW89dS5uZWcoKSxhPWg7dmFyIF89bi5zcXIoKS5hZGQoaS5zcXIoKSksTT1vLnNxcigpLmFkZChhLnNxcigpKTtyZXR1cm4gTS5jbXAoXyk+PTAmJihvPWUsYT1yKSxuLm5lZ2F0aXZlJiYobj1uLm5lZygpLGk9aS5uZWcoKSksby5uZWdhdGl2ZSYmKG89by5uZWcoKSxhPWEubmVnKCkpLFt7YTpuLGI6aX0se2E6byxiOmF9XX0sbi5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVuZG8uYmFzaXMscj1lWzBdLG49ZVsxXSxpPW4uYi5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxvPXIuYi5uZWcoKS5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxhPWkubXVsKHIuYSksZj1vLm11bChuLmEpLHM9aS5tdWwoci5iKSx1PW8ubXVsKG4uYiksaD10LnN1YihhKS5zdWIoZiksYz1zLmFkZCh1KS5uZWcoKTtyZXR1cm57azE6aCxrMjpjfX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IHModCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKHQucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBpPW4uZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFpfHwhZSYmaSkmJihuPW4ucmVkTmVnKCkpLHRoaXMucG9pbnQodCxuKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pbmYpcmV0dXJuITA7dmFyIGU9dC54LHI9dC55LG49dGhpcy5hLnJlZE11bChlKSxpPWUucmVkU3FyKCkucmVkTXVsKGUpLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09ci5yZWRTcXIoKS5yZWRJU3ViKGkpLmNtcG4oMCl9LG4ucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMuX2VuZG9XbmFmVDEsaT10aGlzLl9lbmRvV25hZlQyLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dGhpcy5fZW5kb1NwbGl0KGVbb10pLGY9dFtvXSxzPWYuX2dldEJldGEoKTthLmsxLm5lZ2F0aXZlJiYoYS5rMS5pbmVnKCksZj1mLm5lZyghMCkpLGEuazIubmVnYXRpdmUmJihhLmsyLmluZWcoKSxzPXMubmVnKCEwKSksblsyKm9dPWYsblsyKm8rMV09cyxpWzIqb109YS5rMSxpWzIqbysxXT1hLmsyfWZvcih2YXIgdT10aGlzLl93bmFmTXVsQWRkKDEsbixpLDIqbyxyKSxoPTA7aDwyKm87aCsrKW5baF09bnVsbCxpW2hdPW51bGw7cmV0dXJuIHV9LHUoaSxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCxlKX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciB0PXRoaXMucHJlY29tcHV0ZWQ7aWYodCYmdC5iZXRhKXJldHVybiB0LmJldGE7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKHQpe3ZhciByPXRoaXMuY3VydmUsbj1mdW5jdGlvbih0KXtyZXR1cm4gci5wb2ludCh0LngucmVkTXVsKHIuZW5kby5iZXRhKSx0LnkpfTt0LmJldGE9ZSxlLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOnQubmFmJiZ7d25kOnQubmFmLnduZCxwb2ludHM6dC5uYWYucG9pbnRzLm1hcChuKX0sZG91Ymxlczp0LmRvdWJsZXMmJntzdGVwOnQuZG91Ymxlcy5zdGVwLHBvaW50czp0LmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdC5wb2ludChlWzBdLGVbMV0scil9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPUpTT04ucGFyc2UoZSkpO3ZhciBpPXQucG9pbnQoZVswXSxlWzFdLHIpO2lmKCFlWzJdKXJldHVybiBpO3ZhciBvPWVbMl07cmV0dXJuIGkucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltpXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAobikpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbaV0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAobikpfX0saX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdDtpZih0LmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKHQpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEodCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcCh0LngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy55LnJlZFN1Yih0LnkpOzAhPT1lLmNtcG4oMCkmJihlPWUucmVkTXVsKHRoaXMueC5yZWRTdWIodC54KS5yZWRJbnZtKCkpKTt2YXIgcj1lLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHQueCksbj1lLnJlZE11bCh0aGlzLngucmVkU3ViKHIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT10LmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLmN1cnZlLmEscj10aGlzLngucmVkU3FyKCksbj10LnJlZEludm0oKSxpPXIucmVkQWRkKHIpLnJlZElBZGQocikucmVkSUFkZChlKS5yZWRNdWwobiksbz1pLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxhPWkucmVkTXVsKHRoaXMueC5yZWRTdWIobykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5ldyBzKHQsMTYpLHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFt0XSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGkpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMil9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGksITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMiwhMCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8dGhpcy5pbmY9PT10LmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcCh0LngpJiYwPT09dGhpcy55LmNtcCh0LnkpKX0saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYodCYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIHI9dGhpcy5wcmVjb21wdXRlZCxuPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZygpfTtlLnByZWNvbXB1dGVkPXtuYWY6ci5uYWYmJnt3bmQ6ci5uYWYud25kLHBvaW50czpyLm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnIuZG91YmxlcyYme3N0ZXA6ci5kb3VibGVzLnN0ZXAscG9pbnRzOnIuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9LGkucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSk7cmV0dXJuIHR9LHUobyxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IG8odGhpcyx0LGUscil9LG8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy56LnJlZEludm0oKSxlPXQucmVkU3FyKCkscj10aGlzLngucmVkTXVsKGUpLG49dGhpcy55LnJlZE11bChlKS5yZWRNdWwodCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0O2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBlPXQuei5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXRoaXMueC5yZWRNdWwoZSksaT10LngucmVkTXVsKHIpLG89dGhpcy55LnJlZE11bChlLnJlZE11bCh0LnopKSxhPXQueS5yZWRNdWwoci5yZWRNdWwodGhpcy56KSksZj1uLnJlZFN1YihpKSxzPW8ucmVkU3ViKGEpO2lmKDA9PT1mLmNtcG4oMCkpcmV0dXJuIDAhPT1zLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHU9Zi5yZWRTcXIoKSxoPXUucmVkTXVsKGYpLGM9bi5yZWRNdWwodSksZD1zLnJlZFNxcigpLnJlZElBZGQoaCkucmVkSVN1YihjKS5yZWRJU3ViKGMpLGw9cy5yZWRNdWwoYy5yZWRJU3ViKGQpKS5yZWRJU3ViKG8ucmVkTXVsKGgpKSxwPXRoaXMuei5yZWRNdWwodC56KS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGQsbCxwKX0sby5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQudG9KKCk7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dGhpcy54LG49dC54LnJlZE11bChlKSxpPXRoaXMueSxvPXQueS5yZWRNdWwoZSkucmVkTXVsKHRoaXMueiksYT1yLnJlZFN1YihuKSxmPWkucmVkU3ViKG8pO2lmKDA9PT1hLmNtcG4oMCkpcmV0dXJuIDAhPT1mLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHM9YS5yZWRTcXIoKSx1PXMucmVkTXVsKGEpLGg9ci5yZWRNdWwocyksYz1mLnJlZFNxcigpLnJlZElBZGQodSkucmVkSVN1YihoKS5yZWRJU3ViKGgpLGQ9Zi5yZWRNdWwoaC5yZWRJU3ViKGMpKS5yZWRJU3ViKGkucmVkTXVsKHUpKSxsPXRoaXMuei5yZWRNdWwoYSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGMsZCxsKX0sby5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighdClyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfWZvcih2YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnksZj10aGlzLnoscz1mLnJlZFNxcigpLnJlZFNxcigpLHU9YS5yZWRBZGQoYSkscj0wO3I8dDtyKyspe3ZhciBoPW8ucmVkU3FyKCksYz11LnJlZFNxcigpLGQ9Yy5yZWRTcXIoKSxsPWgucmVkQWRkKGgpLnJlZElBZGQoaCkucmVkSUFkZChuLnJlZE11bChzKSkscD1vLnJlZE11bChjKSxiPWwucmVkU3FyKCkucmVkSVN1YihwLnJlZEFkZChwKSksdj1wLnJlZElTdWIoYikseT1sLnJlZE11bCh2KTt5PXkucmVkSUFkZCh5KS5yZWRJU3ViKGQpO3ZhciBtPXUucmVkTXVsKGYpO3IrMTx0JiYocz1zLnJlZE11bChkKSksbz1iLGY9bSx1PXl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG8sdS5yZWRNdWwoaSksZil9LG8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LG8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBmPW4ucmVkQWRkKG4pLnJlZElBZGQobikscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKSx1PW8ucmVkSUFkZChvKTt1PXUucmVkSUFkZCh1KSx1PXUucmVkSUFkZCh1KSx0PXMsZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLngucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9dGhpcy54LnJlZEFkZChjKS5yZWRTcXIoKS5yZWRJU3ViKGgpLnJlZElTdWIoZCk7bD1sLnJlZElBZGQobCk7dmFyIHA9aC5yZWRBZGQoaCkucmVkSUFkZChoKSxiPXAucmVkU3FyKCksdj1kLnJlZElBZGQoZCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdD1iLnJlZElTdWIobCkucmVkSVN1YihsKSxlPXAucmVkTXVsKGwucmVkSVN1Yih0KSkucmVkSVN1Yih2KSxyPXRoaXMueS5yZWRNdWwodGhpcy56KSxyPXIucmVkSUFkZChyKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuY3VydmUuYSkscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKTt0PXM7dmFyIHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLGU9Zi5yZWRNdWwoYS5yZWRJU3ViKHMpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGg9dGhpcy56LnJlZFNxcigpLGM9dGhpcy55LnJlZFNxcigpLGQ9dGhpcy54LnJlZE11bChjKSxsPXRoaXMueC5yZWRTdWIoaCkucmVkTXVsKHRoaXMueC5yZWRBZGQoaCkpO2w9bC5yZWRBZGQobCkucmVkSUFkZChsKTt2YXIgcD1kLnJlZElBZGQoZCk7cD1wLnJlZElBZGQocCk7dmFyIGI9cC5yZWRBZGQocCk7dD1sLnJlZFNxcigpLnJlZElTdWIoYikscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihjKS5yZWRJU3ViKGgpO3ZhciB2PWMucmVkU3FyKCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksZT1sLnJlZE11bChwLnJlZElTdWIodCkpLnJlZElTdWIodil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHQsZSxyKX0sby5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VydmUuYSxlPXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz1lLnJlZFNxcigpLGE9ci5yZWRTcXIoKSxmPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZCh0LnJlZE11bChpKSkscz1lLnJlZEFkZChlKTtzPXMucmVkSUFkZChzKTt2YXIgdT1zLnJlZE11bChhKSxoPWYucmVkU3FyKCkucmVkSVN1Yih1LnJlZEFkZCh1KSksYz11LnJlZElTdWIoaCksZD1hLnJlZFNxcigpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPWYucmVkTXVsKGMpLnJlZElTdWIoZCkscD1yLnJlZEFkZChyKS5yZWRNdWwobik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGgsbCxwKX0sby5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj1lLnJlZFNxcigpLGk9dC5yZWRBZGQodCkucmVkSUFkZCh0KSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihuKTthPWEucmVkSUFkZChhKSxhPWEucmVkQWRkKGEpLnJlZElBZGQoYSksYT1hLnJlZElTdWIobyk7dmFyIGY9YS5yZWRTcXIoKSxzPW4ucmVkSUFkZChuKTtzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKTt2YXIgdT1pLnJlZElBZGQoYSkucmVkU3FyKCkucmVkSVN1YihvKS5yZWRJU3ViKGYpLnJlZElTdWIocyksaD1lLnJlZE11bCh1KTtoPWgucmVkSUFkZChoKSxoPWgucmVkSUFkZChoKTt2YXIgYz10aGlzLngucmVkTXVsKGYpLnJlZElTdWIoaCk7Yz1jLnJlZElBZGQoYyksYz1jLnJlZElBZGQoYyk7dmFyIGQ9dGhpcy55LnJlZE11bCh1LnJlZE11bChzLnJlZElTdWIodSkpLnJlZElTdWIoYS5yZWRNdWwoZikpKTtkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKTt2YXIgbD10aGlzLnoucmVkQWRkKGEpLnJlZFNxcigpLnJlZElTdWIocikucmVkSVN1YihmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1uZXcgcyh0LGUpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7aWYoXCJhZmZpbmVcIj09PXQudHlwZSlyZXR1cm4gdGhpcy5lcSh0LnRvSigpKTtpZih0aGlzPT09dClyZXR1cm4hMDt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwocikucmVkSVN1Yih0LngucmVkTXVsKGUpKS5jbXBuKDApKXJldHVybiExO3ZhciBuPWUucmVkTXVsKHRoaXMueiksaT1yLnJlZE11bCh0LnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChpKS5yZWRJU3ViKHQueS5yZWRNdWwobikpLmNtcG4oMCl9LG8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoZSk7aWYoMD09PXRoaXMueC5jbXAocikpcmV0dXJuITA7Zm9yKHZhciBuPXQuY2xvbmUoKSxpPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoZSk7Oyl7aWYobi5pYWRkKHRoaXMuY3VydmUubiksbi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihyLnJlZElBZGQoaSksMD09PXRoaXMueC5jbXAocikpcmV0dXJuITB9cmV0dXJuITF9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgSlBvaW50IEluZmluaXR5PlwiOlwiPEVDIEpQb2ludCB4OiBcIit0aGlzLngudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei50b1N0cmluZygxNiwyKStcIj5cIn0sby5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtcInNob3J0XCI9PT10LnR5cGU/dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5zaG9ydCh0KTpcImVkd2FyZHNcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLmVkd2FyZHModCk6dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5tb250KHQpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9dC5oYXNoLHModGhpcy5nLnZhbGlkYXRlKCksXCJJbnZhbGlkIGN1cnZlXCIpLHModGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSxcIkludmFsaWQgY3VydmUsIEcqTiAhPSBPXCIpfWZ1bmN0aW9uIGkodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgbihlKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0pLHJ9fSl9dmFyIG89ZSxhPXIoNDkpLGY9cigxOSkscz1mLnV0aWxzLmFzc2VydDtvLlByZXNldEN1cnZlPW4saShcInAxOTJcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMTkyXCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTJcIixcIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExXCJdfSksaShcInAyMjRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMjI0XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlXCIsYjpcImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjFcIixcImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0XCJdfSksaShcInAyNTZcIix7XG50eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YlwiLG46XCJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MVwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2XCIsXCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNVwiXX0pLGkoXCJwMzg0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjXCIsYjpcImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczXCIsaGFzaDphLnNoYTM4NCxnUmVkOiExLGc6W1wiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjdcIixcIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmXCJdfSksaShcInA1MjFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDBcIixuOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDlcIixoYXNoOmEuc2hhNTEyLGdSZWQ6ITEsZzpbXCIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NlwiLFwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTBcIl19KSxpKFwiY3VydmUyNTUxOVwiLHt0eXBlOlwibW9udFwiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiNzZkMDZcIixiOlwiMFwiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiOVwiXX0pLGkoXCJlZDI1NTE5XCIse3R5cGU6XCJlZHdhcmRzXCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCItMVwiLGM6XCIxXCIsZDpcIjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTNcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWFcIixcIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NThcIl19KTt2YXIgdTt0cnl7dT1yKDUyMCl9Y2F0Y2godCl7dT12b2lkIDB9aShcInNlY3AyNTZrMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcImsyNTZcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIixhOlwiMFwiLGI6XCI3XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxXCIsaDpcIjFcIixoYXNoOmEuc2hhMjU2LGJldGE6XCI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlXCIsbGFtYmRhOlwiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MlwiLGJhc2lzOlt7YTpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCIsYjpcIi1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjM1wifSx7YTpcIjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOFwiLGI6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwifV0sZ1JlZDohMSxnOltcIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OThcIixcIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjhcIix1XX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZihvLmN1cnZlcy5oYXNPd25Qcm9wZXJ0eSh0KSxcIlVua25vd24gY3VydmUgXCIrdCksdD1vLmN1cnZlc1t0XSksdCBpbnN0YW5jZW9mIG8uY3VydmVzLlByZXNldEN1cnZlJiYodD17Y3VydmU6dH0pLHRoaXMuY3VydmU9dC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPXQuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZSh0LmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdm9pZCh0aGlzLmhhc2g9dC5oYXNofHx0LmN1cnZlLmhhc2gpKTpuZXcgbih0KX12YXIgaT1yKDE4KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9cig1MTQpLHU9cig1MTUpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVByaXZhdGUodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVB1YmxpYyh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24odCl7dHx8KHQ9e30pO2Zvcih2YXIgZT1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gscGVyczp0LnBlcnMsZW50cm9weTp0LmVudHJvcHl8fG8ucmFuZCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxub25jZTp0aGlzLm4udG9BcnJheSgpfSkscj10aGlzLm4uYnl0ZUxlbmd0aCgpLG49dGhpcy5uLnN1YihuZXcgaSgyKSk7Oyl7dmFyIGE9bmV3IGkoZS5nZW5lcmF0ZShyKSk7aWYoIShhLmNtcChuKT4wKSlyZXR1cm4gYS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKGEpfX0sbi5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCp0LmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHI+MCYmKHQ9dC51c2hybihyKSksIWUmJnQuY21wKHRoaXMubik+PTA/dC5zdWIodGhpcy5uKTp0fSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyLG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksbnx8KG49e30pLGU9dGhpcy5rZXlGcm9tUHJpdmF0ZShlLHIpLHQ9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpO2Zvcih2YXIgYT10aGlzLm4uYnl0ZUxlbmd0aCgpLGY9ZS5nZXRQcml2YXRlKCkudG9BcnJheShcImJlXCIsYSkscz10LnRvQXJyYXkoXCJiZVwiLGEpLGg9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6Zixub25jZTpzLHBlcnM6bi5wZXJzLHBlcnNFbmM6bi5wZXJzRW5jfSksYz10aGlzLm4uc3ViKG5ldyBpKDEpKSxkPTA7ITA7ZCsrKXt2YXIgbD1uLms/bi5rKGQpOm5ldyBpKGguZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKGw9dGhpcy5fdHJ1bmNhdGVUb04obCwhMCksIShsLmNtcG4oMSk8PTB8fGwuY21wKGMpPj0wKSl7dmFyIHA9dGhpcy5nLm11bChsKTtpZighcC5pc0luZmluaXR5KCkpe3ZhciBiPXAuZ2V0WCgpLHY9Yi51bW9kKHRoaXMubik7aWYoMCE9PXYuY21wbigwKSl7dmFyIHk9bC5pbnZtKHRoaXMubikubXVsKHYubXVsKGUuZ2V0UHJpdmF0ZSgpKS5pYWRkKHQpKTtpZih5PXkudW1vZCh0aGlzLm4pLDAhPT15LmNtcG4oMCkpe3ZhciBtPShwLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1iLmNtcCh2KT8yOjApO3JldHVybiBuLmNhbm9uaWNhbCYmeS5jbXAodGhpcy5uaCk+MCYmKHk9dGhpcy5uLnN1Yih5KSxtXj0xKSxuZXcgdSh7cjp2LHM6eSxyZWNvdmVyeVBhcmFtOm19KX19fX19fSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIsbil7dD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSkscj10aGlzLmtleUZyb21QdWJsaWMocixuKSxlPW5ldyB1KGUsXCJoZXhcIik7dmFyIG89ZS5yLGE9ZS5zO2lmKG8uY21wbigxKTwwfHxvLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO2lmKGEuY21wbigxKTwwfHxhLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBmPWEuaW52bSh0aGlzLm4pLHM9Zi5tdWwodCkudW1vZCh0aGlzLm4pLGg9Zi5tdWwobykudW1vZCh0aGlzLm4pO2lmKCF0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2spe3ZhciBjPXRoaXMuZy5tdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmMD09PWMuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAobyl9dmFyIGM9dGhpcy5nLmptdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmYy5lcVhUb1Aobyl9LG4ucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24odCxlLHIsbil7ZigoMyZyKT09PXIsXCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzXCIpLGU9bmV3IHUoZSxuKTt2YXIgbz10aGlzLm4sYT1uZXcgaSh0KSxzPWUucixoPWUucyxjPTEmcixkPXI+PjE7aWYocy5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmQpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlXCIpO3M9ZD90aGlzLmN1cnZlLnBvaW50RnJvbVgocy5hZGQodGhpcy5jdXJ2ZS5uKSxjKTp0aGlzLmN1cnZlLnBvaW50RnJvbVgocyxjKTt2YXIgbD1lLnIuaW52bShvKSxwPW8uc3ViKGEpLm11bChsKS51bW9kKG8pLGI9aC5tdWwobCkudW1vZChvKTtyZXR1cm4gdGhpcy5nLm11bEFkZChwLHMsYil9LG4ucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24odCxlLHIsbil7aWYoZT1uZXcgdShlLG4pLG51bGwhPT1lLnJlY292ZXJ5UGFyYW0pcmV0dXJuIGUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgbzt0cnl7bz10aGlzLnJlY292ZXJQdWJLZXkodCxlLGkpfWNhdGNoKHQpe2NvbnRpbnVlfWlmKG8uZXEocikpcmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yXCIpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVjPXQsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxlLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoZS5wcml2LGUucHJpdkVuYyksZS5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhlLnB1YixlLnB1YkVuYyl9dmFyIGk9cigxOCk7dC5leHBvcnRzPW4sbi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZSxwdWJFbmM6cn0pfSxuLmZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwcml2OmUscHJpdkVuYzpyfSl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gdC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246XCJJbnZhbGlkIHB1YmxpYyBrZXlcIn06dC52YWxpZGF0ZSgpP3QubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSAqIE4gIT0gT1wifTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnRcIn19LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZT10LHQ9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLGU/dGhpcy5wdWIuZW5jb2RlKGUsdCk6dGhpcy5wdWJ9LG4ucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sbi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLnByaXY9bmV3IGkodCxlfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG4ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54fHx0Lnk/dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KHQueCx0LnkpKTp2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQodCxlKSl9LG4ucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmVjLnNpZ24odCx0aGlzLGUscil9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVjLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIjxLZXkgcHJpdjogXCIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKStcIiBwdWI6IFwiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKStcIiA+XCJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90OnZvaWQodGhpcy5faW1wb3J0REVSKHQsZSl8fChjKHQuciYmdC5zLFwiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzXCIpLHRoaXMucj1uZXcgcyh0LnIsMTYpLHRoaXMucz1uZXcgcyh0LnMsMTYpLHZvaWQgMD09PXQucmVjb3ZlcnlQYXJhbT90aGlzLnJlY292ZXJ5UGFyYW09bnVsbDp0aGlzLnJlY292ZXJ5UGFyYW09dC5yZWNvdmVyeVBhcmFtKSl9ZnVuY3Rpb24gaSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dFtlLnBsYWNlKytdO2lmKCEoMTI4JnIpKXJldHVybiByO2Zvcih2YXIgbj0xNSZyLGk9MCxvPTAsYT1lLnBsYWNlO288bjtvKyssYSsrKWk8PD04LGl8PXRbYV07cmV0dXJuIGUucGxhY2U9YSxpfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xOyF0W2VdJiYhKDEyOCZ0W2UrMV0pJiZlPHI7KWUrKztyZXR1cm4gMD09PWU/dDp0LnNsaWNlKGUpfWZ1bmN0aW9uIGYodCxlKXtpZihlPDEyOClyZXR1cm4gdm9pZCB0LnB1c2goZSk7dmFyIHI9MSsoTWF0aC5sb2coZSkvTWF0aC5MTjI+Pj4zKTtmb3IodC5wdXNoKDEyOHxyKTstLXI7KXQucHVzaChlPj4+KHI8PDMpJjI1NSk7dC5wdXNoKGUpfXZhciBzPXIoMTgpLHU9cigxOSksaD11LnV0aWxzLGM9aC5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbih0LGUpe3Q9aC50b0FycmF5KHQsZSk7dmFyIHI9bmV3IGk7aWYoNDghPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIG49byh0LHIpO2lmKG4rci5wbGFjZSE9PXQubGVuZ3RoKXJldHVybiExO2lmKDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIGE9byh0LHIpLGY9dC5zbGljZShyLnBsYWNlLGErci5wbGFjZSk7aWYoci5wbGFjZSs9YSwyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciB1PW8odCxyKTtpZih0Lmxlbmd0aCE9PXUrci5wbGFjZSlyZXR1cm4hMTt2YXIgYz10LnNsaWNlKHIucGxhY2UsdStyLnBsYWNlKTtyZXR1cm4gMD09PWZbMF0mJjEyOCZmWzFdJiYoZj1mLnNsaWNlKDEpKSwwPT09Y1swXSYmMTI4JmNbMV0mJihjPWMuc2xpY2UoMSkpLHRoaXMucj1uZXcgcyhmKSx0aGlzLnM9bmV3IHMoYyksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LG4ucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuci50b0FycmF5KCkscj10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpLGU9YShlKSxyPWEocik7IShyWzBdfHwxMjgmclsxXSk7KXI9ci5zbGljZSgxKTt2YXIgbj1bMl07ZihuLGUubGVuZ3RoKSxuPW4uY29uY2F0KGUpLG4ucHVzaCgyKSxmKG4sci5sZW5ndGgpO3ZhciBpPW4uY29uY2F0KHIpLG89WzQ4XTtyZXR1cm4gZihvLGkubGVuZ3RoKSxvPW8uY29uY2F0KGkpLGguZW5jb2RlKG8sdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZihmKFwiZWQyNTUxOVwiPT09dCxcIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXJcIiksISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3ZhciB0PW8uY3VydmVzW3RdLmN1cnZlO3RoaXMuY3VydmU9dCx0aGlzLmc9dC5nLHRoaXMuZy5wcmVjb21wdXRlKHQubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9dC5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHQubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9aS5zaGE1MTJ9dmFyIGk9cig0OSksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEucGFyc2VCeXRlcyx1PXIoNTE3KSxoPXIoNTE4KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSl7dD1zKHQpO3ZhciByPXRoaXMua2V5RnJvbVNlY3JldChlKSxuPXRoaXMuaGFzaEludChyLm1lc3NhZ2VQcmVmaXgoKSx0KSxpPXRoaXMuZy5tdWwobiksbz10aGlzLmVuY29kZVBvaW50KGkpLGE9dGhpcy5oYXNoSW50KG8sci5wdWJCeXRlcygpLHQpLm11bChyLnByaXYoKSksZj1uLmFkZChhKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjppLFM6ZixSZW5jb2RlZDpvfSl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscil7dD1zKHQpLGU9dGhpcy5tYWtlU2lnbmF0dXJlKGUpO3ZhciBuPXRoaXMua2V5RnJvbVB1YmxpYyhyKSxpPXRoaXMuaGFzaEludChlLlJlbmNvZGVkKCksbi5wdWJCeXRlcygpLHQpLG89dGhpcy5nLm11bChlLlMoKSksYT1lLlIoKS5hZGQobi5wdWIoKS5tdWwoaSkpO3JldHVybiBhLmVxKG8pfSxuLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaGFzaCgpLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQudXBkYXRlKGFyZ3VtZW50c1tlXSk7cmV0dXJuIGEuaW50RnJvbUxFKHQuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tUHVibGljKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVNlY3JldCh0aGlzLHQpfSxuLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaD90Om5ldyBoKHRoaXMsdCl9LG4ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0WSgpLnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBlW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PXQuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsZX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dD1hLnBhcnNlQnl0ZXModCk7dmFyIGU9dC5sZW5ndGgtMSxyPXQuc2xpY2UoMCxlKS5jb25jYXQodFtlXSYtMTI5KSxuPTAhPT0oMTI4JnRbZV0pLGk9YS5pbnRGcm9tTEUocik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShpLG4pfSxuLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LG4ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gYS5pbnRGcm9tTEUodCl9LG4ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCx0aGlzLl9zZWNyZXQ9ZihlLnNlY3JldCksdC5pc1BvaW50KGUucHViKT90aGlzLl9wdWI9ZS5wdWI6dGhpcy5fcHViQnl0ZXM9ZihlLnB1Yil9dmFyIGk9cigxOSksbz1pLnV0aWxzLGE9by5hc3NlcnQsZj1vLnBhcnNlQnl0ZXMscz1vLmNhY2hlZFByb3BlcnR5O24uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplfSl9LG4uZnJvbVNlY3JldD1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3NlY3JldDplfSl9LG4ucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LHMobixcInB1YkJ5dGVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLHMobixcInB1YlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSkscyhuLFwicHJpdkJ5dGVzXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZHNhLGU9dGhpcy5oYXNoKCkscj10LmVuY29kaW5nTGVuZ3RoLTEsbj1lLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIG5bMF0mPTI0OCxuW3JdJj0xMjcsbltyXXw9NjQsbn0pLHMobixcInByaXZcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLHMobixcImhhc2hcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxzKG4sXCJtZXNzYWdlUHJlZml4XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5XCIpLHRoaXMuZWRkc2Euc2lnbih0LHRoaXMpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBpcyBwdWJsaWMgb25seVwiKSxvLmVuY29kZSh0aGlzLnNlY3JldCgpLHQpfSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZW5jb2RlKHRoaXMucHViQnl0ZXMoKSx0KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT11KGUpKSxBcnJheS5pc0FycmF5KGUpJiYoZT17UjplLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCksUzplLnNsaWNlKHQuZW5jb2RpbmdMZW5ndGgpfSksZihlLlImJmUuUyxcIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgU1wiKSx0LmlzUG9pbnQoZS5SKSYmKHRoaXMuX1I9ZS5SKSxlLlMgaW5zdGFuY2VvZiBpJiYodGhpcy5fUz1lLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5SKT9lLlI6ZS5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUyk/ZS5TOmUuU2VuY29kZWR9dmFyIGk9cigxOCksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEuY2FjaGVkUHJvcGVydHksdT1hLnBhcnNlQnl0ZXM7cyhuLFwiU1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxzKG4sXCJSXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSkscyhuLFwiUmVuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLHMobixcIlNlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksbi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LG4ucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZW5jb2RlKHRoaXMudG9CeXRlcygpLFwiaGV4XCIpLnRvVXBwZXJDYXNlKCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dGhpcy5oYXNoPXQuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF0LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXQubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLnJlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgZT1hLnRvQXJyYXkodC5lbnRyb3B5LHQuZW50cm9weUVuYykscj1hLnRvQXJyYXkodC5ub25jZSx0Lm5vbmNlRW5jKSxpPWEudG9BcnJheSh0LnBlcnMsdC5wZXJzRW5jKTtmKGUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5faW5pdChlLHIsaSl9dmFyIGk9cig0OSksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25jYXQoZSkuY29uY2F0KHIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLnJlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxuLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTt0JiYoZT1lLnVwZGF0ZSh0KSksdGhpcy5LPWUuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSx0JiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUodCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LG4ucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbih0LGUscixuKXtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSx0PWEudG9CdWZmZXIodCxlKSxyPWEudG9CdWZmZXIocixuKSxmKHQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5fdXBkYXRlKHQuY29uY2F0KHJ8fFtdKSksdGhpcy5yZXNlZWQ9MX0sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoXCJSZXNlZWQgaXMgcmVxdWlyZWRcIik7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksciYmKHI9YS50b0FycmF5KHIsbiksdGhpcy5fdXBkYXRlKHIpKTtmb3IodmFyIGk9W107aS5sZW5ndGg8dDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxpPWkuY29uY2F0KHRoaXMuVik7dmFyIG89aS5zbGljZSgwLHQpO3JldHVybiB0aGlzLl91cGRhdGUociksdGhpcy5yZXNlZWQrKyxhLmVuY29kZShvLGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1tcImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGFcIixcImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjFcIl0sW1wiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOFwiLFwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZlwiXSxbXCIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5XCIsXCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1XCJdLFtcIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDBcIixcIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOVwiXSxbXCI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjXCIsXCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2XCJdLFtcIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGFcIixcIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWZcIl0sW1wiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYVwiLFwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OVwiXSxbXCIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwXCIsXCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5XCJdLFtcImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmRcIixcIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGRcIl0sW1wiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZFwiLFwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OFwiXSxbXCJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxXCIsXCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkXCJdLFtcIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzBcIixcIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzhcIl0sW1wiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0N1wiLFwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYVwiXSxbXCIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyXCIsXCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzXCJdLFtcIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhN1wiLFwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MFwiXSxbXCIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkXCIsXCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwXCJdLFtcIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODNcIixcIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTZcIl0sW1wiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhXCIsXCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5XCJdLFtcIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZThcIixcImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTdcIl0sW1wiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZFwiLFwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYVwiXSxbXCJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1XCIsXCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkXCJdLFtcIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTRcIixcIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjJcIl0sW1wiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzY1wiLFwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNlwiXSxbXCJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2XCIsXCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmXCJdLFtcIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzlcIixcImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDFcIl0sW1wiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MVwiLFwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjM1wiXSxbXCJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiXCIsXCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmXCJdLFtcImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDNcIixcIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTdcIl0sW1wiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZFwiLFwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OFwiXSxbXCJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwXCIsXCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExXCJdLFtcIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDRcIixcImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MFwiXSxbXCI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhXCIsXCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyXCJdLFtcImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTFcIixcIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmNcIl0sW1wiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZVwiLFwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YlwiXSxbXCJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxXCIsXCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxXCJdLFtcImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWZcIixcIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NVwiXSxbXCJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4XCIsXCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwXCJdLFtcIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWRcIixcIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODRcIl0sW1wiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NlwiLFwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWRcIl0sW1wiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZFwiLFwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZFwiXSxbXCI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1XCIsXCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4XCJdLFtcImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjZcIixcIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzhcIl0sW1wiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MVwiLFwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhY1wiXSxbXCI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWNcIixcImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWZcIl0sW1wiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MVwiLFwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MlwiXSxbXCJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlXCIsXCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3XCJdLFtcIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDFcIixcImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWNcIl0sW1wiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiM1wiLFwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZFwiXSxbXCJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmXCIsXCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0XCJdLFtcIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTlcIixcImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmRcIl0sW1wiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZVwiLFwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMFwiXSxbXCJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5XCIsXCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExXCJdLFtcImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzJcIixcIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjFcIl0sW1wiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxM1wiLFwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwY1wiXSxbXCIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjXCIsXCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczXCJdLFtcIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmFcIixcIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmRcIl0sW1wiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MVwiLFwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNVwiXSxbXCI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczXCIsXCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5XCJdLFtcIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NThcIixcIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2VcIl0sW1wiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YlwiLFwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyN1wiXSxbXCJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2XCIsXCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzFcIl0sW1wiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYVwiLFwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MlwiXSxbXCI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTBcIixcIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDVcIl0sW1wiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4N1wiLFwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3M1wiXSxbXCJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlXCIsXCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyXCJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1tcImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjlcIixcIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzJcIl0sW1wiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNFwiLFwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNlwiXSxbXCI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjXCIsXCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhXCJdLFtcImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmVcIixcImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzdcIl0sW1wiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYlwiLFwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYlwiXSxbXCJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4XCIsXCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODFcIl0sW1wiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZVwiLFwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OFwiXSxbXCJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0XCIsXCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3XCJdLFtcIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmNcIixcIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2FcIl0sW1wiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNVwiLFwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4Y1wiXSxbXCIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmXCIsXCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjdcIl0sW1wiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNFwiLFwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMlwiXSxbXCJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5XCIsXCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1XCJdLFtcImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGJcIixcIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODJcIl0sW1wiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNFwiLFwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MlwiXSxbXCIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1XCIsXCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2XCJdLFtcIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzlcIixcIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OVwiXSxbXCI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkXCIsXCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmXCJdLFtcIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmZcIixcIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2FcIl0sW1wiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYlwiLFwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3XCJdLFtcImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzlcIixcImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzNcIl0sW1wiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzXCIsXCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhXCJdLFtcIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzRcIixcIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDZcIl0sW1wiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMFwiLFwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzN1wiXSxbXCI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViXCIsXCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlXCJdLFtcImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDdcIixcImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjZcIl0sW1wiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMVwiLFwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NlwiXSxbXCIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwXCIsXCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwXCJdLFtcIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzVcIixcIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MVwiXSxbXCI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4XCIsXCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODNcIl0sW1wiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOFwiLFwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNVwiXSxbXCIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViXCIsXCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiXCJdLFtcImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2ZcIixcIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTdcIl0sW1wiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0M1wiLFwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OFwiXSxbXCIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhXCIsXCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhXCJdLFtcImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDVcIixcImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzZcIl0sW1wiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YVwiLFwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NlwiXSxbXCI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlXCIsXCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlXCJdLFtcImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjhcIixcImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2RcIl0sW1wiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyY1wiLFwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMlwiXSxbXCI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5XCIsXCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlXCJdLFtcIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWJcIixcIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzdcIl0sW1wiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYVwiLFwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMVwiXSxbXCJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmXCIsXCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0XCJdLFtcIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTBcIixcIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzVcIl0sW1wiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNFwiLFwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZFwiXSxbXCIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjXCIsXCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkXCJdLFtcImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDBcIixcImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjlcIl0sW1wiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MFwiLFwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2XCJdLFtcIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjNcIixcIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzRcIl0sW1wiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZlwiLFwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlXCJdLFtcImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjNcIixcIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDFcIl0sW1wiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OFwiLFwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYlwiXSxbXCIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmXCIsXCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxXCJdLFtcIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjVcIixcIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjZcIl0sW1wiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNlwiLFwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZVwiXSxbXCIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1XCIsXCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkXCJdLFtcImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTlcIixcImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGNcIl0sW1wiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxXCIsXCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0XCJdLFtcIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTVcIixcIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmNcIl0sW1wiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNVwiLFwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YlwiXSxbXCJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3XCIsXCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTNcIl0sW1wiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MVwiLFwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0XCJdLFtcIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDVcIixcIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjVcIl0sW1wiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NlwiLFwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmY1wiXSxbXCIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjZcIixcImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjRcIl0sW1wiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZVwiLFwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZVwiXSxbXCIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0XCIsXCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjZcIl0sW1wiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMVwiLFwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMVwiXSxbXCIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxXCIsXCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGJcIl0sW1wiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MlwiLFwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMlwiXSxbXCI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTVcIixcImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2NcIl0sW1wiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYlwiLFwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhM1wiXSxbXCJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0XCIsXCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkXCJdLFtcImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWZcIixcIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDBcIl0sW1wiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODlcIixcIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTRcIl0sW1wiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NlwiLFwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NlwiXSxbXCIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0XCIsXCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0XCJdLFtcIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2FcIixcImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTdcIl0sW1wiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMFwiLFwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxM1wiXSxbXCJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3XCIsXCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2XCJdLFtcImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5M1wiLFwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOFwiXSxbXCJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmXCIsXCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWZcIl0sW1wiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOFwiLFwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OFwiXSxbXCJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhXCIsXCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhXCJdLFtcImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTFcIixcIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDRcIl0sW1wiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMlwiLFwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzN1wiXSxbXCIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhXCIsXCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3XCJdLFtcImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjZcIixcIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmRcIl0sW1wiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NlwiLFwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYVwiXSxbXCJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlXCIsXCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0XCJdLFtcIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzRcIixcIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzdcIl0sW1wiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYVwiLFwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxN1wiXSxbXCI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5XCIsXCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwXCJdLFtcImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWZcIixcImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjVcIl0sW1wiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwY1wiLFwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZVwiXSxbXCIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyXCIsXCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxXCJdLFtcImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGFcIixcIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjJcIl0sW1wiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MFwiLFwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyM1wiXSxbXCJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkXCIsXCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4XCJdLFtcIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTFcIixcImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NThcIl0sW1wiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2M1wiLFwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1XCJdLFtcImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTJcIixcIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2RcIl0sW1wiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5M1wiLFwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlY1wiXSxbXCI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwXCIsXCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzBcIl0sW1wiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OFwiLFwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzY1wiXSxbXCJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3XCIsXCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0XCJdLFtcIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYThcIixcImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWZcIl0sW1wiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZVwiLFwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OVwiXSxbXCIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkXCIsXCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjZcIl0sW1wiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YlwiLFwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNVwiXSxbXCJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmXCIsXCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3XCJdLFtcIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjZcIixcIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2JcIl0sW1wiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5N1wiLFwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliY1wiXSxbXCI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhXCIsXCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjXCJdLFtcImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmNcIixcImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWZcIl0sW1wiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MlwiLFwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YVwiXSxbXCJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiXCIsXCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2XCJdLFtcIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjVcIixcImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2ZcIl0sW1wiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxN1wiLFwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwM1wiXSxbXCI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5XCIsXCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4XCJdLFtcIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTNcIixcIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjhcIl0sW1wiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1N1wiLFwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczXCJdLFtcIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjZcIixcImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzNcIl0sW1wiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOFwiLFwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOFwiXSxbXCI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxXCIsXCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxXCJdLFtcIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODBcIixcIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjlcIl1dXG59fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1pKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLG49MTw8ZSsxLGk9dC5jbG9uZSgpO2kuY21wbigxKT49MDspe3ZhciBvO2lmKGkuaXNPZGQoKSl7dmFyIGE9aS5hbmRsbihuLTEpO289YT4obj4+MSktMT8obj4+MSktYTphLGkuaXN1Ym4obyl9ZWxzZSBvPTA7ci5wdXNoKG8pO2Zvcih2YXIgZj0wIT09aS5jbXBuKDApJiYwPT09aS5hbmRsbihuLTEpP2UrMToxLHM9MTtzPGY7cysrKXIucHVzaCgwKTtpLml1c2hybihmKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9W1tdLFtdXTt0PXQuY2xvbmUoKSxlPWUuY2xvbmUoKTtmb3IodmFyIG49MCxpPTA7dC5jbXBuKC1uKT4wfHxlLmNtcG4oLWkpPjA7KXt2YXIgbz10LmFuZGxuKDMpK24mMyxhPWUuYW5kbG4oMykraSYzOzM9PT1vJiYobz0tMSksMz09PWEmJihhPS0xKTt2YXIgZjtpZigwPT09KDEmbykpZj0wO2Vsc2V7dmFyIHM9dC5hbmRsbig3KStuJjc7Zj0zIT09cyYmNSE9PXN8fDIhPT1hP286LW99clswXS5wdXNoKGYpO3ZhciB1O2lmKDA9PT0oMSZhKSl1PTA7ZWxzZXt2YXIgcz1lLmFuZGxuKDcpK2kmNzt1PTMhPT1zJiY1IT09c3x8MiE9PW8/YTotYX1yWzFdLnB1c2godSksMipuPT09ZisxJiYobj0xLW4pLDIqaT09PXUrMSYmKGk9MS1pKSx0Lml1c2hybigxKSxlLml1c2hybigxKX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1cIl9cIitlO3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbbl0/dGhpc1tuXTp0aGlzW25dPXIuY2FsbCh0aGlzKX19ZnVuY3Rpb24gdSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9jLnRvQXJyYXkodCxcImhleFwiKTp0fWZ1bmN0aW9uIGgodCl7cmV0dXJuIG5ldyBkKHQsXCJoZXhcIixcImxlXCIpfXZhciBjPWUsZD1yKDE4KTtjLmFzc2VydD1mdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9LGMudG9BcnJheT1uLGMuemVybzI9aSxjLnRvSGV4PW8sYy5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImhleFwiPT09ZT9vKHQpOnR9LGMuZ2V0TkFGPWEsYy5nZXRKU0Y9ZixjLmNhY2hlZFByb3BlcnR5PXMsYy5wYXJzZUJ5dGVzPXUsYy5pbnRGcm9tTEU9aH0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR9dmFyIGk7aWYodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpfHwoaT1uZXcgbihudWxsKSksaS5nZW5lcmF0ZSh0KX0sdC5leHBvcnRzLlJhbmQ9bixuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFuZCh0KX0sXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyl3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06d2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9Om4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldFwiKX07ZWxzZSB0cnl7dmFyIG89cig2MDkpO24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvLnJhbmRvbUJ5dGVzKHQpfX1jYXRjaCh0KXtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gZX19fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPVwiYmlnXCIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn12YXIgaT1yKDQ5KSxvPWkudXRpbHMsYT1vLmFzc2VydDtlLkJsb2NrSGFzaD1uLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQ9by50b0FycmF5KHQsZSksdGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZz10aGlzLnBlbmRpbmcuY29uY2F0KHQpOnRoaXMucGVuZGluZz10LHRoaXMucGVuZGluZ1RvdGFsKz10Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3Q9dGhpcy5wZW5kaW5nO3ZhciByPXQubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dC5zbGljZSh0Lmxlbmd0aC1yLHQubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx0PW8uam9pbjMyKHQsMCx0Lmxlbmd0aC1yLHRoaXMuZW5kaWFuKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHQsbixuK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxhKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh0KX0sbi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGVuZGluZ1RvdGFsLGU9dGhpcy5fZGVsdGE4LHI9ZS0odCt0aGlzLnBhZExlbmd0aCklZSxuPW5ldyBBcnJheShyK3RoaXMucGFkTGVuZ3RoKTtuWzBdPTEyODtmb3IodmFyIGk9MTtpPHI7aSsrKW5baV09MDtpZih0PDw9MyxcImJpZ1wiPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wO25baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPTI1NSZ0fWVsc2V7bltpKytdPTI1NSZ0LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTA7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTB9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh0aGlzLkhhc2g9dCx0aGlzLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT10Lm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHZvaWQgdGhpcy5faW5pdChvLnRvQXJyYXkoZSxyKSkpOm5ldyBuKHQsZSxyKX12YXIgaT1yKDQ5KSxvPWkudXRpbHMsYT1vLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt0Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHQ9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KS5kaWdlc3QoKSksYSh0Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgZT10Lmxlbmd0aDtlPHRoaXMuYmxvY2tTaXplO2UrKyl0LnB1c2goMCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49NTQ7dGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh0LGUpLHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8obC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5lbmRpYW49XCJsaXR0bGVcIikpOm5ldyBufWZ1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuIHQ8PTE1P2Vecl5uOnQ8PTMxP2Umcnx+ZSZuOnQ8PTQ3PyhlfH5yKV5uOnQ8PTYzP2UmbnxyJn5uOmVeKHJ8fm4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTE1PzA6dDw9MzE/MTUxODUwMDI0OTp0PD00Nz8xODU5Nzc1MzkzOnQ8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBhKHQpe3JldHVybiB0PD0xNT8xMzUyODI5OTI2OnQ8PTMxPzE1NDg2MDM2ODQ6dDw9NDc/MTgzNjA3MjY5MTp0PD02Mz8yMDUzOTk0MjE3OjB9dmFyIGY9cig0OSkscz1mLnV0aWxzLHU9cy5yb3RsMzIsaD1zLnN1bTMyLGM9cy5zdW0zMl8zLGQ9cy5zdW0zMl80LGw9Zi5jb21tb24uQmxvY2tIYXNoO3MuaW5oZXJpdHMobixsKSxlLnJpcGVtZDE2MD1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MTYwLG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuaFswXSxuPXRoaXMuaFsxXSxmPXRoaXMuaFsyXSxzPXRoaXMuaFszXSxsPXRoaXMuaFs0XSxtPXIsZz1uLHc9ZixfPXMsTT1sLFM9MDtTPDgwO1MrKyl7dmFyIEU9aCh1KGQocixpKFMsbixmLHMpLHRbcFtTXStlXSxvKFMpKSx2W1NdKSxsKTtyPWwsbD1zLHM9dShmLDEwKSxmPW4sbj1FLEU9aCh1KGQobSxpKDc5LVMsZyx3LF8pLHRbYltTXStlXSxhKFMpKSx5W1NdKSxNKSxtPU0sTT1fLF89dSh3LDEwKSx3PWcsZz1FfUU9Yyh0aGlzLmhbMV0sZixfKSx0aGlzLmhbMV09Yyh0aGlzLmhbMl0scyxNKSx0aGlzLmhbMl09Yyh0aGlzLmhbM10sbCxtKSx0aGlzLmhbM109Yyh0aGlzLmhbNF0scixnKSx0aGlzLmhbNF09Yyh0aGlzLmhbMF0sbix3KSx0aGlzLmhbMF09RX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9zLnRvSGV4MzIodGhpcy5oLFwibGl0dGxlXCIpOnMuc3BsaXQzMih0aGlzLmgsXCJsaXR0bGVcIil9O3ZhciBwPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0seT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdm9pZCh0aGlzLlc9bmV3IEFycmF5KDY0KSkpOm5ldyBufWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/KG4uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF0pKTpuZXcgaX1mdW5jdGlvbiBvKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9Vyx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoMTYwKSkpOm5ldyBvfWZ1bmN0aW9uIGEoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/KG8uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF0pKTpuZXcgYX1mdW5jdGlvbiBmKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLlc9bmV3IEFycmF5KDgwKSkpOm5ldyBmfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiB0JmVefnQmcn1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4gdCZlXnQmcl5lJnJ9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHReZV5yfWZ1bmN0aW9uIGModCl7cmV0dXJuIFIodCwyKV5SKHQsMTMpXlIodCwyMil9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gUih0LDYpXlIodCwxMSleUih0LDI1KX1mdW5jdGlvbiBsKHQpe3JldHVybiBSKHQsNyleUih0LDE4KV50Pj4+M31mdW5jdGlvbiBwKHQpe3JldHVybiBSKHQsMTcpXlIodCwxOSledD4+PjEwfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIDA9PT10P3MoZSxyLG4pOjE9PT10fHwzPT09dD9oKGUscixuKToyPT09dD91KGUscixuKTp2b2lkIDB9ZnVuY3Rpb24gdih0LGUscixuLGksbyl7dmFyIGE9dCZyXn50Jmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24geSh0LGUscixuLGksbyl7dmFyIGE9ZSZuXn5lJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gbSh0LGUscixuLGksbyl7dmFyIGE9dCZyXnQmaV5yJmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gZyh0LGUscixuLGksbyl7dmFyIGE9ZSZuXmUmb15uJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPU4odCxlLDI4KSxuPU4oZSx0LDIpLGk9TihlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBfKHQsZSl7dmFyIHI9TCh0LGUsMjgpLG49TChlLHQsMiksaT1MKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj1OKHQsZSwxNCksbj1OKHQsZSwxOCksaT1OKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1MKHQsZSwxNCksbj1MKHQsZSwxOCksaT1MKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj1OKHQsZSwxKSxuPU4odCxlLDgpLGk9VSh0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBBKHQsZSl7dmFyIHI9TCh0LGUsMSksbj1MKHQsZSw4KSxpPXoodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gayh0LGUpe3ZhciByPU4odCxlLDE5KSxuPU4oZSx0LDI5KSxpPVUodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24geCh0LGUpe3ZhciByPUwodCxlLDE5KSxuPUwoZSx0LDI5KSxpPXoodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99dmFyIEk9cig0OSksQj1JLnV0aWxzLE89Qi5hc3NlcnQsUj1CLnJvdHIzMixQPUIucm90bDMyLFQ9Qi5zdW0zMixqPUIuc3VtMzJfNCxDPUIuc3VtMzJfNSxOPUIucm90cjY0X2hpLEw9Qi5yb3RyNjRfbG8sVT1CLnNocjY0X2hpLHo9Qi5zaHI2NF9sbyxEPUIuc3VtNjQscT1CLnN1bTY0X2hpLEY9Qi5zdW02NF9sbyxLPUIuc3VtNjRfNF9oaSxHPUIuc3VtNjRfNF9sbyxWPUIuc3VtNjRfNV9oaSxIPUIuc3VtNjRfNV9sbyxYPUkuY29tbW9uLkJsb2NrSGFzaCxZPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLFc9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSxaPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtCLmluaGVyaXRzKG4sWCksZS5zaGEyNTY9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTI1NixuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1qKHAocltuLTJdKSxyW24tN10sbChyW24tMTVdKSxyW24tMTZdKTt2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10saD10aGlzLmhbNF0sYj10aGlzLmhbNV0sdj10aGlzLmhbNl0seT10aGlzLmhbN107Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbT1DKHksZChoKSxzKGgsYix2KSx0aGlzLmtbbl0scltuXSksZz1UKGMoaSksdShpLG8sYSkpO3k9dix2PWIsYj1oLGg9VChmLG0pLGY9YSxhPW8sbz1pLGk9VChtLGcpfXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0saCksdGhpcy5oWzVdPVQodGhpcy5oWzVdLGIpLHRoaXMuaFs2XT1UKHRoaXMuaFs2XSx2KSx0aGlzLmhbN109VCh0aGlzLmhbN10seSl9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGksbiksZS5zaGEyMjQ9aSxpLmJsb2NrU2l6ZT01MTIsaS5vdXRTaXplPTIyNCxpLmhtYWNTdHJlbmd0aD0xOTIsaS5wYWRMZW5ndGg9NjQsaS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpfSxCLmluaGVyaXRzKG8sWCksZS5zaGE1MTI9byxvLmJsb2NrU2l6ZT0xMDI0LG8ub3V0U2l6ZT01MTIsby5obWFjU3RyZW5ndGg9MTkyLG8ucGFkTGVuZ3RoPTEyOCxvLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwzMjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rPTIpe3ZhciBpPWsocltuLTRdLHJbbi0zXSksbz14KHJbbi00XSxyW24tM10pLGE9cltuLTE0XSxmPXJbbi0xM10scz1FKHJbbi0zMF0scltuLTI5XSksdT1BKHJbbi0zMF0scltuLTI5XSksaD1yW24tMzJdLGM9cltuLTMxXTtyW25dPUsoaSxvLGEsZixzLHUsaCxjKSxyW24rMV09RyhpLG8sYSxmLHMsdSxoLGMpfX0sby5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ByZXBhcmVCbG9jayh0LGUpO3ZhciByPXRoaXMuVyxuPXRoaXMuaFswXSxpPXRoaXMuaFsxXSxvPXRoaXMuaFsyXSxhPXRoaXMuaFszXSxmPXRoaXMuaFs0XSxzPXRoaXMuaFs1XSx1PXRoaXMuaFs2XSxoPXRoaXMuaFs3XSxjPXRoaXMuaFs4XSxkPXRoaXMuaFs5XSxsPXRoaXMuaFsxMF0scD10aGlzLmhbMTFdLGI9dGhpcy5oWzEyXSxFPXRoaXMuaFsxM10sQT10aGlzLmhbMTRdLGs9dGhpcy5oWzE1XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciB4PTA7eDxyLmxlbmd0aDt4Kz0yKXt2YXIgST1BLEI9ayxSPU0oYyxkKSxQPVMoYyxkKSxUPXYoYyxkLGwscCxiLEUpLGo9eShjLGQsbCxwLGIsRSksQz10aGlzLmtbeF0sTj10aGlzLmtbeCsxXSxMPXJbeF0sVT1yW3grMV0sej1WKEksQixSLFAsVCxqLEMsTixMLFUpLEs9SChJLEIsUixQLFQsaixDLE4sTCxVKSxJPXcobixpKSxCPV8obixpKSxSPW0obixpLG8sYSxmLHMpLFA9ZyhuLGksbyxhLGYscyksRz1xKEksQixSLFApLFg9RihJLEIsUixQKTtBPWIsaz1FLGI9bCxFPXAsbD1jLHA9ZCxjPXEodSxoLHosSyksZD1GKGgsaCx6LEspLHU9ZixoPXMsZj1vLHM9YSxvPW4sYT1pLG49cSh6LEssRyxYKSxpPUYoeixLLEcsWCl9RCh0aGlzLmgsMCxuLGkpLEQodGhpcy5oLDIsbyxhKSxEKHRoaXMuaCw0LGYscyksRCh0aGlzLmgsNix1LGgpLEQodGhpcy5oLDgsYyxkKSxEKHRoaXMuaCwxMCxsLHApLEQodGhpcy5oLDEyLGIsRSksRCh0aGlzLmgsMTQsQSxrKX0sby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoYSxvKSxlLnNoYTM4ND1hLGEuYmxvY2tTaXplPTEwMjQsYS5vdXRTaXplPTM4NCxhLmhtYWNTdHJlbmd0aD0xOTIsYS5wYWRMZW5ndGg9MTI4LGEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpfSxCLmluaGVyaXRzKGYsWCksZS5zaGExPWYsZi5ibG9ja1NpemU9NTEyLGYub3V0U2l6ZT0xNjAsZi5obWFjU3RyZW5ndGg9ODAsZi5wYWRMZW5ndGg9NjQsZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1QKHJbbi0zXV5yW24tOF1ecltuLTE0XV5yW24tMTZdLDEpO2Zvcih2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10scz10aGlzLmhbNF0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgdT1+fihuLzIwKSxoPUMoUChpLDUpLGIodSxvLGEsZikscyxyW25dLFpbdV0pO3M9ZixmPWEsYT1QKG8sMzApLG89aSxpPWh9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxzKX0sZi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9Zih0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXt2YXIgZT10Pj4+MjR8dD4+PjgmNjUyODB8dDw8OCYxNjcxMTY4MHwoMjU1JnQpPDwyNDtyZXR1cm4gZT4+PjB9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1cIlwiLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcImxpdHRsZVwiPT09ZSYmKGk9byhpKSkscis9cyhpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBzKHQpe3JldHVybiA3PT09dC5sZW5ndGg/XCIwXCIrdDo2PT09dC5sZW5ndGg/XCIwMFwiK3Q6NT09PXQubGVuZ3RoP1wiMDAwXCIrdDo0PT09dC5sZW5ndGg/XCIwMDAwXCIrdDozPT09dC5sZW5ndGg/XCIwMDAwMFwiK3Q6Mj09PXQubGVuZ3RoP1wiMDAwMDAwXCIrdDoxPT09dC5sZW5ndGg/XCIwMDAwMDAwXCIrdDp0fWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9ci1lO3koaSU0PT09MCk7Zm9yKHZhciBvPW5ldyBBcnJheShpLzQpLGE9MCxmPWU7YTxvLmxlbmd0aDthKyssZis9NCl7dmFyIHM7cz1cImJpZ1wiPT09bj90W2ZdPDwyNHx0W2YrMV08PDE2fHRbZisyXTw8OHx0W2YrM106dFtmKzNdPDwyNHx0W2YrMl08PDE2fHRbZisxXTw8OHx0W2ZdLG9bYV09cz4+PjB9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoNCp0Lmxlbmd0aCksbj0wLGk9MDtuPHQubGVuZ3RoO24rKyxpKz00KXt2YXIgbz10W25dO1wiYmlnXCI9PT1lPyhyW2ldPW8+Pj4yNCxyW2krMV09bz4+PjE2JjI1NSxyW2krMl09bz4+PjgmMjU1LHJbaSszXT0yNTUmbyk6KHJbaSszXT1vPj4+MjQscltpKzJdPW8+Pj4xNiYyNTUscltpKzFdPW8+Pj44JjI1NSxyW2ldPTI1NSZvKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0PDxlfHQ+Pj4zMi1lfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdCtlPj4+MH1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gdCtlK3I+Pj4wfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIHQrZStyK24+Pj4wfWZ1bmN0aW9uIHYodCxlLHIsbixpKXtyZXR1cm4gdCtlK3IrbitpPj4+MH1mdW5jdGlvbiB5KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPXRbZV0sbz10W2UrMV0sYT1uK28+Pj4wLGY9KGE8bj8xOjApK3IraTt0W2VdPWY+Pj4wLHRbZSsxXT1hfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9ZStuPj4+MCxvPShpPGU/MTowKSt0K3I7cmV0dXJuIG8+Pj4wfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk9ZStuO3JldHVybiBpPj4+MH1mdW5jdGlvbiBfKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9MCx1PWU7dT11K24+Pj4wLHMrPXU8ZT8xOjAsdT11K28+Pj4wLHMrPXU8bz8xOjAsdT11K2Y+Pj4wLHMrPXU8Zj8xOjA7dmFyIGg9dCtyK2krYStzO3JldHVybiBoPj4+MH1mdW5jdGlvbiBNKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9ZStuK28rZjtyZXR1cm4gcz4+PjB9ZnVuY3Rpb24gUyh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD0wLGM9ZTtjPWMrbj4+PjAsaCs9YzxlPzE6MCxjPWMrbz4+PjAsaCs9YzxvPzE6MCxjPWMrZj4+PjAsaCs9YzxmPzE6MCxjPWMrdT4+PjAsaCs9Yzx1PzE6MDt2YXIgZD10K3IraSthK3MraDtyZXR1cm4gZD4+PjB9ZnVuY3Rpb24gRSh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD1lK24rbytmK3U7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWU8PDMyLXJ8dD4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiB0Pj4+cn1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH12YXIgQj1lLE89cigyKTtCLnRvQXJyYXk9bixCLnRvSGV4PWksQi5odG9ubD1vLEIudG9IZXgzMj1hLEIuemVybzI9ZixCLnplcm84PXMsQi5qb2luMzI9dSxCLnNwbGl0MzI9aCxCLnJvdHIzMj1jLEIucm90bDMyPWQsQi5zdW0zMj1sLEIuc3VtMzJfMz1wLEIuc3VtMzJfND1iLEIuc3VtMzJfNT12LEIuYXNzZXJ0PXksQi5pbmhlcml0cz1PLGUuc3VtNjQ9bSxlLnN1bTY0X2hpPWcsZS5zdW02NF9sbz13LGUuc3VtNjRfNF9oaT1fLGUuc3VtNjRfNF9sbz1NLGUuc3VtNjRfNV9oaT1TLGUuc3VtNjRfNV9sbz1FLGUucm90cjY0X2hpPUEsZS5yb3RyNjRfbG89ayxlLnNocjY0X2hpPXgsZS5zaHI2NF9sbz1JfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMDApLGk9bi5kZWZpbmUoXCJSU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTFcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTJcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDFcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDJcIikuaW50KCksdGhpcy5rZXkoXCJjb2VmZmljaWVudFwiKS5pbnQoKSl9KTtlLlJTQVByaXZhdGVLZXk9aTt2YXIgbz1uLmRlZmluZShcIlJTQVB1YmxpY0tleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCkpfSk7ZS5SU0FQdWJsaWNLZXk9bzt2YXIgYT1uLmRlZmluZShcIlN1YmplY3RQdWJsaWNLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS51c2UoZiksdGhpcy5rZXkoXCJzdWJqZWN0UHVibGljS2V5XCIpLmJpdHN0cigpKX0pO2UuUHVibGljS2V5PWE7dmFyIGY9bi5kZWZpbmUoXCJBbGdvcml0aG1JZGVudGlmaWVyXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5vYmppZCgpLHRoaXMua2V5KFwibm9uZVwiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJjdXJ2ZVwiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpKS5vcHRpb25hbCgpKX0pLHM9bi5kZWZpbmUoXCJQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pO2UuUHJpdmF0ZUtleT1zO3ZhciB1PW4uZGVmaW5lKFwiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJkZWNyeXB0XCIpLnNlcSgpLm9iaih0aGlzLmtleShcImtkZVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwia2RlcGFyYW1zXCIpLnNlcSgpLm9iaih0aGlzLmtleShcInNhbHRcIikub2N0c3RyKCksdGhpcy5rZXkoXCJpdGVyc1wiKS5pbnQoKSkpLHRoaXMua2V5KFwiY2lwaGVyXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29cIikub2JqaWQoKSx0aGlzLmtleShcIml2XCIpLm9jdHN0cigpKSkpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5FbmNyeXB0ZWRQcml2YXRlS2V5PXU7dmFyIGg9bi5kZWZpbmUoXCJEU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCksdGhpcy5rZXkoXCJwdWJfa2V5XCIpLmludCgpLHRoaXMua2V5KFwicHJpdl9rZXlcIikuaW50KCkpfSk7ZS5EU0FQcml2YXRlS2V5PWgsZS5EU0FwYXJhbT1uLmRlZmluZShcIkRTQXBhcmFtXCIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIGM9bi5kZWZpbmUoXCJFQ1ByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVLZXlcIikub2N0c3RyKCksdGhpcy5rZXkoXCJwYXJhbWV0ZXJzXCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKGQpLHRoaXMua2V5KFwicHVibGljS2V5XCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ZS5FQ1ByaXZhdGVLZXk9Yzt2YXIgZD1uLmRlZmluZShcIkVDUGFyYW1ldGVyc1wiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtlLnNpZ25hdHVyZT1uLmRlZmluZShcInNpZ25hdHVyZVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJyXCIpLmludCgpLHRoaXMua2V5KFwic1wiKS5pbnQoKSl9KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt2YXIgbj0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxccj9cXG5ERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspXFxyP1xcblxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4vbSxpPS9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbi9tLG89L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuKFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXHI/XFxuLS0tLS1FTkQgXFwxIEtFWS0tLS0tJC9tLGE9cigxNDgpLGY9cigyMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe3ZhciBzLHU9dC50b1N0cmluZygpLGg9dS5tYXRjaChuKTtpZihoKXt2YXIgYz1cImFlc1wiK2hbMV0sZD1uZXcgZShoWzJdLFwiaGV4XCIpLGw9bmV3IGUoaFszXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIikscD1hKHIsZC5zbGljZSgwLDgpLHBhcnNlSW50KGhbMV0sMTApKS5rZXksYj1bXSx2PWYuY3JlYXRlRGVjaXBoZXJpdihjLHAsZCk7Yi5wdXNoKHYudXBkYXRlKGwpKSxiLnB1c2godi5maW5hbCgpKSxzPWUuY29uY2F0KGIpfWVsc2V7dmFyIHk9dS5tYXRjaChvKTtzPW5ldyBlKHlbMl0ucmVwbGFjZSgvXFxyP1xcbi9nLFwiXCIpLFwiYmFzZTY0XCIpfXZhciBtPXUubWF0Y2goaSlbMV0rXCIgS0VZXCI7cmV0dXJue3RhZzptLGRhdGE6c319fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmJvZHk9ZSx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dmFyIGk9cigxMDApLG89cigyKSxhPWU7YS5kZWZpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odCxlKX0sbi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXIoMjUxKS5ydW5JblRoaXNDb250ZXh0KFwiKGZ1bmN0aW9uIFwiK3RoaXMubmFtZStcIihlbnRpdHkpIHtcXG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbn0pXCIpfWNhdGNoKHQpe2U9ZnVuY3Rpb24odCl7dGhpcy5faW5pdE5hbWVkKHQpfX1yZXR1cm4gbyhlLHQpLGUucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSl9LG5ldyBlKHRoaXMpfSxuLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmRlY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZGVjb2RlcnNbdF0pKSx0aGlzLmRlY29kZXJzW3RdfSxuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGUpLmRlY29kZSh0LHIpfSxuLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmVuY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZW5jb2RlcnNbdF0pKSx0aGlzLmVuY29kZXJzW3RdfSxuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKGUpLmVuY29kZSh0LHIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj17fTt0aGlzLl9iYXNlU3RhdGU9cixyLmVuYz10LHIucGFyZW50PWV8fG51bGwsci5jaGlsZHJlbj1udWxsLHIudGFnPW51bGwsci5hcmdzPW51bGwsci5yZXZlcnNlQXJncz1udWxsLHIuY2hvaWNlPW51bGwsci5vcHRpb25hbD0hMSxyLmFueT0hMSxyLm9iaj0hMSxyLnVzZT1udWxsLHIudXNlRGVjb2Rlcj1udWxsLHIua2V5PW51bGwsci5kZWZhdWx0PW51bGwsci5leHBsaWNpdD1udWxsLHIuaW1wbGljaXQ9bnVsbCxyLmNvbnRhaW5zPW51bGwsci5wYXJlbnR8fChyLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dmFyIGk9cig2OCkuUmVwb3J0ZXIsbz1yKDY4KS5FbmNvZGVyQnVmZmVyLGE9cig2OCkuRGVjb2RlckJ1ZmZlcixmPXIoNTM4KSxzPVtcInNlcVwiLFwic2Vxb2ZcIixcInNldFwiLFwic2V0b2ZcIixcIm9iamlkXCIsXCJib29sXCIsXCJnZW50aW1lXCIsXCJ1dGN0aW1lXCIsXCJudWxsX1wiLFwiZW51bVwiLFwiaW50XCIsXCJiaXRzdHJcIixcImJtcHN0clwiLFwiY2hhcnN0clwiLFwiZ2Vuc3RyXCIsXCJncmFwaHN0clwiLFwiaWE1c3RyXCIsXCJpc282NDZzdHJcIixcIm51bXN0clwiLFwib2N0c3RyXCIsXCJwcmludHN0clwiLFwidDYxc3RyXCIsXCJ1bmlzdHJcIixcInV0ZjhzdHJcIixcInZpZGVvc3RyXCJdLHU9W1wia2V5XCIsXCJvYmpcIixcInVzZVwiLFwib3B0aW9uYWxcIixcImV4cGxpY2l0XCIsXCJpbXBsaWNpdFwiLFwiZGVmXCIsXCJjaG9pY2VcIixcImFueVwiLFwiY29udGFpbnNcIl0uY29uY2F0KHMpLGg9W1wiX3BlZWtUYWdcIixcIl9kZWNvZGVUYWdcIixcIl91c2VcIixcIl9kZWNvZGVTdHJcIixcIl9kZWNvZGVPYmppZFwiLFwiX2RlY29kZVRpbWVcIixcIl9kZWNvZGVOdWxsXCIsXCJfZGVjb2RlSW50XCIsXCJfZGVjb2RlQm9vbFwiLFwiX2RlY29kZUxpc3RcIixcIl9lbmNvZGVDb21wb3NpdGVcIixcIl9lbmNvZGVTdHJcIixcIl9lbmNvZGVPYmppZFwiLFwiX2VuY29kZVRpbWVcIixcIl9lbmNvZGVOdWxsXCIsXCJfZW5jb2RlSW50XCIsXCJfZW5jb2RlQm9vbFwiXTt0LmV4cG9ydHM9bjt2YXIgYz1bXCJlbmNcIixcInBhcmVudFwiLFwiY2hpbGRyZW5cIixcInRhZ1wiLFwiYXJnc1wiLFwicmV2ZXJzZUFyZ3NcIixcImNob2ljZVwiLFwib3B0aW9uYWxcIixcImFueVwiLFwib2JqXCIsXCJ1c2VcIixcImFsdGVyZWRVc2VcIixcImtleVwiLFwiZGVmYXVsdFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJjb250YWluc1wiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPXt9O2MuZm9yRWFjaChmdW5jdGlvbihyKXtlW3JdPXRbcl19KTt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLnBhcmVudCk7cmV0dXJuIHIuX2Jhc2VTdGF0ZT1lLHJ9LG4ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3UuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzW2VdPWZ1bmN0aW9uKCl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIHQuY2hpbGRyZW4ucHVzaChyKSxyW2VdLmFwcGx5KHIsYXJndW1lbnRzKX19LHRoaXMpfSxuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7ZihudWxsPT09ZS5wYXJlbnQpLHQuY2FsbCh0aGlzKSxlLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksZi5lcXVhbChlLmNoaWxkcmVuLmxlbmd0aCwxLFwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkXCIpfSxuLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGUscj10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO3Q9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1yLmxlbmd0aCYmKGYobnVsbD09PWUuY2hpbGRyZW4pLGUuY2hpbGRyZW49cixyLmZvckVhY2goZnVuY3Rpb24odCl7dC5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PXQubGVuZ3RoJiYoZihudWxsPT09ZS5hcmdzKSxlLmFyZ3M9dCxlLnJldmVyc2VBcmdzPXQubWFwKGZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0fHx0LmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiB0O3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3I9PSgwfHIpJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSkpfSxoLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7dGhyb3cgbmV3IEVycm9yKHQrXCIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogXCIrZS5lbmMpfX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGYobnVsbD09PWUudGFnKSxlLnRhZz10LHRoaXMuX3VzZUFyZ3MociksdGhpc319KSxuLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLnVzZSksZS51c2U9dCx0aGlzfSxuLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdC5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmRlZmF1bHQpLGUuZGVmYXVsdD10LGUub3B0aW9uYWw9ITAsdGhpc30sbi5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5leHBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5leHBsaWNpdCYmbnVsbD09PWUuaW1wbGljaXQpLGUuaW1wbGljaXQ9dCx0aGlzfSxuLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUsZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0Lm9iaj0hMCwwIT09ZS5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoZSksdGhpc30sbi5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5rZXkpLGUua2V5PXQsdGhpc30sbi5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0LmFueT0hMCx0aGlzfSxuLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmNob2ljZSksZS5jaG9pY2U9dCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzfSxuLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLmNvbnRhaW5zPXQsdGhpc30sbi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ci5wYXJlbnQpcmV0dXJuIHQud3JhcFJlc3VsdChyLmNoaWxkcmVuWzBdLl9kZWNvZGUodCxlKSk7dmFyIG49ci5kZWZhdWx0LGk9ITAsbz1udWxsO2lmKG51bGwhPT1yLmtleSYmKG89dC5lbnRlcktleShyLmtleSkpLHIub3B0aW9uYWwpe3ZhciBmPW51bGw7aWYobnVsbCE9PXIuZXhwbGljaXQ/Zj1yLmV4cGxpY2l0Om51bGwhPT1yLmltcGxpY2l0P2Y9ci5pbXBsaWNpdDpudWxsIT09ci50YWcmJihmPXIudGFnKSxudWxsIT09Znx8ci5hbnkpe2lmKGk9dGhpcy5fcGVla1RhZyh0LGYsci5hbnkpLHQuaXNFcnJvcihpKSlyZXR1cm4gaX1lbHNle3ZhciBzPXQuc2F2ZSgpO3RyeXtudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLGk9ITB9Y2F0Y2godCl7aT0hMX10LnJlc3RvcmUocyl9fXZhciB1O2lmKHIub2JqJiZpJiYodT10LmVudGVyT2JqZWN0KCkpLGkpe2lmKG51bGwhPT1yLmV4cGxpY2l0KXt2YXIgaD10aGlzLl9kZWNvZGVUYWcodCxyLmV4cGxpY2l0KTtpZih0LmlzRXJyb3IoaCkpcmV0dXJuIGg7dD1ofXZhciBjPXQub2Zmc2V0O2lmKG51bGw9PT1yLnVzZSYmbnVsbD09PXIuY2hvaWNlKXtpZihyLmFueSl2YXIgcz10LnNhdmUoKTt2YXIgZD10aGlzLl9kZWNvZGVUYWcodCxudWxsIT09ci5pbXBsaWNpdD9yLmltcGxpY2l0OnIudGFnLHIuYW55KTtpZih0LmlzRXJyb3IoZCkpcmV0dXJuIGQ7ci5hbnk/bj10LnJhdyhzKTp0PWR9aWYoZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLGMsdC5sZW5ndGgsXCJ0YWdnZWRcIiksZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLHQub2Zmc2V0LHQubGVuZ3RoLFwiY29udGVudFwiKSxuPXIuYW55P246bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsdCxlKTp0aGlzLl9kZWNvZGVDaG9pY2UodCxlKSx0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoci5hbnl8fG51bGwhPT1yLmNob2ljZXx8bnVsbD09PXIuY2hpbGRyZW58fHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihyKXtyLl9kZWNvZGUodCxlKX0pLHIuY29udGFpbnMmJihcIm9jdHN0clwiPT09ci50YWd8fFwiYml0c3RyXCI9PT1yLnRhZykpe3ZhciBsPW5ldyBhKG4pO249dGhpcy5fZ2V0VXNlKHIuY29udGFpbnMsdC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUobCxlKX19cmV0dXJuIHIub2JqJiZpJiYobj10LmxlYXZlT2JqZWN0KHUpKSxudWxsPT09ci5rZXl8fG51bGw9PT1uJiZpIT09ITA/bnVsbCE9PW8mJnQuZXhpdEtleShvKTp0LmxlYXZlS2V5KG8sci5rZXksbiksbn0sbi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm5cInNlcVwiPT09dHx8XCJzZXRcIj09PXQ/bnVsbDpcInNlcW9mXCI9PT10fHxcInNldG9mXCI9PT10P3RoaXMuX2RlY29kZUxpc3QoZSx0LG4uYXJnc1swXSxyKTovc3RyJC8udGVzdCh0KT90aGlzLl9kZWNvZGVTdHIoZSx0LHIpOlwib2JqaWRcIj09PXQmJm4uYXJncz90aGlzLl9kZWNvZGVPYmppZChlLG4uYXJnc1swXSxuLmFyZ3NbMV0scik6XCJvYmppZFwiPT09dD90aGlzLl9kZWNvZGVPYmppZChlLG51bGwsbnVsbCxyKTpcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dD90aGlzLl9kZWNvZGVUaW1lKGUsdCxyKTpcIm51bGxfXCI9PT10P3RoaXMuX2RlY29kZU51bGwoZSxyKTpcImJvb2xcIj09PXQ/dGhpcy5fZGVjb2RlQm9vbChlLHIpOlwiaW50XCI9PT10fHxcImVudW1cIj09PXQ/dGhpcy5fZGVjb2RlSW50KGUsbi5hcmdzJiZuLmFyZ3NbMF0scik6bnVsbCE9PW4udXNlP3RoaXMuX2dldFVzZShuLnVzZSxlLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShlLHIpOmUuZXJyb3IoXCJ1bmtub3duIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIudXNlRGVjb2Rlcj10aGlzLl91c2UodCxlKSxmKG51bGw9PT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxyLmltcGxpY2l0IT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLmNsb25lKCksci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ci5pbXBsaWNpdCksci51c2VEZWNvZGVyfSxuLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49bnVsbCxpPSExO3JldHVybiBPYmplY3Qua2V5cyhyLmNob2ljZSkuc29tZShmdW5jdGlvbihvKXt2YXIgYT10LnNhdmUoKSxmPXIuY2hvaWNlW29dO3RyeXt2YXIgcz1mLl9kZWNvZGUodCxlKTtpZih0LmlzRXJyb3IocykpcmV0dXJuITE7bj17dHlwZTpvLHZhbHVlOnN9LGk9ITB9Y2F0Y2goZSl7cmV0dXJuIHQucmVzdG9yZShhKSwhMX1yZXR1cm4hMH0sdGhpcyksaT9uOnQuZXJyb3IoXCJDaG9pY2Ugbm90IG1hdGNoZWRcIil9LG4ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LHRoaXMucmVwb3J0ZXIpfSxuLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4uZGVmYXVsdHx8bi5kZWZhdWx0IT09dCl7dmFyIGk9dGhpcy5fZW5jb2RlVmFsdWUodCxlLHIpO2lmKHZvaWQgMCE9PWkmJiF0aGlzLl9za2lwRGVmYXVsdChpLGUscikpcmV0dXJuIGl9fSxuLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5wYXJlbnQpcmV0dXJuIG4uY2hpbGRyZW5bMF0uX2VuY29kZSh0LGV8fG5ldyBpKTt2YXIgbz1udWxsO2lmKHRoaXMucmVwb3J0ZXI9ZSxuLm9wdGlvbmFsJiZ2b2lkIDA9PT10KXtpZihudWxsPT09bi5kZWZhdWx0KXJldHVybjt0PW4uZGVmYXVsdH12YXIgYT1udWxsLGY9ITE7aWYobi5hbnkpbz10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2Vsc2UgaWYobi5jaG9pY2Upbz10aGlzLl9lbmNvZGVDaG9pY2UodCxlKTtlbHNlIGlmKG4uY29udGFpbnMpYT10aGlzLl9nZXRVc2Uobi5jb250YWlucyxyKS5fZW5jb2RlKHQsZSksZj0hMDtlbHNlIGlmKG4uY2hpbGRyZW4pYT1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihyKXtpZihcIm51bGxfXCI9PT1yLl9iYXNlU3RhdGUudGFnKXJldHVybiByLl9lbmNvZGUobnVsbCxlLHQpO2lmKG51bGw9PT1yLl9iYXNlU3RhdGUua2V5KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXlcIik7dmFyIG49ZS5lbnRlcktleShyLl9iYXNlU3RhdGUua2V5KTtpZihcIm9iamVjdFwiIT10eXBlb2YgdClyZXR1cm4gZS5lcnJvcihcIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdFwiKTt2YXIgaT1yLl9lbmNvZGUodFtyLl9iYXNlU3RhdGUua2V5XSxlLHQpO3JldHVybiBlLmxlYXZlS2V5KG4pLGl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKTtlbHNlIGlmKFwic2Vxb2ZcIj09PW4udGFnfHxcInNldG9mXCI9PT1uLnRhZyl7aWYoIW4uYXJnc3x8MSE9PW4uYXJncy5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJUb28gbWFueSBhcmdzIGZvciA6IFwiK24udGFnKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5lcnJvcihcInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXlcIik7dmFyIHM9dGhpcy5jbG9uZSgpO3MuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0Lm1hcChmdW5jdGlvbihyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHRoaXMuX2dldFVzZShuLmFyZ3NbMF0sdCkuX2VuY29kZShyLGUpfSxzKSl9ZWxzZSBudWxsIT09bi51c2U/bz10aGlzLl9nZXRVc2Uobi51c2UscikuX2VuY29kZSh0LGUpOihhPXRoaXMuX2VuY29kZVByaW1pdGl2ZShuLnRhZyx0KSxmPSEwKTt2YXIgbztpZighbi5hbnkmJm51bGw9PT1uLmNob2ljZSl7dmFyIHU9bnVsbCE9PW4uaW1wbGljaXQ/bi5pbXBsaWNpdDpuLnRhZyxoPW51bGw9PT1uLmltcGxpY2l0P1widW5pdmVyc2FsXCI6XCJjb250ZXh0XCI7bnVsbD09PXU/bnVsbD09PW4udXNlJiZlLmVycm9yKFwiVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpXCIpOm51bGw9PT1uLnVzZSYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHUsZixoLGEpKX1yZXR1cm4gbnVsbCE9PW4uZXhwbGljaXQmJihvPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuLmV4cGxpY2l0LCExLFwiY29udGV4dFwiLG8pKSxvfSxuLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbdC50eXBlXTtyZXR1cm4gbnx8ZighMSx0LnR5cGUrXCIgbm90IGZvdW5kIGluIFwiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHIuY2hvaWNlKSkpLG4uX2VuY29kZSh0LnZhbHVlLGUpfSxuLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KHQpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoZSx0KTtpZihcIm9iamlkXCI9PT10JiZyLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsci5yZXZlcnNlQXJnc1swXSxyLmFyZ3NbMV0pO2lmKFwib2JqaWRcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsbnVsbCxudWxsKTtpZihcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShlLHQpO2lmKFwibnVsbF9cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZihcImludFwiPT09dHx8XCJlbnVtXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVJbnQoZSxyLmFyZ3MmJnIucmV2ZXJzZUFyZ3NbMF0pO2lmKFwiYm9vbFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChlKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB0YWc6IFwiK3QpfSxuLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bMC05IF0qJC8udGVzdCh0KX0sbi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6dHx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5wYXRoPXQsdGhpcy5yZXRocm93KGUpfXZhciBvPXIoMik7ZS5SZXBvcnRlcj1uLG4ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfSxuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOnQub2JqLHBhdGhMZW46dC5wYXRoLmxlbmd0aH19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLm9iaj10Lm9iaixlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC5wYXRoTGVuKX0sbi5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHQpfSxuLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7ZS5wYXRoPWUucGF0aC5zbGljZSgwLHQtMSl9LG4ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh0KSxudWxsIT09bi5vYmomJihuLm9ialtlXT1yKX0sbi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbihcIi9cIil9LG4ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxlPXQub2JqO3JldHVybiB0Lm9iaj17fSxlfSxuLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlLHI9ZS5vYmo7cmV0dXJuIGUub2JqPXQscn0sbi5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9yZXBvcnRlclN0YXRlLG49dCBpbnN0YW5jZW9mIGk7aWYoZT1uP3Q6bmV3IGkoci5wYXRoLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIltcIitKU09OLnN0cmluZ2lmeSh0KStcIl1cIn0pLmpvaW4oXCJcIiksdC5tZXNzYWdlfHx0LHQuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyBlO3JldHVybiBufHxyLmVycm9ycy5wdXNoKGUpLGV9LG4ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gZS5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IodCk/bnVsbDp0LGVycm9yczplLmVycm9yc306dH0sbyhpLEVycm9yKSxpLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHQpe2lmKHRoaXMubWVzc2FnZT10K1wiIGF0OiBcIisodGhpcy5wYXRofHxcIihzaGFsbG93KVwiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxpKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2godCl7dGhpcy5zdGFjaz10LnN0YWNrfXJldHVybiB0aGlzfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjE1KTtlLnRhZ0NsYXNzPXswOlwidW5pdmVyc2FsXCIsMTpcImFwcGxpY2F0aW9uXCIsMjpcImNvbnRleHRcIiwzOlwicHJpdmF0ZVwifSxlLnRhZ0NsYXNzQnlOYW1lPW4uX3JldmVyc2UoZS50YWdDbGFzcyksZS50YWc9ezA6XCJlbmRcIiwxOlwiYm9vbFwiLDI6XCJpbnRcIiwzOlwiYml0c3RyXCIsNDpcIm9jdHN0clwiLDU6XCJudWxsX1wiLDY6XCJvYmppZFwiLDc6XCJvYmpEZXNjXCIsODpcImV4dGVybmFsXCIsOTpcInJlYWxcIiwxMDpcImVudW1cIiwxMTpcImVtYmVkXCIsMTI6XCJ1dGY4c3RyXCIsMTM6XCJyZWxhdGl2ZU9pZFwiLDE2Olwic2VxXCIsMTc6XCJzZXRcIiwxODpcIm51bXN0clwiLDE5OlwicHJpbnRzdHJcIiwyMDpcInQ2MXN0clwiLFxuMjE6XCJ2aWRlb3N0clwiLDIyOlwiaWE1c3RyXCIsMjM6XCJ1dGN0aW1lXCIsMjQ6XCJnZW50aW1lXCIsMjU6XCJncmFwaHN0clwiLDI2OlwiaXNvNjQ2c3RyXCIsMjc6XCJnZW5zdHJcIiwyODpcInVuaXN0clwiLDI5OlwiY2hhcnN0clwiLDMwOlwiYm1wc3RyXCJ9LGUudGFnQnlOYW1lPW4uX3JldmVyc2UoZS50YWcpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIxNiksbi5wZW09cig1MzUpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXthLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDEpLkJ1ZmZlcixhPXIoMjE2KTtpKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpLG49ZS5sYWJlbC50b1VwcGVyQ2FzZSgpLGk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLGY9LTEscz0tMSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV0ubWF0Y2goaSk7aWYobnVsbCE9PWgmJmhbMl09PT1uKXtpZihmIT09LTEpe2lmKFwiRU5EXCIhPT1oWzFdKWJyZWFrO3M9dTticmVha31pZihcIkJFR0lOXCIhPT1oWzFdKWJyZWFrO2Y9dX19aWYoZj09PS0xfHxzPT09LTEpdGhyb3cgbmV3IEVycm9yKFwiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogXCIrbik7dmFyIGM9ci5zbGljZShmKzEscykuam9pbihcIlwiKTtjLnJlcGxhY2UoL1teYS16MC05XFwrXFwvPV0rL2dpLFwiXCIpO3ZhciBkPW5ldyBvKGMsXCJiYXNlNjRcIik7cmV0dXJuIGEucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZCxlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjE3KSxuLnBlbT1yKDUzNyl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe28uY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMjE3KTtpKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdCksbj1yLnRvU3RyaW5nKFwiYmFzZTY0XCIpLGk9W1wiLS0tLS1CRUdJTiBcIitlLmxhYmVsK1wiLS0tLS1cIl0sYT0wO2E8bi5sZW5ndGg7YSs9NjQpaS5wdXNoKG4uc2xpY2UoYSxhKzY0KSk7cmV0dXJuIGkucHVzaChcIi0tLS0tRU5EIFwiK2UubGFiZWwrXCItLS0tLVwiKSxpLmpvaW4oXCJcXG5cIil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfXQuZXhwb3J0cz1yLHIuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQhPWUpdGhyb3cgbmV3IEVycm9yKHJ8fFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrdCtcIiAhPSBcIitlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBzLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXRbMTVdLHI9LTE7KytyPGU7KWlmKHRbcisoMTYtZSldIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhXCIpO2lmKDE2IT09ZSlyZXR1cm4gdC5zbGljZSgwLDE2LWUpfWZ1bmN0aW9uIGEoZSxyLGkpe3ZhciBvPWNbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChiW28ubW9kZV0scixpLCEwKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChiW28ubW9kZV0scixpLCEwKTpuZXcgbihiW28ubW9kZV0scixpKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9Y1t0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49cChlLCExLHIua2V5LHIuaXYpO3JldHVybiBhKHQsbi5rZXksbi5pdil9dmFyIHM9cigxMDEpLHU9cigxMDMpLGg9cigyKSxjPXIoMTQ3KSxkPXIoMjI2KSxsPXIoMjE4KSxwPXIoMTQ4KTtoKG4sdSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KW49dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gbyh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyx0KSk7aWYodCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYodCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGV9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGU7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9O3ZhciBiPXtFQ0I6cigyMjQpLENCQzpyKDIyMCksQ0ZCOnIoMjIxKSxDRkI4OnIoMjIzKSxDRkIxOnIoMjIyKSxPRkI6cigyMjUpLENUUjpyKDEwMiksR0NNOnIoMTAyKX07ZS5jcmVhdGVEZWNpcGhlcj1mLGUuY3JlYXRlRGVjaXBoZXJpdj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHMuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9jaXBoZXI9bmV3IGYuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyhlLHIsaSl7dmFyIG89aFtlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKHBbby5tb2RlXSxyLGkpOlwiYXV0aFwiPT09by50eXBlP25ldyBsKHBbby5tb2RlXSxyLGkpOm5ldyBuKHBbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1oW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKGUsITEsci5rZXksci5pdik7cmV0dXJuIG8odCxuLmtleSxuLml2KX12YXIgZj1yKDEwMSkscz1yKDEwMyksdT1yKDIpLGg9cigxNDcpLGM9cigxNDgpLGQ9cigyMjYpLGw9cigyMTgpO3UobixzKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KCk7KW49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx0O2lmKFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTBcIiE9PXQudG9TdHJpbmcoXCJoZXhcIikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdH1yZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgscj1uZXcgdChlKSxuPS0xOysrbjxlOylyLndyaXRlVUludDgoZSxuKTt2YXIgaT10LmNvbmNhdChbdGhpcy5jYWNoZSxyXSk7cmV0dXJuIGl9O3ZhciBwPXtFQ0I6cigyMjQpLENCQzpyKDIyMCksQ0ZCOnIoMjIxKSxDRkI4OnIoMjIzKSxDRkIxOnIoMjIyKSxPRkI6cigyMjUpLENUUjpyKDEwMiksR0NNOnIoMTAyKX07ZS5jcmVhdGVDaXBoZXJpdj1vLGUuY3JlYXRlQ2lwaGVyPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dGhpcy5oPXQsdGhpcy5zdGF0ZT1uZXcgZSgxNiksdGhpcy5zdGF0ZS5maWxsKDApLHRoaXMuY2FjaGU9bmV3IGUoXCJcIil9ZnVuY3Rpb24gbih0KXtyZXR1cm5bdC5yZWFkVUludDMyQkUoMCksdC5yZWFkVUludDMyQkUoNCksdC5yZWFkVUludDMyQkUoOCksdC5yZWFkVUludDMyQkUoMTIpXX1mdW5jdGlvbiBpKHQpe3Q9dC5tYXAobyk7dmFyIHI9bmV3IGUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5zfHx0PDA/KHI9TWF0aC5hYnModCklcyx0PDA/cy1yOnIpOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVyblt0WzBdXmVbMF0sdFsxXV5lWzFdLHRbMl1eZVsyXSx0WzNdXmVbM11dfXZhciBmPW5ldyBlKDE2KTtmLmZpbGwoMCksdC5leHBvcnRzPXIsci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG89bih0aGlzLmgpLGY9WzAsMCwwLDBdLHM9LTE7KytzPDEyODspe2ZvcihlPTAhPT0odGhpcy5zdGF0ZVt+fihzLzgpXSYxPDw3LXMlOCksZSYmKGY9YShmLG8pKSxyPTAhPT0oMSZvWzNdKSx0PTM7dD4wO3QtLSlvW3RdPW9bdF0+Pj4xfCgxJm9bdC0xXSk8PDMxO29bMF09b1swXT4+PjEsciYmKG9bMF09b1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWkoZil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmNhY2hlPWUuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTtmb3IodmFyIHI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylyPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKHIpfSxyLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChlLmNvbmNhdChbdGhpcy5jYWNoZSxmXSwxNikpLHRoaXMuZ2hhc2goaShbMCx0LDAscl0pKSx0aGlzLnN0YXRlfTt2YXIgcz1NYXRoLnBvdygyLDMyKX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT12KGUpO2lmKGEuY3VydmUpe2lmKFwiZWNkc2FcIiE9PW4pdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtyZXR1cm4gaSh0LGEpfWlmKFwiZHNhXCI9PT1hLnR5cGUpe2lmKFwiZHNhXCIhPT1uKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7cmV0dXJuIG8odCxhLHIpfWlmKFwicnNhXCIhPT1uKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7Zm9yKHZhciBmPWEubW9kdWx1cy5ieXRlTGVuZ3RoKCkscz1bMCwxXTt0Lmxlbmd0aCtzLmxlbmd0aCsxPGY7KXMucHVzaCgyNTUpO3MucHVzaCgwKTtmb3IodmFyIHU9LTE7Kyt1PHQubGVuZ3RoOylzLnB1c2godFt1XSk7dmFyIGg9bChzLGEpO3JldHVybiBofWZ1bmN0aW9uIGkodCxyKXt2YXIgbj1wW3IuY3VydmUuam9pbihcIi5cIildO2lmKCFuKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY3VydmUgXCIrci5jdXJ2ZS5qb2luKFwiLlwiKSk7dmFyIGk9bmV3IG0obiksbz1pLmdlbktleVBhaXIoKTtvLl9pbXBvcnRQcml2YXRlKHIucHJpdmF0ZUtleSk7dmFyIGE9by5zaWduKHQpO3JldHVybiBuZXcgZShhLnRvREVSKCkpfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbixpPWUucGFyYW1zLnByaXZfa2V5LG89ZS5wYXJhbXMucCx1PWUucGFyYW1zLnEsZD1lLnBhcmFtcy5nLGw9bmV3IHkoMCkscD1zKHQsdSkubW9kKHUpLGI9ITEsdj1mKGksdSx0LHIpO2I9PT0hMTspbj1oKHUsdixyKSxsPWMoZCxuLG8sdSksYj1uLmludm0odSkuaW11bChwLmFkZChpLm11bChsKSkpLm1vZCh1KSxiLmNtcG4oMCl8fChiPSExLGw9bmV3IHkoMCkpO3JldHVybiBhKGwsYil9ZnVuY3Rpb24gYSh0LHIpe3Q9dC50b0FycmF5KCkscj1yLnRvQXJyYXkoKSwxMjgmdFswXSYmKHQ9WzBdLmNvbmNhdCh0KSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpO3ZhciBuPXQubGVuZ3RoK3IubGVuZ3RoKzQsaT1bNDgsbiwyLHQubGVuZ3RoXTtyZXR1cm4gaT1pLmNvbmNhdCh0LFsyLHIubGVuZ3RoXSxyKSxuZXcgZShpKX1mdW5jdGlvbiBmKHQscixuLGkpe2lmKHQ9bmV3IGUodC50b0FycmF5KCkpLHQubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgbz1uZXcgZShyLmJ5dGVMZW5ndGgoKS10Lmxlbmd0aCk7by5maWxsKDApLHQ9ZS5jb25jYXQoW28sdF0pfXZhciBhPW4ubGVuZ3RoLGY9dShuLHIpLHM9bmV3IGUoYSk7cy5maWxsKDEpO3ZhciBoPW5ldyBlKGEpO3JldHVybiBoLmZpbGwoMCksaD1kKGksaCkudXBkYXRlKHMpLnVwZGF0ZShuZXcgZShbMF0pKS51cGRhdGUodCkudXBkYXRlKGYpLmRpZ2VzdCgpLHM9ZChpLGgpLnVwZGF0ZShzKS5kaWdlc3QoKSxoPWQoaSxoKS51cGRhdGUocykudXBkYXRlKG5ldyBlKFsxXSkpLnVwZGF0ZSh0KS51cGRhdGUoZikuZGlnZXN0KCkscz1kKGksaCkudXBkYXRlKHMpLmRpZ2VzdCgpLHtrOmgsdjpzfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bmV3IHkodCksbj0odC5sZW5ndGg8PDMpLWUuYml0TGVuZ3RoKCk7cmV0dXJuIG4+MCYmci5pc2hybihuKSxyfWZ1bmN0aW9uIHUodCxyKXt0PXModCxyKSx0PXQubW9kKHIpO3ZhciBuPW5ldyBlKHQudG9BcnJheSgpKTtpZihuLmxlbmd0aDxyLmJ5dGVMZW5ndGgoKSl7dmFyIGk9bmV3IGUoci5ieXRlTGVuZ3RoKCktbi5sZW5ndGgpO2kuZmlsbCgwKSxuPWUuY29uY2F0KFtpLG5dKX1yZXR1cm4gbn1mdW5jdGlvbiBoKHQscixuKXt2YXIgaSxvO2Rve2ZvcihpPW5ldyBlKFwiXCIpOzgqaS5sZW5ndGg8dC5iaXRMZW5ndGgoKTspci52PWQobixyLmspLnVwZGF0ZShyLnYpLmRpZ2VzdCgpLGk9ZS5jb25jYXQoW2ksci52XSk7bz1zKGksdCksci5rPWQobixyLmspLnVwZGF0ZShyLnYpLnVwZGF0ZShuZXcgZShbMF0pKS5kaWdlc3QoKSxyLnY9ZChuLHIuaykudXBkYXRlKHIudikuZGlnZXN0KCl9d2hpbGUoby5jbXAodCkhPT0tMSk7cmV0dXJuIG99ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gdC50b1JlZCh5Lm1vbnQocikpLnJlZFBvdyhlKS5mcm9tUmVkKCkubW9kKG4pfXZhciBkPXIoMTQ5KSxsPXIoNTA3KSxwPXIoMjEyKSxiPXIoMTkpLHY9cigyMTMpLHk9cigxOCksbT1iLmVjO3QuZXhwb3J0cz1uLHQuZXhwb3J0cy5nZXRLZXk9Zix0LmV4cG9ydHMubWFrZUtleT1ofSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixuLGEpe3ZhciBmPXUobik7aWYoXCJlY1wiPT09Zi50eXBlKXtpZihcImVjZHNhXCIhPT1hKXRocm93IG5ldyBFcnJvcihcIndyb25nIHB1YmxpYyBrZXkgdHlwZVwiKTtyZXR1cm4gaSh0LHIsZil9aWYoXCJkc2FcIj09PWYudHlwZSl7aWYoXCJkc2FcIiE9PWEpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHVibGljIGtleSB0eXBlXCIpO3JldHVybiBvKHQscixmKX1pZihcInJzYVwiIT09YSl0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwdWJsaWMga2V5IHR5cGVcIik7Zm9yKHZhciBzPWYubW9kdWx1cy5ieXRlTGVuZ3RoKCksYz1bMV0sZD0wO3IubGVuZ3RoK2MubGVuZ3RoKzI8czspYy5wdXNoKDI1NSksZCsrO2MucHVzaCgwKTtmb3IodmFyIGw9LTE7KytsPHIubGVuZ3RoOyljLnB1c2gocltsXSk7Yz1uZXcgZShjKTt2YXIgcD1oLm1vbnQoZi5tb2R1bHVzKTt0PW5ldyBoKHQpLnRvUmVkKHApLHQ9dC5yZWRQb3cobmV3IGgoZi5wdWJsaWNFeHBvbmVudCkpLHQ9bmV3IGUodC5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgYj0wO2ZvcihkPDgmJihiPTEpLHM9TWF0aC5taW4odC5sZW5ndGgsYy5sZW5ndGgpLHQubGVuZ3RoIT09Yy5sZW5ndGgmJihiPTEpLGw9LTE7KytsPHM7KWJ8PXRbbF1eY1tsXTtyZXR1cm4gMD09PWJ9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZltyLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oXCIuXCIpXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGN1cnZlIFwiK3IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbihcIi5cIikpO3ZhciBpPW5ldyBjKG4pLG89ci5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGE7cmV0dXJuIGkudmVyaWZ5KGUsdCxvKX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1yLmRhdGEucCxpPXIuZGF0YS5xLG89ci5kYXRhLmcsZj1yLmRhdGEucHViX2tleSxzPXUuc2lnbmF0dXJlLmRlY29kZSh0LFwiZGVyXCIpLGM9cy5zLGQ9cy5yO2EoYyxpKSxhKGQsaSk7dmFyIGw9aC5tb250KG4pLHA9Yy5pbnZtKGkpLGI9by50b1JlZChsKS5yZWRQb3cobmV3IGgoZSkubXVsKHApLm1vZChpKSkuZnJvbVJlZCgpLm11bChmLnRvUmVkKGwpLnJlZFBvdyhkLm11bChwKS5tb2QoaSkpLmZyb21SZWQoKSkubW9kKG4pLm1vZChpKTtyZXR1cm4hYi5jbXAoZCl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpZ1wiKTtpZih0LmNtcChlKT49ZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpZ1wiKX12YXIgZj1yKDIxMikscz1yKDE5KSx1PXIoMjEzKSxoPXIoMTgpLGM9cy5lYzt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt0aGlzLmN1cnZlVHlwZT1mW3RdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6dH0pLHRoaXMuY3VydmU9bmV3IG8uZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBpKHQscixuKXtBcnJheS5pc0FycmF5KHQpfHwodD10LnRvQXJyYXkoKSk7dmFyIGk9bmV3IGUodCk7aWYobiYmaS5sZW5ndGg8bil7dmFyIG89bmV3IGUobi1pLmxlbmd0aCk7by5maWxsKDApLGk9ZS5jb25jYXQoW28saV0pfXJldHVybiByP2kudG9TdHJpbmcocik6aX12YXIgbz1yKDIyKSxhPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9O3ZhciBmPXtzZWNwMjU2azE6e25hbWU6XCJzZWNwMjU2azFcIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6XCJwMjI0XCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZTpcInAyNTZcIixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOlwicDE5MlwiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6XCJlZDI1NTE5XCIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOlwicDM4NFwiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZTpcInA1MjFcIixieXRlTGVuZ3RoOjY2fX07Zi5wMjI0PWYuc2VjcDIyNHIxLGYucDI1Nj1mLnNlY3AyNTZyMT1mLnByaW1lMjU2djEsZi5wMTkyPWYuc2VjcDE5MnIxPWYucHJpbWUxOTJ2MSxmLnAzODQ9Zi5zZWNwMzg0cjEsZi5wNTIxPWYuc2VjcDUyMXIxLG4ucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkodCxlKX0sbi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbih0LHIsbil7cj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKTt2YXIgbz10aGlzLmN1cnZlLmtleUZyb21QdWJsaWModCkuZ2V0UHVibGljKCksYT1vLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCk7cmV0dXJuIGkoYSxuLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxuLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmtleXMuZ2V0UHVibGljKFwiY29tcHJlc3NlZFwiPT09ZSwhMCk7cmV0dXJuXCJoeWJyaWRcIj09PWUmJihyW3IubGVuZ3RoLTFdJTI/clswXT03OnJbMF09NiksaShyLHQpfSxuLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMua2V5cy5nZXRQcml2YXRlKCksdCl9LG4ucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbih0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKHQpLHRoaXN9LG4ucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24odCxyKXtyPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpO3ZhciBuPW5ldyBhKHQpO3JldHVybiBuPW4udG9TdHJpbmcoMTYpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShuKSx0aGlzfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5wPW5ldyBvKGUucCwxNiksdGhpcy5yZWQ9ZS5wcmltZT9vLnJlZChlLnByaW1lKTpvLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IG8oMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBvKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgbygyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPWUubiYmbmV3IG8oZS5uLDE2KSx0aGlzLmc9ZS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oZS5nLGUuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KTt2YXIgcj10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshcnx8ci5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5jdXJ2ZT10LHRoaXMudHlwZT1lLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH12YXIgbz1yKDMwKSxhPXIoMjIpLGY9YS51dGlscyxzPWYuZ2V0TkFGLHU9Zi5nZXRKU0YsaD1mLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG4ucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbih0LGUpe2godC5wcmVjb21wdXRlZCk7dmFyIHI9dC5fZ2V0RG91YmxlcygpLG49cyhlLDEpLGk9KDE8PHIuc3RlcCsxKS0oci5zdGVwJTI9PT0wPzI6MSk7aS89Mztmb3IodmFyIG89W10sYT0wO2E8bi5sZW5ndGg7YSs9ci5zdGVwKXtmb3IodmFyIGY9MCxlPWErci5zdGVwLTE7ZT49YTtlLS0pZj0oZjw8MSkrbltlXTtvLnB1c2goZil9Zm9yKHZhciB1PXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxjPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxkPWk7ZD4wO2QtLSl7Zm9yKHZhciBhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBmPW9bYV07Zj09PWQ/Yz1jLm1peGVkQWRkKHIucG9pbnRzW2FdKTpmPT09LWQmJihjPWMubWl4ZWRBZGQoci5wb2ludHNbYV0ubmVnKCkpKX11PXUuYWRkKGMpfXJldHVybiB1LnRvUCgpfSxuLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih0LGUpe3ZhciByPTQsbj10Ll9nZXROQUZQb2ludHMocik7cj1uLnduZDtmb3IodmFyIGk9bi5wb2ludHMsbz1zKGUsciksYT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZj1vLmxlbmd0aC0xO2Y+PTA7Zi0tKXtmb3IodmFyIGU9MDtmPj0wJiYwPT09b1tmXTtmLS0pZSsrO2lmKGY+PTAmJmUrKyxhPWEuZGJscChlKSxmPDApYnJlYWs7dmFyIHU9b1tmXTtoKDAhPT11KSxhPVwiYWZmaW5lXCI9PT10LnR5cGU/dT4wP2EubWl4ZWRBZGQoaVt1LTE+PjFdKTphLm1peGVkQWRkKGlbLXUtMT4+MV0ubmVnKCkpOnU+MD9hLmFkZChpW3UtMT4+MV0pOmEuYWRkKGlbLXUtMT4+MV0ubmVnKCkpfXJldHVyblwiYWZmaW5lXCI9PT10LnR5cGU/YS50b1AoKTphfSxuLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz10aGlzLl93bmFmVDEsYT10aGlzLl93bmFmVDIsZj10aGlzLl93bmFmVDMsaD0wLGM9MDtjPG47YysrKXt2YXIgZD1lW2NdLGw9ZC5fZ2V0TkFGUG9pbnRzKHQpO29bY109bC53bmQsYVtjXT1sLnBvaW50c31mb3IodmFyIGM9bi0xO2M+PTE7Yy09Mil7dmFyIHA9Yy0xLGI9YztpZigxPT09b1twXSYmMT09PW9bYl0pe3ZhciB2PVtlW3BdLG51bGwsbnVsbCxlW2JdXTswPT09ZVtwXS55LmNtcChlW2JdLnkpPyh2WzFdPWVbcF0uYWRkKGVbYl0pLHZbMl09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdLm5lZygpKSk6MD09PWVbcF0ueS5jbXAoZVtiXS55LnJlZE5lZygpKT8odlsxXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0pLHZbMl09ZVtwXS5hZGQoZVtiXS5uZWcoKSkpOih2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTt2YXIgeT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxtPXUocltwXSxyW2JdKTtoPU1hdGgubWF4KG1bMF0ubGVuZ3RoLGgpLGZbcF09bmV3IEFycmF5KGgpLGZbYl09bmV3IEFycmF5KGgpO2Zvcih2YXIgZz0wO2c8aDtnKyspe3ZhciB3PTB8bVswXVtnXSxfPTB8bVsxXVtnXTtmW3BdW2ddPXlbMyoodysxKSsoXysxKV0sZltiXVtnXT0wLGFbcF09dn19ZWxzZSBmW3BdPXMocltwXSxvW3BdKSxmW2JdPXMocltiXSxvW2JdKSxoPU1hdGgubWF4KGZbcF0ubGVuZ3RoLGgpLGg9TWF0aC5tYXgoZltiXS5sZW5ndGgsaCl9Zm9yKHZhciBNPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxTPXRoaXMuX3duYWZUNCxjPWg7Yz49MDtjLS0pe2Zvcih2YXIgRT0wO2M+PTA7KXtmb3IodmFyIEE9ITAsZz0wO2c8bjtnKyspU1tnXT0wfGZbZ11bY10sMCE9PVNbZ10mJihBPSExKTtpZighQSlicmVhaztFKyssYy0tfWlmKGM+PTAmJkUrKyxNPU0uZGJscChFKSxjPDApYnJlYWs7Zm9yKHZhciBnPTA7ZzxuO2crKyl7dmFyIGQsaz1TW2ddOzAhPT1rJiYoaz4wP2Q9YVtnXVtrLTE+PjFdOms8MCYmKGQ9YVtnXVstay0xPj4xXS5uZWcoKSksTT1cImFmZmluZVwiPT09ZC50eXBlP00ubWl4ZWRBZGQoZCk6TS5hZGQoZCkpfX1mb3IodmFyIGM9MDtjPG47YysrKWFbY109bnVsbDtyZXR1cm4gaT9NOk0udG9QKCl9LG4uQmFzZVBvaW50PWksaS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LGkucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7dD1mLnRvQXJyYXkodCxlKTt2YXIgcj10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09dFswXXx8Nj09PXRbMF18fDc9PT10WzBdKSYmdC5sZW5ndGgtMT09PTIqcil7Nj09PXRbMF0/aCh0W3QubGVuZ3RoLTFdJTI9PT0wKTo3PT09dFswXSYmaCh0W3QubGVuZ3RoLTFdJTI9PT0xKTt2YXIgbj10aGlzLnBvaW50KHQuc2xpY2UoMSwxK3IpLHQuc2xpY2UoMStyLDErMipyKSk7cmV0dXJuIG59aWYoKDI9PT10WzBdfHwzPT09dFswXSkmJnQubGVuZ3RoLTE9PT1yKXJldHVybiB0aGlzLnBvaW50RnJvbVgodC5zbGljZSgxLDErciksMz09PXRbMF0pO3Rocm93IG5ldyBFcnJvcihcIlVua25vd24gcG9pbnQgZm9ybWF0XCIpfSxpLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVuY29kZSh0LCEwKX0saS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLHI9dGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsZSk7cmV0dXJuIHQ/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KHIpOls0XS5jb25jYXQocix0aGlzLmdldFkoKS50b0FycmF5KFwiYmVcIixlKSl9LGkucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiBmLmVuY29kZSh0aGlzLl9lbmNvZGUoZSksdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgZT17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIGUubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxlLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHQpLGUuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1lLHRoaXN9LGkucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBlPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIWUmJmUucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh0LmJpdExlbmd0aCgpKzEpL2Uuc3RlcCl9LGkucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciByPVt0aGlzXSxuPXRoaXMsaT0wO2k8ZTtpKz10KXtmb3IodmFyIG89MDtvPHQ7bysrKW49bi5kYmwoKTtyLnB1c2gobil9cmV0dXJue3N0ZXA6dCxwb2ludHM6cn19LGkucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgZT1bdGhpc10scj0oMTw8dCktMSxuPTE9PT1yP251bGw6dGhpcy5kYmwoKSxpPTE7aTxyO2krKyllW2ldPWVbaS0xXS5hZGQobik7cmV0dXJue3duZDp0LHBvaW50czplfX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnR3aXN0ZWQ9MSE9PSgwfHQuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJigwfHQuYSk9PT0tMSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsdS5jYWxsKHRoaXMsXCJlZHdhcmRzXCIsdCksdGhpcy5hPW5ldyBmKHQuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGYodC5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBmKHQuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLGgoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PT0oMHx0LmMpfWZ1bmN0aW9uIGkodCxlLHIsbixpKXt1LkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcInByb2plY3RpdmVcIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBmKGUsMTYpLHRoaXMueT1uZXcgZihyLDE2KSx0aGlzLno9bj9uZXcgZihuLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9aSYmbmV3IGYoaSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9dmFyIG89cigxMDQpLGE9cigyMiksZj1yKDMwKSxzPXIoMiksdT1vLmJhc2UsaD1hLnV0aWxzLmFzc2VydDtzKG4sdSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubU9uZUE/dC5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vbmVDP3Q6dGhpcy5jLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnBvaW50KHQsZSxyLG4pfSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHIpKSxpPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChyKSksbz1uLnJlZE11bChpLnJlZEludm0oKSksYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgcz1hLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhc3x8IWUmJnMpJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsYSl9LG4ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMub25lKSxpPXIucmVkTXVsKHRoaXMuZCkucmVkQWRkKHRoaXMub25lKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKTtpZigwPT09by5jbXAodGhpcy56ZXJvKSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx0KX12YXIgYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gYS5pc09kZCgpIT09ZSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludChhLHQpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt0Lm5vcm1hbGl6ZSgpO3ZhciBlPXQueC5yZWRTcXIoKSxyPXQueS5yZWRTcXIoKSxuPWUucmVkTXVsKHRoaXMuYSkucmVkQWRkKHIpLGk9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoZSkucmVkTXVsKHIpKSk7cmV0dXJuIDA9PT1uLmNtcChpKX0scyhpLHUuQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyLG4pfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdLGVbMl0pfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmMD09PXRoaXMueS5jbXAodGhpcy56KX0saS5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKTtyPXIucmVkSUFkZChyKTt2YXIgbj10aGlzLmN1cnZlLl9tdWxBKHQpLGk9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihlKSxvPW4ucmVkQWRkKGUpLGE9by5yZWRTdWIociksZj1uLnJlZFN1YihlKSxzPWkucmVkTXVsKGEpLHU9by5yZWRNdWwoZiksaD1pLnJlZE11bChmKSxjPWEucmVkTXVsKG8pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSxjLGgpfSxpLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciB0LGUscixuPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxpPXRoaXMueC5yZWRTcXIoKSxvPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBhPXRoaXMuY3VydmUuX211bEEoaSksZj1hLnJlZEFkZChvKTtpZih0aGlzLnpPbmUpdD1uLnJlZFN1YihpKS5yZWRTdWIobykucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZFNxcigpLnJlZFN1YihmKS5yZWRTdWIoZik7ZWxzZXt2YXIgcz10aGlzLnoucmVkU3FyKCksdT1mLnJlZFN1YihzKS5yZWRJU3ViKHMpO3Q9bi5yZWRTdWIoaSkucmVkSVN1YihvKS5yZWRNdWwodSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZE11bCh1KX19ZWxzZXt2YXIgYT1pLnJlZEFkZChvKSxzPXRoaXMuY3VydmUuX211bEModGhpcy5jLnJlZE11bCh0aGlzLnopKS5yZWRTcXIoKSx1PWEucmVkU3ViKHMpLnJlZFN1YihzKTt0PXRoaXMuY3VydmUuX211bEMobi5yZWRJU3ViKGEpKS5yZWRNdWwodSksZT10aGlzLmN1cnZlLl9tdWxDKGEpLnJlZE11bChpLnJlZElTdWIobykpLHI9YS5yZWRNdWwodSl9cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodCxlLHIpfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0saS5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHQueS5yZWRTdWIodC54KSkscj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHQueS5yZWRBZGQodC54KSksbj10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bCh0LnQpLGk9dGhpcy56LnJlZE11bCh0LnoucmVkQWRkKHQueikpLG89ci5yZWRTdWIoZSksYT1pLnJlZFN1YihuKSxmPWkucmVkQWRkKG4pLHM9ci5yZWRBZGQoZSksdT1vLnJlZE11bChhKSxoPWYucmVkTXVsKHMpLGM9by5yZWRNdWwocyksZD1hLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh1LGgsZCxjKX0saS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuei5yZWRNdWwodC56KSxpPW4ucmVkU3FyKCksbz10aGlzLngucmVkTXVsKHQueCksYT10aGlzLnkucmVkTXVsKHQueSksZj10aGlzLmN1cnZlLmQucmVkTXVsKG8pLnJlZE11bChhKSxzPWkucmVkU3ViKGYpLHU9aS5yZWRBZGQoZiksaD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHQueC5yZWRBZGQodC55KSkucmVkSVN1YihvKS5yZWRJU3ViKGEpLGM9bi5yZWRNdWwocykucmVkTXVsKGgpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKHRoaXMuY3VydmUuX211bEEobykpKSxyPXMucmVkTXVsKHUpKTooZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIobykpLHI9dGhpcy5jdXJ2ZS5fbXVsQyhzKS5yZWRNdWwodSkpLHRoaXMuY3VydmUucG9pbnQoYyxlLHIpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3Q6dC5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh0KTp0aGlzLl9wcm9qQWRkKHQpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCExKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCEwKX0saS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHQpLHRoaXMueT10aGlzLnkucmVkTXVsKHQpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHQpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHQuZ2V0WSgpKX0saS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwO2Zvcih2YXIgcj10LmNsb25lKCksbj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoci5pYWRkKHRoaXMuY3VydmUubiksci5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihlLnJlZElBZGQobiksMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnRvUD1pLnByb3RvdHlwZS5ub3JtYWxpemUsaS5wcm90b3R5cGUubWl4ZWRBZGQ9aS5wcm90b3R5cGUuYWRkfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtzLmNhbGwodGhpcyxcIm1vbnRcIix0KSx0aGlzLmE9bmV3IGEodC5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBhKHQuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IGEoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGkodCxlLHIpe3MuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXI/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBhKGUsMTYpLHRoaXMuej1uZXcgYShyLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXZhciBvPXIoMTA0KSxhPXIoMzApLGY9cigyKSxzPW8uYmFzZSx1PXIoMjIpLGg9dS51dGlscztmKG4scyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3JtYWxpemUoKS54LHI9ZS5yZWRTcXIoKSxuPXIucmVkTXVsKGUpLnJlZEFkZChyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoZSksaT1uLnJlZFNxcnQoKTtyZXR1cm4gMD09PWkucmVkU3FyKCkuY21wKG4pfSxmKGkscy5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucG9pbnQoaC50b0FycmF5KHQsZSksMSl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdfHx0Lm9uZSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZEFkZCh0aGlzLnopLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRTdWIodGhpcy56KSxuPXIucmVkU3FyKCksaT1lLnJlZFN1YihuKSxvPWUucmVkTXVsKG4pLGE9aS5yZWRNdWwobi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKGkpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy54LnJlZEFkZCh0aGlzLnopLG49dGhpcy54LnJlZFN1Yih0aGlzLnopLGk9dC54LnJlZEFkZCh0LnopLG89dC54LnJlZFN1Yih0LnopLGE9by5yZWRNdWwociksZj1pLnJlZE11bChuKSxzPWUuei5yZWRNdWwoYS5yZWRBZGQoZikucmVkU3FyKCkpLHU9ZS54LnJlZE11bChhLnJlZElTdWIoZikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPXRoaXMsbz1bXTswIT09ZS5jbXBuKDApO2UuaXVzaHJuKDEpKW8ucHVzaChlLmFuZGxuKDEpKTtmb3IodmFyIGE9by5sZW5ndGgtMTthPj0wO2EtLSkwPT09b1thXT8ocj1yLmRpZmZBZGQobixpKSxuPW4uZGJsKCkpOihuPXIuZGlmZkFkZChuLGkpLHI9ci5kYmwoKSk7cmV0dXJuIG59LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aC5jYWxsKHRoaXMsXCJzaG9ydFwiLHQpLHRoaXMuYT1uZXcgcyh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHModC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbSh0KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBpKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiYWZmaW5lXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLG4mJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gbyh0LGUscixuKXtoLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcImphY29iaWFuXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBzKDApKToodGhpcy54PW5ldyBzKGUsMTYpLHRoaXMueT1uZXcgcyhyLDE2KSx0aGlzLno9bmV3IHMobiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX12YXIgYT1yKDEwNCksZj1yKDIyKSxzPXIoMzApLHU9cigyKSxoPWEuYmFzZSxjPWYudXRpbHMuYXNzZXJ0O3UobixoKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKHQpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBlLHI7aWYodC5iZXRhKWU9bmV3IHModC5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgbj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtlPW5bMF0uY21wKG5bMV0pPDA/blswXTpuWzFdLGU9ZS50b1JlZCh0aGlzLnJlZCl9aWYodC5sYW1iZGEpcj1uZXcgcyh0LmxhbWJkYSwxNik7ZWxzZXt2YXIgaT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChpWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpP3I9aVswXToocj1pWzFdLGMoMD09PXRoaXMuZy5tdWwocikueC5jbXAodGhpcy5nLngucmVkTXVsKGUpKSkpfXZhciBvO3JldHVybiBvPXQuYmFzaXM/dC5iYXNpcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2E6bmV3IHModC5hLDE2KSxiOm5ldyBzKHQuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKHIpLHtiZXRhOmUsbGFtYmRhOnIsYmFzaXM6b319fSxuLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT10aGlzLnA/dGhpcy5yZWQ6cy5tb250KHQpLHI9bmV3IHMoMikudG9SZWQoZSkucmVkSW52bSgpLG49ci5yZWROZWcoKSxpPW5ldyBzKDMpLnRvUmVkKGUpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwociksbz1uLnJlZEFkZChpKS5mcm9tUmVkKCksYT1uLnJlZFN1YihpKS5mcm9tUmVkKCk7cmV0dXJuW28sYV19LG4ucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLG8sYSxmLHUsaCxjPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksZD10LGw9dGhpcy5uLmNsb25lKCkscD1uZXcgcygxKSxiPW5ldyBzKDApLHY9bmV3IHMoMCkseT1uZXcgcygxKSxtPTA7MCE9PWQuY21wbigwKTspe3ZhciBnPWwuZGl2KGQpO3U9bC5zdWIoZy5tdWwoZCkpLGg9di5zdWIoZy5tdWwocCkpO3ZhciB3PXkuc3ViKGcubXVsKGIpKTtpZighbiYmdS5jbXAoYyk8MCllPWYubmVnKCkscj1wLG49dS5uZWcoKSxpPWg7ZWxzZSBpZihuJiYyPT09KyttKWJyZWFrO2Y9dSxsPWQsZD11LHY9cCxwPWgseT1iLGI9d31vPXUubmVnKCksYT1oO3ZhciBfPW4uc3FyKCkuYWRkKGkuc3FyKCkpLE09by5zcXIoKS5hZGQoYS5zcXIoKSk7cmV0dXJuIE0uY21wKF8pPj0wJiYobz1lLGE9ciksbi5uZWdhdGl2ZSYmKG49bi5uZWcoKSxpPWkubmVnKCkpLG8ubmVnYXRpdmUmJihvPW8ubmVnKCksYT1hLm5lZygpKSxbe2E6bixiOml9LHthOm8sYjphfV19LG4ucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbmRvLmJhc2lzLHI9ZVswXSxuPWVbMV0saT1uLmIubXVsKHQpLmRpdlJvdW5kKHRoaXMubiksbz1yLmIubmVnKCkubXVsKHQpLmRpdlJvdW5kKHRoaXMubiksYT1pLm11bChyLmEpLGY9by5tdWwobi5hKSxzPWkubXVsKHIuYiksdT1vLm11bChuLmIpLGg9dC5zdWIoYSkuc3ViKGYpLGM9cy5hZGQodSkubmVnKCk7cmV0dXJue2sxOmgsazI6Y319LG4ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24odCxlKXt0PW5ldyBzKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKS5yZWRNdWwodCkucmVkSUFkZCh0LnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksbj1yLnJlZFNxcnQoKTtpZigwIT09bi5yZWRTcXIoKS5yZWRTdWIocikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgaT1uLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhaXx8IWUmJmkpJiYobj1uLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsbil9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe2lmKHQuaW5mKXJldHVybiEwO3ZhciBlPXQueCxyPXQueSxuPXRoaXMuYS5yZWRNdWwoZSksaT1lLnJlZFNxcigpLnJlZE11bChlKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PXIucmVkU3FyKCkucmVkSVN1YihpKS5jbXBuKDApfSxuLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLl9lbmRvV25hZlQxLGk9dGhpcy5fZW5kb1duYWZUMixvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuX2VuZG9TcGxpdChlW29dKSxmPXRbb10scz1mLl9nZXRCZXRhKCk7YS5rMS5uZWdhdGl2ZSYmKGEuazEuaW5lZygpLGY9Zi5uZWcoITApKSxhLmsyLm5lZ2F0aXZlJiYoYS5rMi5pbmVnKCkscz1zLm5lZyghMCkpLG5bMipvXT1mLG5bMipvKzFdPXMsaVsyKm9dPWEuazEsaVsyKm8rMV09YS5rMn1mb3IodmFyIHU9dGhpcy5fd25hZk11bEFkZCgxLG4saSwyKm8sciksaD0wO2g8MipvO2grKyluW2hdPW51bGwsaVtoXT1udWxsO3JldHVybiB1fSx1KGksaC5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUscil9LG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQsZSl9LGkucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgdD10aGlzLnByZWNvbXB1dGVkO2lmKHQmJnQuYmV0YSlyZXR1cm4gdC5iZXRhO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZih0KXt2YXIgcj10aGlzLmN1cnZlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIucG9pbnQodC54LnJlZE11bChyLmVuZG8uYmV0YSksdC55KX07dC5iZXRhPWUsZS5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjp0Lm5hZiYme3duZDp0Lm5hZi53bmQscG9pbnRzOnQubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6dC5kb3VibGVzJiZ7c3RlcDp0LmRvdWJsZXMuc3RlcCxwb2ludHM6dC5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gZX19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQucG9pbnQoZVswXSxlWzFdLHIpfVwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1KU09OLnBhcnNlKGUpKTt2YXIgaT10LnBvaW50KGVbMF0sZVsxXSxyKTtpZighZVsyXSlyZXR1cm4gaTt2YXIgbz1lWzJdO3JldHVybiBpLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpvLmRvdWJsZXMmJntzdGVwOm8uZG91Ymxlcy5zdGVwLHBvaW50czpbaV0uY29uY2F0KG8uZG91Ymxlcy5wb2ludHMubWFwKG4pKX0sbmFmOm8ubmFmJiZ7d25kOm8ubmFmLnduZCxwb2ludHM6W2ldLmNvbmNhdChvLm5hZi5wb2ludHMubWFwKG4pKX19LGl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pbmYpcmV0dXJuIHQ7aWYodC5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcSh0KSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKHQpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAodC54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMueS5yZWRTdWIodC55KTswIT09ZS5jbXBuKDApJiYoZT1lLnJlZE11bCh0aGlzLngucmVkU3ViKHQueCkucmVkSW52bSgpKSk7dmFyIHI9ZS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1Yih0LngpLG49ZS5yZWRNdWwodGhpcy54LnJlZFN1YihyKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciB0PXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09dC5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy5jdXJ2ZS5hLHI9dGhpcy54LnJlZFNxcigpLG49dC5yZWRJbnZtKCksaT1yLnJlZEFkZChyKS5yZWRJQWRkKHIpLnJlZElBZGQoZSkucmVkTXVsKG4pLG89aS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksYT1pLnJlZE11bCh0aGlzLngucmVkU3ViKG8pKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uZXcgcyh0LDE2KSx0aGlzLl9oYXNEb3VibGVzKHQpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsdCk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbdF0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bdGhpcyxlXSxpPVt0LHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxpLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bdGhpcyxlXSxpPVt0LHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fHRoaXMuaW5mPT09dC5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAodC54KSYmMD09PXRoaXMueS5jbXAodC55KSl9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgZT10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKHQmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZWcoKX07ZS5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfSxpLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpO3ZhciB0PXRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpO3JldHVybiB0fSxcbnUobyxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IG8odGhpcyx0LGUscil9LG8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy56LnJlZEludm0oKSxlPXQucmVkU3FyKCkscj10aGlzLngucmVkTXVsKGUpLG49dGhpcy55LnJlZE11bChlKS5yZWRNdWwodCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0O2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBlPXQuei5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXRoaXMueC5yZWRNdWwoZSksaT10LngucmVkTXVsKHIpLG89dGhpcy55LnJlZE11bChlLnJlZE11bCh0LnopKSxhPXQueS5yZWRNdWwoci5yZWRNdWwodGhpcy56KSksZj1uLnJlZFN1YihpKSxzPW8ucmVkU3ViKGEpO2lmKDA9PT1mLmNtcG4oMCkpcmV0dXJuIDAhPT1zLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHU9Zi5yZWRTcXIoKSxoPXUucmVkTXVsKGYpLGM9bi5yZWRNdWwodSksZD1zLnJlZFNxcigpLnJlZElBZGQoaCkucmVkSVN1YihjKS5yZWRJU3ViKGMpLGw9cy5yZWRNdWwoYy5yZWRJU3ViKGQpKS5yZWRJU3ViKG8ucmVkTXVsKGgpKSxwPXRoaXMuei5yZWRNdWwodC56KS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGQsbCxwKX0sby5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQudG9KKCk7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dGhpcy54LG49dC54LnJlZE11bChlKSxpPXRoaXMueSxvPXQueS5yZWRNdWwoZSkucmVkTXVsKHRoaXMueiksYT1yLnJlZFN1YihuKSxmPWkucmVkU3ViKG8pO2lmKDA9PT1hLmNtcG4oMCkpcmV0dXJuIDAhPT1mLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHM9YS5yZWRTcXIoKSx1PXMucmVkTXVsKGEpLGg9ci5yZWRNdWwocyksYz1mLnJlZFNxcigpLnJlZElBZGQodSkucmVkSVN1YihoKS5yZWRJU3ViKGgpLGQ9Zi5yZWRNdWwoaC5yZWRJU3ViKGMpKS5yZWRJU3ViKGkucmVkTXVsKHUpKSxsPXRoaXMuei5yZWRNdWwoYSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGMsZCxsKX0sby5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighdClyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfWZvcih2YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnksZj10aGlzLnoscz1mLnJlZFNxcigpLnJlZFNxcigpLHU9YS5yZWRBZGQoYSkscj0wO3I8dDtyKyspe3ZhciBoPW8ucmVkU3FyKCksYz11LnJlZFNxcigpLGQ9Yy5yZWRTcXIoKSxsPWgucmVkQWRkKGgpLnJlZElBZGQoaCkucmVkSUFkZChuLnJlZE11bChzKSkscD1vLnJlZE11bChjKSxiPWwucmVkU3FyKCkucmVkSVN1YihwLnJlZEFkZChwKSksdj1wLnJlZElTdWIoYikseT1sLnJlZE11bCh2KTt5PXkucmVkSUFkZCh5KS5yZWRJU3ViKGQpO3ZhciBtPXUucmVkTXVsKGYpO3IrMTx0JiYocz1zLnJlZE11bChkKSksbz1iLGY9bSx1PXl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG8sdS5yZWRNdWwoaSksZil9LG8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LG8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBmPW4ucmVkQWRkKG4pLnJlZElBZGQobikscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKSx1PW8ucmVkSUFkZChvKTt1PXUucmVkSUFkZCh1KSx1PXUucmVkSUFkZCh1KSx0PXMsZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLngucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9dGhpcy54LnJlZEFkZChjKS5yZWRTcXIoKS5yZWRJU3ViKGgpLnJlZElTdWIoZCk7bD1sLnJlZElBZGQobCk7dmFyIHA9aC5yZWRBZGQoaCkucmVkSUFkZChoKSxiPXAucmVkU3FyKCksdj1kLnJlZElBZGQoZCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdD1iLnJlZElTdWIobCkucmVkSVN1YihsKSxlPXAucmVkTXVsKGwucmVkSVN1Yih0KSkucmVkSVN1Yih2KSxyPXRoaXMueS5yZWRNdWwodGhpcy56KSxyPXIucmVkSUFkZChyKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuY3VydmUuYSkscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKTt0PXM7dmFyIHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLGU9Zi5yZWRNdWwoYS5yZWRJU3ViKHMpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGg9dGhpcy56LnJlZFNxcigpLGM9dGhpcy55LnJlZFNxcigpLGQ9dGhpcy54LnJlZE11bChjKSxsPXRoaXMueC5yZWRTdWIoaCkucmVkTXVsKHRoaXMueC5yZWRBZGQoaCkpO2w9bC5yZWRBZGQobCkucmVkSUFkZChsKTt2YXIgcD1kLnJlZElBZGQoZCk7cD1wLnJlZElBZGQocCk7dmFyIGI9cC5yZWRBZGQocCk7dD1sLnJlZFNxcigpLnJlZElTdWIoYikscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihjKS5yZWRJU3ViKGgpO3ZhciB2PWMucmVkU3FyKCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksZT1sLnJlZE11bChwLnJlZElTdWIodCkpLnJlZElTdWIodil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHQsZSxyKX0sby5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VydmUuYSxlPXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz1lLnJlZFNxcigpLGE9ci5yZWRTcXIoKSxmPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZCh0LnJlZE11bChpKSkscz1lLnJlZEFkZChlKTtzPXMucmVkSUFkZChzKTt2YXIgdT1zLnJlZE11bChhKSxoPWYucmVkU3FyKCkucmVkSVN1Yih1LnJlZEFkZCh1KSksYz11LnJlZElTdWIoaCksZD1hLnJlZFNxcigpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPWYucmVkTXVsKGMpLnJlZElTdWIoZCkscD1yLnJlZEFkZChyKS5yZWRNdWwobik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGgsbCxwKX0sby5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj1lLnJlZFNxcigpLGk9dC5yZWRBZGQodCkucmVkSUFkZCh0KSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihuKTthPWEucmVkSUFkZChhKSxhPWEucmVkQWRkKGEpLnJlZElBZGQoYSksYT1hLnJlZElTdWIobyk7dmFyIGY9YS5yZWRTcXIoKSxzPW4ucmVkSUFkZChuKTtzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKTt2YXIgdT1pLnJlZElBZGQoYSkucmVkU3FyKCkucmVkSVN1YihvKS5yZWRJU3ViKGYpLnJlZElTdWIocyksaD1lLnJlZE11bCh1KTtoPWgucmVkSUFkZChoKSxoPWgucmVkSUFkZChoKTt2YXIgYz10aGlzLngucmVkTXVsKGYpLnJlZElTdWIoaCk7Yz1jLnJlZElBZGQoYyksYz1jLnJlZElBZGQoYyk7dmFyIGQ9dGhpcy55LnJlZE11bCh1LnJlZE11bChzLnJlZElTdWIodSkpLnJlZElTdWIoYS5yZWRNdWwoZikpKTtkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKTt2YXIgbD10aGlzLnoucmVkQWRkKGEpLnJlZFNxcigpLnJlZElTdWIocikucmVkSVN1YihmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1uZXcgcyh0LGUpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7aWYoXCJhZmZpbmVcIj09PXQudHlwZSlyZXR1cm4gdGhpcy5lcSh0LnRvSigpKTtpZih0aGlzPT09dClyZXR1cm4hMDt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwocikucmVkSVN1Yih0LngucmVkTXVsKGUpKS5jbXBuKDApKXJldHVybiExO3ZhciBuPWUucmVkTXVsKHRoaXMueiksaT1yLnJlZE11bCh0LnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChpKS5yZWRJU3ViKHQueS5yZWRNdWwobikpLmNtcG4oMCl9LG8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoZSk7aWYoMD09PXRoaXMueC5jbXAocikpcmV0dXJuITA7Zm9yKHZhciBuPXQuY2xvbmUoKSxpPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoZSk7Oyl7aWYobi5pYWRkKHRoaXMuY3VydmUubiksbi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihyLnJlZElBZGQoaSksMD09PXRoaXMueC5jbXAocikpcmV0dXJuITB9cmV0dXJuITF9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgSlBvaW50IEluZmluaXR5PlwiOlwiPEVDIEpQb2ludCB4OiBcIit0aGlzLngudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei50b1N0cmluZygxNiwyKStcIj5cIn0sby5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtcInNob3J0XCI9PT10LnR5cGU/dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5zaG9ydCh0KTpcImVkd2FyZHNcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLmVkd2FyZHModCk6dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5tb250KHQpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9dC5oYXNoLHModGhpcy5nLnZhbGlkYXRlKCksXCJJbnZhbGlkIGN1cnZlXCIpLHModGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSxcIkludmFsaWQgY3VydmUsIEcqTiAhPSBPXCIpfWZ1bmN0aW9uIGkodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgbihlKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0pLHJ9fSl9dmFyIG89ZSxhPXIoNTApLGY9cigyMikscz1mLnV0aWxzLmFzc2VydDtvLlByZXNldEN1cnZlPW4saShcInAxOTJcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMTkyXCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTJcIixcIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExXCJdfSksaShcInAyMjRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMjI0XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlXCIsYjpcImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjFcIixcImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0XCJdfSksaShcInAyNTZcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGJcIixuOlwiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NlwiLFwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjVcIl19KSxpKFwicDM4NFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmY1wiLGI6XCJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZlwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3M1wiLGhhc2g6YS5zaGEzODQsZ1JlZDohMSxnOltcImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3XCIsXCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZlwiXX0pLGkoXCJwNTIxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwXCIsbjpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5XCIsaGFzaDphLnNoYTUxMixnUmVkOiExLGc6W1wiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjZcIixcIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwXCJdfSksaShcImN1cnZlMjU1MTlcIix7dHlwZTpcIm1vbnRcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIjc2ZDA2XCIsYjpcIjBcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjlcIl19KSxpKFwiZWQyNTUxOVwiLHt0eXBlOlwiZWR3YXJkc1wiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiLTFcIixjOlwiMVwiLGQ6XCI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhXCIsXCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4XCJdfSk7dmFyIHU7dHJ5e3U9cig1NTcpfWNhdGNoKHQpe3U9dm9pZCAwfWkoXCJzZWNwMjU2azFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJrMjU2XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIsYTpcIjBcIixiOlwiN1wiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MVwiLGg6XCIxXCIsaGFzaDphLnNoYTI1NixiZXRhOlwiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZVwiLGxhbWJkYTpcIjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzJcIixiYXNpczpbe2E6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwiLGI6XCItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzNcIn0se2E6XCIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDhcIixiOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIn1dLGdSZWQ6ITEsZzpbXCI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4XCIsXCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4XCIsdV19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhcInN0cmluZ1wiPT10eXBlb2YgdCYmKGYoby5jdXJ2ZXMuaGFzT3duUHJvcGVydHkodCksXCJVbmtub3duIGN1cnZlIFwiK3QpLHQ9by5jdXJ2ZXNbdF0pLHQgaW5zdGFuY2VvZiBvLmN1cnZlcy5QcmVzZXRDdXJ2ZSYmKHQ9e2N1cnZlOnR9KSx0aGlzLmN1cnZlPXQuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz10LmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUodC5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHZvaWQodGhpcy5oYXNoPXQuaGFzaHx8dC5jdXJ2ZS5oYXNoKSk6bmV3IG4odCl9dmFyIGk9cigzMCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPXIoNTUxKSx1PXIoNTUyKTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh0aGlzLHQpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBzLmZyb21Qcml2YXRlKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBzLmZyb21QdWJsaWModGhpcyx0LGUpfSxuLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKHQpe3R8fCh0PXt9KTtmb3IodmFyIGU9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLHBlcnM6dC5wZXJzLGVudHJvcHk6dC5lbnRyb3B5fHxvLnJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxuPXRoaXMubi5zdWIobmV3IGkoMikpOzspe3ZhciBhPW5ldyBpKGUuZ2VuZXJhdGUocikpO2lmKCEoYS5jbXAobik+MCkpcmV0dXJuIGEuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShhKX19LG4ucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbih0LGUpe3ZhciByPTgqdC5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiByPjAmJih0PXQudXNocm4ocikpLCFlJiZ0LmNtcCh0aGlzLm4pPj0wP3Quc3ViKHRoaXMubik6dH0sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUscixuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmKG49cixyPW51bGwpLG58fChuPXt9KSxlPXRoaXMua2V5RnJvbVByaXZhdGUoZSxyKSx0PXRoaXMuX3RydW5jYXRlVG9OKG5ldyBpKHQsMTYpKTtmb3IodmFyIGE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxmPWUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoXCJiZVwiLGEpLHM9dC50b0FycmF5KFwiYmVcIixhKSxoPW5ldyBvLmhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmYsbm9uY2U6cyxwZXJzOm4ucGVycyxwZXJzRW5jOm4ucGVyc0VuY30pLGM9dGhpcy5uLnN1YihuZXcgaSgxKSksZD0wOyEwO2QrKyl7dmFyIGw9bi5rP24uayhkKTpuZXcgaShoLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZihsPXRoaXMuX3RydW5jYXRlVG9OKGwsITApLCEobC5jbXBuKDEpPD0wfHxsLmNtcChjKT49MCkpe3ZhciBwPXRoaXMuZy5tdWwobCk7aWYoIXAuaXNJbmZpbml0eSgpKXt2YXIgYj1wLmdldFgoKSx2PWIudW1vZCh0aGlzLm4pO2lmKDAhPT12LmNtcG4oMCkpe3ZhciB5PWwuaW52bSh0aGlzLm4pLm11bCh2Lm11bChlLmdldFByaXZhdGUoKSkuaWFkZCh0KSk7aWYoeT15LnVtb2QodGhpcy5uKSwwIT09eS5jbXBuKDApKXt2YXIgbT0ocC5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09Yi5jbXAodik/MjowKTtyZXR1cm4gbi5jYW5vbmljYWwmJnkuY21wKHRoaXMubmgpPjAmJih5PXRoaXMubi5zdWIoeSksbV49MSksbmV3IHUoe3I6dixzOnkscmVjb3ZlcnlQYXJhbTptfSl9fX19fX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyLG4pe3Q9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpLHI9dGhpcy5rZXlGcm9tUHVibGljKHIsbiksZT1uZXcgdShlLFwiaGV4XCIpO3ZhciBvPWUucixhPWUucztpZihvLmNtcG4oMSk8MHx8by5jbXAodGhpcy5uKT49MClyZXR1cm4hMTtpZihhLmNtcG4oMSk8MHx8YS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgZj1hLmludm0odGhpcy5uKSxzPWYubXVsKHQpLnVtb2QodGhpcy5uKSxoPWYubXVsKG8pLnVtb2QodGhpcy5uKTtpZighdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrKXt2YXIgYz10aGlzLmcubXVsQWRkKHMsci5nZXRQdWJsaWMoKSxoKTtyZXR1cm4hYy5pc0luZmluaXR5KCkmJjA9PT1jLmdldFgoKS51bW9kKHRoaXMubikuY21wKG8pfXZhciBjPXRoaXMuZy5qbXVsQWRkKHMsci5nZXRQdWJsaWMoKSxoKTtyZXR1cm4hYy5pc0luZmluaXR5KCkmJmMuZXFYVG9QKG8pfSxuLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKHQsZSxyLG4pe2YoKDMmcik9PT1yLFwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0c1wiKSxlPW5ldyB1KGUsbik7dmFyIG89dGhpcy5uLGE9bmV3IGkodCkscz1lLnIsaD1lLnMsYz0xJnIsZD1yPj4xO2lmKHMuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZkKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZVwiKTtzPWQ/dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHMuYWRkKHRoaXMuY3VydmUubiksYyk6dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHMsYyk7dmFyIGw9ZS5yLmludm0obykscD1vLnN1YihhKS5tdWwobCkudW1vZChvKSxiPWgubXVsKGwpLnVtb2Qobyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQocCxzLGIpfSxuLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGU9bmV3IHUoZSxuKSxudWxsIT09ZS5yZWNvdmVyeVBhcmFtKXJldHVybiBlLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBpPTA7aTw0O2krKyl7dmFyIG87dHJ5e289dGhpcy5yZWNvdmVyUHViS2V5KHQsZSxpKX1jYXRjaCh0KXtjb250aW51ZX1pZihvLmVxKHIpKXJldHVybiBpfXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvclwiKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lYz10LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsZS5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKGUucHJpdixlLnByaXZFbmMpLGUucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoZS5wdWIsZS5wdWJFbmMpfXZhciBpPXIoMzApO3QuZXhwb3J0cz1uLG4uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHViOmUscHViRW5jOnJ9KX0sbi5mcm9tUHJpdmF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHJpdjplLHByaXZFbmM6cn0pfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIHQuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOlwiSW52YWxpZCBwdWJsaWMga2V5XCJ9OnQudmFsaWRhdGUoKT90Lm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgKiBOICE9IE9cIn06e3Jlc3VsdDohMSxyZWFzb246XCJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50XCJ9fSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKGU9dCx0PW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxlP3RoaXMucHViLmVuY29kZShlLHQpOnRoaXMucHVifSxuLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LG4ucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcml2PW5ldyBpKHQsZXx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxuLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueHx8dC55P3ZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludCh0LngsdC55KSk6dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KHQsZSkpfSxuLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5lYy5zaWduKHQsdGhpcyxlLHIpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuXCI8S2V5IHByaXY6IFwiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrXCIgcHViOiBcIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrXCIgPlwifX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDp2b2lkKHRoaXMuX2ltcG9ydERFUih0LGUpfHwoYyh0LnImJnQucyxcIlNpZ25hdHVyZSB3aXRob3V0IHIgb3Igc1wiKSx0aGlzLnI9bmV3IHModC5yLDE2KSx0aGlzLnM9bmV3IHModC5zLDE2KSx2b2lkIDA9PT10LnJlY292ZXJ5UGFyYW0/dGhpcy5yZWNvdmVyeVBhcmFtPW51bGw6dGhpcy5yZWNvdmVyeVBhcmFtPXQucmVjb3ZlcnlQYXJhbSkpfWZ1bmN0aW9uIGkoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXRbZS5wbGFjZSsrXTtpZighKDEyOCZyKSlyZXR1cm4gcjtmb3IodmFyIG49MTUmcixpPTAsbz0wLGE9ZS5wbGFjZTtvPG47bysrLGErKylpPDw9OCxpfD10W2FdO3JldHVybiBlLnBsYWNlPWEsaX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMTshdFtlXSYmISgxMjgmdFtlKzFdKSYmZTxyOyllKys7cmV0dXJuIDA9PT1lP3Q6dC5zbGljZShlKX1mdW5jdGlvbiBmKHQsZSl7aWYoZTwxMjgpcmV0dXJuIHZvaWQgdC5wdXNoKGUpO3ZhciByPTErKE1hdGgubG9nKGUpL01hdGguTE4yPj4+Myk7Zm9yKHQucHVzaCgxMjh8cik7LS1yOyl0LnB1c2goZT4+PihyPDwzKSYyNTUpO3QucHVzaChlKX12YXIgcz1yKDMwKSx1PXIoMjIpLGg9dS51dGlscyxjPWguYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24odCxlKXt0PWgudG9BcnJheSh0LGUpO3ZhciByPW5ldyBpO2lmKDQ4IT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciBuPW8odCxyKTtpZihuK3IucGxhY2UhPT10Lmxlbmd0aClyZXR1cm4hMTtpZigyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciBhPW8odCxyKSxmPXQuc2xpY2Uoci5wbGFjZSxhK3IucGxhY2UpO2lmKHIucGxhY2UrPWEsMiE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgdT1vKHQscik7aWYodC5sZW5ndGghPT11K3IucGxhY2UpcmV0dXJuITE7dmFyIGM9dC5zbGljZShyLnBsYWNlLHUrci5wbGFjZSk7cmV0dXJuIDA9PT1mWzBdJiYxMjgmZlsxXSYmKGY9Zi5zbGljZSgxKSksMD09PWNbMF0mJjEyOCZjWzFdJiYoYz1jLnNsaWNlKDEpKSx0aGlzLnI9bmV3IHMoZiksdGhpcy5zPW5ldyBzKGMpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxuLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnIudG9BcnJheSgpLHI9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmVbMF0mJihlPVswXS5jb25jYXQoZSkpLDEyOCZyWzBdJiYocj1bMF0uY29uY2F0KHIpKSxlPWEoZSkscj1hKHIpOyEoclswXXx8MTI4JnJbMV0pOylyPXIuc2xpY2UoMSk7dmFyIG49WzJdO2YobixlLmxlbmd0aCksbj1uLmNvbmNhdChlKSxuLnB1c2goMiksZihuLHIubGVuZ3RoKTt2YXIgaT1uLmNvbmNhdChyKSxvPVs0OF07cmV0dXJuIGYobyxpLmxlbmd0aCksbz1vLmNvbmNhdChpKSxoLmVuY29kZShvLHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aWYoZihcImVkMjU1MTlcIj09PXQsXCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyXCIpLCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTt2YXIgdD1vLmN1cnZlc1t0XS5jdXJ2ZTt0aGlzLmN1cnZlPXQsdGhpcy5nPXQuZyx0aGlzLmcucHJlY29tcHV0ZSh0Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXQucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh0Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPWkuc2hhNTEyfXZhciBpPXIoNTApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1hLnBhcnNlQnl0ZXMsdT1yKDU1NCksaD1yKDU1NSk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUpe3Q9cyh0KTt2YXIgcj10aGlzLmtleUZyb21TZWNyZXQoZSksbj10aGlzLmhhc2hJbnQoci5tZXNzYWdlUHJlZml4KCksdCksaT10aGlzLmcubXVsKG4pLG89dGhpcy5lbmNvZGVQb2ludChpKSxhPXRoaXMuaGFzaEludChvLHIucHViQnl0ZXMoKSx0KS5tdWwoci5wcml2KCkpLGY9bi5hZGQoYSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6aSxTOmYsUmVuY29kZWQ6b30pfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIpe3Q9cyh0KSxlPXRoaXMubWFrZVNpZ25hdHVyZShlKTt2YXIgbj10aGlzLmtleUZyb21QdWJsaWMociksaT10aGlzLmhhc2hJbnQoZS5SZW5jb2RlZCgpLG4ucHViQnl0ZXMoKSx0KSxvPXRoaXMuZy5tdWwoZS5TKCkpLGE9ZS5SKCkuYWRkKG4ucHViKCkubXVsKGkpKTtyZXR1cm4gYS5lcShvKX0sbi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmhhc2goKSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnVwZGF0ZShhcmd1bWVudHNbZV0pO3JldHVybiBhLmludEZyb21MRSh0LmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVB1YmxpYyh0aGlzLHQpfSxuLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKHQpe3JldHVybiB1LmZyb21TZWNyZXQodGhpcyx0KX0sbi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGg/dDpuZXcgaCh0aGlzLHQpfSxuLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT10LmdldFkoKS50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gZVt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD10LmdldFgoKS5pc09kZCgpPzEyODowLGV9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQpe3Q9YS5wYXJzZUJ5dGVzKHQpO3ZhciBlPXQubGVuZ3RoLTEscj10LnNsaWNlKDAsZSkuY29uY2F0KHRbZV0mLTEyOSksbj0wIT09KDEyOCZ0W2VdKSxpPWEuaW50RnJvbUxFKHIpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoaSxuKX0sbi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxuLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW50RnJvbUxFKHQpfSxuLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVkZHNhPXQsdGhpcy5fc2VjcmV0PWYoZS5zZWNyZXQpLHQuaXNQb2ludChlLnB1Yik/dGhpcy5fcHViPWUucHViOnRoaXMuX3B1YkJ5dGVzPWYoZS5wdWIpfXZhciBpPXIoMjIpLG89aS51dGlscyxhPW8uYXNzZXJ0LGY9by5wYXJzZUJ5dGVzLHM9by5jYWNoZWRQcm9wZXJ0eTtuLmZyb21QdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZX0pfSxuLmZyb21TZWNyZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtzZWNyZXQ6ZX0pfSxuLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxzKG4sXCJwdWJCeXRlc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxzKG4sXCJwdWJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLHMobixcInByaXZCeXRlc1wiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGRzYSxlPXRoaXMuaGFzaCgpLHI9dC5lbmNvZGluZ0xlbmd0aC0xLG49ZS5zbGljZSgwLHQuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBuWzBdJj0yNDgsbltyXSY9MTI3LG5bcl18PTY0LG59KSxzKG4sXCJwcml2XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxzKG4sXCJoYXNoXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSkscyhuLFwibWVzc2FnZVByZWZpeFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeVwiKSx0aGlzLmVkZHNhLnNpZ24odCx0aGlzKX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KHQsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgaXMgcHVibGljIG9ubHlcIiksby5lbmNvZGUodGhpcy5zZWNyZXQoKSx0KX0sbi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHQpe3JldHVybiBvLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksdCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9dShlKSksQXJyYXkuaXNBcnJheShlKSYmKGU9e1I6ZS5zbGljZSgwLHQuZW5jb2RpbmdMZW5ndGgpLFM6ZS5zbGljZSh0LmVuY29kaW5nTGVuZ3RoKX0pLGYoZS5SJiZlLlMsXCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFNcIiksdC5pc1BvaW50KGUuUikmJih0aGlzLl9SPWUuUiksZS5TIGluc3RhbmNlb2YgaSYmKHRoaXMuX1M9ZS5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUik/ZS5SOmUuUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShlLlMpP2UuUzplLlNlbmNvZGVkfXZhciBpPXIoMzApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1hLmNhY2hlZFByb3BlcnR5LHU9YS5wYXJzZUJ5dGVzO3MobixcIlNcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSkscyhuLFwiUlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLHMobixcIlJlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxzKG4sXCJTZW5jb2RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLG4ucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxuLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBhLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSxcImhleFwiKS50b1VwcGVyQ2FzZSgpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3RoaXMuaGFzaD10Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdC5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT10Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIGU9YS50b0FycmF5KHQuZW50cm9weSx0LmVudHJvcHlFbmMpLHI9YS50b0FycmF5KHQubm9uY2UsdC5ub25jZUVuYyksaT1hLnRvQXJyYXkodC5wZXJzLHQucGVyc0VuYyk7ZihlLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsXCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6IFwiK3RoaXMubWluRW50cm9weStcIiBiaXRzXCIpLHRoaXMuX2luaXQoZSxyLGkpfXZhciBpPXIoNTApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uY2F0KGUpLmNvbmNhdChyKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBpPTA7aTx0aGlzLlYubGVuZ3RoO2krKyl0aGlzLktbaV09MCx0aGlzLlZbaV09MTt0aGlzLl91cGRhdGUobiksdGhpcy5yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sbi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7dCYmKGU9ZS51cGRhdGUodCkpLHRoaXMuSz1lLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksdCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKHQpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxuLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24odCxlLHIsbil7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksdD1hLnRvQnVmZmVyKHQsZSkscj1hLnRvQnVmZmVyKHIsbiksZih0Lmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsXCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6IFwiK3RoaXMubWluRW50cm9weStcIiBiaXRzXCIpLHRoaXMuX3VwZGF0ZSh0LmNvbmNhdChyfHxbXSkpLHRoaXMucmVzZWVkPTF9LG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMucmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKFwiUmVzZWVkIGlzIHJlcXVpcmVkXCIpO1wic3RyaW5nXCIhPXR5cGVvZiBlJiYobj1yLHI9ZSxlPW51bGwpLHImJihyPWEudG9BcnJheShyLG4pLHRoaXMuX3VwZGF0ZShyKSk7Zm9yKHZhciBpPVtdO2kubGVuZ3RoPHQ7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksaT1pLmNvbmNhdCh0aGlzLlYpO3ZhciBvPWkuc2xpY2UoMCx0KTtyZXR1cm4gdGhpcy5fdXBkYXRlKHIpLHRoaXMucmVzZWVkKyssYS5lbmNvZGUobyxlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbXCJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhXCIsXCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxXCJdLFtcIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDhcIixcIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWZcIl0sW1wiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOVwiLFwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NVwiXSxbXCIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwXCIsXCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTlcIl0sW1wiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwY1wiLFwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNlwiXSxbXCI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhXCIsXCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmXCJdLFtcImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmFcIixcIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTlcIl0sW1wiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMFwiLFwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOVwiXSxbXCJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkXCIsXCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkXCJdLFtcImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmRcIixcImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODhcIl0sW1wiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMVwiLFwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZFwiXSxbXCI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwXCIsXCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4XCJdLFtcIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDdcIixcIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmFcIl0sW1wiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MlwiLFwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1M1wiXSxbXCI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTdcIixcIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjBcIl0sW1wiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZFwiLFwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMFwiXSxbXCI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzXCIsXCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2XCJdLFtcIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYVwiLFwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OVwiXSxbXCI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4XCIsXCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3XCJdLFtcImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmRcIixcIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGFcIl0sW1wiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNVwiLFwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZFwiXSxbXCIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0XCIsXCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyXCJdLFtcIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2NcIixcIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTZcIl0sW1wiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNlwiLFwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZlwiXSxbXCI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5XCIsXCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxXCJdLFtcImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTFcIixcIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzNcIl0sW1wiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YlwiLFwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZlwiXSxbXCJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzXCIsXCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3XCJdLFtcImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWRcIixcImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzhcIl0sW1wiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MFwiLFwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMVwiXSxbXCI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0XCIsXCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTBcIl0sW1wiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYVwiLFwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MlwiXSxbXCJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExXCIsXCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjXCJdLFtcIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWVcIixcImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGJcIl0sW1wiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MVwiLFwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MVwiXSxbXCJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmXCIsXCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDVcIl0sW1wiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOFwiLFwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMFwiXSxbXCIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkXCIsXCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0XCJdLFtcIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTZcIixcIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkXCJdLFtcIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2RcIixcImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWRcIl0sW1wiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNVwiLFwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOFwiXSxbXCJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2XCIsXCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4XCJdLFtcIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzFcIixcIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWNcIl0sW1wiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjXCIsXCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmXCJdLFtcIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTFcIixcIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjJcIl0sW1wiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZVwiLFwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwN1wiXSxbXCI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxXCIsXCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjXCJdLFtcImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjNcIixcImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2RcIl0sW1wiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZlwiLFwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNFwiXSxbXCIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5XCIsXCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkXCJdLFtcIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmVcIixcImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDBcIl0sW1wiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOVwiLFwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMVwiXSxbXCJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyXCIsXCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxXCJdLFtcImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTNcIixcIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGNcIl0sW1wiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3Y1wiLFwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3M1wiXSxbXCI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhXCIsXCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkXCJdLFtcImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTFcIixcImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDVcIl0sW1wiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3M1wiLFwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OVwiXSxbXCI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4XCIsXCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlXCJdLFtcIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmJcIixcIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjdcIl0sW1wiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NlwiLFwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxXCJdLFtcIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWFcIixcIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODJcIl0sW1wiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwXCIsXCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1XCJdLFtcImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODdcIixcIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzNcIl0sW1wiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZVwiLFwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MlwiXV19LG5hZjp7d25kOjcscG9pbnRzOltbXCJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5XCIsXCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyXCJdLFtcIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTRcIixcImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDZcIl0sW1wiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliY1wiLFwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYVwiXSxbXCJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlXCIsXCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3XCJdLFtcIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2JcIixcImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWJcIl0sW1wiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOFwiLFwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxXCJdLFtcImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGVcIixcIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNThcIl0sW1wiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNFwiLFwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3N1wiXSxbXCIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjXCIsXCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhXCJdLFtcIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDVcIixcIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGNcIl0sW1wiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZlwiLFwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3XCJdLFtcIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTRcIixcIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDJcIl0sW1wiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOVwiLFwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NVwiXSxbXCJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiXCIsXCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyXCJdLFtcIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjRcIixcImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODJcIl0sW1wiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNVwiLFwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NlwiXSxbXCI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5XCIsXCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDlcIl0sW1wiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZFwiLFwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZlwiXSxbXCI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmXCIsXCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhXCJdLFtcIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmJcIixcImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmN1wiXSxbXCJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5XCIsXCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzXCJdLFtcIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2M1wiLFwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YVwiXSxbXCI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0XCIsXCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2XCJdLFtcImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzBcIixcImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzdcIl0sW1wiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YlwiLFwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZVwiXSxbXCJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3XCIsXCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2XCJdLFtcImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDFcIixcImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzZcIl0sW1wiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMFwiLFwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MFwiXSxbXCI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1XCIsXCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjFcIl0sW1wiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOFwiLFwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzXCJdLFtcImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZThcIixcIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjVcIl0sW1wiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYlwiLFwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YlwiXSxbXCJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmXCIsXCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3XCJdLFtcIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDNcIixcImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjhcIl0sW1wiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYVwiLFwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YVwiXSxbXCJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1XCIsXCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2XCJdLFtcIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWFcIixcIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTZcIl0sW1wiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZVwiLFwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZVwiXSxbXCJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4XCIsXCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkXCJdLFtcIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmNcIixcIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTJcIl0sW1wiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOVwiLFwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZVwiXSxbXCI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiXCIsXCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3XCJdLFtcIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2FcIixcImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTFcIl0sW1wiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZlwiLFwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNFwiXSxbXCIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwXCIsXCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1XCJdLFtcIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDRcIixcImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWRcIl0sW1wiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1Y1wiLFwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZFwiXSxbXCJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwXCIsXCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5XCJdLFtcImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODBcIixcImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNlwiXSxbXCIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzXCIsXCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0XCJdLFtcIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGZcIixcIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZVwiXSxbXCJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzXCIsXCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxXCJdLFtcImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDhcIixcImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2JcIl0sW1wiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZlwiLFwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MVwiXSxbXCI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1XCIsXCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2XCJdLFtcImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDZcIixcIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWVcIl0sW1wiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNVwiLFwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZFwiXSxbXCJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5XCIsXCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjXCJdLFtcIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MVwiLFwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNFwiXSxbXCI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1XCIsXCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjXCJdLFtcImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjVcIixcIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmJcIl0sW1wiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5N1wiLFwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzXCJdLFtcIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODFcIixcIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NFwiXSxbXCI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1XCIsXCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1XCJdLFtcIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjZcIixcImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmNcIl0sW1wiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2XCIsXCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0XCJdLFtcIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGVcIixcIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGVcIl0sW1wiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NFwiLFwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2XCJdLFtcIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzFcIixcIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTFcIl0sW1wiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MVwiLFwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiXCJdLFtcImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTJcIixcImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjJcIl0sW1wiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1XCIsXCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjXCJdLFtcImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2JcIixcIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTNcIl0sW1wiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNFwiLFwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZFwiXSxbXCJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmXCIsXCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwXCJdLFtcImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5XCIsXCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0XCJdLFtcIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDZcIixcImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTZcIl0sW1wiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NFwiLFwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNFwiXSxbXCIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhXCIsXCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3XCJdLFtcImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzBcIixcImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTNcIl0sW1wiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5N1wiLFwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NlwiXSxbXCJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTNcIixcImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzhcIl0sW1wiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZlwiLFwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmXCJdLFtcIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzhcIixcIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDhcIl0sW1wiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YVwiLFwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YVwiXSxbXCJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExXCIsXCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0XCJdLFtcIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDJcIixcIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzdcIl0sW1wiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYVwiLFwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmN1wiXSxbXCJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2XCIsXCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkXCJdLFtcImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODZcIixcIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmFcIl0sW1wiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZVwiLFwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NFwiXSxbXCI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0XCIsXCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3XCJdLFtcImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGFcIixcImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTdcIl0sW1wiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OVwiLFwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMFwiXSxbXCJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmXCIsXCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1XCJdLFtcImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGNcIixcIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2VcIl0sW1wiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MlwiLFwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMVwiXSxbXCJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhXCIsXCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyXCJdLFtcImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODBcIixcIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjNcIl0sW1wiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZFwiLFwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOFwiXSxbXCI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExXCIsXCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4XCJdLFtcIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjNcIixcImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NVwiXSxbXCJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyXCIsXCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkXCJdLFtcIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTNcIixcImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWNcIl0sW1wiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMFwiLFwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwXCJdLFtcIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNThcIixcImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2NcIl0sW1wiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmN1wiLFwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNFwiXSxbXCI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4XCIsXCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmXCJdLFtcIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2VcIixcIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDlcIl0sW1wiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZFwiLFwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2XCJdLFtcIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmJcIixcIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTVcIl0sW1wiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZlwiLFwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4N1wiXSxbXCIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2XCIsXCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiXCJdLFtcImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTdcIixcIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmNcIl0sW1wiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YVwiLFwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3Y1wiXSxbXCJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjXCIsXCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmXCJdLFtcImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTJcIixcIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2FcIl0sW1wiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYlwiLFwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NlwiXSxbXCI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1XCIsXCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmXCJdLFtcIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTdcIixcIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDNcIl0sW1wiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOVwiLFwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOFwiXSxbXCIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzXCIsXCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4XCJdLFtcIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTdcIixcIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3M1wiXSxbXCIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2XCIsXCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzXCJdLFtcIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYThcIixcIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDhcIl0sW1wiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMVwiLFwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMVwiXSxbXCIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwXCIsXCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5XCJdXVxufX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5zbGljZSgpO2lmKCF0KXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyW25dPTB8dFtuXTtyZXR1cm4gcn1pZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfXJldHVybiByfWZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9aSh0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bXSxuPTE8PGUrMSxpPXQuY2xvbmUoKTtpLmNtcG4oMSk+PTA7KXt2YXIgbztpZihpLmlzT2RkKCkpe3ZhciBhPWkuYW5kbG4obi0xKTtvPWE+KG4+PjEpLTE/KG4+PjEpLWE6YSxpLmlzdWJuKG8pfWVsc2Ugbz0wO3IucHVzaChvKTtmb3IodmFyIGY9MCE9PWkuY21wbigwKSYmMD09PWkuYW5kbG4obi0xKT9lKzE6MSxzPTE7czxmO3MrKylyLnB1c2goMCk7aS5pdXNocm4oZil9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUpe3ZhciByPVtbXSxbXV07dD10LmNsb25lKCksZT1lLmNsb25lKCk7Zm9yKHZhciBuPTAsaT0wO3QuY21wbigtbik+MHx8ZS5jbXBuKC1pKT4wOyl7dmFyIG89dC5hbmRsbigzKStuJjMsYT1lLmFuZGxuKDMpK2kmMzszPT09byYmKG89LTEpLDM9PT1hJiYoYT0tMSk7dmFyIGY7aWYoMD09PSgxJm8pKWY9MDtlbHNle3ZhciBzPXQuYW5kbG4oNykrbiY3O2Y9MyE9PXMmJjUhPT1zfHwyIT09YT9vOi1vfXJbMF0ucHVzaChmKTt2YXIgdTtpZigwPT09KDEmYSkpdT0wO2Vsc2V7dmFyIHM9ZS5hbmRsbig3KStpJjc7dT0zIT09cyYmNSE9PXN8fDIhPT1vP2E6LWF9clsxXS5wdXNoKHUpLDIqbj09PWYrMSYmKG49MS1uKSwyKmk9PT11KzEmJihpPTEtaSksdC5pdXNocm4oMSksZS5pdXNocm4oMSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49XCJfXCIrZTt0LnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW25dP3RoaXNbbl06dGhpc1tuXT1yLmNhbGwodGhpcyl9fWZ1bmN0aW9uIHUodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/Yy50b0FycmF5KHQsXCJoZXhcIik6dH1mdW5jdGlvbiBoKHQpe3JldHVybiBuZXcgZCh0LFwiaGV4XCIsXCJsZVwiKX12YXIgYz1lLGQ9cigzMCk7Yy5hc3NlcnQ9ZnVuY3Rpb24odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfSxjLnRvQXJyYXk9bixjLnplcm8yPWksYy50b0hleD1vLGMuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJoZXhcIj09PWU/byh0KTp0fSxjLmdldE5BRj1hLGMuZ2V0SlNGPWYsYy5jYWNoZWRQcm9wZXJ0eT1zLGMucGFyc2VCeXRlcz11LGMuaW50RnJvbUxFPWh9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fXZhciBpO2lmKHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXx8KGk9bmV3IG4obnVsbCkpLGkuZ2VuZXJhdGUodCl9LHQuZXhwb3J0cy5SYW5kPW4sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhbmQodCl9LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpd2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9OndpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTpuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZCB5ZXRcIil9O2Vsc2UgdHJ5e3ZhciBvPXIoNjEwKTtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gby5yYW5kb21CeXRlcyh0KX19Y2F0Y2godCl7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIGV9fX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj1cImJpZ1wiLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9dmFyIGk9cig1MCksbz1pLnV0aWxzLGE9by5hc3NlcnQ7ZS5CbG9ja0hhc2g9bixuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtpZih0PW8udG9BcnJheSh0LGUpLHRoaXMucGVuZGluZz90aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nLmNvbmNhdCh0KTp0aGlzLnBlbmRpbmc9dCx0aGlzLnBlbmRpbmdUb3RhbCs9dC5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt0PXRoaXMucGVuZGluZzt2YXIgcj10Lmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPXQuc2xpY2UodC5sZW5ndGgtcix0Lmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksdD1vLmpvaW4zMih0LDAsdC5sZW5ndGgtcix0aGlzLmVuZGlhbik7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZSh0LG4sbit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksYShudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3QodCl9LG4ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUb3RhbCxlPXRoaXMuX2RlbHRhOCxyPWUtKHQrdGhpcy5wYWRMZW5ndGgpJWUsbj1uZXcgQXJyYXkocit0aGlzLnBhZExlbmd0aCk7blswXT0xMjg7Zm9yKHZhciBpPTE7aTxyO2krKyluW2ldPTA7aWYodDw8PTMsXCJiaWdcIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIG89ODtvPHRoaXMucGFkTGVuZ3RoO28rKyluW2krK109MDtuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109dD4+PjI0JjI1NSxuW2krK109dD4+PjE2JjI1NSxuW2krK109dD4+PjgmMjU1LG5baSsrXT0yNTUmdH1lbHNle25baSsrXT0yNTUmdCxuW2krK109dD4+PjgmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wO2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wfXJldHVybiBufX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odGhpcy5IYXNoPXQsdGhpcy5ibG9ja1NpemU9dC5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9dC5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx2b2lkIHRoaXMuX2luaXQoby50b0FycmF5KGUscikpKTpuZXcgbih0LGUscil9dmFyIGk9cig1MCksbz1pLnV0aWxzLGE9by5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dC5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih0PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCkuZGlnZXN0KCkpLGEodC5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIGU9dC5sZW5ndGg7ZTx0aGlzLmJsb2NrU2l6ZTtlKyspdC5wdXNoKDApO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTU0O3RoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodCxlKSx0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KGwuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx2b2lkKHRoaXMuZW5kaWFuPVwibGl0dGxlXCIpKTpuZXcgbn1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiB0PD0xNT9lXnJebjp0PD0zMT9lJnJ8fmUmbjp0PD00Nz8oZXx+cilebjp0PD02Mz9lJm58ciZ+bjplXihyfH5uKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PD0xNT8wOnQ8PTMxPzE1MTg1MDAyNDk6dDw9NDc/MTg1OTc3NTM5Mzp0PD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdDw9MTU/MTM1MjgyOTkyNjp0PD0zMT8xNTQ4NjAzNjg0OnQ8PTQ3PzE4MzYwNzI2OTE6dDw9NjM/MjA1Mzk5NDIxNzowfXZhciBmPXIoNTApLHM9Zi51dGlscyx1PXMucm90bDMyLGg9cy5zdW0zMixjPXMuc3VtMzJfMyxkPXMuc3VtMzJfNCxsPWYuY29tbW9uLkJsb2NrSGFzaDtzLmluaGVyaXRzKG4sbCksZS5yaXBlbWQxNjA9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTE2MCxuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmhbMF0sbj10aGlzLmhbMV0sZj10aGlzLmhbMl0scz10aGlzLmhbM10sbD10aGlzLmhbNF0sbT1yLGc9bix3PWYsXz1zLE09bCxTPTA7Uzw4MDtTKyspe3ZhciBFPWgodShkKHIsaShTLG4sZixzKSx0W3BbU10rZV0sbyhTKSksdltTXSksbCk7cj1sLGw9cyxzPXUoZiwxMCksZj1uLG49RSxFPWgodShkKG0saSg3OS1TLGcsdyxfKSx0W2JbU10rZV0sYShTKSkseVtTXSksTSksbT1NLE09XyxfPXUodywxMCksdz1nLGc9RX1FPWModGhpcy5oWzFdLGYsXyksdGhpcy5oWzFdPWModGhpcy5oWzJdLHMsTSksdGhpcy5oWzJdPWModGhpcy5oWzNdLGwsbSksdGhpcy5oWzNdPWModGhpcy5oWzRdLHIsZyksdGhpcy5oWzRdPWModGhpcy5oWzBdLG4sdyksdGhpcy5oWzBdPUV9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/cy50b0hleDMyKHRoaXMuaCxcImxpdHRsZVwiKTpzLnNwbGl0MzIodGhpcy5oLFwibGl0dGxlXCIpfTt2YXIgcD1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxiPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLHk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1ZLHZvaWQodGhpcy5XPW5ldyBBcnJheSg2NCkpKTpuZXcgbn1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpPyhuLmNhbGwodGhpcyksdm9pZCh0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdKSk6bmV3IGl9ZnVuY3Rpb24gbygpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbz8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPVcsdm9pZCh0aGlzLlc9bmV3IEFycmF5KDE2MCkpKTpuZXcgb31mdW5jdGlvbiBhKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhPyhvLmNhbGwodGhpcyksdm9pZCh0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdKSk6bmV3IGF9ZnVuY3Rpb24gZigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZj8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5XPW5ldyBBcnJheSg4MCkpKTpuZXcgZn1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gdCZlXn50JnJ9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHQmZV50JnJeZSZyfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiB0XmVecn1mdW5jdGlvbiBjKHQpe3JldHVybiBSKHQsMileUih0LDEzKV5SKHQsMjIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIFIodCw2KV5SKHQsMTEpXlIodCwyNSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gUih0LDcpXlIodCwxOCledD4+PjN9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gUih0LDE3KV5SKHQsMTkpXnQ+Pj4xMH1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAwPT09dD9zKGUscixuKToxPT09dHx8Mz09PXQ/aChlLHIsbik6Mj09PXQ/dShlLHIsbik6dm9pZCAwfWZ1bmN0aW9uIHYodCxlLHIsbixpLG8pe3ZhciBhPXQmcl5+dCZpO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIHkodCxlLHIsbixpLG8pe3ZhciBhPWUmbl5+ZSZvO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIG0odCxlLHIsbixpLG8pe3ZhciBhPXQmcl50JmleciZpO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIGcodCxlLHIsbixpLG8pe3ZhciBhPWUmbl5lJm9ebiZvO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1OKHQsZSwyOCksbj1OKGUsdCwyKSxpPU4oZSx0LDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gXyh0LGUpe3ZhciByPUwodCxlLDI4KSxuPUwoZSx0LDIpLGk9TChlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBNKHQsZSl7dmFyIHI9Tih0LGUsMTQpLG49Tih0LGUsMTgpLGk9TihlLHQsOSksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBTKHQsZSl7dmFyIHI9TCh0LGUsMTQpLG49TCh0LGUsMTgpLGk9TChlLHQsOSksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBFKHQsZSl7dmFyIHI9Tih0LGUsMSksbj1OKHQsZSw4KSxpPVUodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gQSh0LGUpe3ZhciByPUwodCxlLDEpLG49TCh0LGUsOCksaT16KHQsZSw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1OKHQsZSwxOSksbj1OKGUsdCwyOSksaT1VKHQsZSw2KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1MKHQsZSwxOSksbj1MKGUsdCwyOSksaT16KHQsZSw2KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfXZhciBJPXIoNTApLEI9SS51dGlscyxPPUIuYXNzZXJ0LFI9Qi5yb3RyMzIsUD1CLnJvdGwzMixUPUIuc3VtMzIsaj1CLnN1bTMyXzQsQz1CLnN1bTMyXzUsTj1CLnJvdHI2NF9oaSxMPUIucm90cjY0X2xvLFU9Qi5zaHI2NF9oaSx6PUIuc2hyNjRfbG8sRD1CLnN1bTY0LHE9Qi5zdW02NF9oaSxGPUIuc3VtNjRfbG8sSz1CLnN1bTY0XzRfaGksRz1CLnN1bTY0XzRfbG8sVj1CLnN1bTY0XzVfaGksSD1CLnN1bTY0XzVfbG8sWD1JLmNvbW1vbi5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxXPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sWj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07Qi5pbmhlcml0cyhuLFgpLGUuc2hhMjU2PW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0yNTYsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09aihwKHJbbi0yXSkscltuLTddLGwocltuLTE1XSkscltuLTE2XSk7dmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLGE9dGhpcy5oWzJdLGY9dGhpcy5oWzNdLGg9dGhpcy5oWzRdLGI9dGhpcy5oWzVdLHY9dGhpcy5oWzZdLHk9dGhpcy5oWzddO08odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIG09Qyh5LGQoaCkscyhoLGIsdiksdGhpcy5rW25dLHJbbl0pLGc9VChjKGkpLHUoaSxvLGEpKTt5PXYsdj1iLGI9aCxoPVQoZixtKSxmPWEsYT1vLG89aSxpPVQobSxnKX10aGlzLmhbMF09VCh0aGlzLmhbMF0saSksdGhpcy5oWzFdPVQodGhpcy5oWzFdLG8pLHRoaXMuaFsyXT1UKHRoaXMuaFsyXSxhKSx0aGlzLmhbM109VCh0aGlzLmhbM10sZiksdGhpcy5oWzRdPVQodGhpcy5oWzRdLGgpLHRoaXMuaFs1XT1UKHRoaXMuaFs1XSxiKSx0aGlzLmhbNl09VCh0aGlzLmhbNl0sdiksdGhpcy5oWzddPVQodGhpcy5oWzddLHkpfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX0sQi5pbmhlcml0cyhpLG4pLGUuc2hhMjI0PWksaS5ibG9ja1NpemU9NTEyLGkub3V0U2l6ZT0yMjQsaS5obWFjU3RyZW5ndGg9MTkyLGkucGFkTGVuZ3RoPTY0LGkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSxcImJpZ1wiKX0sQi5pbmhlcml0cyhvLFgpLGUuc2hhNTEyPW8sby5ibG9ja1NpemU9MTAyNCxvLm91dFNpemU9NTEyLG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD0xMjgsby5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MzI7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKz0yKXt2YXIgaT1rKHJbbi00XSxyW24tM10pLG89eChyW24tNF0scltuLTNdKSxhPXJbbi0xNF0sZj1yW24tMTNdLHM9RShyW24tMzBdLHJbbi0yOV0pLHU9QShyW24tMzBdLHJbbi0yOV0pLGg9cltuLTMyXSxjPXJbbi0zMV07cltuXT1LKGksbyxhLGYscyx1LGgsYykscltuKzFdPUcoaSxvLGEsZixzLHUsaCxjKX19LG8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9wcmVwYXJlQmxvY2sodCxlKTt2YXIgcj10aGlzLlcsbj10aGlzLmhbMF0saT10aGlzLmhbMV0sbz10aGlzLmhbMl0sYT10aGlzLmhbM10sZj10aGlzLmhbNF0scz10aGlzLmhbNV0sdT10aGlzLmhbNl0saD10aGlzLmhbN10sYz10aGlzLmhbOF0sZD10aGlzLmhbOV0sbD10aGlzLmhbMTBdLHA9dGhpcy5oWzExXSxiPXRoaXMuaFsxMl0sRT10aGlzLmhbMTNdLEE9dGhpcy5oWzE0XSxrPXRoaXMuaFsxNV07Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8ci5sZW5ndGg7eCs9Mil7dmFyIEk9QSxCPWssUj1NKGMsZCksUD1TKGMsZCksVD12KGMsZCxsLHAsYixFKSxqPXkoYyxkLGwscCxiLEUpLEM9dGhpcy5rW3hdLE49dGhpcy5rW3grMV0sTD1yW3hdLFU9clt4KzFdLHo9VihJLEIsUixQLFQsaixDLE4sTCxVKSxLPUgoSSxCLFIsUCxULGosQyxOLEwsVSksST13KG4saSksQj1fKG4saSksUj1tKG4saSxvLGEsZixzKSxQPWcobixpLG8sYSxmLHMpLEc9cShJLEIsUixQKSxYPUYoSSxCLFIsUCk7QT1iLGs9RSxiPWwsRT1wLGw9YyxwPWQsYz1xKHUsaCx6LEspLGQ9RihoLGgseixLKSx1PWYsaD1zLGY9byxzPWEsbz1uLGE9aSxuPXEoeixLLEcsWCksaT1GKHosSyxHLFgpfUQodGhpcy5oLDAsbixpKSxEKHRoaXMuaCwyLG8sYSksRCh0aGlzLmgsNCxmLHMpLEQodGhpcy5oLDYsdSxoKSxEKHRoaXMuaCw4LGMsZCksRCh0aGlzLmgsMTAsbCxwKSxEKHRoaXMuaCwxMixiLEUpLEQodGhpcy5oLDE0LEEsayl9LG8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGEsbyksZS5zaGEzODQ9YSxhLmJsb2NrU2l6ZT0xMDI0LGEub3V0U2l6ZT0zODQsYS5obWFjU3RyZW5ndGg9MTkyLGEucGFkTGVuZ3RoPTEyOCxhLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKX0sQi5pbmhlcml0cyhmLFgpLGUuc2hhMT1mLGYuYmxvY2tTaXplPTUxMixmLm91dFNpemU9MTYwLGYuaG1hY1N0cmVuZ3RoPTgwLGYucGFkTGVuZ3RoPTY0LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09UChyW24tM11ecltuLThdXnJbbi0xNF1ecltuLTE2XSwxKTtmb3IodmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLGE9dGhpcy5oWzJdLGY9dGhpcy5oWzNdLHM9dGhpcy5oWzRdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHU9fn4obi8yMCksaD1DKFAoaSw1KSxiKHUsbyxhLGYpLHMscltuXSxaW3VdKTtzPWYsZj1hLGE9UChvLDMwKSxvPWksaT1ofXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0scyl9LGYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpaWYoZSl7aWYoXCJoZXhcIj09PWUpe3Q9dC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpLHQubGVuZ3RoJTIhPT0wJiYodD1cIjBcIit0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KHRbbl0rdFtuKzFdLDE2KSl9fWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuY2hhckNvZGVBdChuKSxvPWk+PjgsYT0yNTUmaTtvP3IucHVzaChvLGEpOnIucHVzaChhKX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPWYodFtyXS50b1N0cmluZygxNikpO3JldHVybiBlfWZ1bmN0aW9uIG8odCl7dmFyIGU9dD4+PjI0fHQ+Pj44JjY1MjgwfHQ8PDgmMTY3MTE2ODB8KDI1NSZ0KTw8MjQ7cmV0dXJuIGU+Pj4wfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9XCJcIixuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07XCJsaXR0bGVcIj09PWUmJihpPW8oaSkpLHIrPXMoaS50b1N0cmluZygxNikpfXJldHVybiByfWZ1bmN0aW9uIGYodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gNz09PXQubGVuZ3RoP1wiMFwiK3Q6Nj09PXQubGVuZ3RoP1wiMDBcIit0OjU9PT10Lmxlbmd0aD9cIjAwMFwiK3Q6ND09PXQubGVuZ3RoP1wiMDAwMFwiK3Q6Mz09PXQubGVuZ3RoP1wiMDAwMDBcIit0OjI9PT10Lmxlbmd0aD9cIjAwMDAwMFwiK3Q6MT09PXQubGVuZ3RoP1wiMDAwMDAwMFwiK3Q6dH1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPXItZTt5KGklND09PTApO2Zvcih2YXIgbz1uZXcgQXJyYXkoaS80KSxhPTAsZj1lO2E8by5sZW5ndGg7YSsrLGYrPTQpe3ZhciBzO3M9XCJiaWdcIj09PW4/dFtmXTw8MjR8dFtmKzFdPDwxNnx0W2YrMl08PDh8dFtmKzNdOnRbZiszXTw8MjR8dFtmKzJdPDwxNnx0W2YrMV08PDh8dFtmXSxvW2FdPXM+Pj4wfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KDQqdC5sZW5ndGgpLG49MCxpPTA7bjx0Lmxlbmd0aDtuKyssaSs9NCl7dmFyIG89dFtuXTtcImJpZ1wiPT09ZT8ocltpXT1vPj4+MjQscltpKzFdPW8+Pj4xNiYyNTUscltpKzJdPW8+Pj44JjI1NSxyW2krM109MjU1Jm8pOihyW2krM109bz4+PjI0LHJbaSsyXT1vPj4+MTYmMjU1LHJbaSsxXT1vPj4+OCYyNTUscltpXT0yNTUmbyl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0Pj4+ZXx0PDwzMi1lfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQrZT4+PjB9ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIHQrZStyPj4+MH1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiB0K2UrcituPj4+MH1mdW5jdGlvbiB2KHQsZSxyLG4saSl7cmV0dXJuIHQrZStyK24raT4+PjB9ZnVuY3Rpb24geSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT10W2VdLG89dFtlKzFdLGE9bitvPj4+MCxmPShhPG4/MTowKStyK2k7dFtlXT1mPj4+MCx0W2UrMV09YX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPWUrbj4+PjAsbz0oaTxlPzE6MCkrdCtyO3JldHVybiBvPj4+MH1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpPWUrbjtyZXR1cm4gaT4+PjB9ZnVuY3Rpb24gXyh0LGUscixuLGksbyxhLGYpe3ZhciBzPTAsdT1lO3U9dStuPj4+MCxzKz11PGU/MTowLHU9dStvPj4+MCxzKz11PG8/MTowLHU9dStmPj4+MCxzKz11PGY/MTowO3ZhciBoPXQrcitpK2ErcztyZXR1cm4gaD4+PjB9ZnVuY3Rpb24gTSh0LGUscixuLGksbyxhLGYpe3ZhciBzPWUrbitvK2Y7cmV0dXJuIHM+Pj4wfWZ1bmN0aW9uIFModCxlLHIsbixpLG8sYSxmLHMsdSl7dmFyIGg9MCxjPWU7Yz1jK24+Pj4wLGgrPWM8ZT8xOjAsYz1jK28+Pj4wLGgrPWM8bz8xOjAsYz1jK2Y+Pj4wLGgrPWM8Zj8xOjAsYz1jK3U+Pj4wLGgrPWM8dT8xOjA7dmFyIGQ9dCtyK2krYStzK2g7cmV0dXJuIGQ+Pj4wfWZ1bmN0aW9uIEUodCxlLHIsbixpLG8sYSxmLHMsdSl7dmFyIGg9ZStuK28rZit1O3JldHVybiBoPj4+MH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1lPDwzMi1yfHQ+Pj5yO3JldHVybiBuPj4+MH1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH1mdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm4gdD4+PnJ9ZnVuY3Rpb24gSSh0LGUscil7dmFyIG49dDw8MzItcnxlPj4+cjtyZXR1cm4gbj4+PjB9dmFyIEI9ZSxPPXIoMik7Qi50b0FycmF5PW4sQi50b0hleD1pLEIuaHRvbmw9byxCLnRvSGV4MzI9YSxCLnplcm8yPWYsQi56ZXJvOD1zLEIuam9pbjMyPXUsQi5zcGxpdDMyPWgsQi5yb3RyMzI9YyxCLnJvdGwzMj1kLEIuc3VtMzI9bCxCLnN1bTMyXzM9cCxCLnN1bTMyXzQ9YixCLnN1bTMyXzU9dixCLmFzc2VydD15LEIuaW5oZXJpdHM9TyxlLnN1bTY0PW0sZS5zdW02NF9oaT1nLGUuc3VtNjRfbG89dyxlLnN1bTY0XzRfaGk9XyxlLnN1bTY0XzRfbG89TSxlLnN1bTY0XzVfaGk9UyxlLnN1bTY0XzVfbG89RSxlLnJvdHI2NF9oaT1BLGUucm90cjY0X2xvPWssZS5zaHI2NF9oaT14LGUuc2hyNjRfbG89SX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUscil7aWYoZS5sZW5ndGglbyE9PTApe3ZhciBuPWUubGVuZ3RoKyhvLWUubGVuZ3RoJW8pO2U9dC5jb25jYXQoW2UsYV0sbil9Zm9yKHZhciBpPVtdLGY9cj9lLnJlYWRJbnQzMkJFOmUucmVhZEludDMyTEUscz0wO3M8ZS5sZW5ndGg7cys9bylpLnB1c2goZi5jYWxsKGUscykpO3JldHVybiBpfWZ1bmN0aW9uIG4oZSxyLG4pe2Zvcih2YXIgaT1uZXcgdChyKSxvPW4/aS53cml0ZUludDMyQkU6aS53cml0ZUludDMyTEUsYT0wO2E8ZS5sZW5ndGg7YSsrKW8uY2FsbChpLGVbYV0sNCphLCEwKTtyZXR1cm4gaX1mdW5jdGlvbiBpKGUsaSxvLGEpe3QuaXNCdWZmZXIoZSl8fChlPW5ldyB0KGUpKTt2YXIgcz1pKHIoZSxhKSxlLmxlbmd0aCpmKTtyZXR1cm4gbihzLG8sYSl9dmFyIG89NCxhPW5ldyB0KG8pO2EuZmlsbCgwKTt2YXIgZj04O2UuaGFzaD1pfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj0wO3I8dC5sZW5ndGg7cisrLG4rPTgpZVtuPj4+NV18PXRbcl08PDI0LW4lMzI7cmV0dXJuIGV9ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9W10scj0wO3I8MzIqdC5sZW5ndGg7cis9OCllLnB1c2godFtyPj4+NV0+Pj4yNC1yJTMyJjI1NSk7cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspe3ZhciBpPXIrbixjPWVbaV07ZVtpXT0xNjcxMTkzNSYoYzw8OHxjPj4+MjQpfDQyNzgyNTUzNjAmKGM8PDI0fGM+Pj44KX12YXIgbSxnLHcsXyxNLFMsRSxBLGsseDtTPW09dFswXSxFPWc9dFsxXSxBPXc9dFsyXSxrPV89dFszXSx4PU09dFs0XTt2YXIgSTtmb3Iobj0wO248ODA7bis9MSlJPW0rZVtyK2Rbbl1dfDAsSSs9bjwxNj9vKGcsdyxfKSt2WzBdOm48MzI/YShnLHcsXykrdlsxXTpuPDQ4P2YoZyx3LF8pK3ZbMl06bjw2ND9zKGcsdyxfKSt2WzNdOnUoZyx3LF8pK3ZbNF0sSXw9MCxJPWgoSSxwW25dKSxJPUkrTXwwLG09TSxNPV8sXz1oKHcsMTApLHc9ZyxnPUksST1TK2VbcitsW25dXXwwLEkrPW48MTY/dShFLEEsaykreVswXTpuPDMyP3MoRSxBLGspK3lbMV06bjw0OD9mKEUsQSxrKSt5WzJdOm48NjQ/YShFLEEsaykreVszXTpvKEUsQSxrKSt5WzRdLEl8PTAsST1oKEksYltuXSksST1JK3h8MCxTPXgseD1rLGs9aChBLDEwKSxBPUUsRT1JO0k9dFsxXSt3K2t8MCx0WzFdPXRbMl0rXyt4fDAsdFsyXT10WzNdK00rU3wwLHRbM109dFs0XSttK0V8MCx0WzRdPXRbMF0rZytBfDAsdFswXT1JfWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiB0XmVecn1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gdCZlfH50JnJ9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKHR8fmUpXnJ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQmcnxlJn5yfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB0XihlfH5yKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gYyh0KXt2YXIgbz1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LFwidXRmOFwiKSk7dmFyIGE9cih0KSxmPTgqdC5sZW5ndGgscz04KnQubGVuZ3RoO2FbZj4+PjVdfD0xMjg8PDI0LWYlMzIsYVsoZis2ND4+Pjk8PDQpKzE0XT0xNjcxMTkzNSYoczw8OHxzPj4+MjQpfDQyNzgyNTUzNjAmKHM8PDI0fHM+Pj44KTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrPTE2KWkobyxhLHUpO2Zvcih1PTA7dTw1O3UrKyl7dmFyIGg9b1t1XTtvW3VdPTE2NzExOTM1JihoPDw4fGg+Pj4yNCl8NDI3ODI1NTM2MCYoaDw8MjR8aD4+PjgpfXZhciBjPW4obyk7cmV0dXJuIG5ldyBlKGMpfS8qKiBAcHJlc2VydmVcbihjKSAyMDEyIGJ5IEPDqWRyaWMgTWVzbmlsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbnZhciBkPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGw9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0scD1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sYj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sdj1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSx5PVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO3QuZXhwb3J0cz1jfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBlPXQuZXhwb3J0cz1mdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgcj1lW3RdO2lmKCFyKXRocm93IG5ldyBFcnJvcih0K1wiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKVwiKTtyZXR1cm4gbmV3IHJ9O2Uuc2hhPXIoNTY5KSxlLnNoYTE9cig1NzApLGUuc2hhMjI0PXIoNTcxKSxlLnNoYTI1Nj1yKDIyNyksZS5zaGEzODQ9cig1NzIpLGUuc2hhNTEyPXIoMjI4KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1oLHMuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDw1fHQ+Pj4yN31mdW5jdGlvbiBvKHQpe3JldHVybiB0PDwzMHx0Pj4+Mn1mdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybiAwPT09dD9lJnJ8fmUmbjoyPT09dD9lJnJ8ZSZufHImbjplXnJebn12YXIgZj1yKDIpLHM9cig2MCksdT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGg9bmV3IEFycmF5KDgwKTtmKG4scyksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fdyxyPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixmPTB8dGhpcy5fYyxzPTB8dGhpcy5fZCxoPTB8dGhpcy5fZSxjPTA7YzwxNjsrK2MpZVtjXT10LnJlYWRJbnQzMkJFKDQqYyk7Zm9yKDtjPDgwOysrYyllW2NdPWVbYy0zXV5lW2MtOF1eZVtjLTE0XV5lW2MtMTZdO2Zvcih2YXIgZD0wO2Q8ODA7KytkKXt2YXIgbD1+fihkLzIwKSxwPWkocikrYShsLG4sZixzKStoK2VbZF0rdVtsXXwwO2g9cyxzPWYsZj1vKG4pLG49cixyPXB9dGhpcy5fYT1yK3RoaXMuX2F8MCx0aGlzLl9iPW4rdGhpcy5fYnwwLHRoaXMuX2M9Zit0aGlzLl9jfDAsdGhpcy5fZD1zK3RoaXMuX2R8MCx0aGlzLl9lPWgrdGhpcy5fZXwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKDIwKTtyZXR1cm4gdC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1jLHUuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDwxfHQ+Pj4zMX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PDw1fHQ+Pj4yN31mdW5jdGlvbiBhKHQpe3JldHVybiB0PDwzMHx0Pj4+Mn1mdW5jdGlvbiBmKHQsZSxyLG4pe3JldHVybiAwPT09dD9lJnJ8fmUmbjoyPT09dD9lJnJ8ZSZufHImbjplXnJebn12YXIgcz1yKDIpLHU9cig2MCksaD1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGM9bmV3IEFycmF5KDgwKTtzKG4sdSksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fdyxyPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixzPTB8dGhpcy5fYyx1PTB8dGhpcy5fZCxjPTB8dGhpcy5fZSxkPTA7ZDwxNjsrK2QpZVtkXT10LnJlYWRJbnQzMkJFKDQqZCk7Zm9yKDtkPDgwOysrZCllW2RdPWkoZVtkLTNdXmVbZC04XV5lW2QtMTRdXmVbZC0xNl0pO2Zvcih2YXIgbD0wO2w8ODA7KytsKXt2YXIgcD1+fihsLzIwKSxiPW8ocikrZihwLG4scyx1KStjK2VbbF0raFtwXXwwO2M9dSx1PXMscz1hKG4pLG49cixyPWJ9dGhpcy5fYT1yK3RoaXMuX2F8MCx0aGlzLl9iPW4rdGhpcy5fYnwwLHRoaXMuX2M9cyt0aGlzLl9jfDAsdGhpcy5fZD11K3RoaXMuX2R8MCx0aGlzLl9lPWMrdGhpcy5fZXwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKDIwKTtyZXR1cm4gdC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLGEuY2FsbCh0aGlzLDY0LDU2KX12YXIgaT1yKDIpLG89cigyMjcpLGE9cig2MCksZj1uZXcgQXJyYXkoNjQpO2kobixvKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMjgpO3JldHVybiB0LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksdC53cml0ZUludDMyQkUodGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSx0LndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSx0LndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSx0fSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ZixhLmNhbGwodGhpcywxMjgsMTEyKX12YXIgaT1yKDIpLG89cigyMjgpLGE9cig2MCksZj1uZXcgQXJyYXkoMTYwKTtpKG4sbyksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7ci53cml0ZUludDMyQkUodCxuKSxyLndyaXRlSW50MzJCRShlLG4rNCl9dmFyIHI9bmV3IGUoNDgpO3JldHVybiB0KHRoaXMuX2FoLHRoaXMuX2FsLDApLHQodGhpcy5fYmgsdGhpcy5fYmwsOCksdCh0aGlzLl9jaCx0aGlzLl9jbCwxNiksdCh0aGlzLl9kaCx0aGlzLl9kbCwyNCksdCh0aGlzLl9laCx0aGlzLl9lbCwzMiksdCh0aGlzLl9maCx0aGlzLl9mbCw0MCkscn0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9bmV3IHQoYVtlXS5wcmltZSxcImhleFwiKSxuPW5ldyB0KGFbZV0uZ2VuLFwiaGV4XCIpO3JldHVybiBuZXcgZihyLG4pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7cmV0dXJuIHQuaXNCdWZmZXIocil8fHZvaWQgMD09PXNbcl0/aShlLFwiYmluYXJ5XCIscixuKToocj1yfHxcImJpbmFyeVwiLGE9YXx8XCJiaW5hcnlcIixuPW58fG5ldyB0KFsyXSksdC5pc0J1ZmZlcihuKXx8KG49bmV3IHQobixhKSksXCJudW1iZXJcIj09dHlwZW9mIGU/bmV3IGYobyhlLG4pLG4sITApOih0LmlzQnVmZmVyKGUpfHwoZT1uZXcgdChlLHIpKSxuZXcgZihlLG4sITApKSl9dmFyIG89cigyMjkpLGE9cig0NjgpLGY9cig1NzQpLHM9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtlLkRpZmZpZUhlbGxtYW5Hcm91cD1lLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1lLmdldERpZmZpZUhlbGxtYW49bixlLmNyZWF0ZURpZmZpZUhlbGxtYW49ZS5EaWZmaWVIZWxsbWFuPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gcj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKSx0aGlzLl9wdWI9bmV3IHModCksdGhpc31mdW5jdGlvbiBpKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5fcHJpdj1uZXcgcyh0KSx0aGlzfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lLnRvU3RyaW5nKFwiaGV4XCIpLG49W3IsdC50b1N0cmluZygxNildLmpvaW4oXCJfXCIpO2lmKG4gaW4gbSlyZXR1cm4gbVtuXTt2YXIgaT0wO2lmKHQuaXNFdmVuKCl8fCF2LnNpbXBsZVNpZXZlfHwhdi5mZXJtYXRUZXN0KHQpfHwhaC50ZXN0KHQpKXJldHVybiBpKz0xLGkrPVwiMDJcIj09PXJ8fFwiMDVcIj09PXI/ODo0LG1bbl09aSxpO2gudGVzdCh0LnNocm4oMSkpfHwoaSs9Mik7dmFyIG87c3dpdGNoKHIpe2Nhc2VcIjAyXCI6dC5tb2QoYykuY21wKGQpJiYoaSs9OCk7YnJlYWs7Y2FzZVwiMDVcIjpvPXQubW9kKGwpLG8uY21wKHApJiZvLmNtcChiKSYmKGkrPTgpO2JyZWFrO2RlZmF1bHQ6aSs9NH1yZXR1cm4gbVtuXT1pLGl9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5zZXRHZW5lcmF0b3IoZSksdGhpcy5fX3ByaW1lPW5ldyBzKHQpLHRoaXMuX3ByaW1lPXMubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPXQubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxyPyh0aGlzLnNldFB1YmxpY0tleT1uLHRoaXMuc2V0UHJpdmF0ZUtleT1pKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBmKHQscil7dmFyIG49bmV3IGUodC50b0FycmF5KCkpO3JldHVybiByP24udG9TdHJpbmcocik6bn12YXIgcz1yKDE1MCksdT1yKDIzMCksaD1uZXcgdSxjPW5ldyBzKDI0KSxkPW5ldyBzKDExKSxsPW5ldyBzKDEwKSxwPW5ldyBzKDMpLGI9bmV3IHMoNyksdj1yKDIyOSkseT1yKDYxKTt0LmV4cG9ydHM9YTt2YXIgbT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsXCJ2ZXJpZnlFcnJvclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9byh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxhLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IHMoeSh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LGEucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24odCl7dD1uZXcgcyh0KSx0PXQudG9SZWQodGhpcy5fcHJpbWUpO3ZhciByPXQucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxuPW5ldyBlKHIudG9BcnJheSgpKSxpPXRoaXMuZ2V0UHJpbWUoKTtpZihuLmxlbmd0aDxpLmxlbmd0aCl7dmFyIG89bmV3IGUoaS5sZW5ndGgtbi5sZW5ndGgpO28uZmlsbCgwKSxuPWUuY29uY2F0KFtvLG5dKX1yZXR1cm4gbn0sYS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX3B1Yix0KX0sYS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9wcml2LHQpfSxhLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9fcHJpbWUsdCl9LGEucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9nZW4sdCl9LGEucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbih0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMuX19nZW49dCx0aGlzLl9nZW49bmV3IHModCksdGhpc319KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLnJhbmQ9dH12YXIgaTtpZih0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGl8fChpPW5ldyBuKG51bGwpKSxpLmdlbmVyYXRlKHQpfSx0LmV4cG9ydHMuUmFuZD1uLG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYW5kKHQpfSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTp3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0XCIpfTtlbHNlIHRyeXt2YXIgbz1yKDYxMSk7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZG9tQnl0ZXModCl9fWNhdGNoKHQpe24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBlfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMiwzMCktMTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSXRlcmF0aW9ucyBub3QgYSBudW1iZXJcIik7aWYodDwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCYWQgaXRlcmF0aW9uc1wiKTtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGxlbmd0aCBub3QgYSBudW1iZXJcIik7aWYoZTwwfHxlPnJ8fGUhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCYWQga2V5IGxlbmd0aFwiKX19LGZ1bmN0aW9uKHQsZSxyKXtlLnB1YmxpY0VuY3J5cHQ9cig1OTMpLGUucHJpdmF0ZURlY3J5cHQ9cig1OTIpLGUucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wdWJsaWNFbmNyeXB0KHQsciwhMCl9LGUucHVibGljRGVjcnlwdD1mdW5jdGlvbih0LHIpe3JldHVybiBlLnByaXZhdGVEZWNyeXB0KHQsciwhMCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMDYpLGk9bi5kZWZpbmUoXCJSU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTFcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTJcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDFcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDJcIikuaW50KCksdGhpcy5rZXkoXCJjb2VmZmljaWVudFwiKS5pbnQoKSl9KTtlLlJTQVByaXZhdGVLZXk9aTt2YXIgbz1uLmRlZmluZShcIlJTQVB1YmxpY0tleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCkpfSk7ZS5SU0FQdWJsaWNLZXk9bzt2YXIgYT1uLmRlZmluZShcIlN1YmplY3RQdWJsaWNLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS51c2UoZiksdGhpcy5rZXkoXCJzdWJqZWN0UHVibGljS2V5XCIpLmJpdHN0cigpKX0pO2UuUHVibGljS2V5PWE7dmFyIGY9bi5kZWZpbmUoXCJBbGdvcml0aG1JZGVudGlmaWVyXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5vYmppZCgpLHRoaXMua2V5KFwibm9uZVwiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJjdXJ2ZVwiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpKS5vcHRpb25hbCgpKX0pLHM9bi5kZWZpbmUoXCJQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pO2UuUHJpdmF0ZUtleT1zO3ZhciB1PW4uZGVmaW5lKFwiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJkZWNyeXB0XCIpLnNlcSgpLm9iaih0aGlzLmtleShcImtkZVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwia2RlcGFyYW1zXCIpLnNlcSgpLm9iaih0aGlzLmtleShcInNhbHRcIikub2N0c3RyKCksdGhpcy5rZXkoXCJpdGVyc1wiKS5pbnQoKSkpLHRoaXMua2V5KFwiY2lwaGVyXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29cIikub2JqaWQoKSx0aGlzLmtleShcIml2XCIpLm9jdHN0cigpKSkpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5FbmNyeXB0ZWRQcml2YXRlS2V5PXU7dmFyIGg9bi5kZWZpbmUoXCJEU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCksdGhpcy5rZXkoXCJwdWJfa2V5XCIpLmludCgpLHRoaXMua2V5KFwicHJpdl9rZXlcIikuaW50KCkpfSk7ZS5EU0FQcml2YXRlS2V5PWgsZS5EU0FwYXJhbT1uLmRlZmluZShcIkRTQXBhcmFtXCIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIGM9bi5kZWZpbmUoXCJFQ1ByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVLZXlcIikub2N0c3RyKCksdGhpcy5rZXkoXCJwYXJhbWV0ZXJzXCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKGQpLHRoaXMua2V5KFwicHVibGljS2V5XCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ZS5FQ1ByaXZhdGVLZXk9Yzt2YXIgZD1uLmRlZmluZShcIkVDUGFyYW1ldGVyc1wiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtlLnNpZ25hdHVyZT1uLmRlZmluZShcInNpZ25hdHVyZVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJyXCIpLmludCgpLHRoaXMua2V5KFwic1wiKS5pbnQoKSl9KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt2YXIgbj0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxccj9cXG5ERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspXFxyP1xcblxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4vbSxpPS9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbi9tLG89L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuKFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXHI/XFxuLS0tLS1FTkQgXFwxIEtFWS0tLS0tJC9tLGE9cigxNTMpLGY9cigyMzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe3ZhciBzLHU9dC50b1N0cmluZygpLGg9dS5tYXRjaChuKTtpZihoKXt2YXIgYz1cImFlc1wiK2hbMV0sZD1uZXcgZShoWzJdLFwiaGV4XCIpLGw9bmV3IGUoaFszXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIikscD1hKHIsZC5zbGljZSgwLDgpLHBhcnNlSW50KGhbMV0sMTApKS5rZXksYj1bXSx2PWYuY3JlYXRlRGVjaXBoZXJpdihjLHAsZCk7Yi5wdXNoKHYudXBkYXRlKGwpKSxiLnB1c2godi5maW5hbCgpKSxzPWUuY29uY2F0KGIpfWVsc2V7dmFyIHk9dS5tYXRjaChvKTtzPW5ldyBlKHlbMl0ucmVwbGFjZSgvXFxyP1xcbi9nLFwiXCIpLFwiYmFzZTY0XCIpfXZhciBtPXUubWF0Y2goaSlbMV0rXCIgS0VZXCI7cmV0dXJue3RhZzptLGRhdGE6c319fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmJvZHk9ZSx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dmFyIGk9cigxMDYpLG89cigyKSxhPWU7YS5kZWZpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odCxlKX0sbi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXIoMjUxKS5ydW5JblRoaXNDb250ZXh0KFwiKGZ1bmN0aW9uIFwiK3RoaXMubmFtZStcIihlbnRpdHkpIHtcXG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbn0pXCIpfWNhdGNoKHQpe2U9ZnVuY3Rpb24odCl7dGhpcy5faW5pdE5hbWVkKHQpfX1yZXR1cm4gbyhlLHQpLGUucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSl9LG5ldyBlKHRoaXMpfSxuLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmRlY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZGVjb2RlcnNbdF0pKSx0aGlzLmRlY29kZXJzW3RdfSxuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGUpLmRlY29kZSh0LHIpfSxuLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmVuY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZW5jb2RlcnNbdF0pKSx0aGlzLmVuY29kZXJzW3RdfSxuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKGUpLmVuY29kZSh0LHIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj17fTt0aGlzLl9iYXNlU3RhdGU9cixyLmVuYz10LHIucGFyZW50PWV8fG51bGwsci5jaGlsZHJlbj1udWxsLHIudGFnPW51bGwsci5hcmdzPW51bGwsci5yZXZlcnNlQXJncz1udWxsLHIuY2hvaWNlPW51bGwsci5vcHRpb25hbD0hMSxyLmFueT0hMSxyLm9iaj0hMSxyLnVzZT1udWxsLHIudXNlRGVjb2Rlcj1udWxsLHIua2V5PW51bGwsci5kZWZhdWx0PW51bGwsci5leHBsaWNpdD1udWxsLHIuaW1wbGljaXQ9bnVsbCxyLmNvbnRhaW5zPW51bGwsci5wYXJlbnR8fChyLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dmFyIGk9cig3MSkuUmVwb3J0ZXIsbz1yKDcxKS5FbmNvZGVyQnVmZmVyLGE9cig3MSkuRGVjb2RlckJ1ZmZlcixmPXIoNTg4KSxzPVtcInNlcVwiLFwic2Vxb2ZcIixcInNldFwiLFwic2V0b2ZcIixcIm9iamlkXCIsXCJib29sXCIsXCJnZW50aW1lXCIsXCJ1dGN0aW1lXCIsXCJudWxsX1wiLFwiZW51bVwiLFwiaW50XCIsXCJiaXRzdHJcIixcImJtcHN0clwiLFwiY2hhcnN0clwiLFwiZ2Vuc3RyXCIsXCJncmFwaHN0clwiLFwiaWE1c3RyXCIsXCJpc282NDZzdHJcIixcIm51bXN0clwiLFwib2N0c3RyXCIsXCJwcmludHN0clwiLFwidDYxc3RyXCIsXCJ1bmlzdHJcIixcInV0ZjhzdHJcIixcInZpZGVvc3RyXCJdLHU9W1wia2V5XCIsXCJvYmpcIixcInVzZVwiLFwib3B0aW9uYWxcIixcImV4cGxpY2l0XCIsXCJpbXBsaWNpdFwiLFwiZGVmXCIsXCJjaG9pY2VcIixcImFueVwiLFwiY29udGFpbnNcIl0uY29uY2F0KHMpLGg9W1wiX3BlZWtUYWdcIixcIl9kZWNvZGVUYWdcIixcIl91c2VcIixcIl9kZWNvZGVTdHJcIixcIl9kZWNvZGVPYmppZFwiLFwiX2RlY29kZVRpbWVcIixcIl9kZWNvZGVOdWxsXCIsXCJfZGVjb2RlSW50XCIsXCJfZGVjb2RlQm9vbFwiLFwiX2RlY29kZUxpc3RcIixcIl9lbmNvZGVDb21wb3NpdGVcIixcIl9lbmNvZGVTdHJcIixcIl9lbmNvZGVPYmppZFwiLFwiX2VuY29kZVRpbWVcIixcIl9lbmNvZGVOdWxsXCIsXCJfZW5jb2RlSW50XCIsXCJfZW5jb2RlQm9vbFwiXTt0LmV4cG9ydHM9bjt2YXIgYz1bXCJlbmNcIixcInBhcmVudFwiLFwiY2hpbGRyZW5cIixcInRhZ1wiLFwiYXJnc1wiLFwicmV2ZXJzZUFyZ3NcIixcImNob2ljZVwiLFwib3B0aW9uYWxcIixcImFueVwiLFwib2JqXCIsXCJ1c2VcIixcImFsdGVyZWRVc2VcIixcImtleVwiLFwiZGVmYXVsdFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJjb250YWluc1wiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPXt9O2MuZm9yRWFjaChmdW5jdGlvbihyKXtlW3JdPXRbcl19KTt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLnBhcmVudCk7cmV0dXJuIHIuX2Jhc2VTdGF0ZT1lLHJ9LG4ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3UuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzW2VdPWZ1bmN0aW9uKCl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIHQuY2hpbGRyZW4ucHVzaChyKSxyW2VdLmFwcGx5KHIsYXJndW1lbnRzKX19LHRoaXMpfSxuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7ZihudWxsPT09ZS5wYXJlbnQpLHQuY2FsbCh0aGlzKSxlLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksZi5lcXVhbChlLmNoaWxkcmVuLmxlbmd0aCwxLFwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkXCIpfSxuLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGUscj10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO3Q9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1yLmxlbmd0aCYmKGYobnVsbD09PWUuY2hpbGRyZW4pLGUuY2hpbGRyZW49cixyLmZvckVhY2goZnVuY3Rpb24odCl7dC5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PXQubGVuZ3RoJiYoZihudWxsPT09ZS5hcmdzKSxlLmFyZ3M9dCxlLnJldmVyc2VBcmdzPXQubWFwKGZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0fHx0LmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiB0O3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3I9PSgwfHIpJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSkpfSxoLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7dGhyb3cgbmV3IEVycm9yKHQrXCIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogXCIrZS5lbmMpfX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGYobnVsbD09PWUudGFnKSxlLnRhZz10LHRoaXMuX3VzZUFyZ3MociksdGhpc319KSxuLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLnVzZSksZS51c2U9dCx0aGlzfSxuLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdC5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmRlZmF1bHQpLGUuZGVmYXVsdD10LGUub3B0aW9uYWw9ITAsdGhpc30sbi5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5leHBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5leHBsaWNpdCYmbnVsbD09PWUuaW1wbGljaXQpLGUuaW1wbGljaXQ9dCx0aGlzfSxuLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUsZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0Lm9iaj0hMCwwIT09ZS5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoZSksdGhpc30sbi5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5rZXkpLGUua2V5PXQsdGhpc30sbi5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0LmFueT0hMCx0aGlzfSxuLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmNob2ljZSksZS5jaG9pY2U9dCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzfSxuLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLmNvbnRhaW5zPXQsdGhpc30sbi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ci5wYXJlbnQpcmV0dXJuIHQud3JhcFJlc3VsdChyLmNoaWxkcmVuWzBdLl9kZWNvZGUodCxlKSk7dmFyIG49ci5kZWZhdWx0LGk9ITAsbz1udWxsO2lmKG51bGwhPT1yLmtleSYmKG89dC5lbnRlcktleShyLmtleSkpLHIub3B0aW9uYWwpe3ZhciBmPW51bGw7aWYobnVsbCE9PXIuZXhwbGljaXQ/Zj1yLmV4cGxpY2l0Om51bGwhPT1yLmltcGxpY2l0P2Y9ci5pbXBsaWNpdDpudWxsIT09ci50YWcmJihmPXIudGFnKSxudWxsIT09Znx8ci5hbnkpe2lmKGk9dGhpcy5fcGVla1RhZyh0LGYsci5hbnkpLHQuaXNFcnJvcihpKSlyZXR1cm4gaX1lbHNle3ZhciBzPXQuc2F2ZSgpO3RyeXtudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLGk9ITB9Y2F0Y2godCl7aT0hMX10LnJlc3RvcmUocyl9fXZhciB1O2lmKHIub2JqJiZpJiYodT10LmVudGVyT2JqZWN0KCkpLGkpe2lmKG51bGwhPT1yLmV4cGxpY2l0KXt2YXIgaD10aGlzLl9kZWNvZGVUYWcodCxyLmV4cGxpY2l0KTtpZih0LmlzRXJyb3IoaCkpcmV0dXJuIGg7dD1ofXZhciBjPXQub2Zmc2V0O2lmKG51bGw9PT1yLnVzZSYmbnVsbD09PXIuY2hvaWNlKXtpZihyLmFueSl2YXIgcz10LnNhdmUoKTt2YXIgZD10aGlzLl9kZWNvZGVUYWcodCxudWxsIT09ci5pbXBsaWNpdD9yLmltcGxpY2l0OnIudGFnLHIuYW55KTtpZih0LmlzRXJyb3IoZCkpcmV0dXJuIGQ7ci5hbnk/bj10LnJhdyhzKTp0PWR9aWYoZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLGMsdC5sZW5ndGgsXCJ0YWdnZWRcIiksZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLHQub2Zmc2V0LHQubGVuZ3RoLFwiY29udGVudFwiKSxuPXIuYW55P246bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsdCxlKTp0aGlzLl9kZWNvZGVDaG9pY2UodCxlKSx0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoci5hbnl8fG51bGwhPT1yLmNob2ljZXx8bnVsbD09PXIuY2hpbGRyZW58fHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihyKXtyLl9kZWNvZGUodCxlKX0pLHIuY29udGFpbnMmJihcIm9jdHN0clwiPT09ci50YWd8fFwiYml0c3RyXCI9PT1yLnRhZykpe3ZhciBsPW5ldyBhKG4pO249dGhpcy5fZ2V0VXNlKHIuY29udGFpbnMsdC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUobCxlKX19cmV0dXJuIHIub2JqJiZpJiYobj10LmxlYXZlT2JqZWN0KHUpKSxudWxsPT09ci5rZXl8fG51bGw9PT1uJiZpIT09ITA/bnVsbCE9PW8mJnQuZXhpdEtleShvKTp0LmxlYXZlS2V5KG8sci5rZXksbiksbn0sbi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm5cInNlcVwiPT09dHx8XCJzZXRcIj09PXQ/bnVsbDpcInNlcW9mXCI9PT10fHxcInNldG9mXCI9PT10P3RoaXMuX2RlY29kZUxpc3QoZSx0LG4uYXJnc1swXSxyKTovc3RyJC8udGVzdCh0KT90aGlzLl9kZWNvZGVTdHIoZSx0LHIpOlwib2JqaWRcIj09PXQmJm4uYXJncz90aGlzLl9kZWNvZGVPYmppZChlLG4uYXJnc1swXSxuLmFyZ3NbMV0scik6XCJvYmppZFwiPT09dD90aGlzLl9kZWNvZGVPYmppZChlLG51bGwsbnVsbCxyKTpcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dD90aGlzLl9kZWNvZGVUaW1lKGUsdCxyKTpcIm51bGxfXCI9PT10P3RoaXMuX2RlY29kZU51bGwoZSxyKTpcImJvb2xcIj09PXQ/dGhpcy5fZGVjb2RlQm9vbChlLHIpOlwiaW50XCI9PT10fHxcImVudW1cIj09PXQ/dGhpcy5fZGVjb2RlSW50KGUsbi5hcmdzJiZuLmFyZ3NbMF0scik6bnVsbCE9PW4udXNlP3RoaXMuX2dldFVzZShuLnVzZSxlLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShlLHIpOmUuZXJyb3IoXCJ1bmtub3duIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIudXNlRGVjb2Rlcj10aGlzLl91c2UodCxlKSxmKG51bGw9PT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxyLmltcGxpY2l0IT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLmNsb25lKCksci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ci5pbXBsaWNpdCksci51c2VEZWNvZGVyfSxuLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49bnVsbCxpPSExO3JldHVybiBPYmplY3Qua2V5cyhyLmNob2ljZSkuc29tZShmdW5jdGlvbihvKXt2YXIgYT10LnNhdmUoKSxmPXIuY2hvaWNlW29dO3RyeXt2YXIgcz1mLl9kZWNvZGUodCxlKTtpZih0LmlzRXJyb3IocykpcmV0dXJuITE7bj17dHlwZTpvLHZhbHVlOnN9LGk9ITB9Y2F0Y2goZSl7cmV0dXJuIHQucmVzdG9yZShhKSwhMX1yZXR1cm4hMH0sdGhpcyksaT9uOnQuZXJyb3IoXCJDaG9pY2Ugbm90IG1hdGNoZWRcIil9LG4ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LHRoaXMucmVwb3J0ZXIpfSxuLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4uZGVmYXVsdHx8bi5kZWZhdWx0IT09dCl7dmFyIGk9dGhpcy5fZW5jb2RlVmFsdWUodCxlLHIpO2lmKHZvaWQgMCE9PWkmJiF0aGlzLl9za2lwRGVmYXVsdChpLGUscikpcmV0dXJuIGl9fSxuLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5wYXJlbnQpcmV0dXJuIG4uY2hpbGRyZW5bMF0uX2VuY29kZSh0LGV8fG5ldyBpKTt2YXIgbz1udWxsO2lmKHRoaXMucmVwb3J0ZXI9ZSxuLm9wdGlvbmFsJiZ2b2lkIDA9PT10KXtpZihudWxsPT09bi5kZWZhdWx0KXJldHVybjt0PW4uZGVmYXVsdH12YXIgYT1udWxsLGY9ITE7aWYobi5hbnkpbz10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2Vsc2UgaWYobi5jaG9pY2Upbz10aGlzLl9lbmNvZGVDaG9pY2UodCxlKTtlbHNlIGlmKG4uY29udGFpbnMpYT10aGlzLl9nZXRVc2Uobi5jb250YWlucyxyKS5fZW5jb2RlKHQsZSksZj0hMDtlbHNlIGlmKG4uY2hpbGRyZW4pYT1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihyKXtpZihcIm51bGxfXCI9PT1yLl9iYXNlU3RhdGUudGFnKXJldHVybiByLl9lbmNvZGUobnVsbCxlLHQpO2lmKG51bGw9PT1yLl9iYXNlU3RhdGUua2V5KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXlcIik7dmFyIG49ZS5lbnRlcktleShyLl9iYXNlU3RhdGUua2V5KTtpZihcIm9iamVjdFwiIT10eXBlb2YgdClyZXR1cm4gZS5lcnJvcihcIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdFwiKTt2YXIgaT1yLl9lbmNvZGUodFtyLl9iYXNlU3RhdGUua2V5XSxlLHQpO3JldHVybiBlLmxlYXZlS2V5KG4pLGl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKTtlbHNlIGlmKFwic2Vxb2ZcIj09PW4udGFnfHxcInNldG9mXCI9PT1uLnRhZyl7aWYoIW4uYXJnc3x8MSE9PW4uYXJncy5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJUb28gbWFueSBhcmdzIGZvciA6IFwiK24udGFnKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5lcnJvcihcInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXlcIik7dmFyIHM9dGhpcy5jbG9uZSgpO3MuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0Lm1hcChmdW5jdGlvbihyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHRoaXMuX2dldFVzZShuLmFyZ3NbMF0sdCkuX2VuY29kZShyLGUpfSxzKSl9ZWxzZSBudWxsIT09bi51c2U/bz10aGlzLl9nZXRVc2Uobi51c2UscikuX2VuY29kZSh0LGUpOihhPXRoaXMuX2VuY29kZVByaW1pdGl2ZShuLnRhZyx0KSxmPSEwKTt2YXIgbztpZighbi5hbnkmJm51bGw9PT1uLmNob2ljZSl7dmFyIHU9bnVsbCE9PW4uaW1wbGljaXQ/bi5pbXBsaWNpdDpuLnRhZyxoPW51bGw9PT1uLmltcGxpY2l0P1widW5pdmVyc2FsXCI6XCJjb250ZXh0XCI7bnVsbD09PXU/bnVsbD09PW4udXNlJiZlLmVycm9yKFwiVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpXCIpOm51bGw9PT1uLnVzZSYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHUsZixoLGEpKX1yZXR1cm4gbnVsbCE9PW4uZXhwbGljaXQmJihvPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuLmV4cGxpY2l0LCExLFwiY29udGV4dFwiLG8pKSxvfSxuLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbdC50eXBlXTtyZXR1cm4gbnx8ZighMSx0LnR5cGUrXCIgbm90IGZvdW5kIGluIFwiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHIuY2hvaWNlKSkpLG4uX2VuY29kZSh0LnZhbHVlLGUpfSxuLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KHQpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoZSx0KTtpZihcIm9iamlkXCI9PT10JiZyLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsci5yZXZlcnNlQXJnc1swXSxyLmFyZ3NbMV0pO2lmKFwib2JqaWRcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsbnVsbCxudWxsKTtpZihcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShlLHQpO2lmKFwibnVsbF9cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZihcImludFwiPT09dHx8XCJlbnVtXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVJbnQoZSxyLmFyZ3MmJnIucmV2ZXJzZUFyZ3NbMF0pO2lmKFwiYm9vbFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChlKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB0YWc6IFwiK3QpfSxuLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bMC05IF0qJC8udGVzdCh0KX0sbi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6dHx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5wYXRoPXQsdGhpcy5yZXRocm93KGUpfXZhciBvPXIoMik7ZS5SZXBvcnRlcj1uLG4ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfSxuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOnQub2JqLHBhdGhMZW46dC5wYXRoLmxlbmd0aH19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLm9iaj10Lm9iaixlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC5wYXRoTGVuKX0sbi5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHQpfSxuLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7ZS5wYXRoPWUucGF0aC5zbGljZSgwLHQtMSl9LG4ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh0KSxudWxsIT09bi5vYmomJihuLm9ialtlXT1yKX0sbi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbihcIi9cIil9LG4ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxlPXQub2JqO3JldHVybiB0Lm9iaj17fSxlfSxuLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlLHI9ZS5vYmo7cmV0dXJuIGUub2JqPXQscn0sbi5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9yZXBvcnRlclN0YXRlLG49dCBpbnN0YW5jZW9mIGk7aWYoZT1uP3Q6bmV3IGkoci5wYXRoLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIltcIitKU09OLnN0cmluZ2lmeSh0KStcIl1cIn0pLmpvaW4oXCJcIiksdC5tZXNzYWdlfHx0LHQuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyBlO3JldHVybiBufHxyLmVycm9ycy5wdXNoKGUpLGV9LG4ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gZS5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IodCk/bnVsbDp0LGVycm9yczplLmVycm9yc306dH0sbyhpLEVycm9yKSxpLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHQpe2lmKHRoaXMubWVzc2FnZT10K1wiIGF0OiBcIisodGhpcy5wYXRofHxcIihzaGFsbG93KVwiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxpKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2godCl7dGhpcy5zdGFjaz10LnN0YWNrfXJldHVybiB0aGlzfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjM1KTtlLnRhZ0NsYXNzPXswOlwidW5pdmVyc2FsXCIsMTpcImFwcGxpY2F0aW9uXCIsMjpcImNvbnRleHRcIiwzOlwicHJpdmF0ZVwifSxlLnRhZ0NsYXNzQnlOYW1lPW4uX3JldmVyc2UoZS50YWdDbGFzcyksZS50YWc9ezA6XCJlbmRcIiwxOlwiYm9vbFwiLDI6XCJpbnRcIiwzOlwiYml0c3RyXCIsNDpcIm9jdHN0clwiLDU6XCJudWxsX1wiLDY6XCJvYmppZFwiLDc6XCJvYmpEZXNjXCIsODpcImV4dGVybmFsXCIsOTpcInJlYWxcIiwxMDpcImVudW1cIiwxMTpcImVtYmVkXCIsMTI6XCJ1dGY4c3RyXCIsMTM6XCJyZWxhdGl2ZU9pZFwiLDE2Olwic2VxXCIsMTc6XCJzZXRcIiwxODpcIm51bXN0clwiLDE5OlwicHJpbnRzdHJcIiwyMDpcInQ2MXN0clwiLDIxOlwidmlkZW9zdHJcIiwyMjpcImlhNXN0clwiLDIzOlwidXRjdGltZVwiLDI0OlwiZ2VudGltZVwiLDI1OlwiZ3JhcGhzdHJcIiwyNjpcImlzbzY0NnN0clwiLDI3OlwiZ2Vuc3RyXCIsMjg6XCJ1bmlzdHJcIiwyOTpcImNoYXJzdHJcIiwzMDpcImJtcHN0clwifSxlLnRhZ0J5TmFtZT1uLl9yZXZlcnNlKGUudGFnKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5kZXI9cigyMzYpLG4ucGVtPXIoNTg1KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7YS5jYWxsKHRoaXMsdCksdGhpcy5lbmM9XCJwZW1cIn12YXIgaT1yKDIpLG89cigxKS5CdWZmZXIsYT1yKDIzNik7aShuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRvU3RyaW5nKCkuc3BsaXQoL1tcXHJcXG5dKy9nKSxuPWUubGFiZWwudG9VcHBlckNhc2UoKSxpPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxmPS0xLHM9LTEsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLm1hdGNoKGkpO2lmKG51bGwhPT1oJiZoWzJdPT09bil7aWYoZiE9PS0xKXtpZihcIkVORFwiIT09aFsxXSlicmVhaztzPXU7YnJlYWt9aWYoXCJCRUdJTlwiIT09aFsxXSlicmVhaztmPXV9fWlmKGY9PT0tMXx8cz09PS0xKXRocm93IG5ldyBFcnJvcihcIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6IFwiK24pO3ZhciBjPXIuc2xpY2UoZisxLHMpLmpvaW4oXCJcIik7Yy5yZXBsYWNlKC9bXmEtejAtOVxcK1xcLz1dKy9naSxcIlwiKTt2YXIgZD1uZXcgbyhjLFwiYmFzZTY0XCIpO3JldHVybiBhLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGQsZSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIzNyksbi5wZW09cig1ODcpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtvLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDIzNyk7aShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1vLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHQpLG49ci50b1N0cmluZyhcImJhc2U2NFwiKSxpPVtcIi0tLS0tQkVHSU4gXCIrZS5sYWJlbCtcIi0tLS0tXCJdLGE9MDthPG4ubGVuZ3RoO2ErPTY0KWkucHVzaChuLnNsaWNlKGEsYSs2NCkpO3JldHVybiBpLnB1c2goXCItLS0tLUVORCBcIitlLmxhYmVsK1wiLS0tLS1cIiksaS5qb2luKFwiXFxuXCIpfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX10LmV4cG9ydHM9cixyLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0IT1lKXRocm93IG5ldyBFcnJvcihyfHxcIkFzc2VydGlvbiBmYWlsZWQ6IFwiK3QrXCIgIT0gXCIrZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgcy5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10WzE1XSxyPS0xOysrcjxlOylpZih0W3IrKDE2LWUpXSE9PWUpdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGRlY3J5cHQgZGF0YVwiKTtpZigxNiE9PWUpcmV0dXJuIHQuc2xpY2UoMCwxNi1lKX1mdW5jdGlvbiBhKGUscixpKXt2YXIgbz1jW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQoYltvLm1vZGVdLHIsaSwhMCk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwoYltvLm1vZGVdLHIsaSwhMCk6bmV3IG4oYltvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWNbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPXAoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gYSh0LG4ua2V5LG4uaXYpfXZhciBzPXIoMTA3KSx1PXIoMTA5KSxoPXIoMiksYz1yKDE1MiksZD1yKDI0NiksbD1yKDIzOCkscD1yKDE1Myk7aChuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyluPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIG8odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdCkpO2lmKHQpdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlO3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfTt2YXIgYj17RUNCOnIoMjQ0KSxDQkM6cigyNDApLENGQjpyKDI0MSksQ0ZCODpyKDI0MyksQ0ZCMTpyKDI0MiksT0ZCOnIoMjQ1KSxDVFI6cigxMDgpLEdDTTpyKDEwOCl9O2UuY3JlYXRlRGVjaXBoZXI9ZixlLmNyZWF0ZURlY2lwaGVyaXY9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhzLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fY2lwaGVyPW5ldyBmLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8oZSxyLGkpe3ZhciBvPWhbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChwW28ubW9kZV0scixpKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChwW28ubW9kZV0scixpKTpuZXcgbihwW28ubW9kZV0scixpKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9aFt0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49YyhlLCExLHIua2V5LHIuaXYpO3JldHVybiBvKHQsbi5rZXksbi5pdil9dmFyIGY9cigxMDcpLHM9cigxMDkpLHU9cigyKSxoPXIoMTUyKSxjPXIoMTUzKSxkPXIoMjQ2KSxsPXIoMjM4KTt1KG4scyksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCgpOyluPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHQ9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCksdGhpcy5fY2lwaGVyLnNjcnViKCksdDtpZihcIjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwXCIhPT10LnRvU3RyaW5nKFwiaGV4XCIpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgdD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHR9cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE2LXRoaXMuY2FjaGUubGVuZ3RoLHI9bmV3IHQoZSksbj0tMTsrK248ZTspci53cml0ZVVJbnQ4KGUsbik7dmFyIGk9dC5jb25jYXQoW3RoaXMuY2FjaGUscl0pO3JldHVybiBpfTt2YXIgcD17RUNCOnIoMjQ0KSxDQkM6cigyNDApLENGQjpyKDI0MSksQ0ZCODpyKDI0MyksQ0ZCMTpyKDI0MiksT0ZCOnIoMjQ1KSxDVFI6cigxMDgpLEdDTTpyKDEwOCl9O2UuY3JlYXRlQ2lwaGVyaXY9byxlLmNyZWF0ZUNpcGhlcj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9bmV3IGUoMTYpLHRoaXMuc3RhdGUuZmlsbCgwKSx0aGlzLmNhY2hlPW5ldyBlKFwiXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuW3QucmVhZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV19ZnVuY3Rpb24gaSh0KXt0PXQubWFwKG8pO3ZhciByPW5ldyBlKDE2KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHRbMF0sMCksci53cml0ZVVJbnQzMkJFKHRbMV0sNCksci53cml0ZVVJbnQzMkJFKHRbMl0sOCksci53cml0ZVVJbnQzMkJFKHRbM10sMTIpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPXQ+c3x8dDwwPyhyPU1hdGguYWJzKHQpJXMsdDwwP3MtcjpyKTp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bdFswXV5lWzBdLHRbMV1eZVsxXSx0WzJdXmVbMl0sdFszXV5lWzNdXX12YXIgZj1uZXcgZSgxNik7Zi5maWxsKDApLHQuZXhwb3J0cz1yLHIucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMTsrK2U8dC5sZW5ndGg7KXRoaXMuc3RhdGVbZV1ePXRbZV07dGhpcy5fbXVsdGlwbHkoKX0sci5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixvPW4odGhpcy5oKSxmPVswLDAsMCwwXSxzPS0xOysrczwxMjg7KXtmb3IoZT0wIT09KHRoaXMuc3RhdGVbfn4ocy84KV0mMTw8Ny1zJTgpLGUmJihmPWEoZixvKSkscj0wIT09KDEmb1szXSksdD0zO3Q+MDt0LS0pb1t0XT1vW3RdPj4+MXwoMSZvW3QtMV0pPDwzMTtvWzBdPW9bMF0+Pj4xLHImJihvWzBdPW9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1pKGYpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5jYWNoZT1lLmNvbmNhdChbdGhpcy5jYWNoZSx0XSk7Zm9yKHZhciByO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspcj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChyKX0sci5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goZS5jb25jYXQoW3RoaXMuY2FjaGUsZl0sMTYpKSx0aGlzLmdoYXNoKGkoWzAsdCwwLHJdKSksdGhpcy5zdGF0ZX07dmFyIHM9TWF0aC5wb3coMiwzMil9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXt2YXIgbj0odC5tb2R1bHVzLHQubW9kdWx1cy5ieXRlTGVuZ3RoKCkpLGk9KHIubGVuZ3RoLGMoXCJzaGExXCIpLnVwZGF0ZShuZXcgZShcIlwiKSkuZGlnZXN0KCkpLGE9aS5sZW5ndGg7aWYoMCE9PXJbMF0pdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTt2YXIgdT1yLnNsaWNlKDEsYSsxKSxoPXIuc2xpY2UoYSsxKSxkPXModSxmKGgsYSkpLGw9cyhoLGYoZCxuLWEtMSkpO2lmKG8oaSxsLnNsaWNlKDAsYSkpKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7Zm9yKHZhciBwPWE7MD09PWxbcF07KXArKztpZigxIT09bFtwKytdKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7cmV0dXJuIGwuc2xpY2UocCl9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPWUuc2xpY2UoMCwyKSxpPTIsbz0wOzAhPT1lW2krK107KWlmKGk+PWUubGVuZ3RoKXtvKys7YnJlYWt9dmFyIGE9ZS5zbGljZSgyLGktMSk7ZS5zbGljZShpLTEsaSk7aWYoKFwiMDAwMlwiIT09bi50b1N0cmluZyhcImhleFwiKSYmIXJ8fFwiMDAwMVwiIT09bi50b1N0cmluZyhcImhleFwiKSYmcikmJm8rKyxhLmxlbmd0aDw4JiZvKyssbyl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3JldHVybiBlLnNsaWNlKGkpfWZ1bmN0aW9uIG8odCxyKXt0PW5ldyBlKHQpLHI9bmV3IGUocik7dmFyIG49MCxpPXQubGVuZ3RoO3QubGVuZ3RoIT09ci5sZW5ndGgmJihuKyssaT1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCkpO2Zvcih2YXIgbz0tMTsrK288aTspbis9dFtvXV5yW29dO3JldHVybiBufXZhciBhPXIoMjMzKSxmPXIoMjMxKSxzPXIoMjQ4KSx1PXIoNzApLGg9cigyMzIpLGM9cig1OSksZD1yKDI0Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscixvKXt2YXIgZjtmPXQucGFkZGluZz90LnBhZGRpbmc6bz8xOjQ7dmFyIHM9YSh0KSxjPXMubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoci5sZW5ndGg+Y3x8bmV3IHUocikuY21wKHMubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTt2YXIgbDtsPW8/ZChuZXcgdShyKSxzKTpoKHIscyk7dmFyIHA9bmV3IGUoYy1sLmxlbmd0aCk7aWYocC5maWxsKDApLGw9ZS5jb25jYXQoW3AsbF0sYyksND09PWYpcmV0dXJuIG4ocyxsKTtpZigxPT09ZilyZXR1cm4gaShzLGwsbyk7aWYoMz09PWYpcmV0dXJuIGw7dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBwYWRkaW5nXCIpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3ZhciBuPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCksaT1yLmxlbmd0aCxvPXMoXCJzaGExXCIpLnVwZGF0ZShuZXcgZShcIlwiKSkuZGlnZXN0KCksYT1vLmxlbmd0aCxkPTIqYTtpZihpPm4tZC0yKXRocm93IG5ldyBFcnJvcihcIm1lc3NhZ2UgdG9vIGxvbmdcIik7dmFyIGw9bmV3IGUobi1pLWQtMik7bC5maWxsKDApO3ZhciBwPW4tYS0xLGI9ZihhKSx2PWgoZS5jb25jYXQoW28sbCxuZXcgZShbMV0pLHJdLHApLHUoYixwKSkseT1oKGIsdSh2LGEpKTtyZXR1cm4gbmV3IGMoZS5jb25jYXQoW25ldyBlKFswXSkseSx2XSxuKSl9ZnVuY3Rpb24gaSh0LHIsbil7dmFyIGk9ci5sZW5ndGgsYT10Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKGk+YS0xMSl0aHJvdyBuZXcgRXJyb3IoXCJtZXNzYWdlIHRvbyBsb25nXCIpO3ZhciBmO3JldHVybiBuPyhmPW5ldyBlKGEtaS0zKSxmLmZpbGwoMjU1KSk6Zj1vKGEtaS0zKSxuZXcgYyhlLmNvbmNhdChbbmV3IGUoWzAsbj8xOjJdKSxmLG5ldyBlKFswXSkscl0sYSkpfWZ1bmN0aW9uIG8odCxyKXtmb3IodmFyIG4saT1uZXcgZSh0KSxvPTAsYT1mKDIqdCkscz0wO288dDspcz09PWEubGVuZ3RoJiYoYT1mKDIqdCkscz0wKSxuPWFbcysrXSxuJiYoaVtvKytdPW4pO3JldHVybiBpfXZhciBhPXIoMjMzKSxmPXIoNjEpLHM9cig1OSksdT1yKDIzMSksaD1yKDI0OCksYz1yKDcwKSxkPXIoMjQ3KSxsPXIoMjMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvO289dC5wYWRkaW5nP3QucGFkZGluZzpyPzE6NDt2YXIgZixzPWEodCk7aWYoND09PW8pZj1uKHMsZSk7ZWxzZSBpZigxPT09bylmPWkocyxlLHIpO2Vsc2V7aWYoMyE9PW8pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBwYWRkaW5nXCIpO2lmKGY9bmV3IGMoZSksZi5jbXAocy5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzXCIpfXJldHVybiByP2woZixzKTpkKGYscyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT10W25dO1wiLlwiPT09aT90LnNwbGljZShuLDEpOlwiLi5cIj09PWk/KHQuc3BsaWNlKG4sMSksXG5yKyspOnImJih0LnNwbGljZShuLDEpLHItLSl9aWYoZSlmb3IoO3ItLTtyKXQudW5zaGlmdChcIi4uXCIpO3JldHVybiB0fWZ1bmN0aW9uIG4odCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0sbix0KSYmci5wdXNoKHRbbl0pO3JldHVybiByfXZhciBpPS9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvLG89ZnVuY3Rpb24odCl7cmV0dXJuIGkuZXhlYyh0KS5zbGljZSgxKX07ZS5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVwiXCIsaT0hMSxvPWFyZ3VtZW50cy5sZW5ndGgtMTtvPj0tMSYmIWk7by0tKXt2YXIgYT1vPj0wP2FyZ3VtZW50c1tvXTp0LmN3ZCgpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5nc1wiKTthJiYoZT1hK1wiL1wiK2UsaT1cIi9cIj09PWEuY2hhckF0KDApKX1yZXR1cm4gZT1yKG4oZS5zcGxpdChcIi9cIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oXCIvXCIpLChpP1wiL1wiOlwiXCIpK2V8fFwiLlwifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgaT1lLmlzQWJzb2x1dGUodCksbz1cIi9cIj09PWEodCwtMSk7cmV0dXJuIHQ9cihuKHQuc3BsaXQoXCIvXCIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKFwiL1wiKSx0fHxpfHwodD1cIi5cIiksdCYmbyYmKHQrPVwiL1wiKSwoaT9cIi9cIjpcIlwiKSt0fSxlLmlzQWJzb2x1dGU9ZnVuY3Rpb24odCl7cmV0dXJuXCIvXCI9PT10LmNoYXJBdCgwKX0sZS5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLm5vcm1hbGl6ZShuKHQsZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3NcIik7cmV0dXJuIHR9KS5qb2luKFwiL1wiKSl9LGUucmVsYXRpdmU9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJlwiXCI9PT10W2VdO2UrKyk7Zm9yKHZhciByPXQubGVuZ3RoLTE7cj49MCYmXCJcIj09PXRbcl07ci0tKTtyZXR1cm4gZT5yP1tdOnQuc2xpY2UoZSxyLWUrMSl9dD1lLnJlc29sdmUodCkuc3Vic3RyKDEpLHI9ZS5yZXNvbHZlKHIpLnN1YnN0cigxKTtmb3IodmFyIGk9bih0LnNwbGl0KFwiL1wiKSksbz1uKHIuc3BsaXQoXCIvXCIpKSxhPU1hdGgubWluKGkubGVuZ3RoLG8ubGVuZ3RoKSxmPWEscz0wO3M8YTtzKyspaWYoaVtzXSE9PW9bc10pe2Y9czticmVha31mb3IodmFyIHU9W10scz1mO3M8aS5sZW5ndGg7cysrKXUucHVzaChcIi4uXCIpO3JldHVybiB1PXUuY29uY2F0KG8uc2xpY2UoZikpLHUuam9pbihcIi9cIil9LGUuc2VwPVwiL1wiLGUuZGVsaW1pdGVyPVwiOlwiLGUuZGlybmFtZT1mdW5jdGlvbih0KXt2YXIgZT1vKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIHJ8fG4/KG4mJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLHIrbik6XCIuXCJ9LGUuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQpWzJdO3JldHVybiBlJiZyLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLWUubGVuZ3RoKSkscn0sZS5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpWzNdfTt2YXIgYT1cImJcIj09PVwiYWJcIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5zdWJzdHIoZSxyKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUscil9fSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDUxKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXZhciBpPShyKDEpLkJ1ZmZlcixyKDE1NikpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9e2RhdGE6dCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9ZTp0aGlzLmhlYWQ9ZSx0aGlzLnRhaWw9ZSwrK3RoaXMubGVuZ3RofSxuLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1lKSx0aGlzLmhlYWQ9ZSwrK3RoaXMubGVuZ3RofSxuLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsdH19LG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LG4ucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciBlPXRoaXMuaGVhZCxyPVwiXCIrZS5kYXRhO2U9ZS5uZXh0OylyKz10K2UuZGF0YTtyZXR1cm4gcn0sbi5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gaS5hbGxvYygwKTtpZigxPT09dGhpcy5sZW5ndGgpcmV0dXJuIHRoaXMuaGVhZC5kYXRhO2Zvcih2YXIgZT1pLmFsbG9jVW5zYWZlKHQ+Pj4wKSxyPXRoaXMuaGVhZCxuPTA7cjspci5kYXRhLmNvcHkoZSxuKSxuKz1yLmRhdGEubGVuZ3RoLHI9ci5uZXh0O3JldHVybiBlfX0sZnVuY3Rpb24odCxlKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1yLmNhbGwodCl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKCl7aWYoIWkpe2lmKG4oXCJ0aHJvd0RlcHJlY2F0aW9uXCIpKXRocm93IG5ldyBFcnJvcihlKTtuKFwidHJhY2VEZXByZWNhdGlvblwiKT9jb25zb2xlLnRyYWNlKGUpOmNvbnNvbGUud2FybihlKSxpPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihuKFwibm9EZXByZWNhdGlvblwiKSlyZXR1cm4gdDt2YXIgaT0hMTtyZXR1cm4gcn1mdW5jdGlvbiBuKHQpe3RyeXtpZighZS5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9dmFyIHI9ZS5sb2NhbFN0b3JhZ2VbdF07cmV0dXJuIG51bGwhPXImJlwidHJ1ZVwiPT09U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCl9dC5leHBvcnRzPXJ9KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoMjQ5KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuKXt2YXIgaT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcigzMSl9Y2F0Y2godCl7fX0oKTtlPXQuZXhwb3J0cz1yKDI1MCksZS5TdHJlYW09aXx8ZSxlLlJlYWRhYmxlPWUsZS5Xcml0YWJsZT1yKDE1NSksZS5EdXBsZXg9cig1MSksZS5UcmFuc2Zvcm09cigxNTQpLGUuUGFzc1Rocm91Z2g9cigyNDkpLCFuLmJyb3dzZXImJlwiZGlzYWJsZVwiPT09bi5lbnYuUkVBREFCTEVfU1RSRUFNJiZpJiYodC5leHBvcnRzPWkpfSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDE1NCl9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cigxNTUpfSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvcHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZmlsbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkVUludDh9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6YX07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksYihyKT9uLnNob3dIaWRkZW49cjpyJiZlLl9leHRlbmQobixyKSxfKG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLF8obi5kZXB0aCkmJihuLmRlcHRoPTIpLF8obi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLF8obi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bykscyhuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWkuc3R5bGVzW2VdO3JldHVybiByP1wiXHUwMDFiW1wiK2kuY29sb3JzW3JdWzBdK1wibVwiK3QrXCJcdTAwMWJbXCIraS5jb2xvcnNbcl1bMV0rXCJtXCI6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHR9ZnVuY3Rpb24gZih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pLGV9ZnVuY3Rpb24gcyh0LHIsbil7aWYodC5jdXN0b21JbnNwZWN0JiZyJiZrKHIuaW5zcGVjdCkmJnIuaW5zcGVjdCE9PWUuaW5zcGVjdCYmKCFyLmNvbnN0cnVjdG9yfHxyLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXIpKXt2YXIgaT1yLmluc3BlY3Qobix0KTtyZXR1cm4gZyhpKXx8KGk9cyh0LGksbikpLGl9dmFyIG89dSh0LHIpO2lmKG8pcmV0dXJuIG87dmFyIGE9T2JqZWN0LmtleXMociksYj1mKGEpO2lmKHQuc2hvd0hpZGRlbiYmKGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikpLEEocikmJihhLmluZGV4T2YoXCJtZXNzYWdlXCIpPj0wfHxhLmluZGV4T2YoXCJkZXNjcmlwdGlvblwiKT49MCkpcmV0dXJuIGgocik7aWYoMD09PWEubGVuZ3RoKXtpZihrKHIpKXt2YXIgdj1yLm5hbWU/XCI6IFwiK3IubmFtZTpcIlwiO3JldHVybiB0LnN0eWxpemUoXCJbRnVuY3Rpb25cIit2K1wiXVwiLFwic3BlY2lhbFwiKX1pZihNKHIpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwicmVnZXhwXCIpO2lmKEUocikpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwiZGF0ZVwiKTtpZihBKHIpKXJldHVybiBoKHIpfXZhciB5PVwiXCIsbT0hMSx3PVtcIntcIixcIn1cIl07aWYocChyKSYmKG09ITAsdz1bXCJbXCIsXCJdXCJdKSxrKHIpKXt2YXIgXz1yLm5hbWU/XCI6IFwiK3IubmFtZTpcIlwiO3k9XCIgW0Z1bmN0aW9uXCIrXytcIl1cIn1pZihNKHIpJiYoeT1cIiBcIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikpLEUocikmJih5PVwiIFwiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwocikpLEEocikmJih5PVwiIFwiK2gocikpLDA9PT1hLmxlbmd0aCYmKCFtfHwwPT1yLmxlbmd0aCkpcmV0dXJuIHdbMF0reSt3WzFdO2lmKG48MClyZXR1cm4gTShyKT90LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwicmVnZXhwXCIpOnQuc3R5bGl6ZShcIltPYmplY3RdXCIsXCJzcGVjaWFsXCIpO3Quc2Vlbi5wdXNoKHIpO3ZhciBTO3JldHVybiBTPW0/Yyh0LHIsbixiLGEpOmEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBkKHQscixuLGIsZSxtKX0pLHQuc2Vlbi5wb3AoKSxsKFMseSx3KX1mdW5jdGlvbiB1KHQsZSl7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKFwidW5kZWZpbmVkXCIsXCJ1bmRlZmluZWRcIik7aWYoZyhlKSl7dmFyIHI9XCInXCIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXlwifFwiJC9nLFwiXCIpLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpK1wiJ1wiO3JldHVybiB0LnN0eWxpemUocixcInN0cmluZ1wiKX1yZXR1cm4gbShlKT90LnN0eWxpemUoXCJcIitlLFwibnVtYmVyXCIpOmIoZSk/dC5zdHlsaXplKFwiXCIrZSxcImJvb2xlYW5cIik6dihlKT90LnN0eWxpemUoXCJudWxsXCIsXCJudWxsXCIpOnZvaWQgMH1mdW5jdGlvbiBoKHQpe3JldHVyblwiW1wiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpK1wiXVwifWZ1bmN0aW9uIGModCxlLHIsbixpKXtmb3IodmFyIG89W10sYT0wLGY9ZS5sZW5ndGg7YTxmOysrYSlSKGUsU3RyaW5nKGEpKT9vLnB1c2goZCh0LGUscixuLFN0cmluZyhhKSwhMCkpOm8ucHVzaChcIlwiKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cXGQrJC8pfHxvLnB1c2goZCh0LGUscixuLGksITApKX0pLG99ZnVuY3Rpb24gZCh0LGUscixuLGksbyl7dmFyIGEsZix1O2lmKHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0sdS5nZXQ/Zj11LnNldD90LnN0eWxpemUoXCJbR2V0dGVyL1NldHRlcl1cIixcInNwZWNpYWxcIik6dC5zdHlsaXplKFwiW0dldHRlcl1cIixcInNwZWNpYWxcIik6dS5zZXQmJihmPXQuc3R5bGl6ZShcIltTZXR0ZXJdXCIsXCJzcGVjaWFsXCIpKSxSKG4saSl8fChhPVwiW1wiK2krXCJdXCIpLGZ8fCh0LnNlZW4uaW5kZXhPZih1LnZhbHVlKTwwPyhmPXYocik/cyh0LHUudmFsdWUsbnVsbCk6cyh0LHUudmFsdWUsci0xKSxmLmluZGV4T2YoXCJcXG5cIik+LTEmJihmPW8/Zi5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIgIFwiK3R9KS5qb2luKFwiXFxuXCIpLnN1YnN0cigyKTpcIlxcblwiK2Yuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiICAgXCIrdH0pLmpvaW4oXCJcXG5cIikpKTpmPXQuc3R5bGl6ZShcIltDaXJjdWxhcl1cIixcInNwZWNpYWxcIikpLF8oYSkpe2lmKG8mJmkubWF0Y2goL15cXGQrJC8pKXJldHVybiBmO2E9SlNPTi5zdHJpbmdpZnkoXCJcIitpKSxhLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKT8oYT1hLnN1YnN0cigxLGEubGVuZ3RoLTIpLGE9dC5zdHlsaXplKGEsXCJuYW1lXCIpKTooYT1hLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLFwiJ1wiKSxhPXQuc3R5bGl6ZShhLFwic3RyaW5nXCIpKX1yZXR1cm4gYStcIjogXCIrZn1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj0wLGk9dC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gbisrLGUuaW5kZXhPZihcIlxcblwiKT49MCYmbisrLHQrZS5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZyxcIlwiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIGk+NjA/clswXSsoXCJcIj09PWU/XCJcIjplK1wiXFxuIFwiKStcIiBcIit0LmpvaW4oXCIsXFxuICBcIikrXCIgXCIrclsxXTpyWzBdK2UrXCIgXCIrdC5qb2luKFwiLCBcIikrXCIgXCIrclsxXX1mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHYodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIHkodCl7cmV0dXJuIG51bGw9PXR9ZnVuY3Rpb24gbSh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdH1mdW5jdGlvbiBnKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHcodCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBNKHQpe3JldHVybiBTKHQpJiZcIltvYmplY3QgUmVnRXhwXVwiPT09SSh0KX1mdW5jdGlvbiBTKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBFKHQpe3JldHVybiBTKHQpJiZcIltvYmplY3QgRGF0ZV1cIj09PUkodCl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gUyh0KSYmKFwiW29iamVjdCBFcnJvcl1cIj09PUkodCl8fHQgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gayh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHgodCl7cmV0dXJuIG51bGw9PT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN0cmluZ1wiPT10eXBlb2YgdHx8XCJzeW1ib2xcIj09dHlwZW9mIHR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIEkodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBCKHQpe3JldHVybiB0PDEwP1wiMFwiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE8oKXt2YXIgdD1uZXcgRGF0ZSxlPVtCKHQuZ2V0SG91cnMoKSksQih0LmdldE1pbnV0ZXMoKSksQih0LmdldFNlY29uZHMoKSldLmpvaW4oXCI6XCIpO3JldHVyblt0LmdldERhdGUoKSxDW3QuZ2V0TW9udGgoKV0sZV0uam9pbihcIiBcIil9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX12YXIgUD0vJVtzZGolXS9nO2UuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCFnKHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGkoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbihcIiBcIil9Zm9yKHZhciByPTEsbj1hcmd1bWVudHMsbz1uLmxlbmd0aCxhPVN0cmluZyh0KS5yZXBsYWNlKFAsZnVuY3Rpb24odCl7aWYoXCIlJVwiPT09dClyZXR1cm5cIiVcIjtpZihyPj1vKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlXCIlc1wiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlXCIlZFwiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlXCIlalwiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm5cIltDaXJjdWxhcl1cIn1kZWZhdWx0OnJldHVybiB0fX0pLGY9bltyXTtyPG87Zj1uWysrcl0pYSs9dihmKXx8IVMoZik/XCIgXCIrZjpcIiBcIitpKGYpO3JldHVybiBhfSxlLmRlcHJlY2F0ZT1mdW5jdGlvbihyLGkpe2Z1bmN0aW9uIG8oKXtpZighYSl7aWYobi50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtuLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKF8odC5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXByZWNhdGUocixpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKG4ubm9EZXByZWNhdGlvbj09PSEwKXJldHVybiByO3ZhciBhPSExO3JldHVybiBvfTt2YXIgVCxqPXt9O2UuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoXyhUKSYmKFQ9bi5lbnYuTk9ERV9ERUJVR3x8XCJcIiksdD10LnRvVXBwZXJDYXNlKCksIWpbdF0paWYobmV3IFJlZ0V4cChcIlxcXFxiXCIrdCtcIlxcXFxiXCIsXCJpXCIpLnRlc3QoVCkpe3ZhciByPW4ucGlkO2pbdF09ZnVuY3Rpb24oKXt2YXIgbj1lLmZvcm1hdC5hcHBseShlLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcihcIiVzICVkOiAlc1wiLHQscixuKX19ZWxzZSBqW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4galt0XX0sZS5pbnNwZWN0PWksaS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGkuc3R5bGVzPXtzcGVjaWFsOlwiY3lhblwiLG51bWJlcjpcInllbGxvd1wiLGJvb2xlYW46XCJ5ZWxsb3dcIix1bmRlZmluZWQ6XCJncmV5XCIsbnVsbDpcImJvbGRcIixzdHJpbmc6XCJncmVlblwiLGRhdGU6XCJtYWdlbnRhXCIscmVnZXhwOlwicmVkXCJ9LGUuaXNBcnJheT1wLGUuaXNCb29sZWFuPWIsZS5pc051bGw9dixlLmlzTnVsbE9yVW5kZWZpbmVkPXksZS5pc051bWJlcj1tLGUuaXNTdHJpbmc9ZyxlLmlzU3ltYm9sPXcsZS5pc1VuZGVmaW5lZD1fLGUuaXNSZWdFeHA9TSxlLmlzT2JqZWN0PVMsZS5pc0RhdGU9RSxlLmlzRXJyb3I9QSxlLmlzRnVuY3Rpb249ayxlLmlzUHJpbWl0aXZlPXgsZS5pc0J1ZmZlcj1yKDYwNSk7dmFyIEM9W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXTtlLmxvZz1mdW5jdGlvbigpe2NvbnNvbGUubG9nKFwiJXMgLSAlc1wiLE8oKSxlLmZvcm1hdC5hcHBseShlLGFyZ3VtZW50cykpfSxlLmluaGVyaXRzPXIoNjA0KSxlLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IVMoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbChlLHIoMzkpLHIoMjYpKX0sZnVuY3Rpb24odCxlKXt2YXIgcj1bXS5pbmRleE9mO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilpZih0W25dPT09ZSlyZXR1cm4gbjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLHIpe3IoMjUzKSx0LmV4cG9ydHM9cigyNTIpfV0pfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2ZpdmUtYmVsbHMtY29uZGl0aW9uL2Rpc3QvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBTZXJpYWxpemVzIGEgY3J5cHRvLWNvbmRpdGlvbiBjbGFzcyAoQ29uZGl0aW9uIG9yIEZ1bGZpbGxtZW50KSBpbnRvIGEgQmlnY2hhaW5EQi1jb21wYXRpYmxlIEpTT05cbiAqIEBwYXJhbSB7Y2MuRnVsZmlsbG1lbnR9IGZ1bGZpbGxtZW50IGJhc2U1OCBlbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBmb3IgdGhlIHJlY2lwaWVudCBvZiB0aGUgVHJhbnNhY3Rpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IEVkMjU1MTkgQ29uZGl0aW9uICh0aGF0IHdpbGwgbmVlZCB0byB3cmFwcGVkIGluIGFuIE91dHB1dClcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2NKc29uaWZ5KGZ1bGZpbGxtZW50KSB7XG5cbiAgICBsZXQgY29uZGl0aW9uVXJpO1xuXG4gICAgaWYgKCdnZXRDb25kaXRpb25VcmknIGluIGZ1bGZpbGxtZW50KVxuICAgICAgICBjb25kaXRpb25VcmkgPSBmdWxmaWxsbWVudC5nZXRDb25kaXRpb25VcmkoKTtcbiAgICBlbHNlIGlmICgnc2VyaWFsaXplVXJpJyBpbiBmdWxmaWxsbWVudClcbiAgICAgICAgY29uZGl0aW9uVXJpID0gZnVsZmlsbG1lbnQuc2VyaWFsaXplVXJpKCk7XG5cbiAgICBsZXQganNvbkJvZHkgPSB7XG4gICAgICAgICdkZXRhaWxzJzoge30sXG4gICAgICAgICd1cmknOiBjb25kaXRpb25VcmksXG4gICAgfTtcblxuICAgIGlmIChmdWxmaWxsbWVudC5nZXRUeXBlSWQoKSA9PT0gMCkge1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLnR5cGVfaWQgPSAwO1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLmJpdG1hc2sgPSAzO1xuXG4gICAgICAgIGlmICgncHJlaW1hZ2UnIGluIGZ1bGZpbGxtZW50KSB7XG4gICAgICAgICAgICBqc29uQm9keS5kZXRhaWxzLnByZWltYWdlID0gZnVsZmlsbG1lbnQucHJlaW1hZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZSA9ICdmdWxmaWxsbWVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnVsZmlsbG1lbnQuZ2V0VHlwZUlkKCkgPT09IDIpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnZGV0YWlscyc6IHtcbiAgICAgICAgICAgICAgICAndHlwZV9pZCc6IDIsXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnZnVsZmlsbG1lbnQnLFxuICAgICAgICAgICAgICAgICdiaXRtYXNrJzogZnVsZmlsbG1lbnQuZ2V0Qml0bWFzaygpLFxuICAgICAgICAgICAgICAgICd0aHJlc2hvbGQnOiBmdWxmaWxsbWVudC50aHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgJ3N1YmZ1bGZpbGxtZW50cyc6IGZ1bGZpbGxtZW50LnN1YmNvbmRpdGlvbnMubWFwKChzdWJjb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViY29uZGl0aW9uSnNvbiA9IGNjSnNvbmlmeShzdWJjb25kaXRpb24uYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmNvbmRpdGlvbkpzb24uZGV0YWlscy53ZWlnaHQgPSAxO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViY29uZGl0aW9uSnNvbi5kZXRhaWxzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3VyaSc6IGNvbmRpdGlvblVyaSxcbiAgICAgICAgfTtcblxuICAgIGlmIChmdWxmaWxsbWVudC5nZXRUeXBlSWQoKSA9PT0gNCkge1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLnR5cGVfaWQgPSA0O1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLmJpdG1hc2sgPSAzMjtcblxuICAgICAgICBpZiAoJ3B1YmxpY0tleScgaW4gZnVsZmlsbG1lbnQpIHtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMuc2lnbmF0dXJlID0gbnVsbDtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMucHVibGljX2tleSA9IGJhc2U1OC5lbmNvZGUoZnVsZmlsbG1lbnQucHVibGljS2V5KTtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZSA9ICdmdWxmaWxsbWVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ2hhc2gnIGluIGZ1bGZpbGxtZW50KSB7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMuaGFzaCA9IGJhc2U1OC5lbmNvZGUoZnVsZmlsbG1lbnQuaGFzaCk7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMubWF4X2Z1bGZpbGxtZW50X2xlbmd0aCA9IGZ1bGZpbGxtZW50Lm1heEZ1bGZpbGxtZW50TGVuZ3RoO1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLnR5cGUgPSAnY29uZGl0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbkJvZHk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vdXRpbHMvY2NKc29uaWZ5LmpzIiwiaW1wb3J0IGhhc2hUcmFuc2FjdGlvbiBmcm9tICcuL2hhc2hUcmFuc2FjdGlvbic7XG5cblxuZnVuY3Rpb24gbWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2lkJzogbnVsbCxcbiAgICAgICAgJ29wZXJhdGlvbic6IG51bGwsXG4gICAgICAgICdvdXRwdXRzJzogW10sXG4gICAgICAgICdpbnB1dHMnOiBbXSxcbiAgICAgICAgJ21ldGFkYXRhJzogbnVsbCxcbiAgICAgICAgJ2Fzc2V0JzogbnVsbCxcbiAgICAgICAgJ3ZlcnNpb24nOiAnMC45JyxcbiAgICB9O1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VUcmFuc2FjdGlvbihvcGVyYXRpb24sIGFzc2V0LCBtZXRhZGF0YSA9IG51bGwsIG91dHB1dHMgPSBbXSwgaW5wdXRzID0gW10pIHtcbiAgICBjb25zdCB0eCA9IG1ha2VUcmFuc2FjdGlvblRlbXBsYXRlKCk7XG4gICAgdHgub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICAgIHR4LmFzc2V0ID0gYXNzZXQ7XG4gICAgdHgubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0eC5pbnB1dHMgPSBpbnB1dHM7XG4gICAgdHgub3V0cHV0cyA9IG91dHB1dHM7XG5cbiAgICAvLyBIYXNoaW5nIG11c3QgYmUgZG9uZSBhZnRlciwgYXMgdGhlIGhhc2ggaXMgb2YgdGhlIFRyYW5zYWN0aW9uICh1cCB0byBub3cpXG4gICAgdHguaWQgPSBoYXNoVHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0eDtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgc3RhYmxlU3RyaW5naWZ5IGZyb20gJ2pzb24tc3RhYmxlLXN0cmluZ2lmeSc7XG5pbXBvcnQgY2xvbmUgZnJvbSAnY2xvbmUnO1xuXG5cbi8qKlxuICogQHB1YmxpY1xuICogQ2Fub25pY2FsbHkgc2VyaWFsaXplcyBhIHRyYW5zYWN0aW9uIGludG8gYSBzdHJpbmcgYnkgc29ydGluZyB0aGUga2V5c1xuICogQHBhcmFtIHtvYmplY3R9ICh0cmFuc2FjdGlvbilcbiAqIEByZXR1cm4ge3N0cmluZ30gYSBjYW5vbmljYWxseSBzZXJpYWxpemVkIFRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyh0cmFuc2FjdGlvbikge1xuICAgIC8vIEJpZ2NoYWluREIgc2lnbnMgZnVsZmlsbG1lbnRzIGJ5IHNlcmlhbGl6aW5nIHRyYW5zYWN0aW9ucyBpbnRvIGEgXCJjYW5vbmljYWxcIiBmb3JtYXQgd2hlcmVcbiAgICBjb25zdCB0eCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICAvLyBUT0RPOiBzZXQgZnVsZmlsbG1lbnRzIHRvIG51bGxcbiAgICAvLyBTb3J0IHRoZSBrZXlzXG4gICAgcmV0dXJuIHN0YWJsZVN0cmluZ2lmeSh0eCwgKGEsIGIpID0+IChhLmtleSA+IGIua2V5ID8gMSA6IC0xKSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzIuNC4wJ307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBnZXRBcGlVcmxzIGZyb20gJy4vZ2V0QXBpVXJscyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gdHhfaWRcbiAqIEBwYXJhbSBBUElfUEFUSFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTdGF0dXModHhfaWQsIEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoZ2V0QXBpVXJscyhBUElfUEFUSClbJ3N0YXR1c2VzJ10sIHtcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgdHhfaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0U3RhdHVzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSB0eElkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb24odHhJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICB0eElkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0VHJhbnNhY3Rpb24uanMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlSW5wdXRUZW1wbGF0ZShwdWJsaWNLZXlzID0gW10sIGZ1bGZpbGxzID0gbnVsbCwgZnVsZmlsbG1lbnQgPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsZmlsbG1lbnQsXG4gICAgICAgIGZ1bGZpbGxzLFxuICAgICAgICAnb3duZXJzX2JlZm9yZSc6IHB1YmxpY0tleXMsXG4gICAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJ2YXIgY2xvbmUgPSAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbnN0YW5jZW9mKG9iaiwgdHlwZSkge1xuICByZXR1cm4gdHlwZSAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIHR5cGU7XG59XG5cbnZhciBuYXRpdmVNYXA7XG50cnkge1xuICBuYXRpdmVNYXAgPSBNYXA7XG59IGNhdGNoKF8pIHtcbiAgLy8gbWF5YmUgYSByZWZlcmVuY2UgZXJyb3IgYmVjYXVzZSBubyBgTWFwYC4gR2l2ZSBpdCBhIGR1bW15IHZhbHVlIHRoYXQgbm9cbiAgLy8gdmFsdWUgd2lsbCBldmVyIGJlIGFuIGluc3RhbmNlb2YuXG4gIG5hdGl2ZU1hcCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVTZXQ7XG50cnkge1xuICBuYXRpdmVTZXQgPSBTZXQ7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlU2V0ID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVByb21pc2U7XG50cnkge1xuICBuYXRpdmVQcm9taXNlID0gUHJvbWlzZTtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVQcm9taXNlID0gZnVuY3Rpb24oKSB7fTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgKGNvcGllcykgYW4gT2JqZWN0IHVzaW5nIGRlZXAgY29weWluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgZGVmYXVsdCwgYnV0IGlmIHlvdSBhcmUgY2VydGFpblxuICogdGhlcmUgYXJlIG5vIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4geW91ciBvYmplY3QsIHlvdSBjYW4gc2F2ZSBzb21lIENQVSB0aW1lXG4gKiBieSBjYWxsaW5nIGNsb25lKG9iaiwgZmFsc2UpLlxuICpcbiAqIENhdXRpb246IGlmIGBjaXJjdWxhcmAgaXMgZmFsc2UgYW5kIGBwYXJlbnRgIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gKiB5b3VyIHByb2dyYW0gbWF5IGVudGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIGNyYXNoLlxuICpcbiAqIEBwYXJhbSBgcGFyZW50YCAtIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcGFyYW0gYGNpcmN1bGFyYCAtIHNldCB0byB0cnVlIGlmIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkIG1heSBjb250YWluXG4gKiAgICBjaXJjdWxhciByZWZlcmVuY2VzLiAob3B0aW9uYWwgLSB0cnVlIGJ5IGRlZmF1bHQpXG4gKiBAcGFyYW0gYGRlcHRoYCAtIHNldCB0byBhIG51bWJlciBpZiB0aGUgb2JqZWN0IGlzIG9ubHkgdG8gYmUgY2xvbmVkIHRvXG4gKiAgICBhIHBhcnRpY3VsYXIgZGVwdGguIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIEluZmluaXR5KVxuICogQHBhcmFtIGBwcm90b3R5cGVgIC0gc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIHVzZWQgd2hlbiBjbG9uaW5nIGFuIG9iamVjdC5cbiAqICAgIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIHBhcmVudCBwcm90b3R5cGUpLlxuICogQHBhcmFtIGBpbmNsdWRlTm9uRW51bWVyYWJsZWAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICogICAgc2hvdWxkIGJlIGNsb25lZCBhcyB3ZWxsLiBOb24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9uIHRoZSBwcm90b3R5cGVcbiAqICAgIGNoYWluIHdpbGwgYmUgaWdub3JlZC4gKG9wdGlvbmFsIC0gZmFsc2UgYnkgZGVmYXVsdClcbiovXG5mdW5jdGlvbiBjbG9uZShwYXJlbnQsIGNpcmN1bGFyLCBkZXB0aCwgcHJvdG90eXBlLCBpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGluY2x1ZGVOb25FbnVtZXJhYmxlID0gY2lyY3VsYXIuaW5jbHVkZU5vbkVudW1lcmFibGU7XG4gICAgY2lyY3VsYXIgPSBjaXJjdWxhci5jaXJjdWxhcjtcbiAgfVxuICAvLyBtYWludGFpbiB0d28gYXJyYXlzIGZvciBjaXJjdWxhciByZWZlcmVuY2VzLCB3aGVyZSBjb3JyZXNwb25kaW5nIHBhcmVudHNcbiAgLy8gYW5kIGNoaWxkcmVuIGhhdmUgdGhlIHNhbWUgaW5kZXhcbiAgdmFyIGFsbFBhcmVudHMgPSBbXTtcbiAgdmFyIGFsbENoaWxkcmVuID0gW107XG5cbiAgdmFyIHVzZUJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PSAndW5kZWZpbmVkJylcbiAgICBjaXJjdWxhciA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBkZXB0aCA9PSAndW5kZWZpbmVkJylcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuXG4gIC8vIHJlY3Vyc2UgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCByZXNldCBhbGxQYXJlbnRzIGFuZCBhbGxDaGlsZHJlblxuICBmdW5jdGlvbiBfY2xvbmUocGFyZW50LCBkZXB0aCkge1xuICAgIC8vIGNsb25pbmcgbnVsbCBhbHdheXMgcmV0dXJucyBudWxsXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRlcHRoID09PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlTWFwKCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVNldCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVNldCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVQcm9taXNlKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHBhcmVudC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmVzb2x2ZShfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICByZWplY3QoX2Nsb25lKGVyciwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzQXJyYXkocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNSZWdFeHAocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgUmVnRXhwKHBhcmVudC5zb3VyY2UsIF9fZ2V0UmVnRXhwRmxhZ3MocGFyZW50KSk7XG4gICAgICBpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNEYXRlKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IERhdGUocGFyZW50LmdldFRpbWUoKSk7XG4gICAgfSBlbHNlIGlmICh1c2VCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY2xvbmUvY2xvbmUuanNcbi8vIG1vZHVsZSBpZCA9IDE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuZW50cmllcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9lbnRyaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgY3R4ICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBoaWRlICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRlxuICAgICwgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuR1xuICAgICwgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuU1xuICAgICwgSVNfUFJPVE8gID0gdHlwZSAmICRleHBvcnQuUFxuICAgICwgSVNfQklORCAgID0gdHlwZSAmICRleHBvcnQuQlxuICAgICwgSVNfV1JBUCAgID0gdHlwZSAmICRleHBvcnQuV1xuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIGV4cFByb3RvICA9IGV4cG9ydHNbUFJPVE9UWVBFXVxuICAgICwgdGFyZ2V0ICAgID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwga2V5LCBvd24sIG91dDtcbiAgaWYoSVNfR0xPQkFMKXNvdXJjZSA9IG5hbWU7XG4gIGZvcihrZXkgaW4gc291cmNlKXtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uKEMpe1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgICAgaWYodGhpcyBpbnN0YW5jZW9mIEMpe1xuICAgICAgICAgIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZihJU19QUk9UTyl7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSloaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YCBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCAgPSBNYXRoLmNlaWxcbiAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXHJcbiAqIFtqcy1zaGEzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2pzLXNoYTN9XHJcbiAqXHJcbiAqIEB2ZXJzaW9uIDAuNS43XHJcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXHJcbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE2XHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4gKi9cclxuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgdmFyIHJvb3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHt9O1xyXG4gIHZhciBOT0RFX0pTID0gIXJvb3QuSlNfU0hBM19OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcclxuICBpZiAoTk9ERV9KUykge1xyXG4gICAgcm9vdCA9IGdsb2JhbDtcclxuICB9XHJcbiAgdmFyIENPTU1PTl9KUyA9ICFyb290LkpTX1NIQTNfTk9fQ09NTU9OX0pTICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzO1xyXG4gIHZhciBIRVhfQ0hBUlMgPSAnMDEyMzQ1Njc4OWFiY2RlZicuc3BsaXQoJycpO1xyXG4gIHZhciBTSEFLRV9QQURESU5HID0gWzMxLCA3OTM2LCAyMDMxNjE2LCA1MjAwOTM2OTZdO1xyXG4gIHZhciBLRUNDQUtfUEFERElORyA9IFsxLCAyNTYsIDY1NTM2LCAxNjc3NzIxNl07XHJcbiAgdmFyIFBBRERJTkcgPSBbNiwgMTUzNiwgMzkzMjE2LCAxMDA2NjMyOTZdO1xyXG4gIHZhciBTSElGVCA9IFswLCA4LCAxNiwgMjRdO1xyXG4gIHZhciBSQyA9IFsxLCAwLCAzMjg5OCwgMCwgMzI5MDYsIDIxNDc0ODM2NDgsIDIxNDc1MTY0MTYsIDIxNDc0ODM2NDgsIDMyOTA3LCAwLCAyMTQ3NDgzNjQ5LFxyXG4gICAgICAgICAgICAwLCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjc3NywgMjE0NzQ4MzY0OCwgMTM4LCAwLCAxMzYsIDAsIDIxNDc1MTY0MjUsIDAsXHJcbiAgICAgICAgICAgIDIxNDc0ODM2NTgsIDAsIDIxNDc1MTY1NTUsIDAsIDEzOSwgMjE0NzQ4MzY0OCwgMzI5MDUsIDIxNDc0ODM2NDgsIDMyNzcxLFxyXG4gICAgICAgICAgICAyMTQ3NDgzNjQ4LCAzMjc3MCwgMjE0NzQ4MzY0OCwgMTI4LCAyMTQ3NDgzNjQ4LCAzMjc3OCwgMCwgMjE0NzQ4MzY1OCwgMjE0NzQ4MzY0OCxcclxuICAgICAgICAgICAgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI4OTYsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY0MjQsIDIxNDc0ODM2NDhdO1xyXG4gIHZhciBCSVRTID0gWzIyNCwgMjU2LCAzODQsIDUxMl07XHJcbiAgdmFyIFNIQUtFX0JJVFMgPSBbMTI4LCAyNTZdO1xyXG4gIHZhciBPVVRQVVRfVFlQRVMgPSBbJ2hleCcsICdidWZmZXInLCAnYXJyYXlCdWZmZXInLCAnYXJyYXknXTtcclxuXHJcbiAgdmFyIGNyZWF0ZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgYml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xyXG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XHJcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKTtcclxuICAgIH07XHJcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUoKS51cGRhdGUobWVzc2FnZSk7XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBPVVRQVVRfVFlQRVMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdmFyIHR5cGUgPSBPVVRQVVRfVFlQRVNbaV07XHJcbiAgICAgIG1ldGhvZFt0eXBlXSA9IGNyZWF0ZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRob2Q7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZVNoYWtlTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcclxuICAgIHZhciBtZXRob2QgPSBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XHJcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cyk7XHJcbiAgICB9O1xyXG4gICAgbWV0aG9kLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvdXRwdXRCaXRzKSB7XHJcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKG91dHB1dEJpdHMpLnVwZGF0ZShtZXNzYWdlKTtcclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE9VVFBVVF9UWVBFUy5sZW5ndGg7ICsraSkge1xyXG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcclxuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlU2hha2VPdXRwdXRNZXRob2QoYml0cywgcGFkZGluZywgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0aG9kO1xyXG4gIH07XHJcblxyXG4gIHZhciBhbGdvcml0aG1zID0gW1xyXG4gICAge25hbWU6ICdrZWNjYWsnLCBwYWRkaW5nOiBLRUNDQUtfUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2R9LFxyXG4gICAge25hbWU6ICdzaGEzJywgcGFkZGluZzogUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2R9LFxyXG4gICAge25hbWU6ICdzaGFrZScsIHBhZGRpbmc6IFNIQUtFX1BBRERJTkcsIGJpdHM6IFNIQUtFX0JJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlU2hha2VNZXRob2R9XHJcbiAgXTtcclxuXHJcbiAgdmFyIG1ldGhvZHMgPSB7fSwgbWV0aG9kTmFtZXMgPSBbXTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGdvcml0aG1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICB2YXIgYWxnb3JpdGhtID0gYWxnb3JpdGhtc1tpXTtcclxuICAgIHZhciBiaXRzICA9IGFsZ29yaXRobS5iaXRzO1xyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiaXRzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIHZhciBtZXRob2ROYW1lID0gYWxnb3JpdGhtLm5hbWUgKydfJyArIGJpdHNbal07XHJcbiAgICAgIG1ldGhvZE5hbWVzLnB1c2gobWV0aG9kTmFtZSk7XHJcbiAgICAgIG1ldGhvZHNbbWV0aG9kTmFtZV0gPSBhbGdvcml0aG0uY3JlYXRlTWV0aG9kKGJpdHNbal0sIGFsZ29yaXRobS5wYWRkaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKSB7XHJcbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xyXG4gICAgdGhpcy5zID0gW107XHJcbiAgICB0aGlzLnBhZGRpbmcgPSBwYWRkaW5nO1xyXG4gICAgdGhpcy5vdXRwdXRCaXRzID0gb3V0cHV0Qml0cztcclxuICAgIHRoaXMucmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy5ibG9jayA9IDA7XHJcbiAgICB0aGlzLnN0YXJ0ID0gMDtcclxuICAgIHRoaXMuYmxvY2tDb3VudCA9ICgxNjAwIC0gKGJpdHMgPDwgMSkpID4+IDU7XHJcbiAgICB0aGlzLmJ5dGVDb3VudCA9IHRoaXMuYmxvY2tDb3VudCA8PCAyO1xyXG4gICAgdGhpcy5vdXRwdXRCbG9ja3MgPSBvdXRwdXRCaXRzID4+IDU7XHJcbiAgICB0aGlzLmV4dHJhQnl0ZXMgPSAob3V0cHV0Qml0cyAmIDMxKSA+PiAzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkge1xyXG4gICAgICB0aGlzLnNbaV0gPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgdmFyIG5vdFN0cmluZyA9IHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJztcclxuICAgIGlmIChub3RTdHJpbmcgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcclxuICAgICAgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgdmFyIGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoLCBibG9ja3MgPSB0aGlzLmJsb2NrcywgYnl0ZUNvdW50ID0gdGhpcy5ieXRlQ291bnQsXHJcbiAgICAgIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIGluZGV4ID0gMCwgcyA9IHRoaXMucywgaSwgY29kZTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMucmVzZXQpIHtcclxuICAgICAgICB0aGlzLnJlc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgYmxvY2tzWzBdID0gdGhpcy5ibG9jaztcclxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYmxvY2tDb3VudCArIDE7ICsraSkge1xyXG4gICAgICAgICAgYmxvY2tzW2ldID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vdFN0cmluZykge1xyXG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcclxuICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IG1lc3NhZ2VbaW5kZXhdIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgYnl0ZUNvdW50OyArK2luZGV4KSB7XHJcbiAgICAgICAgICBjb2RlID0gbWVzc2FnZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSBjb2RlIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4YzAgfCAoY29kZSA+PiA2KSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZTAgfCAoY29kZSA+PiAxMikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvZGUgPSAweDEwMDAwICsgKCgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgfCAobWVzc2FnZS5jaGFyQ29kZUF0KCsraW5kZXgpICYgMHgzZmYpKTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZjAgfCAoY29kZSA+PiAxOCkpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RCeXRlSW5kZXggPSBpO1xyXG4gICAgICBpZiAoaSA+PSBieXRlQ291bnQpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gaSAtIGJ5dGVDb3VudDtcclxuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcclxuICAgICAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmKHMpO1xyXG4gICAgICAgIHRoaXMucmVzZXQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBpID0gdGhpcy5sYXN0Qnl0ZUluZGV4LCBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zO1xyXG4gICAgYmxvY2tzW2kgPj4gMl0gfD0gdGhpcy5wYWRkaW5nW2kgJiAzXTtcclxuICAgIGlmICh0aGlzLmxhc3RCeXRlSW5kZXggPT09IHRoaXMuYnl0ZUNvdW50KSB7XHJcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1tibG9ja0NvdW50XTtcclxuICAgICAgZm9yIChpID0gMTsgaSA8IGJsb2NrQ291bnQgKyAxOyArK2kpIHtcclxuICAgICAgICBibG9ja3NbaV0gPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBibG9ja3NbYmxvY2tDb3VudCAtIDFdIHw9IDB4ODAwMDAwMDA7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgKytpKSB7XHJcbiAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xyXG4gICAgfVxyXG4gICAgZihzKTtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLnRvU3RyaW5nID0gS2VjY2FrLnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxyXG4gICAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcclxuICAgIHZhciBoZXggPSAnJywgYmxvY2s7XHJcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudCAmJiBqIDwgb3V0cHV0QmxvY2tzOyArK2ksICsraikge1xyXG4gICAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2Jsb2NrICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiA4KSAmIDB4MEZdICtcclxuICAgICAgICAgICAgICAgSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAyNCkgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcclxuICAgICAgICBmKHMpO1xyXG4gICAgICAgIGkgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBibG9jayA9IHNbaV07XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMCkge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbYmxvY2sgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAxMikgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gOCkgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoZXg7XHJcbiAgfTtcclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGJ5dGVzID0gdGhpcy5vdXRwdXRCaXRzID4+IDM7XHJcbiAgICB2YXIgYnVmZmVyO1xyXG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcclxuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKChvdXRwdXRCbG9ja3MgKyAxKSA8PCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlcyk7XHJcbiAgICB9XHJcbiAgICB2YXIgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcclxuICAgIHdoaWxlIChqIDwgb3V0cHV0QmxvY2tzKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XHJcbiAgICAgICAgYXJyYXlbal0gPSBzW2ldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIGFycmF5W2ldID0gc1tpXTtcclxuICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfTtcclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS5idWZmZXIgPSBLZWNjYWsucHJvdG90eXBlLmFycmF5QnVmZmVyO1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmRpZ2VzdCA9IEtlY2Nhay5wcm90b3R5cGUuYXJyYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxyXG4gICAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcclxuICAgIHZhciBhcnJheSA9IFtdLCBvZmZzZXQsIGJsb2NrO1xyXG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcclxuICAgICAgICBvZmZzZXQgPSBqIDw8IDI7XHJcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBibG9jayAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAoYmxvY2sgPj4gOCkgJiAweEZGO1xyXG4gICAgICAgIGFycmF5W29mZnNldCArIDJdID0gKGJsb2NrID4+IDE2KSAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgM10gPSAoYmxvY2sgPj4gMjQpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcclxuICAgICAgICBmKHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBvZmZzZXQgPSBqIDw8IDI7XHJcbiAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAwKSB7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IGJsb2NrICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAyKSB7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH07XHJcblxyXG4gIHZhciBmID0gZnVuY3Rpb24gKHMpIHtcclxuICAgIHZhciBoLCBsLCBuLCBjMCwgYzEsIGMyLCBjMywgYzQsIGM1LCBjNiwgYzcsIGM4LCBjOSxcclxuICAgICAgICBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGI4LCBiOSwgYjEwLCBiMTEsIGIxMiwgYjEzLCBiMTQsIGIxNSwgYjE2LCBiMTcsXHJcbiAgICAgICAgYjE4LCBiMTksIGIyMCwgYjIxLCBiMjIsIGIyMywgYjI0LCBiMjUsIGIyNiwgYjI3LCBiMjgsIGIyOSwgYjMwLCBiMzEsIGIzMiwgYjMzLFxyXG4gICAgICAgIGIzNCwgYjM1LCBiMzYsIGIzNywgYjM4LCBiMzksIGI0MCwgYjQxLCBiNDIsIGI0MywgYjQ0LCBiNDUsIGI0NiwgYjQ3LCBiNDgsIGI0OTtcclxuICAgIGZvciAobiA9IDA7IG4gPCA0ODsgbiArPSAyKSB7XHJcbiAgICAgIGMwID0gc1swXSBeIHNbMTBdIF4gc1syMF0gXiBzWzMwXSBeIHNbNDBdO1xyXG4gICAgICBjMSA9IHNbMV0gXiBzWzExXSBeIHNbMjFdIF4gc1szMV0gXiBzWzQxXTtcclxuICAgICAgYzIgPSBzWzJdIF4gc1sxMl0gXiBzWzIyXSBeIHNbMzJdIF4gc1s0Ml07XHJcbiAgICAgIGMzID0gc1szXSBeIHNbMTNdIF4gc1syM10gXiBzWzMzXSBeIHNbNDNdO1xyXG4gICAgICBjNCA9IHNbNF0gXiBzWzE0XSBeIHNbMjRdIF4gc1szNF0gXiBzWzQ0XTtcclxuICAgICAgYzUgPSBzWzVdIF4gc1sxNV0gXiBzWzI1XSBeIHNbMzVdIF4gc1s0NV07XHJcbiAgICAgIGM2ID0gc1s2XSBeIHNbMTZdIF4gc1syNl0gXiBzWzM2XSBeIHNbNDZdO1xyXG4gICAgICBjNyA9IHNbN10gXiBzWzE3XSBeIHNbMjddIF4gc1szN10gXiBzWzQ3XTtcclxuICAgICAgYzggPSBzWzhdIF4gc1sxOF0gXiBzWzI4XSBeIHNbMzhdIF4gc1s0OF07XHJcbiAgICAgIGM5ID0gc1s5XSBeIHNbMTldIF4gc1syOV0gXiBzWzM5XSBeIHNbNDldO1xyXG5cclxuICAgICAgaCA9IGM4IF4gKChjMiA8PCAxKSB8IChjMyA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM5IF4gKChjMyA8PCAxKSB8IChjMiA+Pj4gMzEpKTtcclxuICAgICAgc1swXSBePSBoO1xyXG4gICAgICBzWzFdIF49IGw7XHJcbiAgICAgIHNbMTBdIF49IGg7XHJcbiAgICAgIHNbMTFdIF49IGw7XHJcbiAgICAgIHNbMjBdIF49IGg7XHJcbiAgICAgIHNbMjFdIF49IGw7XHJcbiAgICAgIHNbMzBdIF49IGg7XHJcbiAgICAgIHNbMzFdIF49IGw7XHJcbiAgICAgIHNbNDBdIF49IGg7XHJcbiAgICAgIHNbNDFdIF49IGw7XHJcbiAgICAgIGggPSBjMCBeICgoYzQgPDwgMSkgfCAoYzUgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjMSBeICgoYzUgPDwgMSkgfCAoYzQgPj4+IDMxKSk7XHJcbiAgICAgIHNbMl0gXj0gaDtcclxuICAgICAgc1szXSBePSBsO1xyXG4gICAgICBzWzEyXSBePSBoO1xyXG4gICAgICBzWzEzXSBePSBsO1xyXG4gICAgICBzWzIyXSBePSBoO1xyXG4gICAgICBzWzIzXSBePSBsO1xyXG4gICAgICBzWzMyXSBePSBoO1xyXG4gICAgICBzWzMzXSBePSBsO1xyXG4gICAgICBzWzQyXSBePSBoO1xyXG4gICAgICBzWzQzXSBePSBsO1xyXG4gICAgICBoID0gYzIgXiAoKGM2IDw8IDEpIHwgKGM3ID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzMgXiAoKGM3IDw8IDEpIHwgKGM2ID4+PiAzMSkpO1xyXG4gICAgICBzWzRdIF49IGg7XHJcbiAgICAgIHNbNV0gXj0gbDtcclxuICAgICAgc1sxNF0gXj0gaDtcclxuICAgICAgc1sxNV0gXj0gbDtcclxuICAgICAgc1syNF0gXj0gaDtcclxuICAgICAgc1syNV0gXj0gbDtcclxuICAgICAgc1szNF0gXj0gaDtcclxuICAgICAgc1szNV0gXj0gbDtcclxuICAgICAgc1s0NF0gXj0gaDtcclxuICAgICAgc1s0NV0gXj0gbDtcclxuICAgICAgaCA9IGM0IF4gKChjOCA8PCAxKSB8IChjOSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM1IF4gKChjOSA8PCAxKSB8IChjOCA+Pj4gMzEpKTtcclxuICAgICAgc1s2XSBePSBoO1xyXG4gICAgICBzWzddIF49IGw7XHJcbiAgICAgIHNbMTZdIF49IGg7XHJcbiAgICAgIHNbMTddIF49IGw7XHJcbiAgICAgIHNbMjZdIF49IGg7XHJcbiAgICAgIHNbMjddIF49IGw7XHJcbiAgICAgIHNbMzZdIF49IGg7XHJcbiAgICAgIHNbMzddIF49IGw7XHJcbiAgICAgIHNbNDZdIF49IGg7XHJcbiAgICAgIHNbNDddIF49IGw7XHJcbiAgICAgIGggPSBjNiBeICgoYzAgPDwgMSkgfCAoYzEgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjNyBeICgoYzEgPDwgMSkgfCAoYzAgPj4+IDMxKSk7XHJcbiAgICAgIHNbOF0gXj0gaDtcclxuICAgICAgc1s5XSBePSBsO1xyXG4gICAgICBzWzE4XSBePSBoO1xyXG4gICAgICBzWzE5XSBePSBsO1xyXG4gICAgICBzWzI4XSBePSBoO1xyXG4gICAgICBzWzI5XSBePSBsO1xyXG4gICAgICBzWzM4XSBePSBoO1xyXG4gICAgICBzWzM5XSBePSBsO1xyXG4gICAgICBzWzQ4XSBePSBoO1xyXG4gICAgICBzWzQ5XSBePSBsO1xyXG5cclxuICAgICAgYjAgPSBzWzBdO1xyXG4gICAgICBiMSA9IHNbMV07XHJcbiAgICAgIGIzMiA9IChzWzExXSA8PCA0KSB8IChzWzEwXSA+Pj4gMjgpO1xyXG4gICAgICBiMzMgPSAoc1sxMF0gPDwgNCkgfCAoc1sxMV0gPj4+IDI4KTtcclxuICAgICAgYjE0ID0gKHNbMjBdIDw8IDMpIHwgKHNbMjFdID4+PiAyOSk7XHJcbiAgICAgIGIxNSA9IChzWzIxXSA8PCAzKSB8IChzWzIwXSA+Pj4gMjkpO1xyXG4gICAgICBiNDYgPSAoc1szMV0gPDwgOSkgfCAoc1szMF0gPj4+IDIzKTtcclxuICAgICAgYjQ3ID0gKHNbMzBdIDw8IDkpIHwgKHNbMzFdID4+PiAyMyk7XHJcbiAgICAgIGIyOCA9IChzWzQwXSA8PCAxOCkgfCAoc1s0MV0gPj4+IDE0KTtcclxuICAgICAgYjI5ID0gKHNbNDFdIDw8IDE4KSB8IChzWzQwXSA+Pj4gMTQpO1xyXG4gICAgICBiMjAgPSAoc1syXSA8PCAxKSB8IChzWzNdID4+PiAzMSk7XHJcbiAgICAgIGIyMSA9IChzWzNdIDw8IDEpIHwgKHNbMl0gPj4+IDMxKTtcclxuICAgICAgYjIgPSAoc1sxM10gPDwgMTIpIHwgKHNbMTJdID4+PiAyMCk7XHJcbiAgICAgIGIzID0gKHNbMTJdIDw8IDEyKSB8IChzWzEzXSA+Pj4gMjApO1xyXG4gICAgICBiMzQgPSAoc1syMl0gPDwgMTApIHwgKHNbMjNdID4+PiAyMik7XHJcbiAgICAgIGIzNSA9IChzWzIzXSA8PCAxMCkgfCAoc1syMl0gPj4+IDIyKTtcclxuICAgICAgYjE2ID0gKHNbMzNdIDw8IDEzKSB8IChzWzMyXSA+Pj4gMTkpO1xyXG4gICAgICBiMTcgPSAoc1szMl0gPDwgMTMpIHwgKHNbMzNdID4+PiAxOSk7XHJcbiAgICAgIGI0OCA9IChzWzQyXSA8PCAyKSB8IChzWzQzXSA+Pj4gMzApO1xyXG4gICAgICBiNDkgPSAoc1s0M10gPDwgMikgfCAoc1s0Ml0gPj4+IDMwKTtcclxuICAgICAgYjQwID0gKHNbNV0gPDwgMzApIHwgKHNbNF0gPj4+IDIpO1xyXG4gICAgICBiNDEgPSAoc1s0XSA8PCAzMCkgfCAoc1s1XSA+Pj4gMik7XHJcbiAgICAgIGIyMiA9IChzWzE0XSA8PCA2KSB8IChzWzE1XSA+Pj4gMjYpO1xyXG4gICAgICBiMjMgPSAoc1sxNV0gPDwgNikgfCAoc1sxNF0gPj4+IDI2KTtcclxuICAgICAgYjQgPSAoc1syNV0gPDwgMTEpIHwgKHNbMjRdID4+PiAyMSk7XHJcbiAgICAgIGI1ID0gKHNbMjRdIDw8IDExKSB8IChzWzI1XSA+Pj4gMjEpO1xyXG4gICAgICBiMzYgPSAoc1szNF0gPDwgMTUpIHwgKHNbMzVdID4+PiAxNyk7XHJcbiAgICAgIGIzNyA9IChzWzM1XSA8PCAxNSkgfCAoc1szNF0gPj4+IDE3KTtcclxuICAgICAgYjE4ID0gKHNbNDVdIDw8IDI5KSB8IChzWzQ0XSA+Pj4gMyk7XHJcbiAgICAgIGIxOSA9IChzWzQ0XSA8PCAyOSkgfCAoc1s0NV0gPj4+IDMpO1xyXG4gICAgICBiMTAgPSAoc1s2XSA8PCAyOCkgfCAoc1s3XSA+Pj4gNCk7XHJcbiAgICAgIGIxMSA9IChzWzddIDw8IDI4KSB8IChzWzZdID4+PiA0KTtcclxuICAgICAgYjQyID0gKHNbMTddIDw8IDIzKSB8IChzWzE2XSA+Pj4gOSk7XHJcbiAgICAgIGI0MyA9IChzWzE2XSA8PCAyMykgfCAoc1sxN10gPj4+IDkpO1xyXG4gICAgICBiMjQgPSAoc1syNl0gPDwgMjUpIHwgKHNbMjddID4+PiA3KTtcclxuICAgICAgYjI1ID0gKHNbMjddIDw8IDI1KSB8IChzWzI2XSA+Pj4gNyk7XHJcbiAgICAgIGI2ID0gKHNbMzZdIDw8IDIxKSB8IChzWzM3XSA+Pj4gMTEpO1xyXG4gICAgICBiNyA9IChzWzM3XSA8PCAyMSkgfCAoc1szNl0gPj4+IDExKTtcclxuICAgICAgYjM4ID0gKHNbNDddIDw8IDI0KSB8IChzWzQ2XSA+Pj4gOCk7XHJcbiAgICAgIGIzOSA9IChzWzQ2XSA8PCAyNCkgfCAoc1s0N10gPj4+IDgpO1xyXG4gICAgICBiMzAgPSAoc1s4XSA8PCAyNykgfCAoc1s5XSA+Pj4gNSk7XHJcbiAgICAgIGIzMSA9IChzWzldIDw8IDI3KSB8IChzWzhdID4+PiA1KTtcclxuICAgICAgYjEyID0gKHNbMThdIDw8IDIwKSB8IChzWzE5XSA+Pj4gMTIpO1xyXG4gICAgICBiMTMgPSAoc1sxOV0gPDwgMjApIHwgKHNbMThdID4+PiAxMik7XHJcbiAgICAgIGI0NCA9IChzWzI5XSA8PCA3KSB8IChzWzI4XSA+Pj4gMjUpO1xyXG4gICAgICBiNDUgPSAoc1syOF0gPDwgNykgfCAoc1syOV0gPj4+IDI1KTtcclxuICAgICAgYjI2ID0gKHNbMzhdIDw8IDgpIHwgKHNbMzldID4+PiAyNCk7XHJcbiAgICAgIGIyNyA9IChzWzM5XSA8PCA4KSB8IChzWzM4XSA+Pj4gMjQpO1xyXG4gICAgICBiOCA9IChzWzQ4XSA8PCAxNCkgfCAoc1s0OV0gPj4+IDE4KTtcclxuICAgICAgYjkgPSAoc1s0OV0gPDwgMTQpIHwgKHNbNDhdID4+PiAxOCk7XHJcblxyXG4gICAgICBzWzBdID0gYjAgXiAofmIyICYgYjQpO1xyXG4gICAgICBzWzFdID0gYjEgXiAofmIzICYgYjUpO1xyXG4gICAgICBzWzEwXSA9IGIxMCBeICh+YjEyICYgYjE0KTtcclxuICAgICAgc1sxMV0gPSBiMTEgXiAofmIxMyAmIGIxNSk7XHJcbiAgICAgIHNbMjBdID0gYjIwIF4gKH5iMjIgJiBiMjQpO1xyXG4gICAgICBzWzIxXSA9IGIyMSBeICh+YjIzICYgYjI1KTtcclxuICAgICAgc1szMF0gPSBiMzAgXiAofmIzMiAmIGIzNCk7XHJcbiAgICAgIHNbMzFdID0gYjMxIF4gKH5iMzMgJiBiMzUpO1xyXG4gICAgICBzWzQwXSA9IGI0MCBeICh+YjQyICYgYjQ0KTtcclxuICAgICAgc1s0MV0gPSBiNDEgXiAofmI0MyAmIGI0NSk7XHJcbiAgICAgIHNbMl0gPSBiMiBeICh+YjQgJiBiNik7XHJcbiAgICAgIHNbM10gPSBiMyBeICh+YjUgJiBiNyk7XHJcbiAgICAgIHNbMTJdID0gYjEyIF4gKH5iMTQgJiBiMTYpO1xyXG4gICAgICBzWzEzXSA9IGIxMyBeICh+YjE1ICYgYjE3KTtcclxuICAgICAgc1syMl0gPSBiMjIgXiAofmIyNCAmIGIyNik7XHJcbiAgICAgIHNbMjNdID0gYjIzIF4gKH5iMjUgJiBiMjcpO1xyXG4gICAgICBzWzMyXSA9IGIzMiBeICh+YjM0ICYgYjM2KTtcclxuICAgICAgc1szM10gPSBiMzMgXiAofmIzNSAmIGIzNyk7XHJcbiAgICAgIHNbNDJdID0gYjQyIF4gKH5iNDQgJiBiNDYpO1xyXG4gICAgICBzWzQzXSA9IGI0MyBeICh+YjQ1ICYgYjQ3KTtcclxuICAgICAgc1s0XSA9IGI0IF4gKH5iNiAmIGI4KTtcclxuICAgICAgc1s1XSA9IGI1IF4gKH5iNyAmIGI5KTtcclxuICAgICAgc1sxNF0gPSBiMTQgXiAofmIxNiAmIGIxOCk7XHJcbiAgICAgIHNbMTVdID0gYjE1IF4gKH5iMTcgJiBiMTkpO1xyXG4gICAgICBzWzI0XSA9IGIyNCBeICh+YjI2ICYgYjI4KTtcclxuICAgICAgc1syNV0gPSBiMjUgXiAofmIyNyAmIGIyOSk7XHJcbiAgICAgIHNbMzRdID0gYjM0IF4gKH5iMzYgJiBiMzgpO1xyXG4gICAgICBzWzM1XSA9IGIzNSBeICh+YjM3ICYgYjM5KTtcclxuICAgICAgc1s0NF0gPSBiNDQgXiAofmI0NiAmIGI0OCk7XHJcbiAgICAgIHNbNDVdID0gYjQ1IF4gKH5iNDcgJiBiNDkpO1xyXG4gICAgICBzWzZdID0gYjYgXiAofmI4ICYgYjApO1xyXG4gICAgICBzWzddID0gYjcgXiAofmI5ICYgYjEpO1xyXG4gICAgICBzWzE2XSA9IGIxNiBeICh+YjE4ICYgYjEwKTtcclxuICAgICAgc1sxN10gPSBiMTcgXiAofmIxOSAmIGIxMSk7XHJcbiAgICAgIHNbMjZdID0gYjI2IF4gKH5iMjggJiBiMjApO1xyXG4gICAgICBzWzI3XSA9IGIyNyBeICh+YjI5ICYgYjIxKTtcclxuICAgICAgc1szNl0gPSBiMzYgXiAofmIzOCAmIGIzMCk7XHJcbiAgICAgIHNbMzddID0gYjM3IF4gKH5iMzkgJiBiMzEpO1xyXG4gICAgICBzWzQ2XSA9IGI0NiBeICh+YjQ4ICYgYjQwKTtcclxuICAgICAgc1s0N10gPSBiNDcgXiAofmI0OSAmIGI0MSk7XHJcbiAgICAgIHNbOF0gPSBiOCBeICh+YjAgJiBiMik7XHJcbiAgICAgIHNbOV0gPSBiOSBeICh+YjEgJiBiMyk7XHJcbiAgICAgIHNbMThdID0gYjE4IF4gKH5iMTAgJiBiMTIpO1xyXG4gICAgICBzWzE5XSA9IGIxOSBeICh+YjExICYgYjEzKTtcclxuICAgICAgc1syOF0gPSBiMjggXiAofmIyMCAmIGIyMik7XHJcbiAgICAgIHNbMjldID0gYjI5IF4gKH5iMjEgJiBiMjMpO1xyXG4gICAgICBzWzM4XSA9IGIzOCBeICh+YjMwICYgYjMyKTtcclxuICAgICAgc1szOV0gPSBiMzkgXiAofmIzMSAmIGIzMyk7XHJcbiAgICAgIHNbNDhdID0gYjQ4IF4gKH5iNDAgJiBiNDIpO1xyXG4gICAgICBzWzQ5XSA9IGI0OSBeICh+YjQxICYgYjQzKTtcclxuXHJcbiAgICAgIHNbMF0gXj0gUkNbbl07XHJcbiAgICAgIHNbMV0gXj0gUkNbbiArIDFdO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGlmIChDT01NT05fSlMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gbWV0aG9kcztcclxuICB9IGVsc2Uge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRob2ROYW1lcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICByb290W21ldGhvZE5hbWVzW2ldXSA9IG1ldGhvZHNbbWV0aG9kTmFtZXNbaV1dO1xyXG4gICAgfVxyXG4gIH1cclxufSkoKTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzLXNoYTMvc3JjL3NoYTMuanNcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIGdsb2JhbHMgd2luZG93LCBleHBvcnRzLCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uKHdpbmRvdykge1xuICAgICd1c2Ugc3RyaWN0J1xuXG4gICAgdmFyIHJlID0ge1xuICAgICAgICBub3Rfc3RyaW5nOiAvW15zXS8sXG4gICAgICAgIG5vdF9ib29sOiAvW150XS8sXG4gICAgICAgIG5vdF90eXBlOiAvW15UXS8sXG4gICAgICAgIG5vdF9wcmltaXRpdmU6IC9bXnZdLyxcbiAgICAgICAgbnVtYmVyOiAvW2RpZWZnXS8sXG4gICAgICAgIG51bWVyaWNfYXJnOiAvW2JjZGllZmd1eFhdLyxcbiAgICAgICAganNvbjogL1tqXS8sXG4gICAgICAgIG5vdF9qc29uOiAvW15qXS8sXG4gICAgICAgIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgICAgICAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW15cXCldKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLFxuICAgICAgICBrZXk6IC9eKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGtleV9hY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGluZGV4X2FjY2VzczogL15cXFsoXFxkKylcXF0vLFxuICAgICAgICBzaWduOiAvXltcXCtcXC1dL1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGYoKSB7XG4gICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbMF0sIGNhY2hlID0gc3ByaW50Zi5jYWNoZVxuICAgICAgICBpZiAoIShjYWNoZVtrZXldKSkge1xuICAgICAgICAgICAgY2FjaGVba2V5XSA9IHNwcmludGYucGFyc2Uoa2V5KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcHJpbnRmLmZvcm1hdC5jYWxsKG51bGwsIGNhY2hlW2tleV0sIGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBzcHJpbnRmLmZvcm1hdCA9IGZ1bmN0aW9uKHBhcnNlX3RyZWUsIGFyZ3YpIHtcbiAgICAgICAgdmFyIGN1cnNvciA9IDEsIHRyZWVfbGVuZ3RoID0gcGFyc2VfdHJlZS5sZW5ndGgsIG5vZGVfdHlwZSA9ICcnLCBhcmcsIG91dHB1dCA9IFtdLCBpLCBrLCBtYXRjaCwgcGFkLCBwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoLCBpc19wb3NpdGl2ZSA9IHRydWUsIHNpZ24gPSAnJ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJlZV9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbm9kZV90eXBlID0gZ2V0X3R5cGUocGFyc2VfdHJlZVtpXSlcbiAgICAgICAgICAgIGlmIChub2RlX3R5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W291dHB1dC5sZW5ndGhdID0gcGFyc2VfdHJlZVtpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZV90eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBwYXJzZV90cmVlW2ldIC8vIGNvbnZlbmllbmNlIHB1cnBvc2VzIG9ubHlcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHsgLy8ga2V5d29yZCBhcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcl1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IG1hdGNoWzJdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5oYXNPd25Qcm9wZXJ0eShtYXRjaFsyXVtrXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIHByb3BlcnR5IFwiJXNcIiBkb2VzIG5vdCBleGlzdCcsIG1hdGNoWzJdW2tdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ1ttYXRjaFsyXVtrXV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaFsxXSkgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChleHBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndlttYXRjaFsxXV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGltcGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcisrXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5ub3RfdHlwZS50ZXN0KG1hdGNoWzhdKSAmJiByZS5ub3RfcHJpbWl0aXZlLnRlc3QobWF0Y2hbOF0pICYmIGdldF90eXBlKGFyZykgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1lcmljX2FyZy50ZXN0KG1hdGNoWzhdKSAmJiAoZ2V0X3R5cGUoYXJnKSAhPSAnbnVtYmVyJyAmJiBpc05hTihhcmcpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoXCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJXNcIiwgZ2V0X3R5cGUoYXJnKSkpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KG1hdGNoWzhdKSkge1xuICAgICAgICAgICAgICAgICAgICBpc19wb3NpdGl2ZSA9IGFyZyA+PSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChtYXRjaFs4XSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDIpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmcsIDEwKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIG1hdGNoWzZdID8gcGFyc2VJbnQobWF0Y2hbNl0pIDogMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXRjaFs3XSA/IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXRjaFs3XSA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hdGNoWzddID8gcGFyc2VGbG9hdChhcmcpLnRvUHJlY2lzaW9uKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZyg4KVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyhhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAobWF0Y2hbN10gPyBhcmcuc3Vic3RyaW5nKDAsIG1hdGNoWzddKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoISFhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAobWF0Y2hbN10gPyBhcmcuc3Vic3RyaW5nKDAsIG1hdGNoWzddKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBnZXRfdHlwZShhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAobWF0Y2hbN10gPyBhcmcuc3Vic3RyaW5nKDAsIG1hdGNoWzddKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChtYXRjaFs3XSA/IGFyZy5zdWJzdHJpbmcoMCwgbWF0Y2hbN10pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZS5qc29uLnRlc3QobWF0Y2hbOF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtvdXRwdXQubGVuZ3RoXSA9IGFyZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KG1hdGNoWzhdKSAmJiAoIWlzX3Bvc2l0aXZlIHx8IG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IGlzX3Bvc2l0aXZlID8gJysnIDogJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoKS5yZXBsYWNlKHJlLnNpZ24sICcnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXJhY3RlciA9IG1hdGNoWzRdID8gbWF0Y2hbNF0gPT09ICcwJyA/ICcwJyA6IG1hdGNoWzRdLmNoYXJBdCgxKSA6ICcgJ1xuICAgICAgICAgICAgICAgICAgICBwYWRfbGVuZ3RoID0gbWF0Y2hbNl0gLSAoc2lnbiArIGFyZykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHBhZCA9IG1hdGNoWzZdID8gKHBhZF9sZW5ndGggPiAwID8gc3RyX3JlcGVhdChwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoKSA6ICcnKSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtvdXRwdXQubGVuZ3RoXSA9IG1hdGNoWzVdID8gc2lnbiArIGFyZyArIHBhZCA6IChwYWRfY2hhcmFjdGVyID09PSAnMCcgPyBzaWduICsgcGFkICsgYXJnIDogcGFkICsgc2lnbiArIGFyZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxuICAgIH1cblxuICAgIHNwcmludGYuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBzcHJpbnRmLnBhcnNlID0gZnVuY3Rpb24oZm10KSB7XG4gICAgICAgIHZhciBfZm10ID0gZm10LCBtYXRjaCA9IFtdLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDBcbiAgICAgICAgd2hpbGUgKF9mbXQpIHtcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSBtYXRjaFswXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSAnJSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLnBsYWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAxXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxhY2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW11cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3RbZmllbGRfbGlzdC5sZW5ndGhdID0gZmllbGRfbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmllbGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleV9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3RbZmllbGRfbGlzdC5sZW5ndGhdID0gZmllbGRfbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZpZWxkX21hdGNoID0gcmUuaW5kZXhfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0W2ZpZWxkX2xpc3QubGVuZ3RoXSA9IGZpZWxkX21hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBmaWVsZF9saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJnX25hbWVzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWRcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSBtYXRjaFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXJcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9mbXQgPSBfZm10LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlX3RyZWVcbiAgICB9XG5cbiAgICB2YXIgdnNwcmludGYgPSBmdW5jdGlvbihmbXQsIGFyZ3YsIF9hcmd2KSB7XG4gICAgICAgIF9hcmd2ID0gKGFyZ3YgfHwgW10pLnNsaWNlKDApXG4gICAgICAgIF9hcmd2LnNwbGljZSgwLCAwLCBmbXQpXG4gICAgICAgIHJldHVybiBzcHJpbnRmLmFwcGx5KG51bGwsIF9hcmd2KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGhlbHBlcnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRfdHlwZSh2YXJpYWJsZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuICdudW1iZXInXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZWZvcm1hdHRlZFBhZGRpbmcgPSB7XG4gICAgICAgICcwJzogWycnLCAnMCcsICcwMCcsICcwMDAnLCAnMDAwMCcsICcwMDAwMCcsICcwMDAwMDAnLCAnMDAwMDAwMCddLFxuICAgICAgICAnICc6IFsnJywgJyAnLCAnICAnLCAnICAgJywgJyAgICAnLCAnICAgICAnLCAnICAgICAgJywgJyAgICAgICAnXSxcbiAgICAgICAgJ18nOiBbJycsICdfJywgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywgJ19fX19fXycsICdfX19fX19fJ10sXG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cl9yZXBlYXQoaW5wdXQsIG11bHRpcGxpZXIpIHtcbiAgICAgICAgaWYgKG11bHRpcGxpZXIgPj0gMCAmJiBtdWx0aXBsaWVyIDw9IDcgJiYgcHJlZm9ybWF0dGVkUGFkZGluZ1tpbnB1dF0pIHtcbiAgICAgICAgICAgIHJldHVybiBwcmVmb3JtYXR0ZWRQYWRkaW5nW2lucHV0XVttdWx0aXBsaWVyXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheShtdWx0aXBsaWVyICsgMSkuam9pbihpbnB1dClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBvcnQgdG8gZWl0aGVyIGJyb3dzZXIgb3Igbm9kZS5qc1xuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0cy5zcHJpbnRmID0gc3ByaW50ZlxuICAgICAgICBleHBvcnRzLnZzcHJpbnRmID0gdnNwcmludGZcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5zcHJpbnRmID0gc3ByaW50ZlxuICAgICAgICB3aW5kb3cudnNwcmludGYgPSB2c3ByaW50ZlxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzcHJpbnRmOiBzcHJpbnRmLFxuICAgICAgICAgICAgICAgICAgICB2c3ByaW50ZjogdnNwcmludGZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxufSkodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzIDogd2luZG93KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBjbGFzcyBLZXlwYWlyIEVkMjU1MTkga2V5cGFpciBpbiBiYXNlNTggKGFzIEJpZ2NoYWluREIgZXhwZWN0cyBiYXNlNTgga2V5cylcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcGFyYW0ge251bWJlcn0gW3NlY3JldF0gQSBzZWVkIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwdWJsaWNLZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlS2V5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVkMjU1MTlLZXlwYWlyKHNlY3JldCkge1xuICAgIGxldCBrZXlQYWlyO1xuICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgLy8gUXVpY2sgYW5kIGRpcnR5OiB1c2Uga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaW5zdGVhZFxuICAgICAgICBjb25zdCBzZWNyZXRIYXNoID0gc2hhMy5zaGEzXzI1NlxuICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgIC5hcnJheSgpO1xuICAgICAgICBrZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQobmV3IFVpbnQ4QXJyYXkoc2VjcmV0SGFzaCkpXG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyKCk7XG4gICAgfVxuICAgIHRoaXMucHVibGljS2V5ID0gYmFzZTU4LmVuY29kZShrZXlQYWlyLnB1YmxpY0tleSk7XG4gICAgLy8gdHdlZXRuYWNsJ3MgZ2VuZXJhdGVkIHNlY3JldCBrZXkgaXMgdGhlIHNlY3JldCBrZXkgKyBwdWJsaWMga2V5IChyZXN1bHRpbmcgaW4gYSA2NC1ieXRlIGJ1ZmZlcilcbiAgICB0aGlzLnByaXZhdGVLZXkgPSBiYXNlNTguZW5jb2RlKGtleVBhaXIuc2VjcmV0S2V5LnNsaWNlKDAsIDMyKSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRWQyNTUxOUtleXBhaXIuanMiLCJpbXBvcnQgeyBQcm9taXNlIH0gZnJvbSAnZXM2LXByb21pc2UnO1xuaW1wb3J0IGZldGNoUG9ueWZpbGwgZnJvbSAnZmV0Y2gtcG9ueWZpbGwnO1xuaW1wb3J0IHsgdnNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuaW1wb3J0IGZvcm1hdFRleHQgZnJvbSAnLi9mb3JtYXRfdGV4dCc7XG5cbmltcG9ydCBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0gZnJvbSAnLi9zdHJpbmdpZnlfYXNfcXVlcnlfcGFyYW0nO1xuXG5cbmNvbnN0IGZldGNoID0gZmV0Y2hQb255ZmlsbChQcm9taXNlKTtcblxuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEdsb2JhbCBmZXRjaCB3cmFwcGVyIHRoYXQgYWRkcyBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIGFuZCBlYXNlIG9mIHVzZSBlbmhhbmNlbWVudHMuXG4gKiBDb25zaWRlcnMgYW55IG5vbi0yeHggcmVzcG9uc2UgYXMgYW4gZXJyb3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZmV0Y2gsIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRmV0Y2gvZmV0Y2guXG4gKlxuICogRXhwZWN0cyBmZXRjaCB0byBhbHJlYWR5IGJlIGF2YWlsYWJsZSAoZWl0aGVyIGluIGEgRVM2IGVudmlyb25tZW50LCBidW5kbGVkIHRocm91Z2ggd2VicGFjaywgb3JcbiAqIGluamVjdGVkIHRocm91Z2ggYSBwb2x5ZmlsbCkuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgdXJsICAgIFVybCB0byByZXF1ZXN0LiBDYW4gYmUgc3BlY2lmaWVkIGFzIGEgc3ByaW50ZiBmb3JtYXQgc3RyaW5nIChzZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMpIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB1c2luZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBjb25maWcudXJsVGVtcGxhdGVTcGVjYC5cbiAqIEBwYXJhbSAge29iamVjdH0gIGNvbmZpZyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sIG1vc3RseSBwYXNzZWQgdG8gZmV0Y2ggYXMgaXRzICdpbml0JyBjb25maWdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HbG9iYWxGZXRjaC9mZXRjaCNQYXJhbWV0ZXJzKS5cbiAqIEBwYXJhbSAgeyp9ICAgICAgICAgICAgIGNvbmZpZy5qc29uQm9keSAgICAgICAgSnNvbiBwYXlsb2FkIHRvIHRoZSByZXF1ZXN0LiBXaWxsIGF1dG9tYXRpY2FsbHkgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoKS1lZCBhbmQgb3ZlcnJpZGUgYGNvbmZpZy5ib2R5YC5cbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IGNvbmZpZy5xdWVyeSAgICAgICAgICAgUXVlcnkgcGFyYW1ldGVyIHRvIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSB1cmwuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNwZWNpZmllZCBhcyBhbiBvYmplY3QsIGtleXMgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNhbWVsaXplZCBpbnRvIHNuYWtlIGNhc2UgZmlyc3QuXG4gKiBAcGFyYW0gIHsqW118b2JqZWN0fSAgICBjb25maWcudXJsVGVtcGxhdGVTcGVjIEZvcm1hdCBzcGVjIHRvIHVzZSB0byBleHBhbmQgdGhlIHVybCAoc2VlIHNwcmludGYpLlxuICogQHBhcmFtICB7Kn0gICAgICAgICAgICAgY29uZmlnLiogICAgICAgICAgICAgICBBbGwgb3RoZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gZmV0Y2guXG4gKlxuICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgd2l0aCB0aGUgcmVzcG9uc2UgaWYgaXRzIHN0YXR1cyB3YXMgMnh4O1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSByZWplY3RzIHdpdGggdGhlIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhc2VSZXF1ZXN0KHVybCwgeyBqc29uQm9keSwgcXVlcnksIHVybFRlbXBsYXRlU3BlYywgLi4uZmV0Y2hDb25maWcgfSA9IHt9KSB7XG4gICAgbGV0IGV4cGFuZGVkVXJsID0gdXJsO1xuXG4gICAgaWYgKHVybFRlbXBsYXRlU3BlYyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybFRlbXBsYXRlU3BlYykgJiYgdXJsVGVtcGxhdGVTcGVjLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVXNlIHZzcHJpbnRmIGZvciB0aGUgYXJyYXkgY2FsbCBzaWduYXR1cmVcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsID0gdnNwcmludGYodXJsLCB1cmxUZW1wbGF0ZVNwZWMpO1xuICAgICAgICB9IGVsc2UgaWYgKHVybFRlbXBsYXRlU3BlYyAmJlxuICAgICAgICAgICAgICAgICAgIHR5cGVvZiB1cmxUZW1wbGF0ZVNwZWMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModXJsVGVtcGxhdGVTcGVjKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsID0gZm9ybWF0VGV4dCh1cmwsIHVybFRlbXBsYXRlU3BlYyk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcGxpZWQgdXJsVGVtcGxhdGVTcGVjIHdhcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0LiBJZ25vcmluZy4uLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsICs9IHF1ZXJ5O1xuICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5ICYmIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsICs9IHN0cmluZ2lmeUFzUXVlcnlQYXJhbShxdWVyeSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcGxpZWQgcXVlcnkgd2FzIG5vdCBhIHN0cmluZyBvciBvYmplY3QuIElnbm9yaW5nLi4uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoanNvbkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaENvbmZpZy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoanNvbkJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBmZXRjaC5mZXRjaChleHBhbmRlZFVybCwgZmV0Y2hDb25maWcpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIC8vIElmIHN0YXR1cyBpcyBub3QgYSAyeHggKGJhc2VkIG9uIFJlc3BvbnNlLm9rKSwgYXNzdW1lIGl0J3MgYW4gZXJyb3JcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRmV0Y2gvZmV0Y2hcbiAgICAgICAgICAgIGlmICghKHJlcyAmJiByZXMub2spKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jhc2VSZXF1ZXN0LmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBibG9ja0lkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmxvY2soYmxvY2tJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsnYmxvY2tzX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICBibG9ja0lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2dldEJsb2NrLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSB0eF9pZFxuICogQHBhcmFtIHN0YXR1c1xuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RCbG9ja3Moe3R4X2lkLCBzdGF0dXN9LCBBUElfUEFUSCkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydibG9ja3MnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICB0eF9pZCxcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0QmxvY2tzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBwdWJsaWNfa2V5XG4gKiBAcGFyYW0gdW5zcGVudFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKiBAcGFyYW0gb25seUpzb25SZXNwb25zZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0T3V0cHV0cyh7IHB1YmxpY19rZXksIHVuc3BlbnQgfSwgQVBJX1BBVEgsIG9ubHlKc29uUmVzcG9uc2U9dHJ1ZSkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydvdXRwdXRzJ10sIHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIHB1YmxpY19rZXksXG4gICAgICAgICAgICB1bnNwZW50XG4gICAgICAgIH1cbiAgICB9LCBvbmx5SnNvblJlc3BvbnNlKVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2xpc3RPdXRwdXRzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBhc3NldF9pZFxuICogQHBhcmFtIG9wZXJhdGlvblxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RUcmFuc2FjdGlvbnMoeyBhc3NldF9pZCwgb3BlcmF0aW9uIH0sIEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoZ2V0QXBpVXJscyhBUElfUEFUSClbJ3RyYW5zYWN0aW9ucyddLCB7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBhc3NldF9pZCxcbiAgICAgICAgICAgIG9wZXJhdGlvblxuICAgICAgICB9XG4gICAgfSlcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0VHJhbnNhY3Rpb25zLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBibG9ja19pZFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RWb3RlcyhibG9ja19pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndm90ZXMnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICBibG9ja19pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vbGlzdFZvdGVzLmpzIiwiaW1wb3J0IGdldFRyYW5zYWN0aW9uIGZyb20gJy4vZ2V0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IGdldFN0YXR1cyBmcm9tICcuL2dldFN0YXR1cyc7XG5cbi8qKlxuICogQHB1YmxpY1xuICogQHBhcmFtIHR4X2lkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0eF9pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGdldFN0YXR1cyh0eF9pZCwgQVBJX1BBVEgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmV0Y2hlZCB0cmFuc2FjdGlvbiBzdGF0dXM6JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICd2YWxpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJhbnNhY3Rpb24odHhfaWQsIEFQSV9QQVRIKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZldGNoZWQgdHJhbnNhY3Rpb246JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMClcbiAgICB9KVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vcG9sbFN0YXR1c0FuZEZldGNoVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cbi8qKlxuICogQHB1YmxpY1xuICpcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvc3RUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zJ10sIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGpzb25Cb2R5OiB0cmFuc2FjdGlvblxuICAgIH0pXG59XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL3Bvc3RUcmFuc2FjdGlvbi5qcyIsImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuXG4vLyBSZWdleGVzIHRha2VuIGZyb20gb3IgaW5zcGlyZWQgYnkgc3ByaW50Zi1qc1xuY29uc3QgUmVnZXggPSB7XG4gICAgVEVNUExBVEVfTElURVJBTDogL1xcJHsoW15cXCldKz8pfS9nLFxuICAgIEtFWTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICBLRVlfQUNDRVNTOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgIElOREVYX0FDQ0VTUzogL15cXFsoXFxkKylcXF0vXG59O1xuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEZvcm1hdHMgc3RyaW5ncyBzaW1pbGFybHkgdG8gQydzIHNwcmludGYsIHdpdGggdGhlIGFkZGl0aW9uIG9mICckey4uLn0nIGZvcm1hdHMuXG4gKlxuICogTWFrZXMgYSBmaXJzdCBwYXNzIHJlcGxhY2luZyAnJHsuLi59JyBmb3JtYXRzIGJlZm9yZSBwYXNzaW5nIHRoZSBleHBhbmRlZCBzdHJpbmcgYW5kIG90aGVyXG4gKiBhcmd1bWVudHMgdG8gc3ByaW50Zi1qcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCBzcHJpbnRmIGNhbiBkbywgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgIGZvcm1hdFRleHQoJ0hpIHRoZXJlICR7ZGltaX0hJywgeyBkaW1pOiAnRGltaScgfSlcbiAqICAgICAgID0+ICdIaSB0aGVyZSBEaW1pISdcbiAqXG4gKiAgIGZvcm1hdFRleHQoJyR7ZGF0YWJhc2V9IGlzICUoc3RhdHVzKXMnLCB7IGRhdGFiYXNlOiAnQmlnY2hhaW5EQicsIHN0YXR1czogJ2JpZycgfSlcbiAqICAgICAgID0+ICdCaWdjaGFpbkRCIGlzIGJpZydcbiAqXG4gKiBMaWtlIHNwcmludGYtanMsIHN0cmluZyBpbnRlcnBvbGF0aW9uIGZvciBrZXl3b3JkcyBhbmQgaW5kZXhlcyBpcyBzdXBwb3J0ZWQgdG9vOlxuICogICBmb3JtYXRUZXh0KCdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzICR7YmVybGluLnRvcEtub3duRm9yWzBdLm5hbWV9Jywge1xuICogICAgICAgYmVybGluOiB7XG4gKiAgICAgICAgICAgdG9wS25vd25Gb3I6IFt7XG4gKiAgICAgICAgICAgICAgIG5hbWU6ICdDdXJyeXd1cnN0J1xuICogICAgICAgICAgIH0sIC4uLlxuICogICAgICAgICAgIF1cbiAqICAgICAgIH1cbiAqICAgfSlcbiAqICAgICAgID0+ICdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzIEN1cnJ5d3Vyc3QnXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFRleHQocywgLi4uYXJndikge1xuICAgIGxldCBleHBhbmRlZEZvcm1hdFN0ciA9IHM7XG5cbiAgICAvLyBUcnkgdG8gcmVwbGFjZSBmb3JtYXRzIG9mIHRoZSBmb3JtICckey4uLn0nIGlmIG5hbWVkIHJlcGxhY2VtZW50IGZpZWxkcyBhcmUgdXNlZFxuICAgIGlmIChzICYmIGFyZ3YubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmd2WzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVNwZWNPYmogPSBhcmd2WzBdO1xuXG4gICAgICAgIGV4cGFuZGVkRm9ybWF0U3RyID0gcy5yZXBsYWNlKFJlZ2V4LlRFTVBMQVRFX0xJVEVSQUwsIChtYXRjaCwgcmVwbGFjZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBpbnRlcnBvbGF0aW9uTGVmdCA9IHJlcGxhY2VtZW50O1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEludGVycG9sYXRpb24gYWxnb3JpdGhtIGluc3BpcmVkIGJ5IHNwcmludGYtanMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogR29lcyB0aHJvdWdoIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgZ2V0dGluZyB0aGUgbGVmdC1tb3N0IGtleSBvciBpbmRleCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICogb24gZWFjaCBwYXNzLiBgdmFsdWVgIGF0IGVhY2ggc3RlcCBob2xkcyB0aGUgbGFzdCBpbnRlcnBvbGF0aW9uIHJlc3VsdCwgYGN1ck1hdGNoYCBpc1xuICAgICAgICAgICAgICogdGhlIGN1cnJlbnQgcHJvcGVydHkgbWF0Y2gsIGFuZCBgaW50ZXJwb2xhdGlvbkxlZnRgIGlzIHRoZSBwb3J0aW9uIG9mIHRoZSByZXBsYWNlbWVudFxuICAgICAgICAgICAgICogc3RyaW5nIHN0aWxsIHRvIGJlIGludGVycG9sYXRlZC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBJdCdzIHVzZWZ1bCB0byBub3RlIHRoYXQgUmVnRXhwLmV4ZWMoKSByZXR1cm5zIHdpdGggYW4gYXJyYXkgaG9sZGluZzpcbiAgICAgICAgICAgICAqICAgWzBdOiAgRnVsbCBzdHJpbmcgbWF0Y2hlZFxuICAgICAgICAgICAgICogICBbMStdOiBNYXRjaGluZyBncm91cHNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBBbmQgdGhhdCBpbiB0aGUgcmVnZXhlcyBkZWZpbmVkLCB0aGUgZmlyc3QgbWF0Y2hpbmcgZ3JvdXAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZVxuICAgICAgICAgICAgICogcHJvcGVydHkgbWF0Y2hlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgbGV0IGN1ck1hdGNoID0gUmVnZXguS0VZLmV4ZWMoaW50ZXJwb2xhdGlvbkxlZnQpO1xuICAgICAgICAgICAgaWYgKGN1ck1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wbGF0ZVNwZWNPYmpbY3VyTWF0Y2hbMV1dO1xuXG4gICAgICAgICAgICAgICAgLy8gQXNzaWduaW5nIGluIHRoZSBjb25kaXRpb25hbHMgaGVyZSBtYWtlcyB0aGUgY29kZSBsZXNzIGJsb2F0ZWRcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgICAgIHdoaWxlICgoaW50ZXJwb2xhdGlvbkxlZnQgPSBpbnRlcnBvbGF0aW9uTGVmdC5zdWJzdHJpbmcoY3VyTWF0Y2hbMF0ubGVuZ3RoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGN1ck1hdGNoID0gUmVnZXguS0VZX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJNYXRjaCA9IFJlZ2V4LklOREVYX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFueXRoaW5nIGxlZnQgdG8gaW50ZXJwb2xhdGUgYnkgdGhlIGVuZCB0aGVuIHdlJ3ZlIGZhaWxlZCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgLy8gdGhlIGVudGlyZSByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbkxlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgW2Zvcm1hdFRleHRdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXk6ICR7cmVwbGFjZW1lbnR9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwcmludGYoZXhwYW5kZWRGb3JtYXRTdHIsIC4uLmFyZ3YpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9mb3JtYXRfdGV4dC5qcyIsImltcG9ydCBjb3JlSW5jbHVkZXMgZnJvbSAnY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzJztcbmltcG9ydCBjb3JlT2JqZWN0RW50cmllcyBmcm9tICdjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXMnO1xuXG5cbi8qKlxuICogQWJzdHJhY3Rpb24gZm9yIHNlbGVjdEZyb21PYmplY3QgYW5kIG9taXRGcm9tT2JqZWN0IGZvciBEUlluZXNzLlxuICogU2V0IGlzSW5jbHVzaW9uIHRvIHRydWUgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgZm9yIGluY2x1ZGluZyB0aGUgZmlsdGVyZWQgaXRlbXMgKGllLiBzZWxlY3RpbmdcbiAqIG9ubHkgdGhlbSB2cyBvbWl0dGluZyBvbmx5IHRoZW0pLlxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyLCB7IGlzSW5jbHVzaW9uID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoZmlsdGVyICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICByZXR1cm4gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGlzSW5jbHVzaW9uID8gKChfLCBrZXkpID0+IGNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKF8sIGtleSkgPT4gIWNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZsaXAgdGhlIGZpbHRlciBmbidzIHJldHVybiBpZiBpdCdzIGZvciBpbmNsdXNpb25cbiAgICAgICAgcmV0dXJuIGFwcGx5RmlsdGVyT25PYmplY3Qob2JqLCBpc0luY2x1c2lvbiA/IGZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKC4uLmFyZ3MpID0+ICFmaWx0ZXIoLi4uYXJncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIGZpbHRlciBpcyBub3QgYW4gYXJyYXkgb3IgZnVuY3Rpb24uIEV4Y2x1ZGUgYWJvcnRlZCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZmlsdGVyZWQgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0J3Mgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyAobm8gaW5oZXJpdGVkXG4gKiBwcm9wZXJ0aWVzKSwga2VlcGluZyBhbnkga2V5cyB0aGF0IHBhc3MgdGhlIGdpdmVuIGZpbHRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGZpbHRlckZuKSB7XG4gICAgaWYgKGZpbHRlckZuID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRPYmogPSB7fTtcbiAgICBjb3JlT2JqZWN0RW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKGZpbHRlckZuKHZhbCwga2V5KSkge1xuICAgICAgICAgICAgZmlsdGVyZWRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkT2JqO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gbG9kYXNoJ3MgXy5waWNrKCksIHRoaXMgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCdzXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHNlbGVjdGluZyBvbmx5IHRoZSBrZXlzIGluXG4gKiB0aGUgZ2l2ZW4gYXJyYXkgb3Igd2hvc2UgdmFsdWUgcGFzcyB0aGUgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtICB7b2JqZWN0fSAgICAgICAgIG9iaiAgICBTb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0gIHthcnJheXxmdW5jdGlvbn0gZmlsdGVyIEFycmF5IG9mIGtleSBuYW1lcyB0byBzZWxlY3Qgb3IgZnVuY3Rpb24gdG8gaW52b2tlIHBlciBpdGVyYXRpb25cbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgICAgICAgVGhlIG5ldyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0RnJvbU9iamVjdChvYmosIGZpbHRlcikge1xuICAgIHJldHVybiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyKTtcbn1cblxuLyoqXG4gKiBHbG9yaWZpZWQgc2VsZWN0RnJvbU9iamVjdC4gVGFrZXMgYW4gb2JqZWN0IGFuZCByZXR1cm5zIGEgZmlsdGVyZWQgc2hhbGxvdyBjb3B5IHRoYXQgc3RyaXBzIG91dFxuICogYW55IHByb3BlcnRpZXMgdGhhdCBhcmUgZmFsc3kgKGluY2x1ZGluZyBjb2VyY2lvbnMsIGllLiB1bmRlZmluZWQsIG51bGwsICcnLCAwLCAuLi4pLlxuICogRG9lcyBub3QgbW9kaWZ5IHRoZSBwYXNzZWQgaW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gb2JqICAgICAgSmF2YXNjcmlwdCBvYmplY3RcbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgU2FuaXRpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNhbml0aXplKG9iaikge1xuICAgIHJldHVybiBzZWxlY3RGcm9tT2JqZWN0KG9iaiwgKHZhbCkgPT4gISF2YWwpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Nhbml0aXplLmpzIiwiaW1wb3J0IHNoYTMgZnJvbSAnanMtc2hhMyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYTI1Nkhhc2goZGF0YSkge1xuICAgIHJldHVybiBzaGEzLnNoYTNfMjU2XG4gICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAudXBkYXRlKGRhdGEpXG4gICAgICAgIC5oZXgoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zaGEyNTZIYXNoLmpzIiwiaW1wb3J0IGNvcmVPYmplY3RFbnRyaWVzIGZyb20gJ2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcyc7XG5pbXBvcnQgZGVjYW1lbGl6ZSBmcm9tICdkZWNhbWVsaXplJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuXG5cbi8qKlxuICogaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmlnY2hhaW5kYi9qcy11dGlsaXR5LWJlbHQvXG4gKlxuICogVGFrZXMgYSBrZXktdmFsdWUgZGljdGlvbmFyeSAoaWUuIG9iamVjdCkgYW5kIGNvbnZlcnRzIGl0IHRvIGEgcXVlcnktcGFyYW1ldGVyIHN0cmluZyB0aGF0IHlvdVxuICogY2FuIGRpcmVjdGx5IGFwcGVuZCBpbnRvIGEgVVJMLlxuICpcbiAqIEV4dGVuZHMgcXVlcnlTdHJpbmcuc3RyaW5naWZ5IGJ5IGFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IGEgYHRyYW5zZm9ybWAgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gKiBpbnZva2VkIG9uIGVhY2ggb2YgdGhlIGRpY3Rpb25hcnkncyBrZXlzIGJlZm9yZSBiZWluZyBzdHJpbmdpZmllZCBpbnRvIHRoZSBxdWVyeS1wYXJhbWV0ZXJcbiAqIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0IGB0cmFuc2Zvcm1gIGlzIGBkZWNhbWVsaXplYCwgc28gYSBkaWN0aW9uYXJ5IG9mIHRoZSBmb3JtOlxuICpcbiAqICAge1xuICogICAgICBwYWdlOiAxLFxuICogICAgICBwYWdlU2l6ZTogMTBcbiAqICAgfVxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGxpa2U6XG4gKlxuICogICA/cGFnZT0xJnBhZ2Vfc2l6ZT0xMFxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gICBvYmogICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtcyBkaWN0aW9uYXJ5XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gW3RyYW5zZm9ybT1kZWNhbWVsaXplXSBUcmFuc2Zvcm0gZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIHBhcmFtIGtleXNcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtIHN0cmluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0ob2JqLCB0cmFuc2Zvcm0gPSBkZWNhbWVsaXplKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKG9iaikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZEtleXNPYmogPSBjb3JlT2JqZWN0RW50cmllcyhvYmopLnJlZHVjZSgocGFyYW1zT2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgcGFyYW1zT2JqW3RyYW5zZm9ybShrZXkpXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcGFyYW1zT2JqO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBgPyR7cXVlcnlTdHJpbmcuc3RyaW5naWZ5KHRyYW5zZm9ybWVkS2V5c09iail9YDtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwiaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5pbXBvcnQgc2hhMjU2SGFzaCBmcm9tICcuLi9zaGEyNTZIYXNoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7XG4gICAgLy8gU2FmZWx5IHJlbW92ZSBhbnkgdHggaWQgZnJvbSB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gZm9yIGhhc2hpbmdcbiAgICBjb25zdCB0eCA9IHsgLi4udHJhbnNhY3Rpb24gfTtcbiAgICBkZWxldGUgdHguaWQ7XG5cbiAgICByZXR1cm4gc2hhMjU2SGFzaChzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHgpKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBHZW5lcmF0ZSBhIGBDUkVBVEVgIHRyYW5zYWN0aW9uIGhvbGRpbmcgdGhlIGBhc3NldGAsIGBtZXRhZGF0YWAsIGFuZCBgb3V0cHV0c2AsIHRvIGJlIHNpZ25lZCBieVxuICogdGhlIGBpc3N1ZXJzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhc3NldCBDcmVhdGVkIGFzc2V0J3MgZGF0YVxuICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIE1ldGFkYXRhIGZvciB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0W119IG91dHB1dHMgQXJyYXkgb2YgT3V0cHV0IG9iamVjdHMgdG8gYWRkIHRvIHRoZSBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhlc2UgYXMgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGFzc2V0IGFmdGVyIHRoZSB0cmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGBDUkVBVEVgIFRyYW5zYWN0aW9ucywgdGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGEgbGlzdCBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzIHdyYXBwaW5nIEVkMjU1MTkgQ29uZGl0aW9ucyBnZW5lcmF0ZWQgZnJvbSB0aGUgaXNzdWVycycgcHVibGljXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgKHNvIHRoYXQgdGhlIGlzc3VlcnMgYXJlIHRoZSByZWNpcGllbnRzIG9mIHRoZSBjcmVhdGVkIGFzc2V0KS5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nW119IGlzc3VlcnMgUHVibGljIGtleSBvZiBvbmUgb3IgbW9yZSBpc3N1ZXJzIHRvIHRoZSBhc3NldCBiZWluZyBjcmVhdGVkIGJ5IHRoaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IEVhY2ggb2YgdGhlIHByaXZhdGUga2V5cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwdWJsaWNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyBNVVNUIGJlIHVzZWQgbGF0ZXIgKGFuZCBpbiB0aGUgc2FtZSBvcmRlcikgd2hlbiBzaWduaW5nIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiAoYHNpZ25UcmFuc2FjdGlvbigpYCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBVbnNpZ25lZCB0cmFuc2FjdGlvbiAtLSBtYWtlIHN1cmUgdG8gY2FsbCBzaWduVHJhbnNhY3Rpb24oKSBvbiBpdCBiZWZvcmVcbiAqICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgaXQgb2ZmIVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQ3JlYXRlVHJhbnNhY3Rpb24oYXNzZXQsIG1ldGFkYXRhLCBvdXRwdXRzLCAuLi5pc3N1ZXJzKSB7XG4gICAgY29uc3QgYXNzZXREZWZpbml0aW9uID0ge1xuICAgICAgICAnZGF0YSc6IGFzc2V0IHx8IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCBpbnB1dHMgPSBpc3N1ZXJzLm1hcCgoaXNzdWVyKSA9PiBtYWtlSW5wdXRUZW1wbGF0ZShbaXNzdWVyXSkpO1xuXG4gICAgcmV0dXJuIG1ha2VUcmFuc2FjdGlvbignQ1JFQVRFJywgYXNzZXREZWZpbml0aW9uLCBtZXRhZGF0YSwgb3V0cHV0cywgaW5wdXRzKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUNyZWF0ZVRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcbmltcG9ydCBjYyBmcm9tICdmaXZlLWJlbGxzLWNvbmRpdGlvbic7XG5cbmltcG9ydCBjY0pzb25pZnkgZnJvbSAnLi91dGlscy9jY0pzb25pZnknO1xuXG5cbi8qKlxuICogQHB1YmxpY1xuICogQ3JlYXRlIGFuIEVkMjU1MTkgQ3J5cHRvY29uZGl0aW9uIGZyb20gYW4gRWQyNTUxOSBwdWJsaWMga2V5IHRvIHB1dCBpbnRvIGFuIE91dHB1dCBvZiBhIFRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5IGJhc2U1OCBlbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBmb3IgdGhlIHJlY2lwaWVudCBvZiB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2pzb249dHJ1ZV0gSWYgdHJ1ZSByZXR1cm5zIGEganNvbiBvYmplY3Qgb3RoZXJ3aXNlIGEgY3J5cHRvLWNvbmRpdGlvbiB0eXBlXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VFZDI1NTE5Q29uZGl0aW9uKHB1YmxpY0tleSwganNvbj10cnVlKSB7XG4gICAgY29uc3QgcHVibGljS2V5QnVmZmVyID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKHB1YmxpY0tleSkpO1xuXG4gICAgY29uc3QgZWQyNTUxOUZ1bGZpbGxtZW50ID0gbmV3IGNjLkVkMjU1MTkoKTtcbiAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2V0UHVibGljS2V5KHB1YmxpY0tleUJ1ZmZlcik7XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgICByZXR1cm4gY2NKc29uaWZ5KGVkMjU1MTlGdWxmaWxsbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gZWQyNTUxOUZ1bGZpbGxtZW50O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VFZDI1NTE5Q29uZGl0aW9uLmpzIiwiLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYW4gT3V0cHV0IGZyb20gYSBDb25kaXRpb24uXG4gKiBOb3RlOiBBc3N1bWVzIHRoZSBnaXZlbiBDb25kaXRpb24gd2FzIGdlbmVyYXRlZCBmcm9tIGEgc2luZ2xlIHB1YmxpYyBrZXkgKGUuZy4gYSBFZDI1NTE5IENvbmRpdGlvbilcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb24gQ29uZGl0aW9uIChlLmcuIGEgRWQyNTUxOSBDb25kaXRpb24gZnJvbSBgbWFrZUVkMjU1MTlDb25kaXRpb24oKWApXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFtb3VudCBvZiB0aGUgb3V0cHV0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBPdXRwdXQgdXNhYmxlIGluIGEgVHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZU91dHB1dChjb25kaXRpb24sIGFtb3VudCA9IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IEpTT04uc3RyaW5naWZ5KGFtb3VudCksXG4gICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgJ3B1YmxpY19rZXlzJzogY29uZGl0aW9uLmRldGFpbHMuaGFzT3duUHJvcGVydHkoJ3B1YmxpY19rZXknKSA/XG4gICAgICAgICAgICBbY29uZGl0aW9uLmRldGFpbHMucHVibGljX2tleV0gOiBbXSxcbiAgICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuaW1wb3J0IGNjSnNvbmlmeSBmcm9tICcuL3V0aWxzL2NjSnNvbmlmeSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYSBQcmVpbWFnZS1TaGEyNTYgQ3J5cHRvY29uZGl0aW9uIGZyb20gYSBzZWNyZXQgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVpbWFnZSBQcmVpbWFnZSB0byBiZSBoYXNoZWQgYW5kIHdyYXBwZWQgaW4gYSBjcnlwdG8tY29uZGl0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtqc29uPXRydWVdIElmIHRydWUgcmV0dXJucyBhIGpzb24gb2JqZWN0IG90aGVyd2lzZSBhIGNyeXB0by1jb25kaXRpb24gdHlwZVxuICogQHJldHVybnMge29iamVjdH0gUHJlaW1hZ2UtU2hhMjU2IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VTaGEyNTZDb25kaXRpb24ocHJlaW1hZ2UsIGpzb249dHJ1ZSkge1xuICAgIGNvbnN0IHNoYTI1NkZ1bGZpbGxtZW50ID0gbmV3IGNjLlByZWltYWdlU2hhMjU2KCk7XG4gICAgc2hhMjU2RnVsZmlsbG1lbnQucHJlaW1hZ2UgPSBuZXcgQnVmZmVyKHByZWltYWdlKTtcblxuICAgIGlmIChqc29uKSB7XG4gICAgICAgIHJldHVybiBjY0pzb25pZnkoc2hhMjU2RnVsZmlsbG1lbnQpXG4gICAgfVxuICAgIHJldHVybiBzaGEyNTZGdWxmaWxsbWVudDtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlU2hhMjU2Q29uZGl0aW9uLmpzIiwiaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuaW1wb3J0IGNjSnNvbmlmeSBmcm9tICcuL3V0aWxzL2NjSnNvbmlmeSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYW4gU2hhMjU2IFRocmVzaG9sZCBDcnlwdG9jb25kaXRpb24gZnJvbSB0aHJlc2hvbGQgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGRcbiAqIEBwYXJhbSB7QXJyYXl9IFtzdWJjb25kaXRpb25zPVtdXVxuICogQHBhcmFtIHtib29sZWFufSBbanNvbj10cnVlXSBJZiB0cnVlIHJldHVybnMgYSBqc29uIG9iamVjdCBvdGhlcndpc2UgYSBjcnlwdG8tY29uZGl0aW9uIHR5cGVcbiAqIEByZXR1cm5zIHtvYmplY3R9IFNoYTI1NiBUaHJlc2hvbGQgQ29uZGl0aW9uICh0aGF0IHdpbGwgbmVlZCB0byB3cmFwcGVkIGluIGFuIE91dHB1dClcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVRocmVzaG9sZENvbmRpdGlvbih0aHJlc2hvbGQsIHN1YmNvbmRpdGlvbnM9W10sIGpzb249dHJ1ZSkge1xuICAgIGNvbnN0IHRocmVzaG9sZENvbmRpdGlvbiA9IG5ldyBjYy5UaHJlc2hvbGRTaGEyNTYoKTtcbiAgICB0aHJlc2hvbGRDb25kaXRpb24udGhyZXNob2xkID0gdGhyZXNob2xkO1xuXG4gICAgc3ViY29uZGl0aW9ucy5mb3JFYWNoKChzdWJjb25kaXRpb24pID0+IHtcbiAgICAgICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIENvbmRpdGlvbiBhbmQgVVJJc1xuICAgICAgICB0aHJlc2hvbGRDb25kaXRpb24uYWRkU3ViZnVsZmlsbG1lbnQoc3ViY29uZGl0aW9uKTtcbiAgICB9KTtcblxuICAgIGlmIChqc29uKSB7XG4gICAgICAgIHJldHVybiBjY0pzb25pZnkodGhyZXNob2xkQ29uZGl0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB0aHJlc2hvbGRDb25kaXRpb25cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlVGhyZXNob2xkQ29uZGl0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBHZW5lcmF0ZSBhIGBUUkFOU0ZFUmAgdHJhbnNhY3Rpb24gaG9sZGluZyB0aGUgYGFzc2V0YCwgYG1ldGFkYXRhYCwgYW5kIGBvdXRwdXRzYCwgdGhhdCBmdWxmaWxsc1xuICogdGhlIGBmdWxmaWxsZWRPdXRwdXRzYCBvZiBgdW5zcGVudFRyYW5zYWN0aW9uYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB1bnNwZW50VHJhbnNhY3Rpb24gUHJldmlvdXMgVHJhbnNhY3Rpb24geW91IGhhdmUgY29udHJvbCBvdmVyIChpLmUuIGNhbiBmdWxmaWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyBPdXRwdXQgQ29uZGl0aW9uKVxuICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIE1ldGFkYXRhIGZvciB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0W119IG91dHB1dHMgQXJyYXkgb2YgT3V0cHV0IG9iamVjdHMgdG8gYWRkIHRvIHRoZSBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhlc2UgYXMgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGFzc2V0IGFmdGVyIHRoZSB0cmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGBUUkFOU0ZFUmAgVHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgYSBsaXN0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHMgd3JhcHBpbmcgRWQyNTUxOSBDb25kaXRpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSBwdWJsaWMga2V5cyBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBpZW50cy5cbiAqIEBwYXJhbSB7Li4ubnVtYmVyfSBmdWxmaWxsZWRPdXRwdXRzIEluZGljZXMgb2YgdGhlIE91dHB1dHMgaW4gYHVuc3BlbnRUcmFuc2FjdGlvbmAgdGhhdCB0aGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBmdWxmaWxscy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgcHVibGljIGtleXMgbGlzdGVkIGluIHRoZSBmdWxmaWxsZWQgT3V0cHV0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSB1c2VkIChhbmQgaW4gdGhlIHNhbWUgb3JkZXIpIHRvIHNpZ24gdGhlIFRyYW5zYWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYHNpZ25UcmFuc2FjdGlvbigpYCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBVbnNpZ25lZCB0cmFuc2FjdGlvbiAtLSBtYWtlIHN1cmUgdG8gY2FsbCBzaWduVHJhbnNhY3Rpb24oKSBvbiBpdCBiZWZvcmVcbiAqICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgaXQgb2ZmIVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlVHJhbnNmZXJUcmFuc2FjdGlvbih1bnNwZW50VHJhbnNhY3Rpb24sIG1ldGFkYXRhLCBvdXRwdXRzLCAuLi5mdWxmaWxsZWRPdXRwdXRzKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZnVsZmlsbGVkT3V0cHV0cy5tYXAoKG91dHB1dEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGZpbGxlZE91dHB1dCA9IHVuc3BlbnRUcmFuc2FjdGlvbi5vdXRwdXRzW291dHB1dEluZGV4XTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25MaW5rID0ge1xuICAgICAgICAgICAgJ291dHB1dCc6IG91dHB1dEluZGV4LFxuICAgICAgICAgICAgJ3R4aWQnOiB1bnNwZW50VHJhbnNhY3Rpb24uaWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG1ha2VJbnB1dFRlbXBsYXRlKGZ1bGZpbGxlZE91dHB1dC5wdWJsaWNfa2V5cywgdHJhbnNhY3Rpb25MaW5rKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2V0TGluayA9IHtcbiAgICAgICAgJ2lkJzogdW5zcGVudFRyYW5zYWN0aW9uLm9wZXJhdGlvbiA9PT0gJ0NSRUFURScgPyB1bnNwZW50VHJhbnNhY3Rpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bnNwZW50VHJhbnNhY3Rpb24uYXNzZXQuaWRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1ha2VUcmFuc2FjdGlvbignVFJBTlNGRVInLCBhc3NldExpbmssIG1ldGFkYXRhLCBvdXRwdXRzLCBpbnB1dHMpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuaW1wb3J0IGNsb25lIGZyb20gJ2Nsb25lJztcblxuaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBTaWduIHRoZSBnaXZlbiBgdHJhbnNhY3Rpb25gIHdpdGggdGhlIGdpdmVuIGBwcml2YXRlS2V5YHMsIHJldHVybmluZyBhIG5ldyBjb3B5IG9mIGB0cmFuc2FjdGlvbmBcbiAqIHRoYXQncyBiZWVuIHNpZ25lZC5cbiAqIE5vdGU6IE9ubHkgZ2VuZXJhdGVzIEVkMjU1MTkgRnVsZmlsbG1lbnRzLiBUaHJlc2hvbGRzIGFuZCBvdGhlciB0eXBlcyBvZiBGdWxmaWxsbWVudHMgYXJlIGxlZnQgYXNcbiAqIGFuIGV4ZXJjaXNlIGZvciB0aGUgdXNlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2FjdGlvbiBUcmFuc2FjdGlvbiB0byBzaWduLiBgdHJhbnNhY3Rpb25gIGlzIG5vdCBtb2RpZmllZC5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcml2YXRlS2V5cyBQcml2YXRlIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpc3N1ZXJzIG9mIHRoZSBgdHJhbnNhY3Rpb25gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BlZCB0aHJvdWdoIHRvIGl0ZXJhdGl2ZWx5IHNpZ24gYW55IElucHV0IEZ1bGZpbGxtZW50cyBmb3VuZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBgdHJhbnNhY3Rpb25gLlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHNpZ25lZCB2ZXJzaW9uIG9mIGB0cmFuc2FjdGlvbmAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgLi4ucHJpdmF0ZUtleXMpIHtcbiAgICBjb25zdCBzaWduZWRUeCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICBzaWduZWRUeC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwcml2YXRlS2V5c1tpbmRleF07XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUocHJpdmF0ZUtleSkpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHJhbnNhY3Rpb24pO1xuICAgICAgICBjb25zdCBlZDI1NTE5RnVsZmlsbG1lbnQgPSBuZXcgY2MuRWQyNTUxOSgpO1xuICAgICAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2lnbihuZXcgQnVmZmVyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiksIHByaXZhdGVLZXlCdWZmZXIpO1xuICAgICAgICBjb25zdCBmdWxmaWxsbWVudFVyaSA9IGVkMjU1MTlGdWxmaWxsbWVudC5zZXJpYWxpemVVcmkoKTtcblxuICAgICAgICBpbnB1dC5mdWxmaWxsbWVudCA9IGZ1bGZpbGxtZW50VXJpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25lZFR4O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi5qcyIsImltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBMb2FkcyBhIGNyeXB0by1jb25kaXRpb24gY2xhc3MgKEZ1bGZpbGxtZW50IG9yIENvbmRpdGlvbikgZnJvbSBhIEJpZ2NoYWluREIgSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25Kc29uXG4gKiBAcmV0dXJucyB7Y2MuQ29uZGl0aW9ufSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjSnNvbkxvYWQoY29uZGl0aW9uSnNvbikge1xuXG4gICAgaWYgKCdoYXNoJyBpbiBjb25kaXRpb25Kc29uKSB7XG4gICAgICAgIGxldCBjb25kaXRpb24gPSBuZXcgY2MuQ29uZGl0aW9uKCk7XG4gICAgICAgIGNvbmRpdGlvbi50eXBlID0gY29uZGl0aW9uSnNvbi50eXBlX2lkO1xuICAgICAgICBjb25kaXRpb24uYml0bWFzayA9IGNvbmRpdGlvbkpzb24uYml0bWFzaztcbiAgICAgICAgY29uZGl0aW9uLmhhc2ggPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUoY29uZGl0aW9uSnNvbi5oYXNoKSk7XG4gICAgICAgIGNvbmRpdGlvbi5tYXhGdWxmaWxsbWVudExlbmd0aCA9IHBhcnNlSW50KGNvbmRpdGlvbkpzb24ubWF4X2Z1bGZpbGxtZW50X2xlbmd0aCwgMTApO1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGZ1bGZpbGxtZW50O1xuXG4gICAgICAgIGlmIChjb25kaXRpb25Kc29uLnR5cGVfaWQgPT09IDIpIHtcbiAgICAgICAgICAgIGZ1bGZpbGxtZW50ID0gbmV3IGNjLlRocmVzaG9sZFNoYTI1NigpO1xuICAgICAgICAgICAgZnVsZmlsbG1lbnQudGhyZXNob2xkID0gY29uZGl0aW9uSnNvbi50aHJlc2hvbGQ7XG4gICAgICAgICAgICBjb25kaXRpb25Kc29uLnN1YmZ1bGZpbGxtZW50cy5mb3JFYWNoKChzdWJmdWxmaWxsbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmZ1bGZpbGxtZW50ID0gY2NKc29uTG9hZChzdWJmdWxmaWxsbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCdnZXRDb25kaXRpb25VcmknIGluIHN1YmZ1bGZpbGxtZW50KVxuICAgICAgICAgICAgICAgICAgICBmdWxmaWxsbWVudC5hZGRTdWJmdWxmaWxsbWVudChzdWJmdWxmaWxsbWVudCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoJ3NlcmlhbGl6ZVVyaScgaW4gc3ViZnVsZmlsbG1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxtZW50LmFkZFN1YmNvbmRpdGlvbihzdWJmdWxmaWxsbWVudClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi50eXBlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBmdWxmaWxsbWVudCA9IG5ldyBjYy5QcmVpbWFnZVNoYTI1NigpO1xuICAgICAgICAgICAgZnVsZmlsbG1lbnQucHJlaW1hZ2UgPSBuZXcgQnVmZmVyKGNvbmRpdGlvbkpzb24ucHJlaW1hZ2UpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi50eXBlX2lkID09PSA0KSB7XG4gICAgICAgICAgICBmdWxmaWxsbWVudCA9IG5ldyBjYy5FZDI1NTE5KCk7XG4gICAgICAgICAgICBmdWxmaWxsbWVudC5wdWJsaWNLZXkgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUoY29uZGl0aW9uSnNvbi5wdWJsaWNfa2V5KSk7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi5zaWduYXR1cmUpXG4gICAgICAgICAgICAgICAgZnVsZmlsbG1lbnQuc2lnbmF0dXJlID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKGNvbmRpdGlvbkpzb24uc2lnbmF0dXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGZpbGxtZW50O1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi91dGlscy9jY0pzb25Mb2FkLmpzIiwiLy8gYmFzZS14IGVuY29kaW5nXG4vLyBGb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvY29pbmpzL2JzNThcbi8vIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWtlIEhlYXJuIGZvciBCaXRjb2luSlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmNcbi8vIFBvcnRlZCB0byBKYXZhU2NyaXB0IGJ5IFN0ZWZhbiBUaG9tYXNcbi8vIE1lcmdlZCBCdWZmZXIgcmVmYWN0b3JpbmdzIGZyb20gYmFzZTU4LW5hdGl2ZSBieSBTdGVwaGVuIFBhaXJcbi8vIENvcHlyaWdodCAoYykgMjAxMyBCaXRQYXkgSW5jXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZSAoQUxQSEFCRVQpIHtcbiAgdmFyIEFMUEhBQkVUX01BUCA9IHt9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcblxuICAvLyBwcmUtY29tcHV0ZSBsb29rdXAgdGFibGVcbiAgZm9yICh2YXIgeiA9IDA7IHogPCBBTFBIQUJFVC5sZW5ndGg7IHorKykge1xuICAgIHZhciB4ID0gQUxQSEFCRVQuY2hhckF0KHopXG5cbiAgICBpZiAoQUxQSEFCRVRfTUFQW3hdICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgYW1iaWd1b3VzJylcbiAgICBBTFBIQUJFVF9NQVBbeF0gPSB6XG4gIH1cblxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSByZXR1cm4gJydcblxuICAgIHZhciBkaWdpdHMgPSBbMF1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gc291cmNlW2ldOyBqIDwgZGlnaXRzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tqXSA8PCA4XG4gICAgICAgIGRpZ2l0c1tqXSA9IGNhcnJ5ICUgQkFTRVxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIEJBU0UpIHwgMFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGRpZ2l0cy5wdXNoKGNhcnJ5ICUgQkFTRSlcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gJydcblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHNvdXJjZVtrXSA9PT0gMCAmJiBrIDwgc291cmNlLmxlbmd0aCAtIDE7ICsraykgc3RyaW5nICs9IEFMUEhBQkVUWzBdXG4gICAgLy8gY29udmVydCBkaWdpdHMgdG8gYSBzdHJpbmdcbiAgICBmb3IgKHZhciBxID0gZGlnaXRzLmxlbmd0aCAtIDE7IHEgPj0gMDsgLS1xKSBzdHJpbmcgKz0gQUxQSEFCRVRbZGlnaXRzW3FdXVxuXG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVW5zYWZlIChzdHJpbmcpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBCdWZmZXIoMClcblxuICAgIHZhciBieXRlcyA9IFswXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBBTFBIQUJFVF9NQVBbc3RyaW5nW2ldXVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVyblxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgY2FycnkgPSB2YWx1ZTsgaiA8IGJ5dGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGJ5dGVzW2pdICogQkFTRVxuICAgICAgICBieXRlc1tqXSA9IGNhcnJ5ICYgMHhmZlxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGJ5dGVzLnB1c2goY2FycnkgJiAweGZmKVxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHN0cmluZ1trXSA9PT0gTEVBREVSICYmIGsgPCBzdHJpbmcubGVuZ3RoIC0gMTsgKytrKSB7XG4gICAgICBieXRlcy5wdXNoKDApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYnl0ZXMucmV2ZXJzZSgpKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gYnVmZmVyXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlLXgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIHBsYWNlSG9sZGVyc0NvdW50IChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHJldHVybiBiNjRbbGVuIC0gMl0gPT09ICc9JyA/IDIgOiBiNjRbbGVuIC0gMV0gPT09ICc9JyA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgcmV0dXJuIGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIG91dHB1dCA9ICcnXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAyXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9PSdcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgKHVpbnQ4W2xlbiAtIDFdKVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDEwXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz0nXG4gIH1cblxuICBwYXJ0cy5wdXNoKG91dHB1dClcblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlNjQtanMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5pbmNsdWRlcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDU3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG4gIHN3aXRjaChsZW5ndGgpe1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanNcbi8vIG1vZHVsZSBpZCA9IDU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudFxuICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcbiAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanNcbi8vIG1vZHVsZSBpZCA9IDYyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanNcbi8vIG1vZHVsZSBpZCA9IDYzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgaWQgPSA2NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzXG4vLyBtb2R1bGUgaWQgPSA2OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGlzRW51bSAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc0VudHJpZXMpe1xuICByZXR1cm4gZnVuY3Rpb24oaXQpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoaXQpXG4gICAgICAsIGtleXMgICA9IGdldEtleXMoTylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaSAgICAgID0gMFxuICAgICAgLCByZXN1bHQgPSBbXVxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKXtcbiAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDcwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanNcbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gNzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gNzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBpZCA9IDc2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiwgZnJvbUluZGV4ID0gMCAqLyl7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gNzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KXtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSA3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIHNlcCkge1xuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuXHR9XG5cblx0c2VwID0gdHlwZW9mIHNlcCA9PT0gJ3VuZGVmaW5lZCcgPyAnXycgOiBzZXA7XG5cblx0cmV0dXJuIHN0clxuXHRcdC5yZXBsYWNlKC8oW2EtelxcZF0pKFtBLVpdKS9nLCAnJDEnICsgc2VwICsgJyQyJylcblx0XHQucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XFxkXSspL2csICckMScgKyBzZXAgKyAnJDInKVxuXHRcdC50b0xvd2VyQ2FzZSgpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9kZWNhbWVsaXplL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDQuMS4wXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICBpZiAodHlwZW9mIHZlcnR4TmV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgICAgR0VUX1RIRU5fRVJST1IuZXJyb3IgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlLmVycm9yID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG4vLyBTdHJhbmdlIGNvbXBhdC4uXG5Qcm9taXNlLnBvbHlmaWxsID0gcG9seWZpbGw7XG5Qcm9taXNlLlByb21pc2UgPSBQcm9taXNlO1xuXG5yZXR1cm4gUHJvbWlzZTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNi1wcm9taXNlLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDgxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiAoc2VsZikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gZmV0Y2hQb255ZmlsbChvcHRpb25zKSB7XG4gICAgdmFyIFByb21pc2UgPSBvcHRpb25zICYmIG9wdGlvbnMuUHJvbWlzZSB8fCBzZWxmLlByb21pc2U7XG4gICAgdmFyIFhNTEh0dHBSZXF1ZXN0ID0gb3B0aW9ucyAmJiBvcHRpb25zLlhNTEh0dHBSZXF1ZXN0IHx8IHNlbGYuWE1MSHR0cFJlcXVlc3Q7XG4gICAgdmFyIGdsb2JhbCA9IHNlbGY7XG5cbiAgICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxmID0gT2JqZWN0LmNyZWF0ZShnbG9iYWwsIHtcbiAgICAgICAgZmV0Y2g6IHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAoZnVuY3Rpb24oc2VsZikge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKHNlbGYuZmV0Y2gpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ID0ge1xuICAgICAgICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICAgICAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICAgICAgICBibG9iOiAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJiAnQmxvYicgaW4gc2VsZiAmJiAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKSxcbiAgICAgICAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgICAgICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgICAgICAgXVxuXG4gICAgICAgICAgdmFyIGlzRGF0YVZpZXcgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgICB0aGlzLm1hcCA9IHt9XG5cbiAgICAgICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICAgICAgICAgIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSsnLCcrdmFsdWUgOiB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGl0ZW1zID0gW11cbiAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChuYW1lKSB9KVxuICAgICAgICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgICAgICAgfVxuXG4gICAgICAgIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7IGl0ZW1zLnB1c2godmFsdWUpIH0pXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7IGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSkgfSlcbiAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgICAgICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYm9keS5ib2R5VXNlZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gICAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICAgICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gICAgICAgICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICAgICAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICAgICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gQm9keSgpIHtcbiAgICAgICAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAgICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gICAgICAgIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgICAgICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICByZXR1cm4gKG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xKSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgICAgICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgICAgICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgICAgICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgICAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ29taXQnXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICAgICAgICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICAgICAgICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICAgICAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpXG4gICAgICAgIH1cblxuICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgICBib2R5LnRyaW0oKS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGZvcm1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gICAgICAgICAgcmF3SGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICAgICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuICAgICAgICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSAnc3RhdHVzJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXMgOiAyMDBcbiAgICAgICAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gICAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snXG4gICAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cbiAgICAgICAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgICAgICAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbiAgICAgICAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICAgICAgICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnNcbiAgICAgICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdFxuICAgICAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2VcblxuICAgICAgICBzZWxmLmZldGNoID0gZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgICAgICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpXG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuICAgICAgfSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZldGNoOiBzZWxmLmZldGNoLFxuICAgICAgICBIZWFkZXJzOiBzZWxmLkhlYWRlcnMsXG4gICAgICAgIFJlcXVlc3Q6IHNlbGYuUmVxdWVzdCxcbiAgICAgICAgUmVzcG9uc2U6IHNlbGYuUmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSgpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZldGNoUG9ueWZpbGw7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmZXRjaFBvbnlmaWxsO1xuICB9IGVsc2Uge1xuICAgIHNlbGYuZmV0Y2hQb255ZmlsbCA9IGZldGNoUG9ueWZpbGw7XG4gIH1cbn0odHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnID8gdGhpcyA6IHNlbGYpKTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2ZldGNoLXBvbnlmaWxsL2J1aWxkL2ZldGNoLWJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDgyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2lzYXJyYXkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBqc29uID0gdHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnID8gSlNPTiA6IHJlcXVpcmUoJ2pzb25pZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgc3BhY2UgPSBvcHRzLnNwYWNlIHx8ICcnO1xuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSBzcGFjZSA9IEFycmF5KHNwYWNlKzEpLmpvaW4oJyAnKTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG4gICAgdmFyIHJlcGxhY2VyID0gb3B0cy5yZXBsYWNlciB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9O1xuICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH0pKG9wdHMuY21wKTtcblxuICAgIHZhciBzZWVuID0gW107XG4gICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnkgKHBhcmVudCwga2V5LCBub2RlLCBsZXZlbCkge1xuICAgICAgICB2YXIgaW5kZW50ID0gc3BhY2UgPyAoJ1xcbicgKyBuZXcgQXJyYXkobGV2ZWwgKyAxKS5qb2luKHNwYWNlKSkgOiAnJztcbiAgICAgICAgdmFyIGNvbG9uU2VwYXJhdG9yID0gc3BhY2UgPyAnOiAnIDogJzonO1xuXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgbm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgbm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb24uc3RyaW5naWZ5KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHN0cmluZ2lmeShub2RlLCBpLCBub2RlW2ldLCBsZXZlbCsxKSB8fCBqc29uLnN0cmluZ2lmeShudWxsKTtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdbJyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBqc29uLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBzZWVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGUsIGtleSwgbm9kZVtrZXldLCBsZXZlbCsxKTtcblxuICAgICAgICAgICAgICAgIGlmKCF2YWx1ZSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBqc29uLnN0cmluZ2lmeShrZXkpXG4gICAgICAgICAgICAgICAgICAgICsgY29sb25TZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBrZXlWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWVuLnNwbGljZShzZWVuLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuICd7JyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnfSc7XG4gICAgICAgIH1cbiAgICB9KSh7ICcnOiBvYmogfSwgJycsIG9iaiwgMCk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZScpO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uaWZ5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICAgJ1wiJzogICdcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgICAnLyc6ICAnLycsXG4gICAgICAgIGI6ICAgICdcXGInLFxuICAgICAgICBmOiAgICAnXFxmJyxcbiAgICAgICAgbjogICAgJ1xcbicsXG4gICAgICAgIHI6ICAgICdcXHInLFxuICAgICAgICB0OiAgICAnXFx0J1xuICAgIH0sXG4gICAgdGV4dCxcblxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgICAgICBhdDogICAgICBhdCxcbiAgICAgICAgICAgIHRleHQ6ICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgICBcbiAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICAgIGF0ICs9IDE7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG4gICAgICAgIHZhciBudW1iZXIsXG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgXG4gICAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgICAgICBuZXh0KCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAgIGVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIHZhciBoZXgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgICAgICB1ZmZmZjtcbiAgICAgICAgXG4gICAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cbiAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gICAgfSxcblxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG5cbiAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIGFycmF5XCIpO1xuICAgIH0sXG5cbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgb2JqZWN0ID0ge307XG5cbiAgICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBvYmplY3RcIik7XG4gICAgfTtcblxudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4vLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBcbiAgICB0ZXh0ID0gc291cmNlO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICAgIGVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9KHsnJzogcmVzdWx0fSwgJycpKSA6IHJlc3VsdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanNvbmlmeS9saWIvcGFyc2UuanNcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZ2FwLFxuICAgIGluZGVudCxcbiAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgfSxcbiAgICByZXA7XG5cbmZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuICAgIC8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbiAgICAvLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuICAgIC8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuICAgIC8vIHNlcXVlbmNlcy5cbiAgICBcbiAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyA/IGMgOlxuICAgICAgICAgICAgJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG59XG5cbmZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuICAgIC8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cbiAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICBcbiAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbiAgICAvLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuICAgICAgICAgICAgLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbiAgICAgICAgICAgIC8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFycmF5LmlzQXJyYXlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kXG4gICAgICAgICAgICAgICAgLy8gd3JhcCB0aGVtIGluIGJyYWNrZXRzLlxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBnYXAgP1xuICAgICAgICAgICAgICAgICAgICAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJyA6XG4gICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZVxuICAgICAgICAgICAgLy8gc3RyaW5naWZpZWQuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG4gICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuICAgICAgICAvLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAne30nIDogZ2FwID9cbiAgICAgICAgICAgICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nIDpcbiAgICAgICAgICAgICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICB2YXIgaTtcbiAgICBnYXAgPSAnJztcbiAgICBpbmRlbnQgPSAnJztcbiAgICBcbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4gICAgLy8gbWFueSBzcGFjZXMuXG4gICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuICAgIGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG4gICAgcmVwID0gcmVwbGFjZXI7XG4gICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICYmICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4gICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cbiAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzb25pZnkvbGliL3N0cmluZ2lmeS5qc1xuLy8gbW9kdWxlIGlkID0gODhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9vYmplY3QtYXNzaWduL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbmZ1bmN0aW9uIGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHN3aXRjaCAob3B0cy5hcnJheUZvcm1hdCkge1xuXHRcdGNhc2UgJ2luZGV4Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgaW5kZXgpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRpbmRleCxcblx0XHRcdFx0XHQnXSdcblx0XHRcdFx0XS5qb2luKCcnKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnWycsXG5cdFx0XHRcdFx0ZW5jb2RlKGluZGV4LCBvcHRzKSxcblx0XHRcdFx0XHQnXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnW109Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHZhciByZXN1bHQ7XG5cblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBhY2N1bXVsYXRvcikge1xuXHRcdFx0XHRyZXN1bHQgPSAvXFxbKFxcZCopXFxdJC8uZXhlYyhrZXkpO1xuXG5cdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFtcXGQqXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XVtyZXN1bHRbMV1dID0gdmFsdWU7XG5cdFx0XHR9O1xuXG5cdFx0Y2FzZSAnYnJhY2tldCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC8oXFxbXFxdKSQvLmV4ZWMoa2V5KTtcblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcXSQvLCAnJyk7XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSBbdmFsdWVdO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSBbXS5jb25jYXQoYWNjdW11bGF0b3Jba2V5XSwgdmFsdWUpO1xuXHRcdFx0fTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWx1ZSwgb3B0cykge1xuXHRpZiAob3B0cy5lbmNvZGUpIHtcblx0XHRyZXR1cm4gb3B0cy5zdHJpY3QgPyBzdHJpY3RVcmlFbmNvZGUodmFsdWUpIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24ga2V5c1NvcnRlcihpbnB1dCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQuc29ydCgpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcblx0XHRyZXR1cm4ga2V5c1NvcnRlcihPYmplY3Qua2V5cyhpbnB1dCkpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdHJldHVybiBOdW1iZXIoYSkgLSBOdW1iZXIoYik7XG5cdFx0fSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBpbnB1dFtrZXldO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGlucHV0O1xufVxuXG5leHBvcnRzLmV4dHJhY3QgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBzdHIuc3BsaXQoJz8nKVsxXSB8fCAnJztcbn07XG5cbmV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oe2FycmF5Rm9ybWF0OiAnbm9uZSd9LCBvcHRzKTtcblxuXHR2YXIgZm9ybWF0dGVyID0gcGFyc2VyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0Ly8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIG5vIHByb3RvdHlwZVxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9pc3N1ZXMvNDdcblx0dmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0aWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ciA9IHN0ci50cmltKCkucmVwbGFjZSgvXihcXD98I3wmKS8sICcnKTtcblxuXHRpZiAoIXN0cikge1xuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHRzdHIuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuXHRcdHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG5cdFx0Ly8gRmlyZWZveCAocHJlIDQwKSBkZWNvZGVzIGAlM0RgIHRvIGA9YFxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL3B1bGwvMzdcblx0XHR2YXIga2V5ID0gcGFydHMuc2hpZnQoKTtcblx0XHR2YXIgdmFsID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzLmpvaW4oJz0nKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIG1pc3NpbmcgYD1gIHNob3VsZCBiZSBgbnVsbGA6XG5cdFx0Ly8gaHR0cDovL3czLm9yZy9UUi8yMDEyL1dELXVybC0yMDEyMDUyNC8jY29sbGVjdC11cmwtcGFyYW1ldGVyc1xuXHRcdHZhbCA9IHZhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuXG5cdFx0Zm9ybWF0dGVyKGRlY29kZVVSSUNvbXBvbmVudChrZXkpLCB2YWwsIHJldCk7XG5cdH0pO1xuXG5cdHJldHVybiBPYmplY3Qua2V5cyhyZXQpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG5cdFx0dmFyIHZhbCA9IHJldFtrZXldO1xuXHRcdGlmIChCb29sZWFuKHZhbCkgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0Ly8gU29ydCBvYmplY3Qga2V5cywgbm90IHZhbHVlc1xuXHRcdFx0cmVzdWx0W2tleV0gPSBrZXlzU29ydGVyKHZhbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdFtrZXldID0gdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufTtcblxuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG5cdHZhciBkZWZhdWx0cyA9IHtcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0c3RyaWN0OiB0cnVlLFxuXHRcdGFycmF5Rm9ybWF0OiAnbm9uZSdcblx0fTtcblxuXHRvcHRzID0gb2JqZWN0QXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcblxuXHR2YXIgZm9ybWF0dGVyID0gZW5jb2RlckZvckFycmF5Rm9ybWF0KG9wdHMpO1xuXG5cdHJldHVybiBvYmogPyBPYmplY3Qua2V5cyhvYmopLnNvcnQoKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdHZhciB2YWwgPSBvYmpba2V5XTtcblxuXHRcdGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmICh2YWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRcdHZhbC5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcblx0XHRcdFx0aWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGZvcm1hdHRlcihrZXksIHZhbDIsIHJlc3VsdC5sZW5ndGgpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyYnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZW5jb2RlKGtleSwgb3B0cykgKyAnPScgKyBlbmNvZGUodmFsLCBvcHRzKTtcblx0fSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG5cdFx0cmV0dXJuIHgubGVuZ3RoID4gMDtcblx0fSkuam9pbignJicpIDogJyc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3F1ZXJ5LXN0cmluZy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gOTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0fSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3N0cmljdC11cmktZW5jb2RlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIoZnVuY3Rpb24obmFjbCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBQb3J0ZWQgaW4gMjAxNCBieSBEbWl0cnkgQ2hlc3RueWtoIGFuZCBEZXZpIE1hbmRpcmkuXG4vLyBQdWJsaWMgZG9tYWluLlxuLy9cbi8vIEltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBUd2VldE5hQ2wgdmVyc2lvbiAyMDE0MDQyNy5cbi8vIFNlZSBmb3IgZGV0YWlsczogaHR0cDovL3R3ZWV0bmFjbC5jci55cC50by9cblxudmFyIGdmID0gZnVuY3Rpb24oaW5pdCkge1xuICB2YXIgaSwgciA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICBpZiAoaW5pdCkgZm9yIChpID0gMDsgaSA8IGluaXQubGVuZ3RoOyBpKyspIHJbaV0gPSBpbml0W2ldO1xuICByZXR1cm4gcjtcbn07XG5cbi8vICBQbHVnZ2FibGUsIGluaXRpYWxpemVkIGluIGhpZ2gtbGV2ZWwgQVBJIGJlbG93LlxudmFyIHJhbmRvbWJ5dGVzID0gZnVuY3Rpb24oLyogeCwgbiAqLykgeyB0aHJvdyBuZXcgRXJyb3IoJ25vIFBSTkcnKTsgfTtcblxudmFyIF8wID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xudmFyIF85ID0gbmV3IFVpbnQ4QXJyYXkoMzIpOyBfOVswXSA9IDk7XG5cbnZhciBnZjAgPSBnZigpLFxuICAgIGdmMSA9IGdmKFsxXSksXG4gICAgXzEyMTY2NSA9IGdmKFsweGRiNDEsIDFdKSxcbiAgICBEID0gZ2YoWzB4NzhhMywgMHgxMzU5LCAweDRkY2EsIDB4NzVlYiwgMHhkOGFiLCAweDQxNDEsIDB4MGE0ZCwgMHgwMDcwLCAweGU4OTgsIDB4Nzc3OSwgMHg0MDc5LCAweDhjYzcsIDB4ZmU3MywgMHgyYjZmLCAweDZjZWUsIDB4NTIwM10pLFxuICAgIEQyID0gZ2YoWzB4ZjE1OSwgMHgyNmIyLCAweDliOTQsIDB4ZWJkNiwgMHhiMTU2LCAweDgyODMsIDB4MTQ5YSwgMHgwMGUwLCAweGQxMzAsIDB4ZWVmMywgMHg4MGYyLCAweDE5OGUsIDB4ZmNlNywgMHg1NmRmLCAweGQ5ZGMsIDB4MjQwNl0pLFxuICAgIFggPSBnZihbMHhkNTFhLCAweDhmMjUsIDB4MmQ2MCwgMHhjOTU2LCAweGE3YjIsIDB4OTUyNSwgMHhjNzYwLCAweDY5MmMsIDB4ZGM1YywgMHhmZGQ2LCAweGUyMzEsIDB4YzBhNCwgMHg1M2ZlLCAweGNkNmUsIDB4MzZkMywgMHgyMTY5XSksXG4gICAgWSA9IGdmKFsweDY2NTgsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjZdKSxcbiAgICBJID0gZ2YoWzB4YTBiMCwgMHg0YTBlLCAweDFiMjcsIDB4YzRlZSwgMHhlNDc4LCAweGFkMmYsIDB4MTgwNiwgMHgyZjQzLCAweGQ3YTcsIDB4M2RmYiwgMHgwMDk5LCAweDJiNGQsIDB4ZGYwYiwgMHg0ZmMxLCAweDI0ODAsIDB4MmI4M10pO1xuXG5mdW5jdGlvbiB0czY0KHgsIGksIGgsIGwpIHtcbiAgeFtpXSAgID0gKGggPj4gMjQpICYgMHhmZjtcbiAgeFtpKzFdID0gKGggPj4gMTYpICYgMHhmZjtcbiAgeFtpKzJdID0gKGggPj4gIDgpICYgMHhmZjtcbiAgeFtpKzNdID0gaCAmIDB4ZmY7XG4gIHhbaSs0XSA9IChsID4+IDI0KSAgJiAweGZmO1xuICB4W2krNV0gPSAobCA+PiAxNikgICYgMHhmZjtcbiAgeFtpKzZdID0gKGwgPj4gIDgpICAmIDB4ZmY7XG4gIHhbaSs3XSA9IGwgJiAweGZmO1xufVxuXG5mdW5jdGlvbiB2bih4LCB4aSwgeSwgeWksIG4pIHtcbiAgdmFyIGksZCA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIGQgfD0geFt4aStpXV55W3lpK2ldO1xuICByZXR1cm4gKDEgJiAoKGQgLSAxKSA+Pj4gOCkpIC0gMTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8xNih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwxNik7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b192ZXJpZnlfMzIoeCwgeGksIHksIHlpKSB7XG4gIHJldHVybiB2bih4LHhpLHkseWksMzIpO1xufVxuXG5mdW5jdGlvbiBjb3JlX3NhbHNhMjAobywgcCwgaywgYykge1xuICB2YXIgajAgID0gY1sgMF0gJiAweGZmIHwgKGNbIDFdICYgMHhmZik8PDggfCAoY1sgMl0gJiAweGZmKTw8MTYgfCAoY1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMSAgPSBrWyAwXSAmIDB4ZmYgfCAoa1sgMV0gJiAweGZmKTw8OCB8IChrWyAyXSAmIDB4ZmYpPDwxNiB8IChrWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoyICA9IGtbIDRdICYgMHhmZiB8IChrWyA1XSAmIDB4ZmYpPDw4IHwgKGtbIDZdICYgMHhmZik8PDE2IHwgKGtbIDddICYgMHhmZik8PDI0LFxuICAgICAgajMgID0ga1sgOF0gJiAweGZmIHwgKGtbIDldICYgMHhmZik8PDggfCAoa1sxMF0gJiAweGZmKTw8MTYgfCAoa1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqNCAgPSBrWzEyXSAmIDB4ZmYgfCAoa1sxM10gJiAweGZmKTw8OCB8IChrWzE0XSAmIDB4ZmYpPDwxNiB8IChrWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo1ICA9IGNbIDRdICYgMHhmZiB8IChjWyA1XSAmIDB4ZmYpPDw4IHwgKGNbIDZdICYgMHhmZik8PDE2IHwgKGNbIDddICYgMHhmZik8PDI0LFxuICAgICAgajYgID0gcFsgMF0gJiAweGZmIHwgKHBbIDFdICYgMHhmZik8PDggfCAocFsgMl0gJiAweGZmKTw8MTYgfCAocFsgM10gJiAweGZmKTw8MjQsXG4gICAgICBqNyAgPSBwWyA0XSAmIDB4ZmYgfCAocFsgNV0gJiAweGZmKTw8OCB8IChwWyA2XSAmIDB4ZmYpPDwxNiB8IChwWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo4ICA9IHBbIDhdICYgMHhmZiB8IChwWyA5XSAmIDB4ZmYpPDw4IHwgKHBbMTBdICYgMHhmZik8PDE2IHwgKHBbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajkgID0gcFsxMl0gJiAweGZmIHwgKHBbMTNdICYgMHhmZik8PDggfCAocFsxNF0gJiAweGZmKTw8MTYgfCAocFsxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTAgPSBjWyA4XSAmIDB4ZmYgfCAoY1sgOV0gJiAweGZmKTw8OCB8IChjWzEwXSAmIDB4ZmYpPDwxNiB8IChjWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMSA9IGtbMTZdICYgMHhmZiB8IChrWzE3XSAmIDB4ZmYpPDw4IHwgKGtbMThdICYgMHhmZik8PDE2IHwgKGtbMTldICYgMHhmZik8PDI0LFxuICAgICAgajEyID0ga1syMF0gJiAweGZmIHwgKGtbMjFdICYgMHhmZik8PDggfCAoa1syMl0gJiAweGZmKTw8MTYgfCAoa1syM10gJiAweGZmKTw8MjQsXG4gICAgICBqMTMgPSBrWzI0XSAmIDB4ZmYgfCAoa1syNV0gJiAweGZmKTw8OCB8IChrWzI2XSAmIDB4ZmYpPDwxNiB8IChrWzI3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNCA9IGtbMjhdICYgMHhmZiB8IChrWzI5XSAmIDB4ZmYpPDw4IHwgKGtbMzBdICYgMHhmZik8PDE2IHwgKGtbMzFdICYgMHhmZik8PDI0LFxuICAgICAgajE1ID0gY1sxMl0gJiAweGZmIHwgKGNbMTNdICYgMHhmZik8PDggfCAoY1sxNF0gJiAweGZmKTw8MTYgfCAoY1sxNV0gJiAweGZmKTw8MjQ7XG5cbiAgdmFyIHgwID0gajAsIHgxID0gajEsIHgyID0gajIsIHgzID0gajMsIHg0ID0gajQsIHg1ID0gajUsIHg2ID0gajYsIHg3ID0gajcsXG4gICAgICB4OCA9IGo4LCB4OSA9IGo5LCB4MTAgPSBqMTAsIHgxMSA9IGoxMSwgeDEyID0gajEyLCB4MTMgPSBqMTMsIHgxNCA9IGoxNCxcbiAgICAgIHgxNSA9IGoxNSwgdTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpICs9IDIpIHtcbiAgICB1ID0geDAgKyB4MTIgfCAwO1xuICAgIHg0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NCArIHgwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4NCB8IDA7XG4gICAgeDEyIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMiArIHg4IHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDEgfCAwO1xuICAgIHg5IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4OSArIHg1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHg5IHwgMDtcbiAgICB4MSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MSArIHgxMyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4NiB8IDA7XG4gICAgeDE0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTQgKyB4MTAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxNCB8IDA7XG4gICAgeDYgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDYgKyB4MiB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDExIHwgMDtcbiAgICB4MyBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDMgKyB4MTUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHgzIHwgMDtcbiAgICB4MTEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDExICsgeDcgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgwICsgeDMgfCAwO1xuICAgIHgxIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MSArIHgwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MSB8IDA7XG4gICAgeDMgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDMgKyB4MiB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHg0IHwgMDtcbiAgICB4NiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDYgKyB4NSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDYgfCAwO1xuICAgIHg0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg0ICsgeDcgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDkgfCAwO1xuICAgIHgxMSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDExICsgeDEwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4MTEgfCAwO1xuICAgIHg5IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg5ICsgeDggfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxNCB8IDA7XG4gICAgeDEyIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTIgKyB4MTUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDEyIHwgMDtcbiAgICB4MTQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDE0ICsgeDEzIHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcbiAgfVxuICAgeDAgPSAgeDAgKyAgajAgfCAwO1xuICAgeDEgPSAgeDEgKyAgajEgfCAwO1xuICAgeDIgPSAgeDIgKyAgajIgfCAwO1xuICAgeDMgPSAgeDMgKyAgajMgfCAwO1xuICAgeDQgPSAgeDQgKyAgajQgfCAwO1xuICAgeDUgPSAgeDUgKyAgajUgfCAwO1xuICAgeDYgPSAgeDYgKyAgajYgfCAwO1xuICAgeDcgPSAgeDcgKyAgajcgfCAwO1xuICAgeDggPSAgeDggKyAgajggfCAwO1xuICAgeDkgPSAgeDkgKyAgajkgfCAwO1xuICB4MTAgPSB4MTAgKyBqMTAgfCAwO1xuICB4MTEgPSB4MTEgKyBqMTEgfCAwO1xuICB4MTIgPSB4MTIgKyBqMTIgfCAwO1xuICB4MTMgPSB4MTMgKyBqMTMgfCAwO1xuICB4MTQgPSB4MTQgKyBqMTQgfCAwO1xuICB4MTUgPSB4MTUgKyBqMTUgfCAwO1xuXG4gIG9bIDBdID0geDAgPj4+ICAwICYgMHhmZjtcbiAgb1sgMV0gPSB4MCA+Pj4gIDggJiAweGZmO1xuICBvWyAyXSA9IHgwID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDNdID0geDAgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA0XSA9IHgxID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDVdID0geDEgPj4+ICA4ICYgMHhmZjtcbiAgb1sgNl0gPSB4MSA+Pj4gMTYgJiAweGZmO1xuICBvWyA3XSA9IHgxID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgOF0gPSB4MiA+Pj4gIDAgJiAweGZmO1xuICBvWyA5XSA9IHgyID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDIgPj4+IDE2ICYgMHhmZjtcbiAgb1sxMV0gPSB4MiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTJdID0geDMgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MyA+Pj4gIDggJiAweGZmO1xuICBvWzE0XSA9IHgzID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTVdID0geDMgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg0ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDQgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NCA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg0ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDYgPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4NiA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg2ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDYgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg3ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDcgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4NyA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg3ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szMl0gPSB4OCA+Pj4gIDAgJiAweGZmO1xuICBvWzMzXSA9IHg4ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzRdID0geDggPj4+IDE2ICYgMHhmZjtcbiAgb1szNV0gPSB4OCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMzZdID0geDkgPj4+ICAwICYgMHhmZjtcbiAgb1szN10gPSB4OSA+Pj4gIDggJiAweGZmO1xuICBvWzM4XSA9IHg5ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzldID0geDkgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQwXSA9IHgxMCA+Pj4gIDAgJiAweGZmO1xuICBvWzQxXSA9IHgxMCA+Pj4gIDggJiAweGZmO1xuICBvWzQyXSA9IHgxMCA+Pj4gMTYgJiAweGZmO1xuICBvWzQzXSA9IHgxMCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDRdID0geDExID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDVdID0geDExID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDZdID0geDExID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDddID0geDExID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0OF0gPSB4MTIgPj4+ICAwICYgMHhmZjtcbiAgb1s0OV0gPSB4MTIgPj4+ICA4ICYgMHhmZjtcbiAgb1s1MF0gPSB4MTIgPj4+IDE2ICYgMHhmZjtcbiAgb1s1MV0gPSB4MTIgPj4+IDI0ICYgMHhmZjtcblxuICBvWzUyXSA9IHgxMyA+Pj4gIDAgJiAweGZmO1xuICBvWzUzXSA9IHgxMyA+Pj4gIDggJiAweGZmO1xuICBvWzU0XSA9IHgxMyA+Pj4gMTYgJiAweGZmO1xuICBvWzU1XSA9IHgxMyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTZdID0geDE0ID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTddID0geDE0ID4+PiAgOCAmIDB4ZmY7XG4gIG9bNThdID0geDE0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTldID0geDE0ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s2MF0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1s2MV0gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1s2Ml0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1s2M10gPSB4MTUgPj4+IDI0ICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gY29yZV9oc2Fsc2EyMChvLHAsayxjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDUgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4NSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHg1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDUgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgxMCA+Pj4gIDAgJiAweGZmO1xuICBvWyA5XSA9IHgxMCA+Pj4gIDggJiAweGZmO1xuICBvWzEwXSA9IHgxMCA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgxMCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTJdID0geDE1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTNdID0geDE1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDE1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTVdID0geDE1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxNl0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzE3XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMThdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1sxOV0gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjBdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syMV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzIyXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjNdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI0XSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjVdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1syNl0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzI3XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syOF0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzI5XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzBdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szMV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKSB7XG4gIGNvcmVfc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX2hzYWxzYTIwKG91dCxpbnAsayxjKSB7XG4gIGNvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpO1xufVxuXG52YXIgc2lnbWEgPSBuZXcgVWludDhBcnJheShbMTAxLCAxMjAsIDExMiwgOTcsIDExMCwgMTAwLCAzMiwgNTEsIDUwLCA0NSwgOTgsIDEyMSwgMTE2LCAxMDEsIDMyLCAxMDddKTtcbiAgICAgICAgICAgIC8vIFwiZXhwYW5kIDMyLWJ5dGUga1wiXG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IoYyxjcG9zLG0sbXBvcyxiLG4saykge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDE2KSwgeCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHUsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB6W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeltpXSA9IG5baV07XG4gIHdoaWxlIChiID49IDY0KSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIGNbY3BvcytpXSA9IG1bbXBvcytpXSBeIHhbaV07XG4gICAgdSA9IDE7XG4gICAgZm9yIChpID0gODsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHUgPSB1ICsgKHpbaV0gJiAweGZmKSB8IDA7XG4gICAgICB6W2ldID0gdSAmIDB4ZmY7XG4gICAgICB1ID4+Pj0gODtcbiAgICB9XG4gICAgYiAtPSA2NDtcbiAgICBjcG9zICs9IDY0O1xuICAgIG1wb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwKGMsY3BvcyxiLG4saykge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDE2KSwgeCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHUsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB6W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeltpXSA9IG5baV07XG4gIHdoaWxlIChiID49IDY0KSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIGNbY3BvcytpXSA9IHhbaV07XG4gICAgdSA9IDE7XG4gICAgZm9yIChpID0gODsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHUgPSB1ICsgKHpbaV0gJiAweGZmKSB8IDA7XG4gICAgICB6W2ldID0gdSAmIDB4ZmY7XG4gICAgICB1ID4+Pj0gODtcbiAgICB9XG4gICAgYiAtPSA2NDtcbiAgICBjcG9zICs9IDY0O1xuICB9XG4gIGlmIChiID4gMCkge1xuICAgIGNyeXB0b19jb3JlX3NhbHNhMjAoeCx6LGssc2lnbWEpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBiOyBpKyspIGNbY3BvcytpXSA9IHhbaV07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW0oYyxjcG9zLGQsbixrKSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMChzLG4sayxzaWdtYSk7XG4gIHZhciBzbiA9IG5ldyBVaW50OEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgc25baV0gPSBuW2krMTZdO1xuICByZXR1cm4gY3J5cHRvX3N0cmVhbV9zYWxzYTIwKGMsY3BvcyxkLHNuLHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3hvcihjLGNwb3MsbSxtcG9zLGQsbixrKSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMChzLG4sayxzaWdtYSk7XG4gIHZhciBzbiA9IG5ldyBVaW50OEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgc25baV0gPSBuW2krMTZdO1xuICByZXR1cm4gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGQsc24scyk7XG59XG5cbi8qXG4qIFBvcnQgb2YgQW5kcmV3IE1vb24ncyBQb2x5MTMwNS1kb25uYS0xNi4gUHVibGljIGRvbWFpbi5cbiogaHR0cHM6Ly9naXRodWIuY29tL2Zsb29keWJlcnJ5L3BvbHkxMzA1LWRvbm5hXG4qL1xuXG52YXIgcG9seTEzMDUgPSBmdW5jdGlvbihrZXkpIHtcbiAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIHRoaXMuciA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHRoaXMuaCA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHRoaXMucGFkID0gbmV3IFVpbnQxNkFycmF5KDgpO1xuICB0aGlzLmxlZnRvdmVyID0gMDtcbiAgdGhpcy5maW4gPSAwO1xuXG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDc7XG5cbiAgdDAgPSBrZXlbIDBdICYgMHhmZiB8IChrZXlbIDFdICYgMHhmZikgPDwgODsgdGhpcy5yWzBdID0gKCB0MCAgICAgICAgICAgICAgICAgICAgICkgJiAweDFmZmY7XG4gIHQxID0ga2V5WyAyXSAmIDB4ZmYgfCAoa2V5WyAzXSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsxXSA9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICB0MiA9IGtleVsgNF0gJiAweGZmIHwgKGtleVsgNV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMl0gPSAoKHQxID4+PiAxMCkgfCAodDIgPDwgIDYpKSAmIDB4MWYwMztcbiAgdDMgPSBrZXlbIDZdICYgMHhmZiB8IChrZXlbIDddICYgMHhmZikgPDwgODsgdGhpcy5yWzNdID0gKCh0MiA+Pj4gIDcpIHwgKHQzIDw8ICA5KSkgJiAweDFmZmY7XG4gIHQ0ID0ga2V5WyA4XSAmIDB4ZmYgfCAoa2V5WyA5XSAmIDB4ZmYpIDw8IDg7IHRoaXMucls0XSA9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgwMGZmO1xuICB0aGlzLnJbNV0gPSAoKHQ0ID4+PiAgMSkpICYgMHgxZmZlO1xuICB0NSA9IGtleVsxMF0gJiAweGZmIHwgKGtleVsxMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbNl0gPSAoKHQ0ID4+PiAxNCkgfCAodDUgPDwgIDIpKSAmIDB4MWZmZjtcbiAgdDYgPSBrZXlbMTJdICYgMHhmZiB8IChrZXlbMTNdICYgMHhmZikgPDwgODsgdGhpcy5yWzddID0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmODE7XG4gIHQ3ID0ga2V5WzE0XSAmIDB4ZmYgfCAoa2V5WzE1XSAmIDB4ZmYpIDw8IDg7IHRoaXMucls4XSA9ICgodDYgPj4+ICA4KSB8ICh0NyA8PCAgOCkpICYgMHgxZmZmO1xuICB0aGlzLnJbOV0gPSAoKHQ3ID4+PiAgNSkpICYgMHgwMDdmO1xuXG4gIHRoaXMucGFkWzBdID0ga2V5WzE2XSAmIDB4ZmYgfCAoa2V5WzE3XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzFdID0ga2V5WzE4XSAmIDB4ZmYgfCAoa2V5WzE5XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzJdID0ga2V5WzIwXSAmIDB4ZmYgfCAoa2V5WzIxXSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzNdID0ga2V5WzIyXSAmIDB4ZmYgfCAoa2V5WzIzXSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzRdID0ga2V5WzI0XSAmIDB4ZmYgfCAoa2V5WzI1XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzVdID0ga2V5WzI2XSAmIDB4ZmYgfCAoa2V5WzI3XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzZdID0ga2V5WzI4XSAmIDB4ZmYgfCAoa2V5WzI5XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzddID0ga2V5WzMwXSAmIDB4ZmYgfCAoa2V5WzMxXSAmIDB4ZmYpIDw8IDg7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuYmxvY2tzID0gZnVuY3Rpb24obSwgbXBvcywgYnl0ZXMpIHtcbiAgdmFyIGhpYml0ID0gdGhpcy5maW4gPyAwIDogKDEgPDwgMTEpO1xuICB2YXIgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBjO1xuICB2YXIgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBkOCwgZDk7XG5cbiAgdmFyIGgwID0gdGhpcy5oWzBdLFxuICAgICAgaDEgPSB0aGlzLmhbMV0sXG4gICAgICBoMiA9IHRoaXMuaFsyXSxcbiAgICAgIGgzID0gdGhpcy5oWzNdLFxuICAgICAgaDQgPSB0aGlzLmhbNF0sXG4gICAgICBoNSA9IHRoaXMuaFs1XSxcbiAgICAgIGg2ID0gdGhpcy5oWzZdLFxuICAgICAgaDcgPSB0aGlzLmhbN10sXG4gICAgICBoOCA9IHRoaXMuaFs4XSxcbiAgICAgIGg5ID0gdGhpcy5oWzldO1xuXG4gIHZhciByMCA9IHRoaXMuclswXSxcbiAgICAgIHIxID0gdGhpcy5yWzFdLFxuICAgICAgcjIgPSB0aGlzLnJbMl0sXG4gICAgICByMyA9IHRoaXMuclszXSxcbiAgICAgIHI0ID0gdGhpcy5yWzRdLFxuICAgICAgcjUgPSB0aGlzLnJbNV0sXG4gICAgICByNiA9IHRoaXMucls2XSxcbiAgICAgIHI3ID0gdGhpcy5yWzddLFxuICAgICAgcjggPSB0aGlzLnJbOF0sXG4gICAgICByOSA9IHRoaXMucls5XTtcblxuICB3aGlsZSAoYnl0ZXMgPj0gMTYpIHtcbiAgICB0MCA9IG1bbXBvcysgMF0gJiAweGZmIHwgKG1bbXBvcysgMV0gJiAweGZmKSA8PCA4OyBoMCArPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgICB0MSA9IG1bbXBvcysgMl0gJiAweGZmIHwgKG1bbXBvcysgM10gJiAweGZmKSA8PCA4OyBoMSArPSAoKHQwID4+PiAxMykgfCAodDEgPDwgIDMpKSAmIDB4MWZmZjtcbiAgICB0MiA9IG1bbXBvcysgNF0gJiAweGZmIHwgKG1bbXBvcysgNV0gJiAweGZmKSA8PCA4OyBoMiArPSAoKHQxID4+PiAxMCkgfCAodDIgPDwgIDYpKSAmIDB4MWZmZjtcbiAgICB0MyA9IG1bbXBvcysgNl0gJiAweGZmIHwgKG1bbXBvcysgN10gJiAweGZmKSA8PCA4OyBoMyArPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgICB0NCA9IG1bbXBvcysgOF0gJiAweGZmIHwgKG1bbXBvcysgOV0gJiAweGZmKSA8PCA4OyBoNCArPSAoKHQzID4+PiAgNCkgfCAodDQgPDwgMTIpKSAmIDB4MWZmZjtcbiAgICBoNSArPSAoKHQ0ID4+PiAgMSkpICYgMHgxZmZmO1xuICAgIHQ1ID0gbVttcG9zKzEwXSAmIDB4ZmYgfCAobVttcG9zKzExXSAmIDB4ZmYpIDw8IDg7IGg2ICs9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICAgIHQ2ID0gbVttcG9zKzEyXSAmIDB4ZmYgfCAobVttcG9zKzEzXSAmIDB4ZmYpIDw8IDg7IGg3ICs9ICgodDUgPj4+IDExKSB8ICh0NiA8PCAgNSkpICYgMHgxZmZmO1xuICAgIHQ3ID0gbVttcG9zKzE0XSAmIDB4ZmYgfCAobVttcG9zKzE1XSAmIDB4ZmYpIDw8IDg7IGg4ICs9ICgodDYgPj4+ICA4KSB8ICh0NyA8PCAgOCkpICYgMHgxZmZmO1xuICAgIGg5ICs9ICgodDcgPj4+IDUpKSB8IGhpYml0O1xuXG4gICAgYyA9IDA7XG5cbiAgICBkMCA9IGM7XG4gICAgZDAgKz0gaDAgKiByMDtcbiAgICBkMCArPSBoMSAqICg1ICogcjkpO1xuICAgIGQwICs9IGgyICogKDUgKiByOCk7XG4gICAgZDAgKz0gaDMgKiAoNSAqIHI3KTtcbiAgICBkMCArPSBoNCAqICg1ICogcjYpO1xuICAgIGMgPSAoZDAgPj4+IDEzKTsgZDAgJj0gMHgxZmZmO1xuICAgIGQwICs9IGg1ICogKDUgKiByNSk7XG4gICAgZDAgKz0gaDYgKiAoNSAqIHI0KTtcbiAgICBkMCArPSBoNyAqICg1ICogcjMpO1xuICAgIGQwICs9IGg4ICogKDUgKiByMik7XG4gICAgZDAgKz0gaDkgKiAoNSAqIHIxKTtcbiAgICBjICs9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG5cbiAgICBkMSA9IGM7XG4gICAgZDEgKz0gaDAgKiByMTtcbiAgICBkMSArPSBoMSAqIHIwO1xuICAgIGQxICs9IGgyICogKDUgKiByOSk7XG4gICAgZDEgKz0gaDMgKiAoNSAqIHI4KTtcbiAgICBkMSArPSBoNCAqICg1ICogcjcpO1xuICAgIGMgPSAoZDEgPj4+IDEzKTsgZDEgJj0gMHgxZmZmO1xuICAgIGQxICs9IGg1ICogKDUgKiByNik7XG4gICAgZDEgKz0gaDYgKiAoNSAqIHI1KTtcbiAgICBkMSArPSBoNyAqICg1ICogcjQpO1xuICAgIGQxICs9IGg4ICogKDUgKiByMyk7XG4gICAgZDEgKz0gaDkgKiAoNSAqIHIyKTtcbiAgICBjICs9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG5cbiAgICBkMiA9IGM7XG4gICAgZDIgKz0gaDAgKiByMjtcbiAgICBkMiArPSBoMSAqIHIxO1xuICAgIGQyICs9IGgyICogcjA7XG4gICAgZDIgKz0gaDMgKiAoNSAqIHI5KTtcbiAgICBkMiArPSBoNCAqICg1ICogcjgpO1xuICAgIGMgPSAoZDIgPj4+IDEzKTsgZDIgJj0gMHgxZmZmO1xuICAgIGQyICs9IGg1ICogKDUgKiByNyk7XG4gICAgZDIgKz0gaDYgKiAoNSAqIHI2KTtcbiAgICBkMiArPSBoNyAqICg1ICogcjUpO1xuICAgIGQyICs9IGg4ICogKDUgKiByNCk7XG4gICAgZDIgKz0gaDkgKiAoNSAqIHIzKTtcbiAgICBjICs9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG5cbiAgICBkMyA9IGM7XG4gICAgZDMgKz0gaDAgKiByMztcbiAgICBkMyArPSBoMSAqIHIyO1xuICAgIGQzICs9IGgyICogcjE7XG4gICAgZDMgKz0gaDMgKiByMDtcbiAgICBkMyArPSBoNCAqICg1ICogcjkpO1xuICAgIGMgPSAoZDMgPj4+IDEzKTsgZDMgJj0gMHgxZmZmO1xuICAgIGQzICs9IGg1ICogKDUgKiByOCk7XG4gICAgZDMgKz0gaDYgKiAoNSAqIHI3KTtcbiAgICBkMyArPSBoNyAqICg1ICogcjYpO1xuICAgIGQzICs9IGg4ICogKDUgKiByNSk7XG4gICAgZDMgKz0gaDkgKiAoNSAqIHI0KTtcbiAgICBjICs9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG5cbiAgICBkNCA9IGM7XG4gICAgZDQgKz0gaDAgKiByNDtcbiAgICBkNCArPSBoMSAqIHIzO1xuICAgIGQ0ICs9IGgyICogcjI7XG4gICAgZDQgKz0gaDMgKiByMTtcbiAgICBkNCArPSBoNCAqIHIwO1xuICAgIGMgPSAoZDQgPj4+IDEzKTsgZDQgJj0gMHgxZmZmO1xuICAgIGQ0ICs9IGg1ICogKDUgKiByOSk7XG4gICAgZDQgKz0gaDYgKiAoNSAqIHI4KTtcbiAgICBkNCArPSBoNyAqICg1ICogcjcpO1xuICAgIGQ0ICs9IGg4ICogKDUgKiByNik7XG4gICAgZDQgKz0gaDkgKiAoNSAqIHI1KTtcbiAgICBjICs9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG5cbiAgICBkNSA9IGM7XG4gICAgZDUgKz0gaDAgKiByNTtcbiAgICBkNSArPSBoMSAqIHI0O1xuICAgIGQ1ICs9IGgyICogcjM7XG4gICAgZDUgKz0gaDMgKiByMjtcbiAgICBkNSArPSBoNCAqIHIxO1xuICAgIGMgPSAoZDUgPj4+IDEzKTsgZDUgJj0gMHgxZmZmO1xuICAgIGQ1ICs9IGg1ICogcjA7XG4gICAgZDUgKz0gaDYgKiAoNSAqIHI5KTtcbiAgICBkNSArPSBoNyAqICg1ICogcjgpO1xuICAgIGQ1ICs9IGg4ICogKDUgKiByNyk7XG4gICAgZDUgKz0gaDkgKiAoNSAqIHI2KTtcbiAgICBjICs9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG5cbiAgICBkNiA9IGM7XG4gICAgZDYgKz0gaDAgKiByNjtcbiAgICBkNiArPSBoMSAqIHI1O1xuICAgIGQ2ICs9IGgyICogcjQ7XG4gICAgZDYgKz0gaDMgKiByMztcbiAgICBkNiArPSBoNCAqIHIyO1xuICAgIGMgPSAoZDYgPj4+IDEzKTsgZDYgJj0gMHgxZmZmO1xuICAgIGQ2ICs9IGg1ICogcjE7XG4gICAgZDYgKz0gaDYgKiByMDtcbiAgICBkNiArPSBoNyAqICg1ICogcjkpO1xuICAgIGQ2ICs9IGg4ICogKDUgKiByOCk7XG4gICAgZDYgKz0gaDkgKiAoNSAqIHI3KTtcbiAgICBjICs9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG5cbiAgICBkNyA9IGM7XG4gICAgZDcgKz0gaDAgKiByNztcbiAgICBkNyArPSBoMSAqIHI2O1xuICAgIGQ3ICs9IGgyICogcjU7XG4gICAgZDcgKz0gaDMgKiByNDtcbiAgICBkNyArPSBoNCAqIHIzO1xuICAgIGMgPSAoZDcgPj4+IDEzKTsgZDcgJj0gMHgxZmZmO1xuICAgIGQ3ICs9IGg1ICogcjI7XG4gICAgZDcgKz0gaDYgKiByMTtcbiAgICBkNyArPSBoNyAqIHIwO1xuICAgIGQ3ICs9IGg4ICogKDUgKiByOSk7XG4gICAgZDcgKz0gaDkgKiAoNSAqIHI4KTtcbiAgICBjICs9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG5cbiAgICBkOCA9IGM7XG4gICAgZDggKz0gaDAgKiByODtcbiAgICBkOCArPSBoMSAqIHI3O1xuICAgIGQ4ICs9IGgyICogcjY7XG4gICAgZDggKz0gaDMgKiByNTtcbiAgICBkOCArPSBoNCAqIHI0O1xuICAgIGMgPSAoZDggPj4+IDEzKTsgZDggJj0gMHgxZmZmO1xuICAgIGQ4ICs9IGg1ICogcjM7XG4gICAgZDggKz0gaDYgKiByMjtcbiAgICBkOCArPSBoNyAqIHIxO1xuICAgIGQ4ICs9IGg4ICogcjA7XG4gICAgZDggKz0gaDkgKiAoNSAqIHI5KTtcbiAgICBjICs9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG5cbiAgICBkOSA9IGM7XG4gICAgZDkgKz0gaDAgKiByOTtcbiAgICBkOSArPSBoMSAqIHI4O1xuICAgIGQ5ICs9IGgyICogcjc7XG4gICAgZDkgKz0gaDMgKiByNjtcbiAgICBkOSArPSBoNCAqIHI1O1xuICAgIGMgPSAoZDkgPj4+IDEzKTsgZDkgJj0gMHgxZmZmO1xuICAgIGQ5ICs9IGg1ICogcjQ7XG4gICAgZDkgKz0gaDYgKiByMztcbiAgICBkOSArPSBoNyAqIHIyO1xuICAgIGQ5ICs9IGg4ICogcjE7XG4gICAgZDkgKz0gaDkgKiByMDtcbiAgICBjICs9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG5cbiAgICBjID0gKCgoYyA8PCAyKSArIGMpKSB8IDA7XG4gICAgYyA9IChjICsgZDApIHwgMDtcbiAgICBkMCA9IGMgJiAweDFmZmY7XG4gICAgYyA9IChjID4+PiAxMyk7XG4gICAgZDEgKz0gYztcblxuICAgIGgwID0gZDA7XG4gICAgaDEgPSBkMTtcbiAgICBoMiA9IGQyO1xuICAgIGgzID0gZDM7XG4gICAgaDQgPSBkNDtcbiAgICBoNSA9IGQ1O1xuICAgIGg2ID0gZDY7XG4gICAgaDcgPSBkNztcbiAgICBoOCA9IGQ4O1xuICAgIGg5ID0gZDk7XG5cbiAgICBtcG9zICs9IDE2O1xuICAgIGJ5dGVzIC09IDE2O1xuICB9XG4gIHRoaXMuaFswXSA9IGgwO1xuICB0aGlzLmhbMV0gPSBoMTtcbiAgdGhpcy5oWzJdID0gaDI7XG4gIHRoaXMuaFszXSA9IGgzO1xuICB0aGlzLmhbNF0gPSBoNDtcbiAgdGhpcy5oWzVdID0gaDU7XG4gIHRoaXMuaFs2XSA9IGg2O1xuICB0aGlzLmhbN10gPSBoNztcbiAgdGhpcy5oWzhdID0gaDg7XG4gIHRoaXMuaFs5XSA9IGg5O1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKG1hYywgbWFjcG9zKSB7XG4gIHZhciBnID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdmFyIGMsIG1hc2ssIGYsIGk7XG5cbiAgaWYgKHRoaXMubGVmdG92ZXIpIHtcbiAgICBpID0gdGhpcy5sZWZ0b3ZlcjtcbiAgICB0aGlzLmJ1ZmZlcltpKytdID0gMTtcbiAgICBmb3IgKDsgaSA8IDE2OyBpKyspIHRoaXMuYnVmZmVyW2ldID0gMDtcbiAgICB0aGlzLmZpbiA9IDE7XG4gICAgdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsIDAsIDE2KTtcbiAgfVxuXG4gIGMgPSB0aGlzLmhbMV0gPj4+IDEzO1xuICB0aGlzLmhbMV0gJj0gMHgxZmZmO1xuICBmb3IgKGkgPSAyOyBpIDwgMTA7IGkrKykge1xuICAgIHRoaXMuaFtpXSArPSBjO1xuICAgIGMgPSB0aGlzLmhbaV0gPj4+IDEzO1xuICAgIHRoaXMuaFtpXSAmPSAweDFmZmY7XG4gIH1cbiAgdGhpcy5oWzBdICs9IChjICogNSk7XG4gIGMgPSB0aGlzLmhbMF0gPj4+IDEzO1xuICB0aGlzLmhbMF0gJj0gMHgxZmZmO1xuICB0aGlzLmhbMV0gKz0gYztcbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsyXSArPSBjO1xuXG4gIGdbMF0gPSB0aGlzLmhbMF0gKyA1O1xuICBjID0gZ1swXSA+Pj4gMTM7XG4gIGdbMF0gJj0gMHgxZmZmO1xuICBmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgIGdbaV0gPSB0aGlzLmhbaV0gKyBjO1xuICAgIGMgPSBnW2ldID4+PiAxMztcbiAgICBnW2ldICY9IDB4MWZmZjtcbiAgfVxuICBnWzldIC09ICgxIDw8IDEzKTtcblxuICBtYXNrID0gKGMgXiAxKSAtIDE7XG4gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSBnW2ldICY9IG1hc2s7XG4gIG1hc2sgPSB+bWFzaztcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHRoaXMuaFtpXSA9ICh0aGlzLmhbaV0gJiBtYXNrKSB8IGdbaV07XG5cbiAgdGhpcy5oWzBdID0gKCh0aGlzLmhbMF0gICAgICAgKSB8ICh0aGlzLmhbMV0gPDwgMTMpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbMV0gPSAoKHRoaXMuaFsxXSA+Pj4gIDMpIHwgKHRoaXMuaFsyXSA8PCAxMCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsyXSA9ICgodGhpcy5oWzJdID4+PiAgNikgfCAodGhpcy5oWzNdIDw8ICA3KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzNdID0gKCh0aGlzLmhbM10gPj4+ICA5KSB8ICh0aGlzLmhbNF0gPDwgIDQpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNF0gPSAoKHRoaXMuaFs0XSA+Pj4gMTIpIHwgKHRoaXMuaFs1XSA8PCAgMSkgfCAodGhpcy5oWzZdIDw8IDE0KSkgJiAweGZmZmY7XG4gIHRoaXMuaFs1XSA9ICgodGhpcy5oWzZdID4+PiAgMikgfCAodGhpcy5oWzddIDw8IDExKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzZdID0gKCh0aGlzLmhbN10gPj4+ICA1KSB8ICh0aGlzLmhbOF0gPDwgIDgpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbN10gPSAoKHRoaXMuaFs4XSA+Pj4gIDgpIHwgKHRoaXMuaFs5XSA8PCAgNSkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG5cbiAgZiA9IHRoaXMuaFswXSArIHRoaXMucGFkWzBdO1xuICB0aGlzLmhbMF0gPSBmICYgMHhmZmZmO1xuICBmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgZiA9ICgoKHRoaXMuaFtpXSArIHRoaXMucGFkW2ldKSB8IDApICsgKGYgPj4+IDE2KSkgfCAwO1xuICAgIHRoaXMuaFtpXSA9IGYgJiAweGZmZmY7XG4gIH1cblxuICBtYWNbbWFjcG9zKyAwXSA9ICh0aGlzLmhbMF0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMV0gPSAodGhpcy5oWzBdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDJdID0gKHRoaXMuaFsxXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAzXSA9ICh0aGlzLmhbMV0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNF0gPSAodGhpcy5oWzJdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDVdID0gKHRoaXMuaFsyXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA2XSA9ICh0aGlzLmhbM10gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgN10gPSAodGhpcy5oWzNdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDhdID0gKHRoaXMuaFs0XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA5XSA9ICh0aGlzLmhbNF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMF0gPSAodGhpcy5oWzVdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTFdID0gKHRoaXMuaFs1XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEyXSA9ICh0aGlzLmhbNl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxM10gPSAodGhpcy5oWzZdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTRdID0gKHRoaXMuaFs3XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzE1XSA9ICh0aGlzLmhbN10gPj4+IDgpICYgMHhmZjtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaSwgd2FudDtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIHdhbnQgPSAoMTYgLSB0aGlzLmxlZnRvdmVyKTtcbiAgICBpZiAod2FudCA+IGJ5dGVzKVxuICAgICAgd2FudCA9IGJ5dGVzO1xuICAgIGZvciAoaSA9IDA7IGkgPCB3YW50OyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgYnl0ZXMgLT0gd2FudDtcbiAgICBtcG9zICs9IHdhbnQ7XG4gICAgdGhpcy5sZWZ0b3ZlciArPSB3YW50O1xuICAgIGlmICh0aGlzLmxlZnRvdmVyIDwgMTYpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsIDAsIDE2KTtcbiAgICB0aGlzLmxlZnRvdmVyID0gMDtcbiAgfVxuXG4gIGlmIChieXRlcyA+PSAxNikge1xuICAgIHdhbnQgPSBieXRlcyAtIChieXRlcyAlIDE2KTtcbiAgICB0aGlzLmJsb2NrcyhtLCBtcG9zLCB3YW50KTtcbiAgICBtcG9zICs9IHdhbnQ7XG4gICAgYnl0ZXMgLT0gd2FudDtcbiAgfVxuXG4gIGlmIChieXRlcykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlczsgaSsrKVxuICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlciArIGldID0gbVttcG9zK2ldO1xuICAgIHRoaXMubGVmdG92ZXIgKz0gYnl0ZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aChvdXQsIG91dHBvcywgbSwgbXBvcywgbiwgaykge1xuICB2YXIgcyA9IG5ldyBwb2x5MTMwNShrKTtcbiAgcy51cGRhdGUobSwgbXBvcywgbik7XG4gIHMuZmluaXNoKG91dCwgb3V0cG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnkoaCwgaHBvcywgbSwgbXBvcywgbiwgaykge1xuICB2YXIgeCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgY3J5cHRvX29uZXRpbWVhdXRoKHgsMCxtLG1wb3MsbixrKTtcbiAgcmV0dXJuIGNyeXB0b192ZXJpZnlfMTYoaCxocG9zLHgsMCk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3goYyxtLGQsbixrKSB7XG4gIHZhciBpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW1feG9yKGMsMCxtLDAsZCxuLGspO1xuICBjcnlwdG9fb25ldGltZWF1dGgoYywgMTYsIGMsIDMyLCBkIC0gMzIsIGMpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgY1tpXSA9IDA7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW4obSxjLGQsbixrKSB7XG4gIHZhciBpO1xuICB2YXIgeCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgaWYgKGQgPCAzMikgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtKHgsMCwzMixuLGspO1xuICBpZiAoY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShjLCAxNixjLCAzMixkIC0gMzIseCkgIT09IDApIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IobSwwLGMsMCxkLG4sayk7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHNldDI1NTE5KHIsIGEpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSByW2ldID0gYVtpXXwwO1xufVxuXG5mdW5jdGlvbiBjYXIyNTUxOShvKSB7XG4gIHZhciBpLCB2LCBjID0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB2ID0gb1tpXSArIGMgKyA2NTUzNTtcbiAgICBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpO1xuICAgIG9baV0gPSB2IC0gYyAqIDY1NTM2O1xuICB9XG4gIG9bMF0gKz0gYy0xICsgMzcgKiAoYy0xKTtcbn1cblxuZnVuY3Rpb24gc2VsMjU1MTkocCwgcSwgYikge1xuICB2YXIgdCwgYyA9IH4oYi0xKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgdCA9IGMgJiAocFtpXSBeIHFbaV0pO1xuICAgIHBbaV0gXj0gdDtcbiAgICBxW2ldIF49IHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjazI1NTE5KG8sIG4pIHtcbiAgdmFyIGksIGosIGI7XG4gIHZhciBtID0gZ2YoKSwgdCA9IGdmKCk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB0W2ldID0gbltpXTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBjYXIyNTUxOSh0KTtcbiAgZm9yIChqID0gMDsgaiA8IDI7IGorKykge1xuICAgIG1bMF0gPSB0WzBdIC0gMHhmZmVkO1xuICAgIGZvciAoaSA9IDE7IGkgPCAxNTsgaSsrKSB7XG4gICAgICBtW2ldID0gdFtpXSAtIDB4ZmZmZiAtICgobVtpLTFdPj4xNikgJiAxKTtcbiAgICAgIG1baS0xXSAmPSAweGZmZmY7XG4gICAgfVxuICAgIG1bMTVdID0gdFsxNV0gLSAweDdmZmYgLSAoKG1bMTRdPj4xNikgJiAxKTtcbiAgICBiID0gKG1bMTVdPj4xNikgJiAxO1xuICAgIG1bMTRdICY9IDB4ZmZmZjtcbiAgICBzZWwyNTUxOSh0LCBtLCAxLWIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgb1syKmldID0gdFtpXSAmIDB4ZmY7XG4gICAgb1syKmkrMV0gPSB0W2ldPj44O1xuICB9XG59XG5cbmZ1bmN0aW9uIG5lcTI1NTE5KGEsIGIpIHtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheSgzMiksIGQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHBhY2syNTUxOShjLCBhKTtcbiAgcGFjazI1NTE5KGQsIGIpO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8zMihjLCAwLCBkLCAwKTtcbn1cblxuZnVuY3Rpb24gcGFyMjU1MTkoYSkge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGQsIGEpO1xuICByZXR1cm4gZFswXSAmIDE7XG59XG5cbmZ1bmN0aW9uIHVucGFjazI1NTE5KG8sIG4pIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gblsyKmldICsgKG5bMippKzFdIDw8IDgpO1xuICBvWzE1XSAmPSAweDdmZmY7XG59XG5cbmZ1bmN0aW9uIEEobywgYSwgYikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBhW2ldICsgYltpXTtcbn1cblxuZnVuY3Rpb24gWihvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gLSBiW2ldO1xufVxuXG5mdW5jdGlvbiBNKG8sIGEsIGIpIHtcbiAgdmFyIHYsIGMsXG4gICAgIHQwID0gMCwgIHQxID0gMCwgIHQyID0gMCwgIHQzID0gMCwgIHQ0ID0gMCwgIHQ1ID0gMCwgIHQ2ID0gMCwgIHQ3ID0gMCxcbiAgICAgdDggPSAwLCAgdDkgPSAwLCB0MTAgPSAwLCB0MTEgPSAwLCB0MTIgPSAwLCB0MTMgPSAwLCB0MTQgPSAwLCB0MTUgPSAwLFxuICAgIHQxNiA9IDAsIHQxNyA9IDAsIHQxOCA9IDAsIHQxOSA9IDAsIHQyMCA9IDAsIHQyMSA9IDAsIHQyMiA9IDAsIHQyMyA9IDAsXG4gICAgdDI0ID0gMCwgdDI1ID0gMCwgdDI2ID0gMCwgdDI3ID0gMCwgdDI4ID0gMCwgdDI5ID0gMCwgdDMwID0gMCxcbiAgICBiMCA9IGJbMF0sXG4gICAgYjEgPSBiWzFdLFxuICAgIGIyID0gYlsyXSxcbiAgICBiMyA9IGJbM10sXG4gICAgYjQgPSBiWzRdLFxuICAgIGI1ID0gYls1XSxcbiAgICBiNiA9IGJbNl0sXG4gICAgYjcgPSBiWzddLFxuICAgIGI4ID0gYls4XSxcbiAgICBiOSA9IGJbOV0sXG4gICAgYjEwID0gYlsxMF0sXG4gICAgYjExID0gYlsxMV0sXG4gICAgYjEyID0gYlsxMl0sXG4gICAgYjEzID0gYlsxM10sXG4gICAgYjE0ID0gYlsxNF0sXG4gICAgYjE1ID0gYlsxNV07XG5cbiAgdiA9IGFbMF07XG4gIHQwICs9IHYgKiBiMDtcbiAgdDEgKz0gdiAqIGIxO1xuICB0MiArPSB2ICogYjI7XG4gIHQzICs9IHYgKiBiMztcbiAgdDQgKz0gdiAqIGI0O1xuICB0NSArPSB2ICogYjU7XG4gIHQ2ICs9IHYgKiBiNjtcbiAgdDcgKz0gdiAqIGI3O1xuICB0OCArPSB2ICogYjg7XG4gIHQ5ICs9IHYgKiBiOTtcbiAgdDEwICs9IHYgKiBiMTA7XG4gIHQxMSArPSB2ICogYjExO1xuICB0MTIgKz0gdiAqIGIxMjtcbiAgdDEzICs9IHYgKiBiMTM7XG4gIHQxNCArPSB2ICogYjE0O1xuICB0MTUgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMV07XG4gIHQxICs9IHYgKiBiMDtcbiAgdDIgKz0gdiAqIGIxO1xuICB0MyArPSB2ICogYjI7XG4gIHQ0ICs9IHYgKiBiMztcbiAgdDUgKz0gdiAqIGI0O1xuICB0NiArPSB2ICogYjU7XG4gIHQ3ICs9IHYgKiBiNjtcbiAgdDggKz0gdiAqIGI3O1xuICB0OSArPSB2ICogYjg7XG4gIHQxMCArPSB2ICogYjk7XG4gIHQxMSArPSB2ICogYjEwO1xuICB0MTIgKz0gdiAqIGIxMTtcbiAgdDEzICs9IHYgKiBiMTI7XG4gIHQxNCArPSB2ICogYjEzO1xuICB0MTUgKz0gdiAqIGIxNDtcbiAgdDE2ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzJdO1xuICB0MiArPSB2ICogYjA7XG4gIHQzICs9IHYgKiBiMTtcbiAgdDQgKz0gdiAqIGIyO1xuICB0NSArPSB2ICogYjM7XG4gIHQ2ICs9IHYgKiBiNDtcbiAgdDcgKz0gdiAqIGI1O1xuICB0OCArPSB2ICogYjY7XG4gIHQ5ICs9IHYgKiBiNztcbiAgdDEwICs9IHYgKiBiODtcbiAgdDExICs9IHYgKiBiOTtcbiAgdDEyICs9IHYgKiBiMTA7XG4gIHQxMyArPSB2ICogYjExO1xuICB0MTQgKz0gdiAqIGIxMjtcbiAgdDE1ICs9IHYgKiBiMTM7XG4gIHQxNiArPSB2ICogYjE0O1xuICB0MTcgKz0gdiAqIGIxNTtcbiAgdiA9IGFbM107XG4gIHQzICs9IHYgKiBiMDtcbiAgdDQgKz0gdiAqIGIxO1xuICB0NSArPSB2ICogYjI7XG4gIHQ2ICs9IHYgKiBiMztcbiAgdDcgKz0gdiAqIGI0O1xuICB0OCArPSB2ICogYjU7XG4gIHQ5ICs9IHYgKiBiNjtcbiAgdDEwICs9IHYgKiBiNztcbiAgdDExICs9IHYgKiBiODtcbiAgdDEyICs9IHYgKiBiOTtcbiAgdDEzICs9IHYgKiBiMTA7XG4gIHQxNCArPSB2ICogYjExO1xuICB0MTUgKz0gdiAqIGIxMjtcbiAgdDE2ICs9IHYgKiBiMTM7XG4gIHQxNyArPSB2ICogYjE0O1xuICB0MTggKz0gdiAqIGIxNTtcbiAgdiA9IGFbNF07XG4gIHQ0ICs9IHYgKiBiMDtcbiAgdDUgKz0gdiAqIGIxO1xuICB0NiArPSB2ICogYjI7XG4gIHQ3ICs9IHYgKiBiMztcbiAgdDggKz0gdiAqIGI0O1xuICB0OSArPSB2ICogYjU7XG4gIHQxMCArPSB2ICogYjY7XG4gIHQxMSArPSB2ICogYjc7XG4gIHQxMiArPSB2ICogYjg7XG4gIHQxMyArPSB2ICogYjk7XG4gIHQxNCArPSB2ICogYjEwO1xuICB0MTUgKz0gdiAqIGIxMTtcbiAgdDE2ICs9IHYgKiBiMTI7XG4gIHQxNyArPSB2ICogYjEzO1xuICB0MTggKz0gdiAqIGIxNDtcbiAgdDE5ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzVdO1xuICB0NSArPSB2ICogYjA7XG4gIHQ2ICs9IHYgKiBiMTtcbiAgdDcgKz0gdiAqIGIyO1xuICB0OCArPSB2ICogYjM7XG4gIHQ5ICs9IHYgKiBiNDtcbiAgdDEwICs9IHYgKiBiNTtcbiAgdDExICs9IHYgKiBiNjtcbiAgdDEyICs9IHYgKiBiNztcbiAgdDEzICs9IHYgKiBiODtcbiAgdDE0ICs9IHYgKiBiOTtcbiAgdDE1ICs9IHYgKiBiMTA7XG4gIHQxNiArPSB2ICogYjExO1xuICB0MTcgKz0gdiAqIGIxMjtcbiAgdDE4ICs9IHYgKiBiMTM7XG4gIHQxOSArPSB2ICogYjE0O1xuICB0MjAgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNl07XG4gIHQ2ICs9IHYgKiBiMDtcbiAgdDcgKz0gdiAqIGIxO1xuICB0OCArPSB2ICogYjI7XG4gIHQ5ICs9IHYgKiBiMztcbiAgdDEwICs9IHYgKiBiNDtcbiAgdDExICs9IHYgKiBiNTtcbiAgdDEyICs9IHYgKiBiNjtcbiAgdDEzICs9IHYgKiBiNztcbiAgdDE0ICs9IHYgKiBiODtcbiAgdDE1ICs9IHYgKiBiOTtcbiAgdDE2ICs9IHYgKiBiMTA7XG4gIHQxNyArPSB2ICogYjExO1xuICB0MTggKz0gdiAqIGIxMjtcbiAgdDE5ICs9IHYgKiBiMTM7XG4gIHQyMCArPSB2ICogYjE0O1xuICB0MjEgKz0gdiAqIGIxNTtcbiAgdiA9IGFbN107XG4gIHQ3ICs9IHYgKiBiMDtcbiAgdDggKz0gdiAqIGIxO1xuICB0OSArPSB2ICogYjI7XG4gIHQxMCArPSB2ICogYjM7XG4gIHQxMSArPSB2ICogYjQ7XG4gIHQxMiArPSB2ICogYjU7XG4gIHQxMyArPSB2ICogYjY7XG4gIHQxNCArPSB2ICogYjc7XG4gIHQxNSArPSB2ICogYjg7XG4gIHQxNiArPSB2ICogYjk7XG4gIHQxNyArPSB2ICogYjEwO1xuICB0MTggKz0gdiAqIGIxMTtcbiAgdDE5ICs9IHYgKiBiMTI7XG4gIHQyMCArPSB2ICogYjEzO1xuICB0MjEgKz0gdiAqIGIxNDtcbiAgdDIyICs9IHYgKiBiMTU7XG4gIHYgPSBhWzhdO1xuICB0OCArPSB2ICogYjA7XG4gIHQ5ICs9IHYgKiBiMTtcbiAgdDEwICs9IHYgKiBiMjtcbiAgdDExICs9IHYgKiBiMztcbiAgdDEyICs9IHYgKiBiNDtcbiAgdDEzICs9IHYgKiBiNTtcbiAgdDE0ICs9IHYgKiBiNjtcbiAgdDE1ICs9IHYgKiBiNztcbiAgdDE2ICs9IHYgKiBiODtcbiAgdDE3ICs9IHYgKiBiOTtcbiAgdDE4ICs9IHYgKiBiMTA7XG4gIHQxOSArPSB2ICogYjExO1xuICB0MjAgKz0gdiAqIGIxMjtcbiAgdDIxICs9IHYgKiBiMTM7XG4gIHQyMiArPSB2ICogYjE0O1xuICB0MjMgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOV07XG4gIHQ5ICs9IHYgKiBiMDtcbiAgdDEwICs9IHYgKiBiMTtcbiAgdDExICs9IHYgKiBiMjtcbiAgdDEyICs9IHYgKiBiMztcbiAgdDEzICs9IHYgKiBiNDtcbiAgdDE0ICs9IHYgKiBiNTtcbiAgdDE1ICs9IHYgKiBiNjtcbiAgdDE2ICs9IHYgKiBiNztcbiAgdDE3ICs9IHYgKiBiODtcbiAgdDE4ICs9IHYgKiBiOTtcbiAgdDE5ICs9IHYgKiBiMTA7XG4gIHQyMCArPSB2ICogYjExO1xuICB0MjEgKz0gdiAqIGIxMjtcbiAgdDIyICs9IHYgKiBiMTM7XG4gIHQyMyArPSB2ICogYjE0O1xuICB0MjQgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTBdO1xuICB0MTAgKz0gdiAqIGIwO1xuICB0MTEgKz0gdiAqIGIxO1xuICB0MTIgKz0gdiAqIGIyO1xuICB0MTMgKz0gdiAqIGIzO1xuICB0MTQgKz0gdiAqIGI0O1xuICB0MTUgKz0gdiAqIGI1O1xuICB0MTYgKz0gdiAqIGI2O1xuICB0MTcgKz0gdiAqIGI3O1xuICB0MTggKz0gdiAqIGI4O1xuICB0MTkgKz0gdiAqIGI5O1xuICB0MjAgKz0gdiAqIGIxMDtcbiAgdDIxICs9IHYgKiBiMTE7XG4gIHQyMiArPSB2ICogYjEyO1xuICB0MjMgKz0gdiAqIGIxMztcbiAgdDI0ICs9IHYgKiBiMTQ7XG4gIHQyNSArPSB2ICogYjE1O1xuICB2ID0gYVsxMV07XG4gIHQxMSArPSB2ICogYjA7XG4gIHQxMiArPSB2ICogYjE7XG4gIHQxMyArPSB2ICogYjI7XG4gIHQxNCArPSB2ICogYjM7XG4gIHQxNSArPSB2ICogYjQ7XG4gIHQxNiArPSB2ICogYjU7XG4gIHQxNyArPSB2ICogYjY7XG4gIHQxOCArPSB2ICogYjc7XG4gIHQxOSArPSB2ICogYjg7XG4gIHQyMCArPSB2ICogYjk7XG4gIHQyMSArPSB2ICogYjEwO1xuICB0MjIgKz0gdiAqIGIxMTtcbiAgdDIzICs9IHYgKiBiMTI7XG4gIHQyNCArPSB2ICogYjEzO1xuICB0MjUgKz0gdiAqIGIxNDtcbiAgdDI2ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzEyXTtcbiAgdDEyICs9IHYgKiBiMDtcbiAgdDEzICs9IHYgKiBiMTtcbiAgdDE0ICs9IHYgKiBiMjtcbiAgdDE1ICs9IHYgKiBiMztcbiAgdDE2ICs9IHYgKiBiNDtcbiAgdDE3ICs9IHYgKiBiNTtcbiAgdDE4ICs9IHYgKiBiNjtcbiAgdDE5ICs9IHYgKiBiNztcbiAgdDIwICs9IHYgKiBiODtcbiAgdDIxICs9IHYgKiBiOTtcbiAgdDIyICs9IHYgKiBiMTA7XG4gIHQyMyArPSB2ICogYjExO1xuICB0MjQgKz0gdiAqIGIxMjtcbiAgdDI1ICs9IHYgKiBiMTM7XG4gIHQyNiArPSB2ICogYjE0O1xuICB0MjcgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTNdO1xuICB0MTMgKz0gdiAqIGIwO1xuICB0MTQgKz0gdiAqIGIxO1xuICB0MTUgKz0gdiAqIGIyO1xuICB0MTYgKz0gdiAqIGIzO1xuICB0MTcgKz0gdiAqIGI0O1xuICB0MTggKz0gdiAqIGI1O1xuICB0MTkgKz0gdiAqIGI2O1xuICB0MjAgKz0gdiAqIGI3O1xuICB0MjEgKz0gdiAqIGI4O1xuICB0MjIgKz0gdiAqIGI5O1xuICB0MjMgKz0gdiAqIGIxMDtcbiAgdDI0ICs9IHYgKiBiMTE7XG4gIHQyNSArPSB2ICogYjEyO1xuICB0MjYgKz0gdiAqIGIxMztcbiAgdDI3ICs9IHYgKiBiMTQ7XG4gIHQyOCArPSB2ICogYjE1O1xuICB2ID0gYVsxNF07XG4gIHQxNCArPSB2ICogYjA7XG4gIHQxNSArPSB2ICogYjE7XG4gIHQxNiArPSB2ICogYjI7XG4gIHQxNyArPSB2ICogYjM7XG4gIHQxOCArPSB2ICogYjQ7XG4gIHQxOSArPSB2ICogYjU7XG4gIHQyMCArPSB2ICogYjY7XG4gIHQyMSArPSB2ICogYjc7XG4gIHQyMiArPSB2ICogYjg7XG4gIHQyMyArPSB2ICogYjk7XG4gIHQyNCArPSB2ICogYjEwO1xuICB0MjUgKz0gdiAqIGIxMTtcbiAgdDI2ICs9IHYgKiBiMTI7XG4gIHQyNyArPSB2ICogYjEzO1xuICB0MjggKz0gdiAqIGIxNDtcbiAgdDI5ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE1XTtcbiAgdDE1ICs9IHYgKiBiMDtcbiAgdDE2ICs9IHYgKiBiMTtcbiAgdDE3ICs9IHYgKiBiMjtcbiAgdDE4ICs9IHYgKiBiMztcbiAgdDE5ICs9IHYgKiBiNDtcbiAgdDIwICs9IHYgKiBiNTtcbiAgdDIxICs9IHYgKiBiNjtcbiAgdDIyICs9IHYgKiBiNztcbiAgdDIzICs9IHYgKiBiODtcbiAgdDI0ICs9IHYgKiBiOTtcbiAgdDI1ICs9IHYgKiBiMTA7XG4gIHQyNiArPSB2ICogYjExO1xuICB0MjcgKz0gdiAqIGIxMjtcbiAgdDI4ICs9IHYgKiBiMTM7XG4gIHQyOSArPSB2ICogYjE0O1xuICB0MzAgKz0gdiAqIGIxNTtcblxuICB0MCAgKz0gMzggKiB0MTY7XG4gIHQxICArPSAzOCAqIHQxNztcbiAgdDIgICs9IDM4ICogdDE4O1xuICB0MyAgKz0gMzggKiB0MTk7XG4gIHQ0ICArPSAzOCAqIHQyMDtcbiAgdDUgICs9IDM4ICogdDIxO1xuICB0NiAgKz0gMzggKiB0MjI7XG4gIHQ3ICArPSAzOCAqIHQyMztcbiAgdDggICs9IDM4ICogdDI0O1xuICB0OSAgKz0gMzggKiB0MjU7XG4gIHQxMCArPSAzOCAqIHQyNjtcbiAgdDExICs9IDM4ICogdDI3O1xuICB0MTIgKz0gMzggKiB0Mjg7XG4gIHQxMyArPSAzOCAqIHQyOTtcbiAgdDE0ICs9IDM4ICogdDMwO1xuICAvLyB0MTUgbGVmdCBhcyBpc1xuXG4gIC8vIGZpcnN0IGNhclxuICBjID0gMTtcbiAgdiA9ICB0MCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQxID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ2ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ3ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ4ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ5ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDExID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdDAgKz0gYy0xICsgMzcgKiAoYy0xKTtcblxuICAvLyBzZWNvbmQgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIG9bIDBdID0gdDA7XG4gIG9bIDFdID0gdDE7XG4gIG9bIDJdID0gdDI7XG4gIG9bIDNdID0gdDM7XG4gIG9bIDRdID0gdDQ7XG4gIG9bIDVdID0gdDU7XG4gIG9bIDZdID0gdDY7XG4gIG9bIDddID0gdDc7XG4gIG9bIDhdID0gdDg7XG4gIG9bIDldID0gdDk7XG4gIG9bMTBdID0gdDEwO1xuICBvWzExXSA9IHQxMTtcbiAgb1sxMl0gPSB0MTI7XG4gIG9bMTNdID0gdDEzO1xuICBvWzE0XSA9IHQxNDtcbiAgb1sxNV0gPSB0MTU7XG59XG5cbmZ1bmN0aW9uIFMobywgYSkge1xuICBNKG8sIGEsIGEpO1xufVxuXG5mdW5jdGlvbiBpbnYyNTUxOShvLCBpKSB7XG4gIHZhciBjID0gZ2YoKTtcbiAgdmFyIGE7XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBjW2FdID0gaVthXTtcbiAgZm9yIChhID0gMjUzOyBhID49IDA7IGEtLSkge1xuICAgIFMoYywgYyk7XG4gICAgaWYoYSAhPT0gMiAmJiBhICE9PSA0KSBNKGMsIGMsIGkpO1xuICB9XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBvW2FdID0gY1thXTtcbn1cblxuZnVuY3Rpb24gcG93MjUyMyhvLCBpKSB7XG4gIHZhciBjID0gZ2YoKTtcbiAgdmFyIGE7XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBjW2FdID0gaVthXTtcbiAgZm9yIChhID0gMjUwOyBhID49IDA7IGEtLSkge1xuICAgICAgUyhjLCBjKTtcbiAgICAgIGlmKGEgIT09IDEpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBwKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICB2YXIgeCA9IG5ldyBGbG9hdDY0QXJyYXkoODApLCByLCBpO1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCk7XG4gIGZvciAoaSA9IDA7IGkgPCAzMTsgaSsrKSB6W2ldID0gbltpXTtcbiAgelszMV09KG5bMzFdJjEyNyl8NjQ7XG4gIHpbMF0mPTI0ODtcbiAgdW5wYWNrMjU1MTkoeCxwKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBiW2ldPXhbaV07XG4gICAgZFtpXT1hW2ldPWNbaV09MDtcbiAgfVxuICBhWzBdPWRbMF09MTtcbiAgZm9yIChpPTI1NDsgaT49MDsgLS1pKSB7XG4gICAgcj0oeltpPj4+M10+Pj4oaSY3KSkmMTtcbiAgICBzZWwyNTUxOShhLGIscik7XG4gICAgc2VsMjU1MTkoYyxkLHIpO1xuICAgIEEoZSxhLGMpO1xuICAgIFooYSxhLGMpO1xuICAgIEEoYyxiLGQpO1xuICAgIFooYixiLGQpO1xuICAgIFMoZCxlKTtcbiAgICBTKGYsYSk7XG4gICAgTShhLGMsYSk7XG4gICAgTShjLGIsZSk7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgUyhiLGEpO1xuICAgIFooYyxkLGYpO1xuICAgIE0oYSxjLF8xMjE2NjUpO1xuICAgIEEoYSxhLGQpO1xuICAgIE0oYyxjLGEpO1xuICAgIE0oYSxkLGYpO1xuICAgIE0oZCxiLHgpO1xuICAgIFMoYixlKTtcbiAgICBzZWwyNTUxOShhLGIscik7XG4gICAgc2VsMjU1MTkoYyxkLHIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgeFtpKzE2XT1hW2ldO1xuICAgIHhbaSszMl09Y1tpXTtcbiAgICB4W2krNDhdPWJbaV07XG4gICAgeFtpKzY0XT1kW2ldO1xuICB9XG4gIHZhciB4MzIgPSB4LnN1YmFycmF5KDMyKTtcbiAgdmFyIHgxNiA9IHguc3ViYXJyYXkoMTYpO1xuICBpbnYyNTUxOSh4MzIseDMyKTtcbiAgTSh4MTYseDE2LHgzMik7XG4gIHBhY2syNTUxOShxLHgxNik7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHEsIG4pIHtcbiAgcmV0dXJuIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIF85KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9rZXlwYWlyKHksIHgpIHtcbiAgcmFuZG9tYnl0ZXMoeCwgMzIpO1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHRfYmFzZSh5LCB4KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fc2NhbGFybXVsdChzLCB4LCB5KTtcbiAgcmV0dXJuIGNyeXB0b19jb3JlX2hzYWxzYTIwKGssIF8wLCBzLCBzaWdtYSk7XG59XG5cbnZhciBjcnlwdG9fYm94X2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94O1xudmFyIGNyeXB0b19ib3hfb3Blbl9hZnRlcm5tID0gY3J5cHRvX3NlY3JldGJveF9vcGVuO1xuXG5mdW5jdGlvbiBjcnlwdG9fYm94KGMsIG0sIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X2FmdGVybm0oYywgbSwgZCwgbiwgayk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3hfb3BlbihtLCBjLCBkLCBuLCB5LCB4KSB7XG4gIHZhciBrID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpO1xuICByZXR1cm4gY3J5cHRvX2JveF9vcGVuX2FmdGVybm0obSwgYywgZCwgbiwgayk7XG59XG5cbnZhciBLID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG5mdW5jdGlvbiBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIG0sIG4pIHtcbiAgdmFyIHdoID0gbmV3IEludDMyQXJyYXkoMTYpLCB3bCA9IG5ldyBJbnQzMkFycmF5KDE2KSxcbiAgICAgIGJoMCwgYmgxLCBiaDIsIGJoMywgYmg0LCBiaDUsIGJoNiwgYmg3LFxuICAgICAgYmwwLCBibDEsIGJsMiwgYmwzLCBibDQsIGJsNSwgYmw2LCBibDcsXG4gICAgICB0aCwgdGwsIGksIGosIGgsIGwsIGEsIGIsIGMsIGQ7XG5cbiAgdmFyIGFoMCA9IGhoWzBdLFxuICAgICAgYWgxID0gaGhbMV0sXG4gICAgICBhaDIgPSBoaFsyXSxcbiAgICAgIGFoMyA9IGhoWzNdLFxuICAgICAgYWg0ID0gaGhbNF0sXG4gICAgICBhaDUgPSBoaFs1XSxcbiAgICAgIGFoNiA9IGhoWzZdLFxuICAgICAgYWg3ID0gaGhbN10sXG5cbiAgICAgIGFsMCA9IGhsWzBdLFxuICAgICAgYWwxID0gaGxbMV0sXG4gICAgICBhbDIgPSBobFsyXSxcbiAgICAgIGFsMyA9IGhsWzNdLFxuICAgICAgYWw0ID0gaGxbNF0sXG4gICAgICBhbDUgPSBobFs1XSxcbiAgICAgIGFsNiA9IGhsWzZdLFxuICAgICAgYWw3ID0gaGxbN107XG5cbiAgdmFyIHBvcyA9IDA7XG4gIHdoaWxlIChuID49IDEyOCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBqID0gOCAqIGkgKyBwb3M7XG4gICAgICB3aFtpXSA9IChtW2orMF0gPDwgMjQpIHwgKG1baisxXSA8PCAxNikgfCAobVtqKzJdIDw8IDgpIHwgbVtqKzNdO1xuICAgICAgd2xbaV0gPSAobVtqKzRdIDw8IDI0KSB8IChtW2orNV0gPDwgMTYpIHwgKG1bais2XSA8PCA4KSB8IG1bais3XTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgIGJoMCA9IGFoMDtcbiAgICAgIGJoMSA9IGFoMTtcbiAgICAgIGJoMiA9IGFoMjtcbiAgICAgIGJoMyA9IGFoMztcbiAgICAgIGJoNCA9IGFoNDtcbiAgICAgIGJoNSA9IGFoNTtcbiAgICAgIGJoNiA9IGFoNjtcbiAgICAgIGJoNyA9IGFoNztcblxuICAgICAgYmwwID0gYWwwO1xuICAgICAgYmwxID0gYWwxO1xuICAgICAgYmwyID0gYWwyO1xuICAgICAgYmwzID0gYWwzO1xuICAgICAgYmw0ID0gYWw0O1xuICAgICAgYmw1ID0gYWw1O1xuICAgICAgYmw2ID0gYWw2O1xuICAgICAgYmw3ID0gYWw3O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSBhaDc7XG4gICAgICBsID0gYWw3O1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgLy8gU2lnbWExXG4gICAgICBoID0gKChhaDQgPj4+IDE0KSB8IChhbDQgPDwgKDMyLTE0KSkpIF4gKChhaDQgPj4+IDE4KSB8IChhbDQgPDwgKDMyLTE4KSkpIF4gKChhbDQgPj4+ICg0MS0zMikpIHwgKGFoNCA8PCAoMzItKDQxLTMyKSkpKTtcbiAgICAgIGwgPSAoKGFsNCA+Pj4gMTQpIHwgKGFoNCA8PCAoMzItMTQpKSkgXiAoKGFsNCA+Pj4gMTgpIHwgKGFoNCA8PCAoMzItMTgpKSkgXiAoKGFoNCA+Pj4gKDQxLTMyKSkgfCAoYWw0IDw8ICgzMi0oNDEtMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIENoXG4gICAgICBoID0gKGFoNCAmIGFoNSkgXiAofmFoNCAmIGFoNik7XG4gICAgICBsID0gKGFsNCAmIGFsNSkgXiAofmFsNCAmIGFsNik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gS1xuICAgICAgaCA9IEtbaSoyXTtcbiAgICAgIGwgPSBLW2kqMisxXTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyB3XG4gICAgICBoID0gd2hbaSUxNl07XG4gICAgICBsID0gd2xbaSUxNl07XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICB0aCA9IGMgJiAweGZmZmYgfCBkIDw8IDE2O1xuICAgICAgdGwgPSBhICYgMHhmZmZmIHwgYiA8PCAxNjtcblxuICAgICAgLy8gYWRkXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTBcbiAgICAgIGggPSAoKGFoMCA+Pj4gMjgpIHwgKGFsMCA8PCAoMzItMjgpKSkgXiAoKGFsMCA+Pj4gKDM0LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzQtMzIpKSkpIF4gKChhbDAgPj4+ICgzOS0zMikpIHwgKGFoMCA8PCAoMzItKDM5LTMyKSkpKTtcbiAgICAgIGwgPSAoKGFsMCA+Pj4gMjgpIHwgKGFoMCA8PCAoMzItMjgpKSkgXiAoKGFoMCA+Pj4gKDM0LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzQtMzIpKSkpIF4gKChhaDAgPj4+ICgzOS0zMikpIHwgKGFsMCA8PCAoMzItKDM5LTMyKSkpKTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBNYWpcbiAgICAgIGggPSAoYWgwICYgYWgxKSBeIChhaDAgJiBhaDIpIF4gKGFoMSAmIGFoMik7XG4gICAgICBsID0gKGFsMCAmIGFsMSkgXiAoYWwwICYgYWwyKSBeIChhbDEgJiBhbDIpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgYmg3ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgYmw3ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSBiaDM7XG4gICAgICBsID0gYmwzO1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgaCA9IHRoO1xuICAgICAgbCA9IHRsO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgYmgzID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgYmwzID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgICBhaDEgPSBiaDA7XG4gICAgICBhaDIgPSBiaDE7XG4gICAgICBhaDMgPSBiaDI7XG4gICAgICBhaDQgPSBiaDM7XG4gICAgICBhaDUgPSBiaDQ7XG4gICAgICBhaDYgPSBiaDU7XG4gICAgICBhaDcgPSBiaDY7XG4gICAgICBhaDAgPSBiaDc7XG5cbiAgICAgIGFsMSA9IGJsMDtcbiAgICAgIGFsMiA9IGJsMTtcbiAgICAgIGFsMyA9IGJsMjtcbiAgICAgIGFsNCA9IGJsMztcbiAgICAgIGFsNSA9IGJsNDtcbiAgICAgIGFsNiA9IGJsNTtcbiAgICAgIGFsNyA9IGJsNjtcbiAgICAgIGFsMCA9IGJsNztcblxuICAgICAgaWYgKGklMTYgPT09IDE1KSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7XG4gICAgICAgICAgLy8gYWRkXG4gICAgICAgICAgaCA9IHdoW2pdO1xuICAgICAgICAgIGwgPSB3bFtqXTtcblxuICAgICAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgICAgIGggPSB3aFsoais5KSUxNl07XG4gICAgICAgICAgbCA9IHdsWyhqKzkpJTE2XTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICAvLyBzaWdtYTBcbiAgICAgICAgICB0aCA9IHdoWyhqKzEpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzEpJTE2XTtcbiAgICAgICAgICBoID0gKCh0aCA+Pj4gMSkgfCAodGwgPDwgKDMyLTEpKSkgXiAoKHRoID4+PiA4KSB8ICh0bCA8PCAoMzItOCkpKSBeICh0aCA+Pj4gNyk7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDEpIHwgKHRoIDw8ICgzMi0xKSkpIF4gKCh0bCA+Pj4gOCkgfCAodGggPDwgKDMyLTgpKSkgXiAoKHRsID4+PiA3KSB8ICh0aCA8PCAoMzItNykpKTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICAvLyBzaWdtYTFcbiAgICAgICAgICB0aCA9IHdoWyhqKzE0KSUxNl07XG4gICAgICAgICAgdGwgPSB3bFsoaisxNCklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxOSkgfCAodGwgPDwgKDMyLTE5KSkpIF4gKCh0bCA+Pj4gKDYxLTMyKSkgfCAodGggPDwgKDMyLSg2MS0zMikpKSkgXiAodGggPj4+IDYpO1xuICAgICAgICAgIGwgPSAoKHRsID4+PiAxOSkgfCAodGggPDwgKDMyLTE5KSkpIF4gKCh0aCA+Pj4gKDYxLTMyKSkgfCAodGwgPDwgKDMyLSg2MS0zMikpKSkgXiAoKHRsID4+PiA2KSB8ICh0aCA8PCAoMzItNikpKTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgICAgIHdoW2pdID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgICAgIHdsW2pdID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkXG4gICAgaCA9IGFoMDtcbiAgICBsID0gYWwwO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzBdO1xuICAgIGwgPSBobFswXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzBdID0gYWgwID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzBdID0gYWwwID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMTtcbiAgICBsID0gYWwxO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzFdO1xuICAgIGwgPSBobFsxXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzFdID0gYWgxID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzFdID0gYWwxID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMjtcbiAgICBsID0gYWwyO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzJdO1xuICAgIGwgPSBobFsyXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzJdID0gYWgyID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzJdID0gYWwyID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMztcbiAgICBsID0gYWwzO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzNdO1xuICAgIGwgPSBobFszXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzNdID0gYWgzID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzNdID0gYWwzID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNDtcbiAgICBsID0gYWw0O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzRdO1xuICAgIGwgPSBobFs0XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzRdID0gYWg0ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzRdID0gYWw0ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNTtcbiAgICBsID0gYWw1O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzVdO1xuICAgIGwgPSBobFs1XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzVdID0gYWg1ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzVdID0gYWw1ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNjtcbiAgICBsID0gYWw2O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzZdO1xuICAgIGwgPSBobFs2XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzZdID0gYWg2ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzZdID0gYWw2ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNztcbiAgICBsID0gYWw3O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzddO1xuICAgIGwgPSBobFs3XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzddID0gYWg3ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzddID0gYWw3ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgcG9zICs9IDEyODtcbiAgICBuIC09IDEyODtcbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9faGFzaChvdXQsIG0sIG4pIHtcbiAgdmFyIGhoID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICBobCA9IG5ldyBJbnQzMkFycmF5KDgpLFxuICAgICAgeCA9IG5ldyBVaW50OEFycmF5KDI1NiksXG4gICAgICBpLCBiID0gbjtcblxuICBoaFswXSA9IDB4NmEwOWU2Njc7XG4gIGhoWzFdID0gMHhiYjY3YWU4NTtcbiAgaGhbMl0gPSAweDNjNmVmMzcyO1xuICBoaFszXSA9IDB4YTU0ZmY1M2E7XG4gIGhoWzRdID0gMHg1MTBlNTI3ZjtcbiAgaGhbNV0gPSAweDliMDU2ODhjO1xuICBoaFs2XSA9IDB4MWY4M2Q5YWI7XG4gIGhoWzddID0gMHg1YmUwY2QxOTtcblxuICBobFswXSA9IDB4ZjNiY2M5MDg7XG4gIGhsWzFdID0gMHg4NGNhYTczYjtcbiAgaGxbMl0gPSAweGZlOTRmODJiO1xuICBobFszXSA9IDB4NWYxZDM2ZjE7XG4gIGhsWzRdID0gMHhhZGU2ODJkMTtcbiAgaGxbNV0gPSAweDJiM2U2YzFmO1xuICBobFs2XSA9IDB4ZmI0MWJkNmI7XG4gIGhsWzddID0gMHgxMzdlMjE3OTtcblxuICBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIG0sIG4pO1xuICBuICU9IDEyODtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gbVtiLW4raV07XG4gIHhbbl0gPSAxMjg7XG5cbiAgbiA9IDI1Ni0xMjgqKG48MTEyPzE6MCk7XG4gIHhbbi05XSA9IDA7XG4gIHRzNjQoeCwgbi04LCAgKGIgLyAweDIwMDAwMDAwKSB8IDAsIGIgPDwgMyk7XG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgeCwgbik7XG5cbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgdHM2NChvdXQsIDgqaSwgaGhbaV0sIGhsW2ldKTtcblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gYWRkKHAsIHEpIHtcbiAgdmFyIGEgPSBnZigpLCBiID0gZ2YoKSwgYyA9IGdmKCksXG4gICAgICBkID0gZ2YoKSwgZSA9IGdmKCksIGYgPSBnZigpLFxuICAgICAgZyA9IGdmKCksIGggPSBnZigpLCB0ID0gZ2YoKTtcblxuICBaKGEsIHBbMV0sIHBbMF0pO1xuICBaKHQsIHFbMV0sIHFbMF0pO1xuICBNKGEsIGEsIHQpO1xuICBBKGIsIHBbMF0sIHBbMV0pO1xuICBBKHQsIHFbMF0sIHFbMV0pO1xuICBNKGIsIGIsIHQpO1xuICBNKGMsIHBbM10sIHFbM10pO1xuICBNKGMsIGMsIEQyKTtcbiAgTShkLCBwWzJdLCBxWzJdKTtcbiAgQShkLCBkLCBkKTtcbiAgWihlLCBiLCBhKTtcbiAgWihmLCBkLCBjKTtcbiAgQShnLCBkLCBjKTtcbiAgQShoLCBiLCBhKTtcblxuICBNKHBbMF0sIGUsIGYpO1xuICBNKHBbMV0sIGgsIGcpO1xuICBNKHBbMl0sIGcsIGYpO1xuICBNKHBbM10sIGUsIGgpO1xufVxuXG5mdW5jdGlvbiBjc3dhcChwLCBxLCBiKSB7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgc2VsMjU1MTkocFtpXSwgcVtpXSwgYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjayhyLCBwKSB7XG4gIHZhciB0eCA9IGdmKCksIHR5ID0gZ2YoKSwgemkgPSBnZigpO1xuICBpbnYyNTUxOSh6aSwgcFsyXSk7XG4gIE0odHgsIHBbMF0sIHppKTtcbiAgTSh0eSwgcFsxXSwgemkpO1xuICBwYWNrMjU1MTkociwgdHkpO1xuICByWzMxXSBePSBwYXIyNTUxOSh0eCkgPDwgNztcbn1cblxuZnVuY3Rpb24gc2NhbGFybXVsdChwLCBxLCBzKSB7XG4gIHZhciBiLCBpO1xuICBzZXQyNTUxOShwWzBdLCBnZjApO1xuICBzZXQyNTUxOShwWzFdLCBnZjEpO1xuICBzZXQyNTUxOShwWzJdLCBnZjEpO1xuICBzZXQyNTUxOShwWzNdLCBnZjApO1xuICBmb3IgKGkgPSAyNTU7IGkgPj0gMDsgLS1pKSB7XG4gICAgYiA9IChzWyhpLzgpfDBdID4+IChpJjcpKSAmIDE7XG4gICAgY3N3YXAocCwgcSwgYik7XG4gICAgYWRkKHEsIHApO1xuICAgIGFkZChwLCBwKTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2FsYXJiYXNlKHAsIHMpIHtcbiAgdmFyIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG4gIHNldDI1NTE5KHFbMF0sIFgpO1xuICBzZXQyNTUxOShxWzFdLCBZKTtcbiAgc2V0MjU1MTkocVsyXSwgZ2YxKTtcbiAgTShxWzNdLCBYLCBZKTtcbiAgc2NhbGFybXVsdChwLCBxLCBzKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2ssIHNlZWRlZCkge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG4gIHZhciBpO1xuXG4gIGlmICghc2VlZGVkKSByYW5kb21ieXRlcyhzaywgMzIpO1xuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICBzY2FsYXJiYXNlKHAsIGQpO1xuICBwYWNrKHBrLCBwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc2tbaSszMl0gPSBwa1tpXTtcbiAgcmV0dXJuIDA7XG59XG5cbnZhciBMID0gbmV3IEZsb2F0NjRBcnJheShbMHhlZCwgMHhkMywgMHhmNSwgMHg1YywgMHgxYSwgMHg2MywgMHgxMiwgMHg1OCwgMHhkNiwgMHg5YywgMHhmNywgMHhhMiwgMHhkZSwgMHhmOSwgMHhkZSwgMHgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgxMF0pO1xuXG5mdW5jdGlvbiBtb2RMKHIsIHgpIHtcbiAgdmFyIGNhcnJ5LCBpLCBqLCBrO1xuICBmb3IgKGkgPSA2MzsgaSA+PSAzMjsgLS1pKSB7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaiA9IGkgLSAzMiwgayA9IGkgLSAxMjsgaiA8IGs7ICsraikge1xuICAgICAgeFtqXSArPSBjYXJyeSAtIDE2ICogeFtpXSAqIExbaiAtIChpIC0gMzIpXTtcbiAgICAgIGNhcnJ5ID0gKHhbal0gKyAxMjgpID4+IDg7XG4gICAgICB4W2pdIC09IGNhcnJ5ICogMjU2O1xuICAgIH1cbiAgICB4W2pdICs9IGNhcnJ5O1xuICAgIHhbaV0gPSAwO1xuICB9XG4gIGNhcnJ5ID0gMDtcbiAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHtcbiAgICB4W2pdICs9IGNhcnJ5IC0gKHhbMzFdID4+IDQpICogTFtqXTtcbiAgICBjYXJyeSA9IHhbal0gPj4gODtcbiAgICB4W2pdICY9IDI1NTtcbiAgfVxuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgeFtqXSAtPSBjYXJyeSAqIExbal07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgeFtpKzFdICs9IHhbaV0gPj4gODtcbiAgICByW2ldID0geFtpXSAmIDI1NTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2Uocikge1xuICB2YXIgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpLCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IHJbaV07XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSByW2ldID0gMDtcbiAgbW9kTChyLCB4KTtcbn1cblxuLy8gTm90ZTogZGlmZmVyZW5jZSBmcm9tIEMgLSBzbWxlbiByZXR1cm5lZCwgbm90IHBhc3NlZCBhcyBhcmd1bWVudC5cbmZ1bmN0aW9uIGNyeXB0b19zaWduKHNtLCBtLCBuLCBzaykge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDY0KSwgaCA9IG5ldyBVaW50OEFycmF5KDY0KSwgciA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIGksIGosIHggPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgY3J5cHRvX2hhc2goZCwgc2ssIDMyKTtcbiAgZFswXSAmPSAyNDg7XG4gIGRbMzFdICY9IDEyNztcbiAgZFszMV0gfD0gNjQ7XG5cbiAgdmFyIHNtbGVuID0gbiArIDY0O1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBzbVs2NCArIGldID0gbVtpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHNtWzMyICsgaV0gPSBkWzMyICsgaV07XG5cbiAgY3J5cHRvX2hhc2gociwgc20uc3ViYXJyYXkoMzIpLCBuKzMyKTtcbiAgcmVkdWNlKHIpO1xuICBzY2FsYXJiYXNlKHAsIHIpO1xuICBwYWNrKHNtLCBwKTtcblxuICBmb3IgKGkgPSAzMjsgaSA8IDY0OyBpKyspIHNtW2ldID0gc2tbaV07XG4gIGNyeXB0b19oYXNoKGgsIHNtLCBuICsgNjQpO1xuICByZWR1Y2UoaCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHhbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeFtpXSA9IHJbaV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHtcbiAgICAgIHhbaStqXSArPSBoW2ldICogZFtqXTtcbiAgICB9XG4gIH1cblxuICBtb2RMKHNtLnN1YmFycmF5KDMyKSwgeCk7XG4gIHJldHVybiBzbWxlbjtcbn1cblxuZnVuY3Rpb24gdW5wYWNrbmVnKHIsIHApIHtcbiAgdmFyIHQgPSBnZigpLCBjaGsgPSBnZigpLCBudW0gPSBnZigpLFxuICAgICAgZGVuID0gZ2YoKSwgZGVuMiA9IGdmKCksIGRlbjQgPSBnZigpLFxuICAgICAgZGVuNiA9IGdmKCk7XG5cbiAgc2V0MjU1MTkoclsyXSwgZ2YxKTtcbiAgdW5wYWNrMjU1MTkoclsxXSwgcCk7XG4gIFMobnVtLCByWzFdKTtcbiAgTShkZW4sIG51bSwgRCk7XG4gIFoobnVtLCBudW0sIHJbMl0pO1xuICBBKGRlbiwgclsyXSwgZGVuKTtcblxuICBTKGRlbjIsIGRlbik7XG4gIFMoZGVuNCwgZGVuMik7XG4gIE0oZGVuNiwgZGVuNCwgZGVuMik7XG4gIE0odCwgZGVuNiwgbnVtKTtcbiAgTSh0LCB0LCBkZW4pO1xuXG4gIHBvdzI1MjModCwgdCk7XG4gIE0odCwgdCwgbnVtKTtcbiAgTSh0LCB0LCBkZW4pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0oclswXSwgdCwgZGVuKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIE0oclswXSwgclswXSwgSSk7XG5cbiAgUyhjaGssIHJbMF0pO1xuICBNKGNoaywgY2hrLCBkZW4pO1xuICBpZiAobmVxMjU1MTkoY2hrLCBudW0pKSByZXR1cm4gLTE7XG5cbiAgaWYgKHBhcjI1NTE5KHJbMF0pID09PSAocFszMV0+PjcpKSBaKHJbMF0sIGdmMCwgclswXSk7XG5cbiAgTShyWzNdLCByWzBdLCByWzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zaWduX29wZW4obSwgc20sIG4sIHBrKSB7XG4gIHZhciBpLCBtbGVuO1xuICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KDMyKSwgaCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV0sXG4gICAgICBxID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldO1xuXG4gIG1sZW4gPSAtMTtcbiAgaWYgKG4gPCA2NCkgcmV0dXJuIC0xO1xuXG4gIGlmICh1bnBhY2tuZWcocSwgcGspKSByZXR1cm4gLTE7XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgbVtpKzMyXSA9IHBrW2ldO1xuICBjcnlwdG9faGFzaChoLCBtLCBuKTtcbiAgcmVkdWNlKGgpO1xuICBzY2FsYXJtdWx0KHAsIHEsIGgpO1xuXG4gIHNjYWxhcmJhc2UocSwgc20uc3ViYXJyYXkoMzIpKTtcbiAgYWRkKHAsIHEpO1xuICBwYWNrKHQsIHApO1xuXG4gIG4gLT0gNjQ7XG4gIGlmIChjcnlwdG9fdmVyaWZ5XzMyKHNtLCAwLCB0LCAwKSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSBzbVtpICsgNjRdO1xuICBtbGVuID0gbjtcbiAgcmV0dXJuIG1sZW47XG59XG5cbnZhciBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTID0gMjQsXG4gICAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyA9IDE2LFxuICAgIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfTk9OQ0VCWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgICBjcnlwdG9fYm94X1pFUk9CWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICAgIGNyeXB0b19ib3hfQk9YWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gICAgY3J5cHRvX3NpZ25fQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTID0gNjQsXG4gICAgY3J5cHRvX3NpZ25fU0VFREJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2hhc2hfQllURVMgPSA2NDtcblxubmFjbC5sb3dsZXZlbCA9IHtcbiAgY3J5cHRvX2NvcmVfaHNhbHNhMjA6IGNyeXB0b19jb3JlX2hzYWxzYTIwLFxuICBjcnlwdG9fc3RyZWFtX3hvcjogY3J5cHRvX3N0cmVhbV94b3IsXG4gIGNyeXB0b19zdHJlYW06IGNyeXB0b19zdHJlYW0sXG4gIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3I6IGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IsXG4gIGNyeXB0b19zdHJlYW1fc2Fsc2EyMDogY3J5cHRvX3N0cmVhbV9zYWxzYTIwLFxuICBjcnlwdG9fb25ldGltZWF1dGg6IGNyeXB0b19vbmV0aW1lYXV0aCxcbiAgY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeTogY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeSxcbiAgY3J5cHRvX3ZlcmlmeV8xNjogY3J5cHRvX3ZlcmlmeV8xNixcbiAgY3J5cHRvX3ZlcmlmeV8zMjogY3J5cHRvX3ZlcmlmeV8zMixcbiAgY3J5cHRvX3NlY3JldGJveDogY3J5cHRvX3NlY3JldGJveCxcbiAgY3J5cHRvX3NlY3JldGJveF9vcGVuOiBjcnlwdG9fc2VjcmV0Ym94X29wZW4sXG4gIGNyeXB0b19zY2FsYXJtdWx0OiBjcnlwdG9fc2NhbGFybXVsdCxcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZTogY3J5cHRvX3NjYWxhcm11bHRfYmFzZSxcbiAgY3J5cHRvX2JveF9iZWZvcmVubTogY3J5cHRvX2JveF9iZWZvcmVubSxcbiAgY3J5cHRvX2JveF9hZnRlcm5tOiBjcnlwdG9fYm94X2FmdGVybm0sXG4gIGNyeXB0b19ib3g6IGNyeXB0b19ib3gsXG4gIGNyeXB0b19ib3hfb3BlbjogY3J5cHRvX2JveF9vcGVuLFxuICBjcnlwdG9fYm94X2tleXBhaXI6IGNyeXB0b19ib3hfa2V5cGFpcixcbiAgY3J5cHRvX2hhc2g6IGNyeXB0b19oYXNoLFxuICBjcnlwdG9fc2lnbjogY3J5cHRvX3NpZ24sXG4gIGNyeXB0b19zaWduX2tleXBhaXI6IGNyeXB0b19zaWduX2tleXBhaXIsXG4gIGNyeXB0b19zaWduX29wZW46IGNyeXB0b19zaWduX29wZW4sXG5cbiAgY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUzogY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMsXG4gIGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUzogY3J5cHRvX3NjYWxhcm11bHRfQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyxcbiAgY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUzogY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUzogY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyxcbiAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTOiBjcnlwdG9fYm94X0JFRk9SRU5NQllURVMsXG4gIGNyeXB0b19ib3hfTk9OQ0VCWVRFUzogY3J5cHRvX2JveF9OT05DRUJZVEVTLFxuICBjcnlwdG9fYm94X1pFUk9CWVRFUzogY3J5cHRvX2JveF9aRVJPQllURVMsXG4gIGNyeXB0b19ib3hfQk9YWkVST0JZVEVTOiBjcnlwdG9fYm94X0JPWFpFUk9CWVRFUyxcbiAgY3J5cHRvX3NpZ25fQllURVM6IGNyeXB0b19zaWduX0JZVEVTLFxuICBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUzogY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMsXG4gIGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VFREJZVEVTOiBjcnlwdG9fc2lnbl9TRUVEQllURVMsXG4gIGNyeXB0b19oYXNoX0JZVEVTOiBjcnlwdG9faGFzaF9CWVRFU1xufTtcblxuLyogSGlnaC1sZXZlbCBBUEkgKi9cblxuZnVuY3Rpb24gY2hlY2tMZW5ndGhzKGssIG4pIHtcbiAgaWYgKGsubGVuZ3RoICE9PSBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBrZXkgc2l6ZScpO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgbm9uY2Ugc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0JveExlbmd0aHMocGssIHNrKSB7XG4gIGlmIChway5sZW5ndGggIT09IGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICBpZiAoc2subGVuZ3RoICE9PSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBcnJheVR5cGVzKCkge1xuICB2YXIgdCwgaTtcbiAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAoKHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW2ldKSkgIT09ICdbb2JqZWN0IFVpbnQ4QXJyYXldJylcbiAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIHR5cGUgJyArIHQgKyAnLCB1c2UgVWludDhBcnJheScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFudXAoYXJyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnJbaV0gPSAwO1xufVxuXG4vLyBUT0RPOiBDb21wbGV0ZWx5IHJlbW92ZSB0aGlzIGluIHYwLjE1LlxuaWYgKCFuYWNsLnV0aWwpIHtcbiAgbmFjbC51dGlsID0ge307XG4gIG5hY2wudXRpbC5kZWNvZGVVVEY4ID0gbmFjbC51dGlsLmVuY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlQmFzZTY0ID0gbmFjbC51dGlsLmRlY29kZUJhc2U2NCA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbmFjbC51dGlsIG1vdmVkIGludG8gc2VwYXJhdGUgcGFja2FnZTogaHR0cHM6Ly9naXRodWIuY29tL2RjaGVzdC90d2VldG5hY2wtdXRpbC1qcycpO1xuICB9O1xufVxuXG5uYWNsLnJhbmRvbUJ5dGVzID0gZnVuY3Rpb24obikge1xuICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KG4pO1xuICByYW5kb21ieXRlcyhiLCBuKTtcbiAgcmV0dXJuIGI7XG59O1xuXG5uYWNsLnNlY3JldGJveCA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMobXNnLCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBjID0gbmV3IFVpbnQ4QXJyYXkobS5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykgbVtpK2NyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTXSA9IG1zZ1tpXTtcbiAgY3J5cHRvX3NlY3JldGJveChjLCBtLCBtLmxlbmd0aCwgbm9uY2UsIGtleSk7XG4gIHJldHVybiBjLnN1YmFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTKTtcbn07XG5cbm5hY2wuc2VjcmV0Ym94Lm9wZW4gPSBmdW5jdGlvbihib3gsIG5vbmNlLCBrZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKGJveCwgbm9uY2UsIGtleSk7XG4gIGNoZWNrTGVuZ3RocyhrZXksIG5vbmNlKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyArIGJveC5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3gubGVuZ3RoOyBpKyspIGNbaStjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFU10gPSBib3hbaV07XG4gIGlmIChjLmxlbmd0aCA8IDMyKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjcnlwdG9fc2VjcmV0Ym94X29wZW4obSwgYywgYy5sZW5ndGgsIG5vbmNlLCBrZXkpICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtLnN1YmFycmF5KGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTKTtcbn07XG5cbm5hY2wuc2VjcmV0Ym94LmtleUxlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM7XG5uYWNsLnNlY3JldGJveC5ub25jZUxlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM7XG5cbm5hY2wuc2NhbGFyTXVsdCA9IGZ1bmN0aW9uKG4sIHApIHtcbiAgY2hlY2tBcnJheVR5cGVzKG4sIHApO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBuIHNpemUnKTtcbiAgaWYgKHAubGVuZ3RoICE9PSBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcCBzaXplJyk7XG4gIHZhciBxID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NjYWxhcm11bHRfQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBwKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuYmFzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgY2hlY2tBcnJheVR5cGVzKG4pO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBuIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbik7XG4gIHJldHVybiBxO1xufTtcblxubmFjbC5zY2FsYXJNdWx0LnNjYWxhckxlbmd0aCA9IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTO1xubmFjbC5zY2FsYXJNdWx0Lmdyb3VwRWxlbWVudExlbmd0aCA9IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTO1xuXG5uYWNsLmJveCA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIHB1YmxpY0tleSwgc2VjcmV0S2V5KSB7XG4gIHZhciBrID0gbmFjbC5ib3guYmVmb3JlKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIG5hY2wuc2VjcmV0Ym94KG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3guYmVmb3JlID0gZnVuY3Rpb24ocHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgY2hlY2tCb3hMZW5ndGhzKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X0JFRk9SRU5NQllURVMpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIGs7XG59O1xuXG5uYWNsLmJveC5hZnRlciA9IG5hY2wuc2VjcmV0Ym94O1xuXG5uYWNsLmJveC5vcGVuID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gub3Blbihtc2csIG5vbmNlLCBrKTtcbn07XG5cbm5hY2wuYm94Lm9wZW4uYWZ0ZXIgPSBuYWNsLnNlY3JldGJveC5vcGVuO1xuXG5uYWNsLmJveC5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKTtcbiAgY3J5cHRvX2JveF9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLmJveC5rZXlQYWlyLmZyb21TZWNyZXRLZXkgPSBmdW5jdGlvbihzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShwaywgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IG5ldyBVaW50OEFycmF5KHNlY3JldEtleSl9O1xufTtcblxubmFjbC5ib3gucHVibGljS2V5TGVuZ3RoID0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUztcbm5hY2wuYm94LnNlY3JldEtleUxlbmd0aCA9IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVM7XG5uYWNsLmJveC5zaGFyZWRLZXlMZW5ndGggPSBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM7XG5uYWNsLmJveC5ub25jZUxlbmd0aCA9IGNyeXB0b19ib3hfTk9OQ0VCWVRFUztcbm5hY2wuYm94Lm92ZXJoZWFkTGVuZ3RoID0gbmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGg7XG5cbm5hY2wuc2lnbiA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbiAgdmFyIHNpZ25lZE1zZyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTK21zZy5sZW5ndGgpO1xuICBjcnlwdG9fc2lnbihzaWduZWRNc2csIG1zZywgbXNnLmxlbmd0aCwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIHNpZ25lZE1zZztcbn07XG5cbm5hY2wuc2lnbi5vcGVuID0gZnVuY3Rpb24oc2lnbmVkTXNnLCBwdWJsaWNLZXkpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnNpZ24ub3BlbiBhY2NlcHRzIDIgYXJndW1lbnRzOyBkaWQgeW91IG1lYW4gdG8gdXNlIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnk/Jyk7XG4gIGNoZWNrQXJyYXlUeXBlcyhzaWduZWRNc2csIHB1YmxpY0tleSk7XG4gIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KHNpZ25lZE1zZy5sZW5ndGgpO1xuICB2YXIgbWxlbiA9IGNyeXB0b19zaWduX29wZW4odG1wLCBzaWduZWRNc2csIHNpZ25lZE1zZy5sZW5ndGgsIHB1YmxpY0tleSk7XG4gIGlmIChtbGVuIDwgMCkgcmV0dXJuIG51bGw7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkobWxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgbVtpXSA9IHRtcFtpXTtcbiAgcmV0dXJuIG07XG59O1xuXG5uYWNsLnNpZ24uZGV0YWNoZWQgPSBmdW5jdGlvbihtc2csIHNlY3JldEtleSkge1xuICB2YXIgc2lnbmVkTXNnID0gbmFjbC5zaWduKG1zZywgc2VjcmV0S2V5KTtcbiAgdmFyIHNpZyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWcubGVuZ3RoOyBpKyspIHNpZ1tpXSA9IHNpZ25lZE1zZ1tpXTtcbiAgcmV0dXJuIHNpZztcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkgPSBmdW5jdGlvbihtc2csIHNpZywgcHVibGljS2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIHNpZywgcHVibGljS2V5KTtcbiAgaWYgKHNpZy5sZW5ndGggIT09IGNyeXB0b19zaWduX0JZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNpZ25hdHVyZSBzaXplJyk7XG4gIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgdmFyIHNtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IGNyeXB0b19zaWduX0JZVEVTOyBpKyspIHNtW2ldID0gc2lnW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBzbVtpK2NyeXB0b19zaWduX0JZVEVTXSA9IG1zZ1tpXTtcbiAgcmV0dXJuIChjcnlwdG9fc2lnbl9vcGVuKG0sIHNtLCBzbS5sZW5ndGgsIHB1YmxpY0tleSkgPj0gMCk7XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2spO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogc2t9O1xufTtcblxubmFjbC5zaWduLmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGsubGVuZ3RoOyBpKyspIHBrW2ldID0gc2VjcmV0S2V5WzMyK2ldO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZCA9IGZ1bmN0aW9uKHNlZWQpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlZWQpO1xuICBpZiAoc2VlZC5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFRURCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWVkIHNpemUnKTtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykgc2tbaV0gPSBzZWVkW2ldO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgdHJ1ZSk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ucHVibGljS2V5TGVuZ3RoID0gY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVM7XG5uYWNsLnNpZ24uc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM7XG5uYWNsLnNpZ24uc2VlZExlbmd0aCA9IGNyeXB0b19zaWduX1NFRURCWVRFUztcbm5hY2wuc2lnbi5zaWduYXR1cmVMZW5ndGggPSBjcnlwdG9fc2lnbl9CWVRFUztcblxubmFjbC5oYXNoID0gZnVuY3Rpb24obXNnKSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2cpO1xuICB2YXIgaCA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19oYXNoX0JZVEVTKTtcbiAgY3J5cHRvX2hhc2goaCwgbXNnLCBtc2cubGVuZ3RoKTtcbiAgcmV0dXJuIGg7XG59O1xuXG5uYWNsLmhhc2guaGFzaExlbmd0aCA9IGNyeXB0b19oYXNoX0JZVEVTO1xuXG5uYWNsLnZlcmlmeSA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHgsIHkpO1xuICAvLyBaZXJvIGxlbmd0aCBhcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQgbm90IGVxdWFsLlxuICBpZiAoeC5sZW5ndGggPT09IDAgfHwgeS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKHZuKHgsIDAsIHksIDAsIHgubGVuZ3RoKSA9PT0gMCkgPyB0cnVlIDogZmFsc2U7XG59O1xuXG5uYWNsLnNldFBSTkcgPSBmdW5jdGlvbihmbikge1xuICByYW5kb21ieXRlcyA9IGZuO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAvLyBJbml0aWFsaXplIFBSTkcgaWYgZW52aXJvbm1lbnQgcHJvdmlkZXMgQ1NQUk5HLlxuICAvLyBJZiBub3QsIG1ldGhvZHMgY2FsbGluZyByYW5kb21ieXRlcyB3aWxsIHRocm93LlxuICB2YXIgY3J5cHRvID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gKHNlbGYuY3J5cHRvIHx8IHNlbGYubXNDcnlwdG8pIDogbnVsbDtcbiAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gQnJvd3NlcnMuXG4gICAgdmFyIFFVT1RBID0gNjU1MzY7XG4gICAgbmFjbC5zZXRQUk5HKGZ1bmN0aW9uKHgsIG4pIHtcbiAgICAgIHZhciBpLCB2ID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArPSBRVU9UQSkge1xuICAgICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHYuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKG4gLSBpLCBRVU9UQSkpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSB2W2ldO1xuICAgICAgY2xlYW51cCh2KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBOb2RlLmpzLlxuICAgIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgIGlmIChjcnlwdG8gJiYgY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgICB2YXIgaSwgdiA9IGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICAgIGNsZWFudXAodik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG5cbn0pKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzID8gbW9kdWxlLmV4cG9ydHMgOiAoc2VsZi5uYWNsID0gc2VsZi5uYWNsIHx8IHt9KSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qc1xuLy8gbW9kdWxlIGlkID0gOTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogKGlnbm9yZWQpICovXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gdmVydHggKGlnbm9yZWQpXG4vLyBtb2R1bGUgaWQgPSA5M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBjcnlwdG8gKGlnbm9yZWQpXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9