diff --git a/build/datguivr.js b/build/datguivr.js new file mode 100644 index 0000000..b173f18 --- /dev/null +++ b/build/datguivr.js @@ -0,0 +1,7222 @@ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + object = _ref.object, + _ref$propertyName = _ref.propertyName, + propertyName = _ref$propertyName === undefined ? 'undefined' : _ref$propertyName, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + _ref$height = _ref.height, + height = _ref$height === undefined ? Layout.PANEL_HEIGHT : _ref$height, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth; + + var BUTTON_WIDTH = width * 0.5 - Layout.PANEL_MARGIN; + var BUTTON_HEIGHT = height - Layout.PANEL_MARGIN; + var BUTTON_DEPTH = Layout.BUTTON_DEPTH; + + var group = new THREE.Group(); + group.guiType = "button"; + group.toString = function () { + return '[' + group.guiType + ': ' + propertyName + ']'; + }; + + var panel = Layout.createPanel(width, height, depth); + group.add(panel); + + // base checkbox + var divisions = 4; + var aspectRatio = BUTTON_WIDTH / BUTTON_HEIGHT; + var rect = new THREE.BoxGeometry(BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_DEPTH, Math.floor(divisions * aspectRatio), divisions, divisions); + rect.translate(BUTTON_WIDTH * 0.5, 0, 0); + + // hitscan volume + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = false; + + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + hitscanVolume.position.z = BUTTON_DEPTH * 0.5; + hitscanVolume.position.x = width * 0.5; + + var material = new THREE.MeshBasicMaterial({ color: Colors.BUTTON_COLOR }); + var filledVolume = new THREE.Mesh(rect.clone(), material); + hitscanVolume.add(filledVolume); + + var buttonLabel = textCreator.create(propertyName, { scale: 0.866 }); + + // This is a real hack since we need to fit the text position to the font scaling + // Please fix me. + buttonLabel.position.x = BUTTON_WIDTH * 0.5 - buttonLabel.layout.width * 0.000011 * 0.5; + buttonLabel.position.z = BUTTON_DEPTH * 1.2; + buttonLabel.position.y = -0.025; + filledVolume.add(buttonLabel); + + var descriptorLabel = textCreator.create(propertyName); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN; + descriptorLabel.position.z = depth; + descriptorLabel.position.y = -0.03; + + var controllerID = Layout.createControllerIDBox(height, Colors.CONTROLLER_ID_BUTTON); + controllerID.position.z = depth; + + panel.add(descriptorLabel, hitscanVolume, controllerID); + + var interaction = (0, _interaction2.default)(hitscanVolume); + interaction.events.on('onPressed', handleOnPress); + interaction.events.on('onReleased', handleOnRelease); + + updateView(); + + function handleOnPress(p) { + if (group.visible === false) { + return; + } + + object[propertyName](); + + hitscanVolume.position.z = BUTTON_DEPTH * 0.1; + + p.locked = true; + } + + function handleOnRelease() { + hitscanVolume.position.z = BUTTON_DEPTH * 0.5; + } + + function updateView() { + + if (interaction.hovering()) { + material.color.setHex(Colors.BUTTON_HIGHLIGHT_COLOR); + } else { + material.color.setHex(Colors.BUTTON_COLOR); + } + } + + group.interaction = interaction; + group.hitscan = [hitscanVolume, panel]; + + var grabInteraction = Grab.create({ group: group, panel: panel }); + + group.updateControl = function (inputObjects) { + interaction.update(inputObjects); + grabInteraction.update(inputObjects); + updateView(); + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + group.buttonLabel = function (str) { + buttonLabel.updateLabel(str); + return group; + }; + + return group; +} + +},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15}],2:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createCheckbox; + +var _textlabel = require('./textlabel'); + +var _textlabel2 = _interopRequireDefault(_textlabel); + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _graphic = require('./graphic'); + +var Graphic = _interopRequireWildcard(_graphic); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** +* dat-guiVR Javascript Controller Library for VR +* https://github.com/dataarts/dat.guiVR +* +* Copyright 2016 Data Arts Team, Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +function createCheckbox() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + object = _ref.object, + _ref$propertyName = _ref.propertyName, + propertyName = _ref$propertyName === undefined ? 'undefined' : _ref$propertyName, + _ref$initialValue = _ref.initialValue, + initialValue = _ref$initialValue === undefined ? false : _ref$initialValue, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + _ref$height = _ref.height, + height = _ref$height === undefined ? Layout.PANEL_HEIGHT : _ref$height, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth; + + var state = { + value: initialValue, + listen: false + }; + + var CHECKBOX_PAD = Layout.PANEL_HEIGHT - Layout.CHECKBOX_SIZE; + + var group = new THREE.Group(); + group.guiType = "checkbox"; + group.toString = function () { + return '[' + group.guiType + ': ' + propertyName + ']'; + }; + + var descriptorLabel = textCreator.create(propertyName); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN; + descriptorLabel.position.z = depth; + descriptorLabel.position.y = -0.03; + + var onChangedCB = void 0; + var onFinishChangeCB = void 0; + + group.onChange = function (callback) { + onChangedCB = callback; + return group; + }; + + group.listen = function () { + state.listen = true; + return group; + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + var checkmark = void 0, + borderBox = void 0, + interaction = void 0; + + function handleOnPress(p) { + if (group.visible === false) { + return; + } + + state.value = !state.value; + + object[propertyName] = state.value; + + if (onChangedCB) { + onChangedCB(state.value); + } + + p.locked = true; + } + + function updateView() { + checkmark.visible = state.value; + borderBox.visible = interaction.hovering(); + if (_header) { + _header.checkmark.visible = state.value; + _header.borderBox.visible = _header.interaction.hovering(); + } + } + + var isShownInFolderHeader = false; + group.showInFolderHeader = function () { + var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + + if (value !== isShownInFolderHeader) { + isShownInFolderHeader = value; + //group.folderHeaderObject = value ? getFolderHeaderObject : null; + //xxx: can't use ordinary add... + _header = getFolderHeaderObject(); + if (value) group.folder.addHeaderItem(_header);else _header.visible = false; + } + return group; + }; + Object.defineProperty(group, 'isShownInFolderHeader', { + get: function get() { + return isShownInFolderHeader; + }, + set: group.showInFolderHeader + }); + var _header = void 0; + function getFolderHeaderObject() { + if (_header) return _header; + var size = Layout.PANEL_HEIGHT * 0.6; + var rect = new THREE.BoxGeometry(size, size, depth); + rect.translate(size * 0.5, 0, 0); + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = true; + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + _header = hitscanVolume; //XXX: side-effect... + // x position is set in folder performHeaderLayout() + hitscanVolume.position.z = depth; + + //TODO: get this to work... add tooltip + var borderBox = Layout.createPanel(size + Layout.BORDER_THICKNESS, size + Layout.BORDER_THICKNESS, depth, true); + _header.borderBox = borderBox; + borderBox.material.color.setHex(0x1f7ae7); + borderBox.position.x = -Layout.BORDER_THICKNESS * 0.5 + width * 0.5; + borderBox.position.z = depth * 0.5; + + var checkmark = Graphic.checkmark(0.4 * size / Layout.CHECKBOX_SIZE); + _header.checkmark = checkmark; + checkmark.visible = state.value; + checkmark.position.z = depth * 0.51; + hitscanVolume.add(checkmark); + + var interaction = (0, _interaction2.default)(hitscanVolume); + interaction.events.on('onPressed', handleHeaderPress); + _header.interaction = interaction; + + //add updateControl method here - attempt to make generic version in folder was inadequate + _header.updateControl = function (inputObjects) { + if (state.listen) { + state.value = object[propertyName]; + } + //nb: interaction will be from getFolderHeaderObject() scope, + //not the main one that applies that applies to the ordinary control. + interaction.update(inputObjects); + updateView(); + }; + + return _header; + } + + //TODO review need for separate header version of this function + function handleHeaderPress(p) { + if (group.folder.visible === false || _header.visible === false) return; + state.value = !state.value; + object[propertyName] = state.value; + if (onChangedCB) onChangedCB(state.value); + p.locked = true; + + //make sure view is also up to date; updateView() won't happen when parent folder is collapsed + _header.checkmark.visible = state.value; + } + + var panel = void 0; + //all layout etc is done inside setHeight, which is called once at start. + //any callbacks etc remain associated with 'group'. + group.setHeight = function (newHeight) { + if (panel) group.remove(panel); + + group.spacing = newHeight; + + var CHECKBOX_WIDTH = newHeight - CHECKBOX_PAD; + var CHECKBOX_HEIGHT = CHECKBOX_WIDTH; + var CHECKBOX_DEPTH = depth; + var CHECKMARK_SIZE = 0.4 * CHECKBOX_WIDTH / Layout.CHECKBOX_SIZE; + + panel = Layout.createPanel(width, newHeight, depth); + group.add(panel); + + // base checkbox + var rect = new THREE.BoxGeometry(CHECKBOX_WIDTH, CHECKBOX_HEIGHT, CHECKBOX_DEPTH); + rect.translate(CHECKBOX_WIDTH * 0.5, 0, 0); + + // hitscan volume + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = false; + + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + hitscanVolume.position.z = depth; + hitscanVolume.position.x = width * 0.5; + + // outline volume + // const outline = new THREE.BoxHelper( hitscanVolume ); + // outline.material.color.setHex( Colors.OUTLINE_COLOR ); + + // checkbox volume + var material = new THREE.MeshBasicMaterial({ color: Colors.CHECKBOX_BG_COLOR }); + var filledVolume = new THREE.Mesh(rect.clone(), material); + hitscanVolume.add(filledVolume); + + var controllerID = Layout.createControllerIDBox(newHeight, Colors.CONTROLLER_ID_CHECKBOX); + controllerID.position.z = depth; + + borderBox = Layout.createPanel(CHECKBOX_WIDTH + Layout.BORDER_THICKNESS, CHECKBOX_HEIGHT + Layout.BORDER_THICKNESS, CHECKBOX_DEPTH, true); + borderBox.material.color.setHex(0x1f7ae7); + borderBox.position.x = -Layout.BORDER_THICKNESS * 0.5 + width * 0.5; + borderBox.position.z = depth * 0.5; + + checkmark = Graphic.checkmark(CHECKMARK_SIZE); + checkmark.position.z = depth * 0.51; + hitscanVolume.add(checkmark); + + panel.add(descriptorLabel, hitscanVolume, controllerID, borderBox); + + // group.add( filledVolume, outline, hitscanVolume, descriptorLabel ); + + interaction = (0, _interaction2.default)(hitscanVolume); + interaction.events.on('onPressed', handleOnPress); + + updateView(); + + group.interaction = interaction; + group.hitscan = [hitscanVolume, panel]; + + var grabInteraction = Grab.create({ group: group, panel: panel }); + + group.updateControl = function (inputObjects) { + if (state.listen) { + state.value = object[propertyName]; + } + interaction.update(inputObjects); + grabInteraction.update(inputObjects); + updateView(); + }; + + if (group.folder) group.folder.requestLayout(); + + return group; + }; + + group.setHeight(height); + + return group; +} + +},{"./colors":4,"./grab":8,"./graphic":9,"./interaction":13,"./layout":15,"./sharedmaterials":19,"./textlabel":22}],3:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createColorPicker; + +var _events = require('events'); + +var _events2 = _interopRequireDefault(_events); + +var _imagebutton = require('./imagebutton'); + +var _imagebutton2 = _interopRequireDefault(_imagebutton); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +//snippet from https://github.com/hughsk/glsl-hsv2rgb/blob/master/index.glsl +//(not going to the lengths of glslify, just copying the function) +/** + * This should look like an imagebutton with a solid color MeshBasicMaterial + * When pressed it could bring up some kind of picker depending on configuration. + * + * For now, just going with RGB sliders as I shouldn't spend too long on this ATM, + * but very tempted by prospect of an HS square with V slider... + * or H slider and SV square which seems to be what dat.gui uses. + * Or something fancier like a hue circle around an SV triangle etc etc. + * + * + * Peter Todd 2017 + */ + +var hsv2rgb = '\nvec3 hsv2rgb(vec3 c) {\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}'; + +var VertShader = '\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}\n'; + +var SVFragShader = '\nuniform vec3 selectedHSV;\nvarying vec2 vUv;\n' + hsv2rgb + '\n\nvoid main() {\n vec3 hsv = vec3(selectedHSV.x, vUv);\n\n // draw a black circle around selected SV.\n // might look better via separate three object, but shader is less housekeeping\n // need to know aspect ratio if I want it to be a proper circle, though.\n float d = length(selectedHSV.yz - vUv);\n if (d < 0.015 && d > 0.01) hsv.z = 0.;\n gl_FragColor.rgb = sqrt(hsv2rgb(hsv));\n gl_FragColor.w = 1.0; // sjpt\n}\n'; + +var HSliderFragShader = '\nuniform vec3 selectedHSV;\nvarying vec2 vUv;\n' + hsv2rgb + '\n\nvoid main() {\n // draw a rectangular indicator around selected H\n // might look better via separate three object, but shader is simpler\n float dist = abs(selectedHSV.x - vUv.x);\n bool indicator = dist < 0.01 && dist > 0.005;\n float v = indicator ? 0. : 1.;\n gl_FragColor.rgb = sqrt(hsv2rgb(vec3(vUv.x, 1., v)));\n gl_FragColor.w = 1.0; // sjpt\n}\n'; + +// http://stackoverflow.com/questions/17242144/javascript-convert-hsb-hsv-color-to-rgb-accurately +//why not use THREE.Color methods? +/* accepts parameters + * h Object = {h:x, s:y, v:z} + * OR + * h, s, v +*/ +function HSVtoRGB(h, s, v) { + var r, g, b, i, f, p, q, t; + if (arguments.length === 1) { + //hack to take THREE.Vector3... + if (h.x !== undefined) s = h.y, v = h.z, h = h.x;else s = h.s, v = h.v, h = h.h; + } + i = Math.floor(h * 6); + f = h * 6 - i; + p = v * (1 - s); + q = v * (1 - f * s); + t = v * (1 - (1 - f) * s); + switch (i % 6) { + case 0: + r = v, g = t, b = p;break; + case 1: + r = q, g = v, b = p;break; + case 2: + r = p, g = v, b = t;break; + case 3: + r = p, g = q, b = v;break; + case 4: + r = t, g = p, b = v;break; + case 5: + r = v, g = p, b = q;break; + } + return { + r: r, + g: g, + b: b + }; +} +/* accepts parameters + * r Object = {r, g, b} + * OR + * r, g, b +*/ +function RGBtoHSV(r, g, b) { + if (arguments.length === 1) { + g = r.g, b = r.b, r = r.r; + } + var max = Math.max(r, g, b), + min = Math.min(r, g, b), + d = max - min, + h, + s = max === 0 ? 0 : d / max, + v = max; + + switch (max) { + case min: + h = 0;break; + case r: + h = g - b + d * (g < b ? 6 : 0);h /= 6 * d;break; + case g: + h = b - r + d * 2;h /= 6 * d;break; + case b: + h = r - g + d * 4;h /= 6 * d;break; + } + + return { + h: h, + s: s, + v: v, + x: h, y: s, z: v //so that we can do Vector3.copy(this) + }; +} + +function createColorPicker() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + object = _ref.object, + propertyName = _ref.propertyName, + textCreator = _ref.textCreator, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + _ref$height = _ref.height, + height = _ref$height === undefined ? Layout.PANEL_HEIGHT : _ref$height, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH / 3. : _ref$depth; + + // make the main group be *directly* the one returned by createImageButton; + // we'll take care of dynamically adding and removing children based on attached... + // will want to think about listener functions etc. + var func = toggleDetailPanel; + var color = object[propertyName]; //for now, this'd better be a THREE.Color or we'll freak out. + var c = RGBtoHSV(color); + var uniforms = { selectedHSV: { value: new THREE.Vector3(c.h, c.s, c.v) } }; + var image = new THREE.MeshBasicMaterial({ color: color }); + var events = new _events2.default(); + var changeColorOnHover = false; + var state = { + listen: false + }; + //TODO make sure color patch occupies full width. Add text label with hex value? + var group = (0, _imagebutton2.default)({ + textCreator: textCreator, func: func, image: image, propertyName: propertyName, width: width, height: height, depth: depth, changeColorOnHover: changeColorOnHover + }); + group.guiType = "ColorPicker"; + + var panel; + + // change colour in place, course gamma compensation + function colpow(c) { + var p = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.4545; + + c.r = Math.pow(c.r, p); // uglify doesn't understand ** + c.g = Math.pow(c.g, p); // uglify doesn't understand ** + c.b = Math.pow(c.b, p); // uglify doesn't understand ** + } + + function changeFn() { + image.color.set(color); + colpow(image.color); + events.emit('onChange', color); + } + + var fancyPanel = true; + + function setPanelPosition() { + if (!panel) return; + panel.position.set(0, 0, 5 * depth); + } + + function toggleDetailPanel() { + if (panel) { + panel.visible = !panel.visible; + if (panel.visible) group.folder.setModalEditor(panel); + setPanelPosition(); + return; + } else { + // would be handy to have a way to make narrower panel + panel = dat.GUIVR.create("Color Chooser"); + panel.hideHeader(); + + if (fancyPanel) { + var setH = function setH(p) { + uniforms.selectedHSV.value.x = p.localPoint.x; + var c = HSVtoRGB(uniforms.selectedHSV.value); + color.setRGB(c.r, c.g, c.b); + changeFn(); + HMaterial.needsUpdate = true; + }; + + var SVMaterial = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: VertShader, + fragmentShader: SVFragShader + }); + var setSV = function setSV(p) { + uniforms.selectedHSV.value.y = p.localPoint.x; + uniforms.selectedHSV.value.z = p.localPoint.y; + + var c = HSVtoRGB(uniforms.selectedHSV.value); + color.setRGB(c.r, c.g, c.b); + changeFn(); + HMaterial.needsUpdate = true; + }; + var wide = true, + buttonDepth = Layout.BUTTON_DEPTH / 10; + panel.addXYController(setSV, SVMaterial, wide, Layout.PANEL_WIDTH / 2, depth, buttonDepth); + var HMaterial = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: VertShader, + fragmentShader: HSliderFragShader + }); + ; + //TODO: check layout + panel.addXYController(setH, HMaterial, wide, Layout.PANEL_HEIGHT, depth, buttonDepth); + } else { + panel.add(color, 'r', 0, 1).onChange(changeFn); + panel.add(color, 'g', 0, 1).onChange(changeFn); + panel.add(color, 'b', 0, 1).onChange(changeFn); + } + group.add(panel); + group.folder.setModalEditor(panel); + setPanelPosition(); + panel.folder = group.folder; //might still want to double check folder hierarchy + } + } + + group.onChange = function (callback) { + events.on('onChange', callback); + return group; + }; + + var originalUpdateControl = group.updateControl; + group.updateControl = function (inputObjects) { + if (state.listen) listenUpdate(); + originalUpdateControl(inputObjects); + }; + + function listenUpdate() { + //object ref might have changed, as well as value. + //even if ref hasn't changed, value still might've, and we're not currently reflecting that. + color = object[propertyName]; + image.color.copy(color); + colpow(image.color); + uniforms.selectedHSV.value.copy(RGBtoHSV(color)); + } + group.listen = function () { + state.listen = true; + return group; + }; + + return group; +} + +},{"./colors":4,"./grab":8,"./imagebutton":10,"./layout":15,"./sharedmaterials":19,"events":27}],4:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.colorizeGeometry = colorizeGeometry; +/** +* dat-guiVR Javascript Controller Library for VR +* https://github.com/dataarts/dat.guiVR +* +* Copyright 2016 Data Arts Team, Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +var DEFAULT_COLOR = exports.DEFAULT_COLOR = 0x2FA1D6; +var HIGHLIGHT_COLOR = exports.HIGHLIGHT_COLOR = 0x43b5ea; +var INTERACTION_COLOR = exports.INTERACTION_COLOR = 0x07ABF7; +var EMISSIVE_COLOR = exports.EMISSIVE_COLOR = 0x222222; +var HIGHLIGHT_EMISSIVE_COLOR = exports.HIGHLIGHT_EMISSIVE_COLOR = 0x999999; +var OUTLINE_COLOR = exports.OUTLINE_COLOR = 0x999999; +var DEFAULT_BACK = exports.DEFAULT_BACK = 0x060606; +var DEFAULT_FOLDER_BACK = exports.DEFAULT_FOLDER_BACK = 0x101010; +var HIGHLIGHT_BACK = exports.HIGHLIGHT_BACK = 0x313131; +var INACTIVE_COLOR = exports.INACTIVE_COLOR = 0x161829; +var CONTROLLER_ID_SLIDER = exports.CONTROLLER_ID_SLIDER = 0x2fa1d6; +var CONTROLLER_ID_CHECKBOX = exports.CONTROLLER_ID_CHECKBOX = 0x806787; +var CONTROLLER_ID_BUTTON = exports.CONTROLLER_ID_BUTTON = 0xe61d5f; +var CONTROLLER_ID_TEXT = exports.CONTROLLER_ID_TEXT = 0x1ed36f; +var CONTROLLER_ID_DROPDOWN = exports.CONTROLLER_ID_DROPDOWN = 0xfff000; +var DROPDOWN_BG_COLOR = exports.DROPDOWN_BG_COLOR = 0xffffff; +var DROPDOWN_FG_COLOR = exports.DROPDOWN_FG_COLOR = 0x000000; +var CHECKBOX_BG_COLOR = exports.CHECKBOX_BG_COLOR = 0xffffff; +var BUTTON_COLOR = exports.BUTTON_COLOR = 0xe61d5f; +var BUTTON_HIGHLIGHT_COLOR = exports.BUTTON_HIGHLIGHT_COLOR = 0xfa3173; +var SLIDER_BG = exports.SLIDER_BG = 0x444444; +var TEXTBOX_BG = exports.TEXTBOX_BG = 0xF0F0F0; +var TEXTBOX_HIGHLIGHT_BG = exports.TEXTBOX_HIGHLIGHT_BG = 0xFFFFFF; + +function colorizeGeometry(geometry, color) { + var col = new THREE.Color(color); + var c = geometry.getAttribute('color'); + var a = void 0; + if (!c) { + a = new Float32Array(geometry.getAttribute('position').array.length).fill(0.5); + c = geometry.setAttribute('color', new THREE.BufferAttribute(a, 3)); + } else { + a = c.array; + } + for (var i = 0; i < a.length; i += 3) { + a[i] = col.r; + a[i + 1] = col.g; + a[i + 2] = col.b; + } + c.needsUpdate = true; + + // geometry.faces.forEach( function(face){ + // face.color.setHex(color); + // }); + // geometry.colorsNeedUpdate = true; + return geometry; +} + +},{}],5:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createDropdown; + +var _textlabel = require('./textlabel'); + +var _textlabel2 = _interopRequireDefault(_textlabel); + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _graphic = require('./graphic'); + +var Graphic = _interopRequireWildcard(_graphic); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +var _utils = require('./utils'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +function createDropdown() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + object = _ref.object, + _ref$propertyName = _ref.propertyName, + propertyName = _ref$propertyName === undefined ? 'undefined' : _ref$propertyName, + _ref$initialValue = _ref.initialValue, + initialValue = _ref$initialValue === undefined ? false : _ref$initialValue, + _ref$options = _ref.options, + options = _ref$options === undefined ? [] : _ref$options, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + _ref$height = _ref.height, + height = _ref$height === undefined ? Layout.PANEL_HEIGHT : _ref$height, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth; + + var state = { + open: false, + listen: false + }; + + var DROPDOWN_WIDTH = width * 0.5 - Layout.PANEL_MARGIN; + var DROPDOWN_HEIGHT = height - Layout.PANEL_MARGIN; + var DROPDOWN_DEPTH = depth; + var DROPDOWN_OPTION_HEIGHT = height - Layout.PANEL_MARGIN * 1.2; + var DROPDOWN_MARGIN = Layout.PANEL_MARGIN * -0.4; + var MAX_DROPDOWN_LABELS_IN_COLUMN = 25; + + var group = new THREE.Group(); + group.guiType = "dropdown"; + group.toString = function () { + return '[' + group.guiType + ': ' + propertyName + ']'; + }; + + //allow for programmatic set. API should not be considered stable. + group.userData.sourceObject = object; + group.userData.sourcePropertyName = propertyName; + group.userData.setValue = function (v) { + if (options.indexOf(v) === -1) { + //I could consider annotating GUI itself with error labels... + console.warn('dat.GUIVR: Unknown option "' + v + '" for dropdown "' + propertyName + '".\nValid options: [' + options.join(', ') + ']'); + return; + } + object[propertyName] = v; + if (onChangedCB) onChangedCB(object[propertyName]); + }; + + var panel = Layout.createPanel(width, height, depth); + group.add(panel); + + group.hitscan = [panel]; + + var modalDropdown = new THREE.Group(); + modalDropdown.visible = false; + modalDropdown.hitscan = []; + var labelInteractions = []; + var optionLabels = []; + + // find actually which label is selected + var initialLabel = findLabelFromProp(); + + function findLabelFromProp() { + if (Array.isArray(options)) { + return options.find(function (optionName) { + return optionName === object[propertyName]; + }); + } else { + return Object.keys(options).find(function (optionName) { + return object[propertyName] === options[optionName]; + }); + } + } + + function createOption(labelText, isOption) { + //TODO: truncate long labelText, maybe show full version when hovering. + var label = (0, _textlabel2.default)(textCreator, labelText, + //check width value... + DROPDOWN_WIDTH, depth, Colors.DROPDOWN_FG_COLOR, Colors.DROPDOWN_BG_COLOR, 0.866); + label.back.guiType = 'dropdownOption'; + label.guiType = 'dropdownOption'; + + if (isOption) modalDropdown.hitscan.push(label.back);else group.hitscan.push(label.back); + var labelInteraction = (0, _interaction2.default)(label.back); + labelInteraction.guiType = 'dropdownOption'; + labelInteractions.push(labelInteraction); + optionLabels.push(label); + + if (isOption) { + labelInteraction.events.on('onPressed', function (p) { + state.open = modalDropdown.visible; + selectedLabel.setString(labelText); + + var propertyChanged = false; + + if (Array.isArray(options)) { + propertyChanged = object[propertyName] !== labelText; + if (propertyChanged) { + object[propertyName] = labelText; + } + } else { + propertyChanged = object[propertyName] !== options[labelText]; + if (propertyChanged) { + object[propertyName] = options[labelText]; + } + } + + collapseOptions(); + state.open = false; + + if (onChangedCB && propertyChanged) { + onChangedCB(object[propertyName]); + } + if (onChooseCB) { + onChooseCB(object[propertyName]); + } + + p.locked = true; + }); + } else { + labelInteraction.events.on('onPressed', function (p) { + state.open = modalDropdown.visible; + if (state.open === false) { + openOptions(); + } else { + collapseOptions(); + } + + p.locked = true; + }); + } + label.isOption = isOption; + return label; + } + + function collapseOptions() { + state.open = false; + if (group.folder) group.folder.clearModalEditor(); //should we check if it wasn't set to something else?? + } + + function openOptions() { + state.open = true; + group.folder.setModalEditor(modalDropdown); + //return; + //label.isOption seems mostly redundant. + //labels & backs should be added to a group to be used as 'modal editor', + //making everything visible / invisible with one property + //(nb, even though they are now in a group used as 'modal editor', we still need to set visible... + //see comment in index.js getVisibleHitscanObjects()) + optionLabels.forEach(function (label) { + if (label.isOption) { + label.visible = true; + label.back.visible = true; + } + }); + } + + // base option + var selectedLabel = createOption(initialLabel || ' ', false); + selectedLabel.position.x = Layout.PANEL_MARGIN * 0.5 + width * 0.5; + selectedLabel.position.z = depth; + + var downArrow = Graphic.downArrow(); + // Colors.colorizeGeometry( downArrow.geometry, Colors.DROPDOWN_FG_COLOR ); + downArrow.position.set(DROPDOWN_WIDTH - 0.04, 0, depth * 1.01); + selectedLabel.add(downArrow); + + function configureLabelPosition(label, index) { + label.position.y = -DROPDOWN_MARGIN - (index % MAX_DROPDOWN_LABELS_IN_COLUMN + 1) * DROPDOWN_OPTION_HEIGHT; + label.position.z = depth; + label.position.x += DROPDOWN_WIDTH * Math.floor(index / MAX_DROPDOWN_LABELS_IN_COLUMN); + } + + function optionToLabel(optionName, index) { + var optionLabel = createOption(optionName, true); + configureLabelPosition(optionLabel, index); + return optionLabel; + } + + selectedLabel.add(modalDropdown); + if (Array.isArray(options)) { + modalDropdown.add.apply(modalDropdown, _toConsumableArray(options.map(optionToLabel))); + } else { + modalDropdown.add.apply(modalDropdown, _toConsumableArray(Object.keys(options).map(optionToLabel))); + } + + collapseOptions(); + + var descriptorLabel = textCreator.create(propertyName); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN; + descriptorLabel.position.z = depth; + descriptorLabel.position.y = -0.03; + + var controllerID = Layout.createControllerIDBox(height, Colors.CONTROLLER_ID_DROPDOWN); + controllerID.position.z = depth; + + var borderBox = Layout.createPanel(DROPDOWN_WIDTH + Layout.BORDER_THICKNESS, DROPDOWN_HEIGHT + Layout.BORDER_THICKNESS * 0.5, DROPDOWN_DEPTH, true); + borderBox.material.color.setHex(0x1f7ae7); + borderBox.position.x = -Layout.BORDER_THICKNESS * 0.5 + width * 0.5; + borderBox.position.z = depth * 0.5; + + panel.add(descriptorLabel, controllerID, selectedLabel, borderBox); + + updateView(); + + function updateView() { + + labelInteractions.forEach(function (interaction, index) { + var label = optionLabels[index]; + if (label.isOption) { + if (interaction.hovering()) { + Colors.colorizeGeometry(label.back.geometry, Colors.HIGHLIGHT_COLOR); + } else { + Colors.colorizeGeometry(label.back.geometry, Colors.DROPDOWN_BG_COLOR); + } + } + }); + + state.open = modalDropdown.visible; //as of this writing, this is believed to be reliable, but beware dragons, future reader. + if (group.userData.tipObj) { + // if (labelInteractions[0].hovering()) { + // console.log(group.userData.tip); + // } + (0, _utils.setVisibility)(panel, group.userData.tipObj, labelInteractions[0].hovering()); + } + if (labelInteractions[0].hovering() || state.open) { + borderBox.visible = true; + } else { + borderBox.visible = false; + } + } + + var onChangedCB = void 0; + var onFinishChangeCB = void 0; + var onChooseCB = void 0; + + group.onChange = function (callback) { + onChangedCB = callback; + return group; + }; + group.onChoose = function (callback) { + onChooseCB = callback; + return group; + }; + + var grabInteraction = Grab.create({ group: group, panel: panel }); + + group.listen = function () { + state.listen = true; + return group; + }; + + group.updateControl = function (inputObjects) { + if (state.listen) { + selectedLabel.setString(findLabelFromProp()); + } + labelInteractions.forEach(function (labelInteraction) { + labelInteraction.update(inputObjects); + }); + grabInteraction.update(inputObjects); + updateView(); + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + group.setToolTip = function (tip) { + var obj = group; + obj.userData.tip = tip; + //TODO: pay more attention to layout config / make createToolTip have simpler arguments + //nb, obj.spacing may be undefined, but should now have sensible default. + obj.userData.tipObj = (0, _textlabel.createToolTip)(textCreator, tip, Layout.FOLDER_WIDTH, obj.spacing, Layout.BUTTON_DEPTH); + ////--- see labelInteractions[0] above for handling update... + }; + group.getToolTip = function () { + return group.userData.tip; + }; + + return group; +} + +},{"./colors":4,"./grab":8,"./graphic":9,"./interaction":13,"./layout":15,"./textlabel":22,"./utils":23}],6:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createFolder; + +var _textlabel = require('./textlabel'); + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _graphic = require('./graphic'); + +var Graphic = _interopRequireWildcard(_graphic); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +var _palette = require('./palette'); + +var Palette = _interopRequireWildcard(_palette); + +var _utils = require('./utils'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//If you're looking for main createFolder function, it's further below... + +/** + * Not entirely sure about starting to add this kind of global state manaagement here... + * This is for z-order in 2d orthographic mode, and maybe some other things one day. + */ +var topFolderStack = []; + +var scratchFolderBox = new THREE.Box3(), + scratchCamBox = new THREE.Box3(), + scratchSize = new THREE.Vector3(); + +function orthographicFolderLayout() { + var cam = topFolderStack[0].userData.isOrthographic; + if (!cam || topFolderStack.length <= 1) return; + //camBoxSetup(cam); + var tfs = topFolderStack.filter(function (x) { + return x.visible; + }); + var near = cam.near, + far = cam.far, + n = tfs.length; + // Attempt to keep some old z values threw others out, + // especially if many folders undocked in which case we hit the "GUIVR Warning" below + // and sometimes the menus froze. + // So we use the simpler z - i/n below. + //const zs = tfs.map(f => f.position.z).sort((a,b)=>a-b); + //zs[-1] = -9999; // I suppose this is to deal with accessing zs[i-1] below ¯\_(ツ)_/¯ + //zs.forEach( (z,i) => zs[i] = Math.max(zs[i], zs[i-1] + 10*Layout.PANEL_DEPTH)); // in case of equals + + tfs.forEach(function (f, i) { + //let z = -0.9*far + i*10*Layout.PANEL_DEPTH; + //const z = zs[i]; + var z = i / n; + if (z !== f.position.z) { + f.position.z = z; + f.updateMatrix(); + f.fixFolderPosition(); + } + }); + if (tfs[n - 1].position.z >= near - Layout.PANEL_DEPTH) { + console.log("GUIVR Warning: likely problem with z-order in orthographicFolderLayout"); + } + //console.log(`[${topFolderStack.map(f=>f.folderName + '\t: ' + f.position.z).join('\n')}]`); +} + +function camBoxSetup(cam) { + if (!cam.isOrthographicCamera) return; + var near = cam.near, + far = cam.far, + n = topFolderStack.length; + var l = cam.left, + r = cam.right, + t = cam.top, + b = cam.bottom; + var z = cam.position.z; //not strictly right... + scratchCamBox.min.set(l, b, -far + z); + scratchCamBox.max.set(r, t, -near + z); + return scratchCamBox; +} + +function createFolder() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + name = _ref.name, + guiAdd = _ref.guiAdd, + guiRemove = _ref.guiRemove, + addControllerFuncs = _ref.addControllerFuncs, + globalControllers = _ref.globalControllers; + + var MAX_FOLDER_ITEMS_IN_COLUMN = 40; + + var width = Layout.FOLDER_WIDTH; + var depth = Layout.PANEL_DEPTH; + + var state = { + collapsed: false, + previousParent: undefined + }; + + var group = new THREE.Group(); + group.guiType = "folder"; + group.toString = function () { + return '[' + group.guiType + ': ' + name + ']'; + }; + + var collapseGroup = new THREE.Group(); + group.add(collapseGroup); + + var isAccordion = false; + /** When true, will keep only one child folder of this folder open at a time. + * Siblings automatically close. + */ + Object.defineProperty(group, 'accordion', { + get: function get() { + return isAccordion; + }, + set: function set(newValue) { + if (newValue && !isAccordion) group.guiChildren.filter(function (c) { + return c.isFolder; + }).map(function (c) { + return c.close(); + }); + isAccordion = newValue; + group.requestLayout(); + } + }); + + //flag the need for performing layout of the folder hierarchy in which this is contained. + group.requestLayout = function () { + var topFolder = (0, _utils.getTopLevelFolder)(group); + if (topFolder.userData.layoutInProgress) { + console.log('requested layout of folder ' + group.folderName + ' while layout already in progress...'); + } else { + //topFolder.requestLayout(); + topFolder.userData.layoutPending = true; + } + }; + //should only be called from index.js update(?) for each topFolder, then from within performLayout() for each child folder + group.performLayout = performLayout; + + var straightRotation = new THREE.Quaternion(); + //provide arguments for how constrained to be, and re-use same function both on detach and elsewhere? + group.fixFolderPosition = function () { + var thresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.01; + + var f = this; + if (!f.userData.isOrthographic) return; + //always force rotation straight forward... + f.setRotationFromQuaternion(straightRotation); + + //we need to avoid NaN because of TextGeometry position having itemSize == 2 which upsets Vector3.fromBufferAttribute + //https://github.com/mrdoob/three.js/issues/14352 + //maybe I could use a Box2 anyway since 3d might just confuse things. + var box = (0, _utils.setBoxFromObject)(scratchFolderBox, f); + var boxW = box.max.x - box.min.x, + boxH = box.max.y - box.max.y; + + var cam = f.userData.isOrthographic; + var camBox = camBoxSetup(cam); //bit wasteful to call this here, but insignificant. + //really, I want to know if it's 'mostly' invisible. + //Using two boxes, rather than frustum.setFromMatrix( mat.multiplyMatrices( cam.projectionMatrix, cam.matrixWorldInverse ) ); + //(frustum is unnecessary *cough*if we assume orthographic perspective, no camera transform & are generally lax about z*) + var intersection = box.intersect(camBox); //careful of order; intersect() mutates + //(XXX: strictly speaking, ideally I would take camera matrixWorld into account if I want to be proper) + //(might just make log a warning if it's set how I don't expect it, but prefer not to leave traps.) + + //look at dimensions of intersection and force inwards if necessary... + var intersectionSize = intersection.getSize(scratchSize); + var screenW = cam.right - cam.left, + screenH = cam.top - cam.bottom; + //work in units as fraction of box width (although that's not a great idea with multi-column folders) + intersectionSize.x /= boxW;intersectionSize.y /= boxW; + var needsUpdate = false; + //console.log(`${f.folderName}: ${JSON.stringify(intersectionSize)}, thresh: ${thresh}`); + if (intersectionSize.x < thresh) { + //TODO: paramaterise / non-magic-number + //TODO work out which side we're on, move by object width... + f.position.x = cam.left + screenW / 2; + needsUpdate = true; + } + if (intersectionSize.y < thresh) { + f.position.y = cam.bottom + screenH / 2; + needsUpdate = true; + } + if (needsUpdate) f.updateMatrix(); + }; + + group.isCollapsed = function () { + return state.collapsed; + }; + + //useful to have access to this as well. Using in remove implementation + Object.defineProperty(group, 'guiChildren', { + //perhaps modalEditor should also count as a member of this... + //currently can't see anything in implementation that would require that + //-- adding headerItems though, so they'll get picked up by remove() + // - maybe same should apply to modalEditor + get: function get() { + return [].concat(_toConsumableArray(collapseGroup.children), _toConsumableArray(headerItems.children)); + } + }); + // returns true if all of the supplied args are members of this folder + group.hasChild = function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return !args.includes(function (obj) { + return group.guiChildren.indexOf(obj) === -1; + }); + }; + + group.folderName = name; //for debugging + + // Yeah. Gross. + var addOriginal = THREE.Group.prototype.add; + //as long as no-one expects this to behave like a regular THREE.Group, the changed definition of remove shouldn't hurt + var removeOriginal = THREE.Group.prototype.remove; + + function addImpl(o) { + // I could change this function as part of a refactor to place everything at topFolder level... + // is that a good idea, or a bad idea? + addOriginal.call(group, o); + } + function removeImpl(o) { + removeOriginal.call(group, o); + } + + //addImpl( collapseGroup ); //redundant. + + var panel = Layout.createPanel(width, Layout.FOLDER_HEIGHT, depth, true); + addImpl(panel); + + var descriptorLabel = textCreator.create(name); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN * 1.5; + descriptorLabel.position.y = -0.03; + descriptorLabel.position.z = depth; + panel.add(descriptorLabel); + + var downArrow = Layout.createDownArrow(); + Colors.colorizeGeometry(downArrow.geometry, 0xffffff); + downArrow.position.set(0.05, 0, depth * 1.01); + panel.add(downArrow); + + var grabber = Layout.createPanel(width, Layout.FOLDER_GRAB_HEIGHT, depth, true); + grabber.position.y = Layout.FOLDER_HEIGHT * 0.86; //XXX: magic number + grabber.name = 'grabber'; + addImpl(grabber); + + var grabBar = Graphic.grabBar(); + grabBar.position.set(width * 0.5, 0, depth * 1.001); + grabber.add(grabBar); + group.isFolder = true; + group.hideGrabber = function () { + grabber.visible = false; + }; + group.showGrabber = function () { + grabber.visible = true; + }; + group.hideHeader = function () { + group.hideGrabber(); + //descriptorLabel.visible = downArrow.visible = panel.visible = false; + panel.visible = false; + }; + group.showHeader = function () { + //grabber.visible = descriptorLabel.visible = downArrow.visible = panel.visible = true; + panel.visible = true; + }; + + //TODO: interface for adding things to this... NOT 'showInFolderHeader' method / property on linear items... + var headerItems = new THREE.Group(); + panel.add(headerItems); + //this function will attempt to make obj behave as controller layed out in headerItems, + //based on some assumptions about obj that may be true at time of writing... + //but are pending more rigorous specification / refactoring etc. + group.addHeaderItem = function (obj) { + headerItems.add(obj); + obj.folder = group; + obj.isHeaderObject = true; + + //also need to add to global controllers list etc. NB:: make sure that they will get removed as well + //--- this generic interaction.update doesn't make listen() work properly. + if (!obj.updateControl) obj.updateControl = function (inputObjects) { + return obj.interaction.update(inputObjects); + }; + obj.hitscan = [obj]; //hacky hacky + globalControllers.push(obj); + }; + + var detachButtonMaterial = new THREE.MeshBasicMaterial({ color: 0x888888, transparent: true }); + var h = Layout.FOLDER_HEIGHT * 0.8; + var detachButtonRect = new THREE.BoxGeometry(h, h, Layout.BUTTON_DEPTH * 2); + //somewhat backwards way of getting textures... TODO maybe change (along with other style consistency type stuff) + var dockTexture = Graphic.dock().material.map; + var undockTexture = Graphic.undock().material.map; + detachButtonMaterial.map = undockTexture; + var detachButton = new THREE.Mesh(detachButtonRect, detachButtonMaterial); + detachButton.visible = false; + detachButton.position.x = Layout.FOLDER_WIDTH - Layout.FOLDER_HEIGHT; + var detachButtonInteraction = (0, _interaction2.default)(detachButton); + detachButton.interaction = detachButtonInteraction; + detachButtonInteraction.events.on('onPressed', function (p) { + if (group.detachedParent) { + group.reattach(); + } else group.detach(); + p.locked = true; + }); + //headerItems.add(detachButton); + group.addHeaderItem(detachButton); + + var isDetachable = false; + Object.defineProperty(group, 'detachable', { + get: function get() { + return isDetachable; + }, + set: function set(newValue) { + if (newValue === isDetachable) return; + detachButton.visible = newValue; + isDetachable = newValue; + } + }); + + group.add = function () { + var newController = guiAdd.apply(undefined, arguments); + + if (newController) { + group.addController(newController); + return newController; + } else { + return new THREE.Group(); + } + }; + + /* + Some controllers may bring up sub-GUIs which have the potential + to overlap / clash. This ensures only one is present at a time. + */ + group.setModalEditor = function (e) { + //This could go wrong if folder hierarchy changes significantly. + //Should be good enough for rock'n'roll (famous last words). + //I could make it so that only one of these things was ever visible + //across the entire system. That should be easier to make robust, anyway... + //and saves headaches down the line. + var folder = (0, _utils.getTopLevelFolder)(group); + if (folder.modalEditor) folder.modalEditor.visible = false; + folder.modalEditor = e; + if (!e) return; + e.visible = true; + if (e.performLayout) e.performLayout(); + folder.modalWasSetInCurrentFrame = true; + //add a flag to all children recursively so that interaction system can identify them as belonging to a modal editor + //TODO: skip if already done... + function decorateChildren(parent) { + parent.children.forEach(function (c) { + c.userData.partOfModal = e; + decorateChildren(c); + }); + } + decorateChildren(e); + }; + + /** + * Removes the current modal editor from this folder + * **but not if it was added during the current controller update, + * as indicated by a flag set in setModalController and reset in index.js update** + */ + group.clearModalEditor = function () { + var folder = (0, _utils.getTopLevelFolder)(group); + if (!folder.modalWasSetInCurrentFrame) { + //folder.setModalEditor(null); + if (folder.modalEditor) { + folder.modalEditor.visible = false; + folder.modalEditor = null; + } + } + }; + + /* + Removes the given controllers from the GUI. >>>Once removed, the controllers will effectively be invalid for use<<< + >>> so dispose of them as well? Need to be careful about textures / anything shared... <<< + as they will also be removed from the global list of all dat.GUIVR controllers. Use 'detach' instead if it is + desired to reuse GUI elements elsewhere. + If the arguments are invalid, it will attempt to detect this before making any changes, + aborting the process and returning false from this method. + Note: as with add, this overwrites an existing property of THREE.Group. + As long as no-one expects folders to behave like regular THREE.Groups, that shouldn't matter. + */ + group.remove = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + //guiRemove is passed in from index.js and is responsible for sanity checking & removing from global controllers list + var ok = guiRemove.apply(undefined, args); // any invalid arguments should cause this to return false with no side-effects + if (!ok) return false; + args.forEach(function (obj) { + console.assert(group.hasChild(obj), "internal problem with housekeeping logic of dat.GUIVR folder not caught by sanity check"); + if (obj.isFolder) { + obj.remove.apply(obj, _toConsumableArray(obj.guiChildren)); + } + collapseGroup.remove(obj); + }); + //TODO: defer actual layout performance; set a flag and make sure it gets done before any rendering or hit-testing happens. + group.requestLayout(); + return true; + }; + + //rather than method, detachedParent be a property that does this stuff in setter... + //anyway, both are really meant for internal use, as hinted by _ in name. + group._setDetachedFrom = function (parent) { + group.detachedParent = parent; + if (parent === null) { + detachButton.material.map = undockTexture; + } else { + detachButtonMaterial.map = dockTexture; + group.showHeader(); + group.showGrabber(); + group.folder = group; + } + }; + + /** + * Detach a child folder from this folder hierarchy, such that it can be used elsewhere in scene hierarchy. + * + * (will not be visible until explicitly added elsewhere; + * calling detach() instead will do this automatically, and is more intended for use in application code + * while this method is more of an internal implementation detail.) + */ + group.detachChild = function (child) { + if (!child.isFolder || child.folder !== group) return false; + child._setDetachedFrom(group); + collapseGroup.remove(child); + //THREE.Object3D.prototype.remove.call(group, child); + removeImpl(child); + group.requestLayout(); + return group; //or child? + }; + + /* + Detach this object from its parent, and reattach to scenegraph as a sibling of the 'top level' folder in + the hierarchy this previously was a member of. + */ + group.detach = function () { + if (group.folder === group) return false; + //automatically add to THREE parent of top level folder and try to set appropriate scale / transform... + //if that folder beingMoved at the present time, then it will have an oldParent to which we should attach instead. + //...although it may be that we want the detached folder to move with the controller until button is released... + var topFolder = (0, _utils.getTopLevelFolder)(group); + group.folder.detachChild(group); + + //adding to topFolder.parent IF AVAILABLE, not oldParent, pending working out transform later if beingMoved... + var par = topFolder.parent || group.parent; + if (!par) return; //SJPT change from CSynth, not carefully reviewed but probably right. + par.add(group); + var m = topFolder.matrix.clone(); + + group.applyMatrix4(m); + m.setPosition(new THREE.Vector3()); + var t = new THREE.Vector3(Layout.FOLDER_WIDTH, 0, 0).applyMatrix4(m); + group.position.add(t); + + if (topFolder.beingMoved) { + //detach this object from topFolder.parent then attach to topFolder.oldParent while maintaining matrixWorld + //...actually, (maybe) we want to do this sceneShift business when beingMoved finishes... + // put things into semiDetached, so that when beingMoved is set to false, they can be shifted. + //or maybe what we really want is to have an option to 'pin' panels together and unpin them, rather than assume + //attachment changes when button released. For now, this is not quite working right, so... + var deferSceneShiftWhileMoving = false; + + //we could just detach, leaving the object as direct descendent of scene, but there may be real reasons to situate + //the GUI within hierarchy somehow (like as children of a controller) + + if (deferSceneShiftWhileMoving) { + topFolder.userData.semiDetached.push(group); + topFolder.userData.oldParent = topFolder.oldParent; //XXX: hack because topFolder.oldParent was being undefined before beingMoved = false + } else { + var child = group; + var oldParent = topFolder.parent; //oldParent to detach from is the current parent while beingMoved + var newParent = topFolder.oldParent; //newParent to attach to is oldParent of the folder before it was beingMoved + + sceneShift(child, oldParent, newParent); + } + } + group.userData.isOrthographic = topFolder.userData.isOrthographic; //TODO: revise how to pass this info + group.fixFolderPosition(0.5); + group.open(); + return group; + }; + + //ala https://threejs.org/docs/#examples/utils/SceneUtils + function sceneDetach(child, parent, scene) { + parent.updateMatrixWorld(); + child.applyMatrix4(parent.matrixWorld); + parent.remove(child); + scene.add(child); + } + function sceneAttach(child, scene, parent) { + parent.updateMatrixWorld(); + child.applyMatrix4(new THREE.Matrix4().getInverse(parent.matrixWorld)); + scene.remove(child); + parent.add(child); + } + function sceneShift(child, oldParent, newParent) { + var node = oldParent; + while (node.parent) { + node = node.parent; + }var scene = node; + + sceneDetach(child, oldParent, scene); + sceneAttach(child, scene, newParent); + } + + group.detachFromParent = group.detach; + + group.reattach = function () { + if (!group.detachedParent) return false; + //TODO: check layout with various combinations of wrapping etc. + group.detachedParent.addFolder(group); // this will also deal with cosmetics (hideGrabber etc) + var topFolder = (0, _utils.getTopLevelFolder)(group.detachedParent); + if (topFolder.beingMoved) { + //maybe we could do this kind of stuff in _setDetachedFrom + //in any case, it's irrelevant if + var semis = topFolder.userData.semiDetached; + var index = semis.indexOf(group); + if (index > -1) topFolder.userData.semiDetached.splice(index, 1); + } + //group.detachedParent = null; + group._setDetachedFrom(null); + return true; + }; + + group.addController = function () { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + args.forEach(function (obj) { + if (obj.isFolder) { + group.addFolder(obj); + } else { + collapseGroup.add(obj); + obj.folder = group; + } + //XXX: hacking in some universal tooltip support + if (obj.setToolTip) return; //but not if a more specific implementation already exists (see dropdown...) + obj.setToolTip = function (tip) { + obj.userData.tip = tip; + //TODO: pay more attention to layout config / make createToolTip have simpler arguments + var tipObj = (0, _textlabel.createToolTip)(textCreator, tip, Layout.FOLDER_WIDTH, obj.spacing, Layout.BUTTON_DEPTH); + obj.userData.tipObj = tipObj; + //associate event with hover on appropriate hitscan... + + if (obj.interaction) { + //TODO: events.off() if replacing old tooltip (or not repeating on()). + obj.interaction.events.on('tick', function () { + //don't just set visibility; add/remove as these are killing framerate in large VR guis. + //REVIEW... considering making tooltips work when hovering on label as well, + // but of course this would mean changing more about the interaction setup, + // and having more objects to test in scene hierarchy. + // Leaving for now, if working more on the library, hopefully fix hover event etc. + if (obj.visible) (0, _utils.setVisibility)(obj, tipObj, obj.interaction.hovering()); + }); + } else { + console.error('can\'t create tooltip for ' + obj.guiType + ' because there\'s no obj.interaction property...'); + } + }; + + obj.getToolTip = function () { + return obj.userData.tip; + }; + }); + + group.requestLayout(); + }; + + group.addFolder = function () { + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + args.forEach(function (obj) { + //TODO if obj is string, make a new gui and add / return it... but what about varargs? + collapseGroup.add(obj); + obj.folder = group; + obj.matrix.identity(); + obj.scale.set(1, 1, 1); + obj.position.set(0, 0, 0); + obj.rotation.set(0, 0, 0); + + obj.hideGrabber(); + obj.close(); + }); + + group.requestLayout(); + }; + + group.promoteZOrder = function () { + if ((0, _utils.getTopLevelFolder)(group) !== group || !topFolderStack.includes(group)) { + //maybe this shouldn't be a 'public method' (but maybe there should be a well-defined public interface). + console.error('Warning: inconsistency in folder housekeeping'); + } + topFolderStack.splice(topFolderStack.indexOf(group), 1); + topFolderStack.push(group); + // console.log(`promoting ${group.folderName}`); + // console.log(`[${topFolderStack.map(f=>f.folderName).join(', ')}]`); + //this will result in the object z being different from when mouseIntersection hit it earlier in update. + //mouseIntersection will then later be used in handleTick of grab interaction, to further mutate position + //seems ok though (as of 04/12/18) + if (group.userData.isOrthographic) orthographicFolderLayout(); + }; + + //group.userData.orthographicFolderLayout = orthographicFolderLayout; + + function performLayout() { + performHeaderLayout(); + + var wrapNested = false; + + var topFolder = (0, _utils.getTopLevelFolder)(group); + //starting whole new layout of topFolder? + if (topFolder === group) { + if (topFolder.modalEditor && topFolder.modalEditor.performLayout) topFolder.modalEditor.performLayout(); + + topFolder.userData.layoutInProgress = true; + topFolder.userData.columnHeight = 0; + topFolder.userData.columnIndex = 0; + topFolder.userData.columnYOff = -topFolder.position.y; + //I could undefine these at the end, but there's no point. + + if (!topFolderStack.includes(group)) { + topFolderStack.push(group); + if (group.userData.isOrthographic) orthographicFolderLayout(); + // console.log(`adding ${group.folderName}`); + // console.log(`[${topFolderStack.map(f=>f.folderName).join(', ')}]`); + } + } else { + //keep counting columnHeight (current y) & index from parent folder. + group.userData.columnHeight = group.folder.userData.columnHeight; + group.userData.columnIndex = group.folder.userData.columnIndex; //TODO: make sure to test with deep nesting. + + if (topFolderStack.includes(group)) { + topFolderStack.splice(topFolderStack.indexOf(group), 1); + if (group.userData.isOrthographic) orthographicFolderLayout(); + // console.log(`removing ${group.folderName}`); + // console.log(`[${topFolderStack.map(f=>f.folderName).join(', ')}]`); + } + } + + var spacingPerController = Layout.PANEL_HEIGHT + Layout.PANEL_SPACING; + var emptyFolderSpace = Layout.FOLDER_HEIGHT + Layout.PANEL_SPACING; + var totalSpacing = emptyFolderSpace; + + collapseGroup.children.forEach(function (c) { + c.visible = !state.collapsed; + }); + //children should be ordered by guiIndex. + //if they don't already have one, it can be added here: + //this should be the only place that we need to consider that property + //it allows for detaching elements and reattaching in similar place, even if some siblings are also detached. + var lastGuiIndex = 0; + //try to allow for the possibility that client program may attempt to restore items + //remembering detachedParent but not guiIndex? Noise... + //const detachedChildren = topFolderStack.filter(f => f.detachedParent === this); + //collapseGroup.children.concat(detachedChildren).forEach( (c, i) => { + collapseGroup.children.forEach(function (c, i) { + if (c.guiIndex === undefined) { + c.guiIndex = lastGuiIndex += 1; + } else lastGuiIndex = c.guiIndex; + }); + collapseGroup.children.sort(function (a, b) { + return a.guiIndex - b.guiIndex; + }); + + if (state.collapsed) { + downArrow.rotation.z = Math.PI * 0.5; + } else { + downArrow.rotation.z = 0; + + var y = 0, + lastHeight = emptyFolderSpace; + + collapseGroup.children.forEach(function (child, index) { + if (child.isFolder) { + child.userData.columnYOff = group.userData.columnYOff - y; //except 'y' will be wrong... + child.performLayout(); + } + if (!wrapNested) { + //Original layout algorithm + var h = child.spacing ? child.spacing : spacingPerController; + // how far to get from the middle of previous to middle of this child? + // half of the height of previous plus half height of this. + // if we've wrapped to a new column recently, how is this affected? + // spacing property should then be spacing *within current column*, so the way we track totalSpacing should reflect that. + var spacing = 0.5 * (lastHeight + h); + + if (child.isFolder) { + // For folders, the origin isn't in the middle of the entire height of the folder, + // but just the middle of the top panel. + var offset = 0.5 * (lastHeight + emptyFolderSpace); + child.position.y = y - offset; + } else { + child.position.y = y - spacing; + } + // in any case, for use by the next object along we remember 'y' as the middle of the whole panel + y -= spacing; + lastHeight = h; + + if (index < MAX_FOLDER_ITEMS_IN_COLUMN) totalSpacing += h; + child.position.x = 0.026; + + if ((index + 1) % MAX_FOLDER_ITEMS_IN_COLUMN === 0) y = 0; + + child.position.x += width * Math.floor(index / MAX_FOLDER_ITEMS_IN_COLUMN); + } else { + //new layout algorithm WIP, should allow for nested folders to wrap to the top of a new column, with all folders + //in hierarchy using same column layout + var maxColHeight = MAX_FOLDER_ITEMS_IN_COLUMN * spacingPerController; //MAX_FOLDER_ITEMS is slight misnomer + var _h = child.spacing ? child.spacing : spacingPerController; + var childDidWrap = child.isFolder && child.userData.columnIndex > group.userData.columnIndex; + + //move to a new column? + if (group.userData.columnHeight > maxColHeight) { + //TODO: maybe add an extra header thing to allow folding nested folder? + group.userData.columnIndex++; + group.userData.columnHeight = _h; + totalSpacing = 0; //h will be added later + lastHeight = 0; //???? what should this be? Original algorithm it's 'emptyFolderSpace' + //check logic of this WRT deeper nesting (should be position relative to topFolder rather than immediate parent) + //what I should do is use accummulation of all folder levels + one parent above. + //y = -group.position.y; + y = group.userData.columnYOff; + } else { + group.userData.columnHeight += _h; + } + + //var spacing = 0.5 * (lastHeight + h); + var _spacing = 0.5 * (lastHeight + _h); + + if (child.isFolder) { + // For folders, the origin isn't in the middle of the entire height of the folder, + // but just the middle of the top panel.... + var offset = 0.5 * (lastHeight + emptyFolderSpace); + child.position.y = y - offset; + } else { + child.position.y = y - _spacing; + } + // in any case, for use by the next object along we remember 'y' as the middle of the whole panel + //XXX: this logic doesn't work for column wrapping, (because of how spacing is computed above?) + y -= _spacing; + lastHeight = _h; + + totalSpacing += _h; + child.position.x = 0.026; + child.position.x += width * group.userData.columnIndex; //nb for nested, consider difference between group & parent + + if (child.isFolder) { + //if (child.userData.columnIndex > group.userData.columnIndex) lastHeight = 0; + group.userData.columnHeight = child.userData.columnHeight; + group.userData.columnIndex = child.userData.columnIndex; + } + } + child.updateMatrix(); + }); + } + + group.spacing = totalSpacing; + + // if we're a subfolder, use a smaller panel + var panelWidth = Layout.FOLDER_WIDTH; + if (group.folder !== group) { + panelWidth = Layout.SUBFOLDER_WIDTH; + } + + Layout.resizePanel(panel, panelWidth, Layout.FOLDER_HEIGHT, depth); + + if (topFolder === group) { + group.userData.layoutInProgress = false; + group.userData.layoutPending = false; + group.fixFolderPosition(); + } + } + + function performHeaderLayout() { + var dx = Layout.FOLDER_HEIGHT; + var x = Layout.FOLDER_WIDTH; + headerItems.children.forEach(function (c) { + if (!c.visible) return; + x -= dx * 0.8; + c.position.x = x; + x -= dx * 0.3; //TODO: dehackify + }); + } + + function updateView() { + if (interaction.hovering()) { + panel.material.color.setHex(Colors.HIGHLIGHT_BACK); + } else { + panel.material.color.setHex(Colors.DEFAULT_FOLDER_BACK); + } + + if (grabInteraction.hovering()) { + grabber.material.color.setHex(Colors.HIGHLIGHT_BACK); + } else { + grabber.material.color.setHex(Colors.DEFAULT_FOLDER_BACK); + } + + //TODO: more consistent hover styling + if (detachButtonInteraction.hovering()) { + detachButtonMaterial.color.setHex(0xFFFFFF); + } else { + detachButtonMaterial.color.setHex(0x888888); + } + } + + var interaction = (0, _interaction2.default)(panel); + interaction.events.on('onPressed', function (p) { + if (state.collapsed) group.open();else group.close(); + p.locked = true; + }); + + group.open = function () { + if (!state.collapsed) return; + if (group.folder !== group && group.folder.accordion) { + group.folder.guiChildren.filter(function (c) { + return c.isFolder && c !== group; + }).forEach(function (c) { + return c.close(); + }); + } + state.collapsed = false; + addImpl(collapseGroup); + group.requestLayout(); + }; + + group.close = function () { + if (state.collapsed) return; + state.collapsed = true; + removeImpl(collapseGroup); + group.requestLayout(); + }; + + group.folder = group; + + var grabInteraction = Grab.create({ group: group, panel: grabber }); + var paletteInteraction = Palette.create({ group: group, panel: panel }); + group.updateControl = function (inputObjects) { + //nb: if the control is not visible / active, then it won't interfere... + //but "if (!isDetachable)" here causes problems. + + //headerItems should now have their own updateControl and be in globalControllers list + //headerItems.children.forEach(o => o.interaction.update(inputObjects)); + interaction.update(inputObjects); + grabInteraction.update(inputObjects); + paletteInteraction.update(inputObjects); + + updateView(); + }; + + //'grabReleased' is emitted on input.events... used for ortho mouse fixFolderPosition + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + var _beingMoved = false; + //group.hitscan = [ panel, grabber, detachButton ]; + + /////EXPERIMENTAL FEATURE, CURRENTLY HARDCODED NOT TO HAPPEN + //sub-folders that are detached while moving remain attached to parent object (the controller that's moving them) + //& kept in semiDetached until beingMoved is set to false, at which point they shift attachment to oldParent + group.userData.semiDetached = []; + + Object.defineProperties(group, { + hitscan: { + get: function get() { + var _hits; + + //don't need to filter visible here, this'll be done in index.js getVisibleHitscanObjects() + //(implementation note 31/7/19; ...headerItems.children here being removed as each headerItem + //should now be closer to 'fully fledged' controller) + var hits = [panel, grabber]; + if (group.modalEditor) hits = (_hits = hits).concat.apply(_hits, _toConsumableArray(group.modalEditor.hitscan)); + return hits; + } + }, + beingMoved: { + get: function get() { + return _beingMoved; + }, + set: function set(value) { + _beingMoved = value; + if (!_beingMoved) { + var oldParent = group.parent; //oldParent to detach from is the current parent while beingMoved + var newParent = group.userData.oldParent; //newParent to attach to is oldParent of the folder before it was beingMoved + //assertion... this should never happen (and doesn't AFAICT). + if ((0, _utils.getTopLevelFolder)(group) !== group) { + console.log("Housekeeping problem in dat.GUIVR..."); + } + + group.userData.semiDetached.forEach(function (child) { + //as well as this currently ending up with wrong transform, I also have wrong transform if I drag folder while semiDeatched... + //**although in that case, it shifts back to where it should be when button is released** + sceneShift(child, oldParent, newParent); + }); + group.userData.semiDetached = []; + } + } + } + }); + + var _loop = function _loop(k) { + group[k] = function () { + var controller = addControllerFuncs[k].apply(addControllerFuncs, arguments); + if (controller) { + group.addController(controller); + return controller; + } else { + return new THREE.Group(); + } + }; + }; + + for (var k in addControllerFuncs) { + _loop(k); + } + + return group; +} + +},{"./colors":4,"./grab":8,"./graphic":9,"./interaction":13,"./layout":15,"./palette":16,"./sharedmaterials":19,"./textlabel":22,"./utils":23}],7:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.image = image; +exports.fnt = fnt; +/** +* dat-guiVR Javascript Controller Library for VR +* https://github.com/dataarts/dat.guiVR +* +* Copyright 2016 Data Arts Team, Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +function image() { + var image = new Image(); + image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAEACAMAAADyTj5VAAAAjVBMVEVHcEz///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+umAc7AAAAL3RSTlMAWnJfbnqDWGR4a2ZcYnBRalRLgH6ETnR8UGh2RoZDXlaHSYo8QHU2LyYcFAwFmmUR1OIAAJFhSURBVHhetL2JWmu7jjUKIQkkQLqZvgMCZO2zT/33/R/vSkNDkj2TrOarVd5V6xDP3pJlWdKQ7qaPb6+vrw8vj+PZ/vvrxz///Pj63s/G7/cP2n0/XZ6Op6X8fJHfaG/3j9q5X/LKt/t3v/QfufQk/Xoubolz/Dq5LH7y1nLVl9xeH4b28jidncZy/ZM0P+Wff/7zn//8++9//sG5Uztav3H1inJIXkle8Qvn3+OROP2oj5OPmz7ev+m5PDDFyXan/UwewBd8124ZDn2o3eTBBmCKAzZQfjY75WX//Y+/Kj6Ln77//uF3r24vHyfP5ae9cRRsaH5I/48veQqP5Kh9X9z86wvn+wjhZfmYjTzmyBflSOBz5V1lXO8eH54mw8nzK8dTHsnPepbupwft1Vu+PslvaZPts73FaWxXbp/iUjx/I9SUc3HLqZ2DhntVP0ERfN79q918+/T2uFlO8ew8BW+qw4Rz5RZbOTp5fsJj+dTqFZ/llTAquLc+Em8jA/4dA/S89c95khEh8ZTYm8e3p+0QV9xP5f5fQjU8VLueJ3ite9CT9Lezn5ID+Kp8tB3EmOfdefsl580PY1WMDkaBNFXqH5VjeSSG5HjRdTzq+eAMjP+EL8vHyCSzFzW6LE96Prjv7uVpMup0uluMp7IpuWXb7XQ6wycZttkUb93toI269rHLKa8cbp0UnM2vTxM9t/v88IhzeN3k6SV/4tbyZse9fd4Qfd2JvO7m8eG5W57yDRbArMK5uDveGCT9Qb7IV+zaGM72xxPuPcLpSs8j59nzpBufM3x24nHavtoDhnIP6SXV8N64aDQkPTlRtnb2s99E39RfdRifrrwknbw7bo/JhXlLwelPmciT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"; + return image; +} + +function fnt() { + return "info face=\"Roboto\" size=192 bold=0 italic=0 charset=\"\" unicode=1 stretchH=100 smooth=1 aa=1 padding=24,24,24,24 spacing=12,12 outline=0\ncommon lineHeight=192 base=152 scaleW=3072 scaleH=1536 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4\npage id=0 file=\"roboto_0.png\"\nchars count=194\nchar id=0 x=636 y=1438 width=48 height=49 xoffset=-24 yoffset=167 xadvance=0 page=0 chnl=15\nchar id=2 x=576 y=1438 width=48 height=49 xoffset=-24 yoffset=167 xadvance=0 page=0 chnl=15\nchar id=13 x=450 y=1439 width=51 height=49 xoffset=-25 yoffset=167 xadvance=40 page=0 chnl=15\nchar id=32 x=2987 y=1242 width=51 height=49 xoffset=-25 yoffset=167 xadvance=40 page=0 chnl=15\nchar id=33 x=1714 y=769 width=66 height=163 xoffset=-12 yoffset=14 xadvance=41 page=0 chnl=15\nchar id=34 x=1999 y=1263 width=81 height=87 xoffset=-14 yoffset=8 xadvance=51 page=0 chnl=15\nchar id=35 x=1214 y=951 width=136 height=162 xoffset=-15 yoffset=14 xadvance=99 page=0 chnl=15\nchar id=36 x=1610 y=0 width=122 height=196 xoffset=-16 yoffset=-4 xadvance=90 page=0 chnl=15\nchar id=37 x=1341 y=595 width=152 height=165 xoffset=-17 yoffset=13 xadvance=117 page=0 chnl=15\nchar id=38 x=1658 y=592 width=141 height=165 xoffset=-17 yoffset=13 xadvance=99 page=0 chnl=15\nchar id=39 x=2092 y=1263 width=62 height=85 xoffset=-17 yoffset=8 xadvance=28 page=0 chnl=15\nchar id=40 x=103 y=0 width=90 height=213 xoffset=-14 yoffset=0 xadvance=55 page=0 chnl=15\nchar id=41 x=0 y=0 width=91 height=213 xoffset=-22 yoffset=0 xadvance=56 page=0 chnl=15\nchar id=42 x=664 y=1294 width=114 height=114 xoffset=-23 yoffset=14 xadvance=69 page=0 chnl=15\nchar id=43 x=0 y=1317 width=128 height=129 xoffset=-19 yoffset=34 xadvance=91 page=0 chnl=15\nchar id=44 x=1916 y=1264 width=71 height=88 xoffset=-22 yoffset=111 xadvance=31 page=0 chnl=15\nchar id=45 x=233 y=1457 width=88 height=60 xoffset=-22 yoffset=74 xadvance=44 page=0 chnl=15\nchar id=46 x=2828 y=1245 width=68 height=65 xoffset=-14 yoffset=112 xadvance=42 page=0 chnl=15\nchar id=47 x=0 y=429 width=109 height=172 xoffset=-23 yoffset=14 xadvance=66 page=0 chnl=15\nchar id=48 x=2392 y=583 width=122 height=165 xoffset=-16 yoffset=13 xadvance=90 page=0 chnl=15\nchar id=49 x=112 y=1143 width=93 height=162 xoffset=-11 yoffset=14 xadvance=90 page=0 chnl=15\nchar id=50 x=1443 y=772 width=126 height=163 xoffset=-17 yoffset=13 xadvance=90 page=0 chnl=15\nchar id=51 x=2660 y=575 width=121 height=165 xoffset=-17 yoffset=13 xadvance=90 page=0 chnl=15\nchar id=52 x=1794 y=943 width=132 height=162 xoffset=-21 yoffset=14 xadvance=90 page=0 chnl=15\nchar id=53 x=539 y=779 width=121 height=164 xoffset=-13 yoffset=14 xadvance=90 page=0 chnl=15\nchar id=54 x=406 y=779 width=121 height=164 xoffset=-14 yoffset=14 xadvance=90 page=0 chnl=15\nchar id=55 x=2082 y=941 width=127 height=162 xoffset=-19 yoffset=14 xadvance=90 page=0 chnl=15\nchar id=56 x=2526 y=581 width=122 height=165 xoffset=-16 yoffset=13 xadvance=90 page=0 chnl=15\nchar id=57 x=1581 y=771 width=121 height=163 xoffset=-17 yoffset=13 xadvance=90 page=0 chnl=15\nchar id=58 x=2383 y=1113 width=67 height=134 xoffset=-14 yoffset=43 xadvance=39 page=0 chnl=15\nchar id=59 x=372 y=1140 width=73 height=156 xoffset=-22 yoffset=43 xadvance=34 page=0 chnl=15\nchar id=60 x=539 y=1307 width=113 height=119 xoffset=-19 yoffset=42 xadvance=81 page=0 chnl=15\nchar id=61 x=1688 y=1269 width=115 height=93 xoffset=-13 yoffset=51 xadvance=88 page=0 chnl=15\nchar id=62 x=411 y=1308 width=116 height=119 xoffset=-14 yoffset=42 xadvance=84 page=0 chnl=15\nchar id=63 x=800 y=779 width=113 height=164 xoffset=-19 yoffset=13 xadvance=76 page=0 chnl=15\nchar id=64 x=1421 y=0 width=177 height=196 xoffset=-16 yoffset=16 xadvance=144 page=0 chnl=15\nchar id=65 x=2708 y=752 width=150 height=162 xoffset=-23 yoffset=14 xadvance=104 page=0 chnl=15\nchar id=66 x=2221 y=939 width=127 height=162 xoffset=-12 yoffset=14 xadvance=100 page=0 chnl=15\nchar id=67 x=1811 y=592 width=137 height=165 xoffset=-15 yoffset=13 xadvance=104 page=0 chnl=15\nchar id=68 x=1650 y=946 width=132 height=162 xoffset=-12 yoffset=14 xadvance=105 page=0 chnl=15\nchar id=69 x=2496 y=934 width=122 height=162 xoffset=-12 yoffset=14 xadvance=91 page=0 chnl=15\nchar id=70 x=2630 y=932 width=120 height=162 xoffset=-12 yoffset=14 xadvance=88 page=0 chnl=15\nchar id=71 x=1960 y=590 width=137 height=165 xoffset=-15 yoffset=13 xadvance=109 page=0 chnl=15\nchar id=72 x=916 y=955 width=137 height=162 xoffset=-12 yoffset=14 xadvance=114 page=0 chnl=15\nchar id=73 x=296 y=1142 width=64 height=162 xoffset=-10 yoffset=14 xadvance=44 page=0 chnl=15\nchar id=74 x=272 y=790 width=122 height=164 xoffset=-21 yoffset=14 xadvance=88 page=0 chnl=15\nchar id=75 x=767 y=955 width=137 height=162 xoffset=-12 yoffset=14 xadvance=100 page=0 chnl=15\nchar id=76 x=2762 y=926 width=119 height=162 xoffset=-12 yoffset=14 xadvance=86 page=0 chnl=15\nchar id=77 x=2197 y=765 width=163 height=162 xoffset=-12 yoffset=14 xadvance=140 page=0 chnl=15\nchar id=78 x=1065 y=952 width=137 height=162 xoffset=-12 yoffset=14 xadvance=114 page=0 chnl=15\nchar id=79 x=1505 y=594 width=141 height=165 xoffset=-16 yoffset=13 xadvance=110 page=0 chnl=15\nchar id=80 x=1938 y=943 width=132 height=162 xoffset=-12 yoffset=14 xadvance=101 page=0 chnl=15\nchar id=81 x=2222 y=207 width=141 height=183 xoffset=-16 yoffset=13 xadvance=110 page=0 chnl=15\nchar id=82 x=1362 y=949 width=132 height=162 xoffset=-11 yoffset=14 xadvance=99 page=0 chnl=15\nchar id=83 x=2109 y=588 width=132 height=165 xoffset=-18 yoffset=13 xadvance=95 page=0 chnl=15\nchar id=84 x=617 y=955 width=138 height=162 xoffset=-21 yoffset=14 xadvance=95 page=0 chnl=15\nchar id=85 x=128 y=792 width=132 height=164 xoffset=-14 yoffset=14 xadvance=104 page=0 chnl=15\nchar id=86 x=2870 y=749 width=147 height=162 xoffset=-22 yoffset=14 xadvance=102 page=0 chnl=15\nchar id=87 x=2002 y=767 width=183 height=162 xoffset=-20 yoffset=14 xadvance=142 page=0 chnl=15\nchar id=88 x=312 y=966 width=141 height=162 xoffset=-20 yoffset=14 xadvance=100 page=0 chnl=15\nchar id=89 x=157 y=968 width=143 height=162 xoffset=-24 yoffset=14 xadvance=96 page=0 chnl=15\nchar id=90 x=1506 y=947 width=132 height=162 xoffset=-18 yoffset=14 xadvance=96 page=0 chnl=15\nchar id=91 x=658 y=0 width=79 height=202 xoffset=-13 yoffset=-2 xadvance=42 page=0 chnl=15\nchar id=92 x=2945 y=204 width=111 height=172 xoffset=-22 yoffset=14 xadvance=66 page=0 chnl=15\nchar id=93 x=567 y=0 width=79 height=202 xoffset=-24 yoffset=-2 xadvance=42 page=0 chnl=15\nchar id=94 x=1570 y=1271 width=106 height=105 xoffset=-20 yoffset=14 xadvance=67 page=0 chnl=15\nchar id=95 x=0 y=1458 width=121 height=60 xoffset=-24 yoffset=128 xadvance=72 page=0 chnl=15\nchar id=96 x=2622 y=1258 width=82 height=71 xoffset=-20 yoffset=8 xadvance=49 page=0 chnl=15\nchar id=97 x=1585 y=1121 width=119 height=136 xoffset=-16 yoffset=42 xadvance=87 page=0 chnl=15\nchar id=98 x=677 y=418 width=121 height=170 xoffset=-14 yoffset=8 xadvance=90 page=0 chnl=15\nchar id=99 x=1453 y=1123 width=120 height=136 xoffset=-17 yoffset=42 xadvance=84 page=0 chnl=15\nchar id=100 x=1209 y=413 width=120 height=170 xoffset=-17 yoffset=8 xadvance=90 page=0 chnl=15\nchar id=101 x=1320 y=1125 width=121 height=136 xoffset=-17 yoffset=42 xadvance=85 page=0 chnl=15\nchar id=102 x=1866 y=408 width=101 height=170 xoffset=-20 yoffset=6 xadvance=56 page=0 chnl=15\nchar id=103 x=134 y=612 width=121 height=167 xoffset=-17 yoffset=42 xadvance=90 page=0 chnl=15\nchar id=104 x=2627 y=395 width=116 height=168 xoffset=-14 yoffset=8 xadvance=88 page=0 chnl=15\nchar id=105 x=1050 y=776 width=67 height=164 xoffset=-14 yoffset=12 xadvance=39 page=0 chnl=15\nchar id=106 x=1327 y=0 width=82 height=198 xoffset=-30 yoffset=12 xadvance=38 page=0 chnl=15\nchar id=107 x=2495 y=401 width=120 height=168 xoffset=-14 yoffset=8 xadvance=81 page=0 chnl=15\nchar id=108 x=2755 y=392 width=64 height=168 xoffset=-13 yoffset=8 xadvance=39 page=0 chnl=15\nchar id=109 x=1973 y=1117 width=168 height=134 xoffset=-14 yoffset=42 xadvance=140 page=0 chnl=15\nchar id=110 x=2153 y=1115 width=116 height=134 xoffset=-14 yoffset=42 xadvance=88 page=0 chnl=15\nchar id=111 x=1181 y=1126 width=127 height=136 xoffset=-18 yoffset=42 xadvance=91 page=0 chnl=15\nchar id=112 x=267 y=611 width=121 height=167 xoffset=-14 yoffset=42 xadvance=90 page=0 chnl=15\nchar id=113 x=400 y=600 width=120 height=167 xoffset=-17 yoffset=42 xadvance=91 page=0 chnl=15\nchar id=114 x=2281 y=1113 width=90 height=134 xoffset=-14 yoffset=42 xadvance=54 page=0 chnl=15\nchar id=115 x=1716 y=1120 width=117 height=136 xoffset=-17 yoffset=42 xadvance=83 page=0 chnl=15\nchar id=116 x=457 y=1140 width=95 height=155 xoffset=-24 yoffset=23 xadvance=52 page=0 chnl=15\nchar id=117 x=1845 y=1117 width=116 height=135 xoffset=-14 yoffset=43 xadvance=88 page=0 chnl=15\nchar id=118 x=2772 y=1100 width=122 height=133 xoffset=-22 yoffset=43 xadvance=78 page=0 chnl=15\nchar id=119 x=2462 y=1113 width=163 height=133 xoffset=-22 yoffset=43 xadvance=120 page=0 chnl=15\nchar id=120 x=2637 y=1106 width=123 height=133 xoffset=-22 yoffset=43 xadvance=79 page=0 chnl=15\nchar id=121 x=0 y=613 width=122 height=167 xoffset=-23 yoffset=43 xadvance=76 page=0 chnl=15\nchar id=122 x=2906 y=1097 width=117 height=133 xoffset=-18 yoffset=43 xadvance=79 page=0 chnl=15\nchar id=123 x=458 y=0 width=97 height=202 xoffset=-20 yoffset=3 xadvance=54 page=0 chnl=15\nchar id=124 x=2451 y=206 width=61 height=183 xoffset=-11 yoffset=14 xadvance=39 page=0 chnl=15\nchar id=125 x=349 y=0 width=97 height=202 xoffset=-23 yoffset=3 xadvance=54 page=0 chnl=15\nchar id=126 x=2378 y=1259 width=138 height=79 xoffset=-14 yoffset=65 xadvance=109 page=0 chnl=15\nchar id=160 x=513 y=1439 width=51 height=49 xoffset=-25 yoffset=167 xadvance=40 page=0 chnl=15\nchar id=161 x=217 y=1142 width=67 height=162 xoffset=-14 yoffset=42 xadvance=39 page=0 chnl=15\nchar id=162 x=1341 y=413 width=120 height=170 xoffset=-16 yoffset=25 xadvance=88 page=0 chnl=15\nchar id=163 x=1300 y=774 width=131 height=163 xoffset=-18 yoffset=13 xadvance=93 page=0 chnl=15\nchar id=164 x=702 y=1129 width=149 height=149 xoffset=-17 yoffset=30 xadvance=114 page=0 chnl=15\nchar id=165 x=465 y=955 width=140 height=162 xoffset=-22 yoffset=14 xadvance=97 page=0 chnl=15\nchar id=166 x=2375 y=206 width=64 height=183 xoffset=-13 yoffset=14 xadvance=38 page=0 chnl=15\nchar id=167 x=205 y=0 width=132 height=202 xoffset=-18 yoffset=13 xadvance=98 page=0 chnl=15\nchar id=168 x=2716 y=1251 width=100 height=65 xoffset=-17 yoffset=12 xadvance=67 page=0 chnl=15\nchar id=169 x=995 y=599 width=161 height=165 xoffset=-18 yoffset=13 xadvance=126 page=0 chnl=15\nchar id=170 x=1368 y=1273 width=99 height=109 xoffset=-13 yoffset=13 xadvance=71 page=0 chnl=15\nchar id=171 x=1131 y=1277 width=110 height=110 xoffset=-17 yoffset=54 xadvance=75 page=0 chnl=15\nchar id=172 x=2251 y=1261 width=115 height=81 xoffset=-15 yoffset=65 xadvance=89 page=0 chnl=15\nchar id=173 x=133 y=1458 width=88 height=60 xoffset=-22 yoffset=74 xadvance=44 page=0 chnl=15\nchar id=174 x=1168 y=597 width=161 height=165 xoffset=-18 yoffset=13 xadvance=126 page=0 chnl=15\nchar id=175 x=333 y=1448 width=105 height=59 xoffset=-15 yoffset=14 xadvance=73 page=0 chnl=15\nchar id=176 x=1815 y=1268 width=89 height=88 xoffset=-15 yoffset=13 xadvance=60 page=0 chnl=15\nchar id=177 x=863 y=1129 width=121 height=147 xoffset=-17 yoffset=29 xadvance=85 page=0 chnl=15\nchar id=178 x=899 y=1288 width=97 height=111 xoffset=-19 yoffset=13 xadvance=59 page=0 chnl=15\nchar id=179 x=790 y=1290 width=97 height=112 xoffset=-20 yoffset=13 xadvance=59 page=0 chnl=15\nchar id=180 x=2528 y=1258 width=82 height=71 xoffset=-15 yoffset=8 xadvance=50 page=0 chnl=15\nchar id=181 x=866 y=599 width=117 height=166 xoffset=-13 yoffset=43 xadvance=91 page=0 chnl=15\nchar id=182 x=2893 y=923 width=110 height=162 xoffset=-20 yoffset=14 xadvance=78 page=0 chnl=15\nchar id=183 x=2908 y=1242 width=67 height=65 xoffset=-13 yoffset=62 xadvance=42 page=0 chnl=15\nchar id=184 x=2166 y=1261 width=73 height=82 xoffset=-15 yoffset=128 xadvance=40 page=0 chnl=15\nchar id=185 x=1479 y=1271 width=79 height=109 xoffset=-15 yoffset=14 xadvance=59 page=0 chnl=15\nchar id=186 x=1253 y=1274 width=103 height=109 xoffset=-15 yoffset=13 xadvance=73 page=0 chnl=15\nchar id=187 x=1008 y=1277 width=111 height=110 xoffset=-17 yoffset=54 xadvance=75 page=0 chnl=15\nchar id=188 x=2542 y=758 width=154 height=162 xoffset=-18 yoffset=14 xadvance=117 page=0 chnl=15\nchar id=189 x=2372 y=760 width=158 height=162 xoffset=-18 yoffset=14 xadvance=124 page=0 chnl=15\nchar id=190 x=1129 y=776 width=159 height=163 xoffset=-16 yoffset=13 xadvance=124 page=0 chnl=15\nchar id=191 x=925 y=777 width=113 height=164 xoffset=-19 yoffset=42 xadvance=76 page=0 chnl=15\nchar id=192 x=162 y=225 width=150 height=192 xoffset=-23 yoffset=-16 xadvance=104 page=0 chnl=15\nchar id=193 x=324 y=214 width=150 height=192 xoffset=-23 yoffset=-16 xadvance=104 page=0 chnl=15\nchar id=194 x=0 y=225 width=150 height=192 xoffset=-23 yoffset=-16 xadvance=104 page=0 chnl=15\nchar id=195 x=1359 y=210 width=150 height=190 xoffset=-23 yoffset=-14 xadvance=104 page=0 chnl=15\nchar id=196 x=1814 y=208 width=150 height=188 xoffset=-23 yoffset=-12 xadvance=104 page=0 chnl=15\nchar id=197 x=1016 y=0 width=150 height=199 xoffset=-23 yoffset=-23 xadvance=104 page=0 chnl=15\nchar id=198 x=1792 y=769 width=198 height=162 xoffset=-26 yoffset=14 xadvance=150 page=0 chnl=15\nchar id=199 x=1178 y=0 width=137 height=198 xoffset=-15 yoffset=13 xadvance=104 page=0 chnl=15\nchar id=200 x=2922 y=0 width=122 height=192 xoffset=-12 yoffset=-16 xadvance=91 page=0 chnl=15\nchar id=201 x=641 y=214 width=122 height=192 xoffset=-12 yoffset=-16 xadvance=91 page=0 chnl=15\nchar id=202 x=775 y=213 width=122 height=192 xoffset=-12 yoffset=-16 xadvance=91 page=0 chnl=15\nchar id=203 x=1976 y=207 width=122 height=188 xoffset=-12 yoffset=-12 xadvance=91 page=0 chnl=15\nchar id=204 x=1018 y=211 width=82 height=192 xoffset=-27 yoffset=-16 xadvance=44 page=0 chnl=15\nchar id=205 x=1112 y=211 width=82 height=192 xoffset=-11 yoffset=-16 xadvance=44 page=0 chnl=15\nchar id=206 x=909 y=213 width=97 height=192 xoffset=-27 yoffset=-16 xadvance=44 page=0 chnl=15\nchar id=207 x=2110 y=207 width=100 height=188 xoffset=-28 yoffset=-12 xadvance=44 page=0 chnl=15\nchar id=208 x=0 y=969 width=145 height=162 xoffset=-22 yoffset=14 xadvance=107 page=0 chnl=15\nchar id=209 x=1521 y=208 width=137 height=190 xoffset=-12 yoffset=-14 xadvance=114 page=0 chnl=15\nchar id=210 x=2184 y=0 width=141 height=195 xoffset=-16 yoffset=-17 xadvance=110 page=0 chnl=15\nchar id=211 x=2031 y=0 width=141 height=195 xoffset=-16 yoffset=-17 xadvance=110 page=0 chnl=15\nchar id=212 x=1878 y=0 width=141 height=195 xoffset=-16 yoffset=-17 xadvance=110 page=0 chnl=15\nchar id=213 x=2769 y=0 width=141 height=193 xoffset=-16 yoffset=-15 xadvance=110 page=0 chnl=15\nchar id=214 x=1206 y=210 width=141 height=191 xoffset=-16 yoffset=-13 xadvance=110 page=0 chnl=15\nchar id=215 x=279 y=1316 width=120 height=120 xoffset=-18 yoffset=40 xadvance=85 page=0 chnl=15\nchar id=216 x=2655 y=206 width=143 height=174 xoffset=-16 yoffset=10 xadvance=110 page=0 chnl=15\nchar id=217 x=2625 y=0 width=132 height=194 xoffset=-14 yoffset=-16 xadvance=104 page=0 chnl=15\nchar id=218 x=2481 y=0 width=132 height=194 xoffset=-14 yoffset=-16 xadvance=104 page=0 chnl=15\nchar id=219 x=2337 y=0 width=132 height=194 xoffset=-14 yoffset=-16 xadvance=104 page=0 chnl=15\nchar id=220 x=1670 y=208 width=132 height=190 xoffset=-14 yoffset=-12 xadvance=104 page=0 chnl=15\nchar id=221 x=486 y=214 width=143 height=192 xoffset=-24 yoffset=-16 xadvance=96 page=0 chnl=15\nchar id=222 x=2360 y=939 width=124 height=162 xoffset=-12 yoffset=14 xadvance=95 page=0 chnl=15\nchar id=223 x=121 y=429 width=127 height=171 xoffset=-14 yoffset=7 xadvance=95 page=0 chnl=15\nchar id=224 x=1604 y=410 width=119 height=170 xoffset=-16 yoffset=8 xadvance=87 page=0 chnl=15\nchar id=225 x=1473 y=412 width=119 height=170 xoffset=-16 yoffset=8 xadvance=87 page=0 chnl=15\nchar id=226 x=1735 y=410 width=119 height=170 xoffset=-16 yoffset=8 xadvance=87 page=0 chnl=15\nchar id=227 x=532 y=600 width=119 height=167 xoffset=-16 yoffset=11 xadvance=87 page=0 chnl=15\nchar id=228 x=2926 y=569 width=119 height=165 xoffset=-16 yoffset=13 xadvance=87 page=0 chnl=15\nchar id=229 x=2524 y=206 width=119 height=177 xoffset=-16 yoffset=1 xadvance=87 page=0 chnl=15\nchar id=230 x=996 y=1129 width=173 height=136 xoffset=-19 yoffset=42 xadvance=135 page=0 chnl=15\nchar id=231 x=1979 y=407 width=120 height=169 xoffset=-17 yoffset=42 xadvance=84 page=0 chnl=15\nchar id=232 x=1076 y=415 width=121 height=170 xoffset=-17 yoffset=8 xadvance=85 page=0 chnl=15\nchar id=233 x=943 y=417 width=121 height=170 xoffset=-17 yoffset=8 xadvance=85 page=0 chnl=15\nchar id=234 x=810 y=417 width=121 height=170 xoffset=-17 yoffset=8 xadvance=85 page=0 chnl=15\nchar id=235 x=2793 y=572 width=121 height=165 xoffset=-17 yoffset=13 xadvance=85 page=0 chnl=15\nchar id=236 x=772 y=600 width=82 height=167 xoffset=-29 yoffset=9 xadvance=40 page=0 chnl=15\nchar id=237 x=2970 y=388 width=82 height=167 xoffset=-13 yoffset=9 xadvance=40 page=0 chnl=15\nchar id=238 x=663 y=600 width=97 height=167 xoffset=-29 yoffset=9 xadvance=40 page=0 chnl=15\nchar id=239 x=0 y=1143 width=100 height=162 xoffset=-30 yoffset=14 xadvance=40 page=0 chnl=15\nchar id=240 x=2810 y=205 width=123 height=173 xoffset=-15 yoffset=5 xadvance=94 page=0 chnl=15\nchar id=241 x=0 y=792 width=116 height=165 xoffset=-14 yoffset=11 xadvance=88 page=0 chnl=15\nchar id=242 x=260 y=429 width=127 height=170 xoffset=-18 yoffset=8 xadvance=91 page=0 chnl=15\nchar id=243 x=538 y=418 width=127 height=170 xoffset=-18 yoffset=8 xadvance=91 page=0 chnl=15\nchar id=244 x=399 y=418 width=127 height=170 xoffset=-18 yoffset=8 xadvance=91 page=0 chnl=15\nchar id=245 x=2831 y=390 width=127 height=167 xoffset=-18 yoffset=11 xadvance=91 page=0 chnl=15\nchar id=246 x=2253 y=583 width=127 height=165 xoffset=-18 yoffset=13 xadvance=91 page=0 chnl=15\nchar id=247 x=140 y=1317 width=127 height=128 xoffset=-19 yoffset=34 xadvance=91 page=0 chnl=15\nchar id=248 x=564 y=1129 width=126 height=153 xoffset=-17 yoffset=34 xadvance=91 page=0 chnl=15\nchar id=249 x=2111 y=407 width=116 height=169 xoffset=-14 yoffset=9 xadvance=88 page=0 chnl=15\nchar id=250 x=2239 y=402 width=116 height=169 xoffset=-14 yoffset=9 xadvance=88 page=0 chnl=15\nchar id=251 x=2367 y=402 width=116 height=169 xoffset=-14 yoffset=9 xadvance=88 page=0 chnl=15\nchar id=252 x=672 y=779 width=116 height=164 xoffset=-14 yoffset=14 xadvance=88 page=0 chnl=15\nchar id=253 x=749 y=0 width=122 height=201 xoffset=-23 yoffset=9 xadvance=76 page=0 chnl=15\nchar id=254 x=883 y=0 width=121 height=201 xoffset=-13 yoffset=8 xadvance=92 page=0 chnl=15\nchar id=255 x=1744 y=0 width=122 height=196 xoffset=-23 yoffset=14 xadvance=76 page=0 chnl=15\nkernings count=1686\nkerning first=32 second=84 amount=-3\nkerning first=40 second=86 amount=2\nkerning first=40 second=87 amount=1\nkerning first=40 second=89 amount=2\nkerning first=40 second=221 amount=2\nkerning first=70 second=44 amount=-18\nkerning first=70 second=46 amount=-18\nkerning first=70 second=65 amount=-13\nkerning first=70 second=74 amount=-21\nkerning first=70 second=84 amount=2\nkerning first=70 second=97 amount=-3\nkerning first=70 second=99 amount=-2\nkerning first=70 second=100 amount=-2\nkerning first=70 second=101 amount=-2\nkerning first=70 second=103 amount=-2\nkerning first=70 second=111 amount=-2\nkerning first=70 second=113 amount=-2\nkerning first=70 second=117 amount=-2\nkerning first=70 second=118 amount=-2\nkerning first=70 second=121 amount=-2\nkerning first=70 second=192 amount=-13\nkerning first=70 second=193 amount=-13\nkerning first=70 second=194 amount=-13\nkerning first=70 second=195 amount=-13\nkerning first=70 second=196 amount=-13\nkerning first=70 second=197 amount=-13\nkerning first=70 second=224 amount=-3\nkerning first=70 second=225 amount=-3\nkerning first=70 second=226 amount=-3\nkerning first=70 second=227 amount=-3\nkerning first=70 second=228 amount=-3\nkerning first=70 second=229 amount=-3\nkerning first=70 second=231 amount=-2\nkerning first=70 second=232 amount=-2\nkerning first=70 second=233 amount=-2\nkerning first=70 second=234 amount=-2\nkerning first=70 second=235 amount=-2\nkerning first=70 second=242 amount=-2\nkerning first=70 second=243 amount=-2\nkerning first=70 second=244 amount=-2\nkerning first=70 second=245 amount=-2\nkerning first=70 second=246 amount=-2\nkerning first=70 second=249 amount=-2\nkerning first=70 second=250 amount=-2\nkerning first=70 second=251 amount=-2\nkerning first=70 second=252 amount=-2\nkerning first=70 second=253 amount=-2\nkerning first=70 second=255 amount=-2\nkerning first=81 second=84 amount=-3\nkerning first=81 second=86 amount=-2\nkerning first=81 second=87 amount=-2\nkerning first=81 second=89 amount=-3\nkerning first=81 second=221 amount=-3\nkerning first=82 second=84 amount=-6\nkerning first=82 second=86 amount=-1\nkerning first=82 second=89 amount=-4\nkerning first=82 second=221 amount=-4\nkerning first=91 second=74 amount=-1\nkerning first=91 second=85 amount=-1\nkerning first=91 second=217 amount=-1\nkerning first=91 second=218 amount=-1\nkerning first=91 second=219 amount=-1\nkerning first=91 second=220 amount=-1\nkerning first=102 second=34 amount=1\nkerning first=102 second=39 amount=1\nkerning first=102 second=99 amount=-2\nkerning first=102 second=100 amount=-2\nkerning first=102 second=101 amount=-2\nkerning first=102 second=103 amount=-2\nkerning first=102 second=113 amount=-2\nkerning first=102 second=231 amount=-2\nkerning first=102 second=232 amount=-2\nkerning first=102 second=233 amount=-2\nkerning first=102 second=234 amount=-2\nkerning first=102 second=235 amount=-2\nkerning first=107 second=99 amount=-2\nkerning first=107 second=100 amount=-2\nkerning first=107 second=101 amount=-2\nkerning first=107 second=103 amount=-2\nkerning first=107 second=113 amount=-2\nkerning first=107 second=231 amount=-2\nkerning first=107 second=232 amount=-2\nkerning first=107 second=233 amount=-2\nkerning first=107 second=234 amount=-2\nkerning first=107 second=235 amount=-2\nkerning first=116 second=111 amount=-2\nkerning first=116 second=242 amount=-2\nkerning first=116 second=243 amount=-2\nkerning first=116 second=244 amount=-2\nkerning first=116 second=245 amount=-2\nkerning first=116 second=246 amount=-2\nkerning first=119 second=44 amount=-10\nkerning first=119 second=46 amount=-10\nkerning first=123 second=74 amount=-2\nkerning first=123 second=85 amount=-2\nkerning first=123 second=217 amount=-2\nkerning first=123 second=218 amount=-2\nkerning first=123 second=219 amount=-2\nkerning first=123 second=220 amount=-2\nkerning first=34 second=34 amount=-8\nkerning first=34 second=39 amount=-8\nkerning first=34 second=111 amount=-5\nkerning first=34 second=242 amount=-5\nkerning first=34 second=243 amount=-5\nkerning first=34 second=244 amount=-5\nkerning first=34 second=245 amount=-5\nkerning first=34 second=246 amount=-5\nkerning first=34 second=65 amount=-9\nkerning first=34 second=192 amount=-9\nkerning first=34 second=193 amount=-9\nkerning first=34 second=194 amount=-9\nkerning first=34 second=195 amount=-9\nkerning first=34 second=196 amount=-9\nkerning first=34 second=197 amount=-9\nkerning first=34 second=99 amount=-5\nkerning first=34 second=100 amount=-5\nkerning first=34 second=101 amount=-5\nkerning first=34 second=103 amount=-5\nkerning first=34 second=113 amount=-5\nkerning first=34 second=231 amount=-5\nkerning first=34 second=232 amount=-5\nkerning first=34 second=233 amount=-5\nkerning first=34 second=234 amount=-5\nkerning first=34 second=235 amount=-5\nkerning first=34 second=109 amount=-2\nkerning first=34 second=110 amount=-2\nkerning first=34 second=112 amount=-2\nkerning first=34 second=241 amount=-2\nkerning first=34 second=97 amount=-4\nkerning first=34 second=224 amount=-4\nkerning first=34 second=225 amount=-4\nkerning first=34 second=226 amount=-4\nkerning first=34 second=227 amount=-4\nkerning first=34 second=228 amount=-4\nkerning first=34 second=229 amount=-4\nkerning first=34 second=115 amount=-6\nkerning first=39 second=34 amount=-8\nkerning first=39 second=39 amount=-8\nkerning first=39 second=111 amount=-5\nkerning first=39 second=242 amount=-5\nkerning first=39 second=243 amount=-5\nkerning first=39 second=244 amount=-5\nkerning first=39 second=245 amount=-5\nkerning first=39 second=246 amount=-5\nkerning first=39 second=65 amount=-9\nkerning first=39 second=192 amount=-9\nkerning first=39 second=193 amount=-9\nkerning first=39 second=194 amount=-9\nkerning first=39 second=195 amount=-9\nkerning first=39 second=196 amount=-9\nkerning first=39 second=197 amount=-9\nkerning first=39 second=99 amount=-5\nkerning first=39 second=100 amount=-5\nkerning first=39 second=101 amount=-5\nkerning first=39 second=103 amount=-5\nkerning first=39 second=113 amount=-5\nkerning first=39 second=231 amount=-5\nkerning first=39 second=232 amount=-5\nkerning first=39 second=233 amount=-5\nkerning first=39 second=234 amount=-5\nkerning first=39 second=235 amount=-5\nkerning first=39 second=109 amount=-2\nkerning first=39 second=110 amount=-2\nkerning first=39 second=112 amount=-2\nkerning first=39 second=241 amount=-2\nkerning first=39 second=97 amount=-4\nkerning first=39 second=224 amount=-4\nkerning first=39 second=225 amount=-4\nkerning first=39 second=226 amount=-4\nkerning first=39 second=227 amount=-4\nkerning first=39 second=228 amount=-4\nkerning first=39 second=229 amount=-4\nkerning first=39 second=115 amount=-6\nkerning first=44 second=34 amount=-13\nkerning first=44 second=39 amount=-13\nkerning first=46 second=34 amount=-13\nkerning first=46 second=39 amount=-13\nkerning first=65 second=118 amount=-4\nkerning first=65 second=121 amount=-4\nkerning first=65 second=253 amount=-4\nkerning first=65 second=255 amount=-4\nkerning first=65 second=67 amount=-1\nkerning first=65 second=71 amount=-1\nkerning first=65 second=79 amount=-1\nkerning first=65 second=81 amount=-1\nkerning first=65 second=216 amount=-1\nkerning first=65 second=199 amount=-1\nkerning first=65 second=210 amount=-1\nkerning first=65 second=211 amount=-1\nkerning first=65 second=212 amount=-1\nkerning first=65 second=213 amount=-1\nkerning first=65 second=214 amount=-1\nkerning first=65 second=85 amount=-1\nkerning first=65 second=217 amount=-1\nkerning first=65 second=218 amount=-1\nkerning first=65 second=219 amount=-1\nkerning first=65 second=220 amount=-1\nkerning first=65 second=34 amount=-9\nkerning first=65 second=39 amount=-9\nkerning first=65 second=111 amount=-1\nkerning first=65 second=242 amount=-1\nkerning first=65 second=243 amount=-1\nkerning first=65 second=244 amount=-1\nkerning first=65 second=245 amount=-1\nkerning first=65 second=246 amount=-1\nkerning first=65 second=87 amount=-5\nkerning first=65 second=84 amount=-10\nkerning first=65 second=117 amount=-1\nkerning first=65 second=249 amount=-1\nkerning first=65 second=250 amount=-1\nkerning first=65 second=251 amount=-1\nkerning first=65 second=252 amount=-1\nkerning first=65 second=122 amount=1\nkerning first=65 second=86 amount=-7\nkerning first=65 second=89 amount=-7\nkerning first=65 second=221 amount=-7\nkerning first=66 second=84 amount=-2\nkerning first=66 second=86 amount=-2\nkerning first=66 second=89 amount=-4\nkerning first=66 second=221 amount=-4\nkerning first=67 second=84 amount=-2\nkerning first=68 second=84 amount=-2\nkerning first=68 second=86 amount=-2\nkerning first=68 second=89 amount=-3\nkerning first=68 second=221 amount=-3\nkerning first=68 second=65 amount=-2\nkerning first=68 second=192 amount=-2\nkerning first=68 second=193 amount=-2\nkerning first=68 second=194 amount=-2\nkerning first=68 second=195 amount=-2\nkerning first=68 second=196 amount=-2\nkerning first=68 second=197 amount=-2\nkerning first=68 second=88 amount=-2\nkerning first=68 second=44 amount=-8\nkerning first=68 second=46 amount=-8\nkerning first=68 second=90 amount=-2\nkerning first=69 second=118 amount=-2\nkerning first=69 second=121 amount=-2\nkerning first=69 second=253 amount=-2\nkerning first=69 second=255 amount=-2\nkerning first=69 second=111 amount=-1\nkerning first=69 second=242 amount=-1\nkerning first=69 second=243 amount=-1\nkerning first=69 second=244 amount=-1\nkerning first=69 second=245 amount=-1\nkerning first=69 second=246 amount=-1\nkerning first=69 second=84 amount=2\nkerning first=69 second=117 amount=-1\nkerning first=69 second=249 amount=-1\nkerning first=69 second=250 amount=-1\nkerning first=69 second=251 amount=-1\nkerning first=69 second=252 amount=-1\nkerning first=69 second=99 amount=-1\nkerning first=69 second=100 amount=-1\nkerning first=69 second=101 amount=-1\nkerning first=69 second=103 amount=-1\nkerning first=69 second=113 amount=-1\nkerning first=69 second=231 amount=-1\nkerning first=69 second=232 amount=-1\nkerning first=69 second=233 amount=-1\nkerning first=69 second=234 amount=-1\nkerning first=69 second=235 amount=-1\nkerning first=72 second=84 amount=-2\nkerning first=72 second=89 amount=-2\nkerning first=72 second=221 amount=-2\nkerning first=72 second=65 amount=1\nkerning first=72 second=192 amount=1\nkerning first=72 second=193 amount=1\nkerning first=72 second=194 amount=1\nkerning first=72 second=195 amount=1\nkerning first=72 second=196 amount=1\nkerning first=72 second=197 amount=1\nkerning first=72 second=88 amount=1\nkerning first=73 second=84 amount=-2\nkerning first=73 second=89 amount=-2\nkerning first=73 second=221 amount=-2\nkerning first=73 second=65 amount=1\nkerning first=73 second=192 amount=1\nkerning first=73 second=193 amount=1\nkerning first=73 second=194 amount=1\nkerning first=73 second=195 amount=1\nkerning first=73 second=196 amount=1\nkerning first=73 second=197 amount=1\nkerning first=73 second=88 amount=1\nkerning first=74 second=65 amount=-2\nkerning first=74 second=192 amount=-2\nkerning first=74 second=193 amount=-2\nkerning first=74 second=194 amount=-2\nkerning first=74 second=195 amount=-2\nkerning first=74 second=196 amount=-2\nkerning first=74 second=197 amount=-2\nkerning first=75 second=118 amount=-3\nkerning first=75 second=121 amount=-3\nkerning first=75 second=253 amount=-3\nkerning first=75 second=255 amount=-3\nkerning first=75 second=67 amount=-2\nkerning first=75 second=71 amount=-2\nkerning first=75 second=79 amount=-2\nkerning first=75 second=81 amount=-2\nkerning first=75 second=216 amount=-2\nkerning first=75 second=199 amount=-2\nkerning first=75 second=210 amount=-2\nkerning first=75 second=211 amount=-2\nkerning first=75 second=212 amount=-2\nkerning first=75 second=213 amount=-2\nkerning first=75 second=214 amount=-2\nkerning first=75 second=111 amount=-2\nkerning first=75 second=242 amount=-2\nkerning first=75 second=243 amount=-2\nkerning first=75 second=244 amount=-2\nkerning first=75 second=245 amount=-2\nkerning first=75 second=246 amount=-2\nkerning first=75 second=117 amount=-2\nkerning first=75 second=249 amount=-2\nkerning first=75 second=250 amount=-2\nkerning first=75 second=251 amount=-2\nkerning first=75 second=252 amount=-2\nkerning first=75 second=99 amount=-2\nkerning first=75 second=100 amount=-2\nkerning first=75 second=101 amount=-2\nkerning first=75 second=103 amount=-2\nkerning first=75 second=113 amount=-2\nkerning first=75 second=231 amount=-2\nkerning first=75 second=232 amount=-2\nkerning first=75 second=233 amount=-2\nkerning first=75 second=234 amount=-2\nkerning first=75 second=235 amount=-2\nkerning first=75 second=45 amount=-5\nkerning first=75 second=173 amount=-5\nkerning first=75 second=109 amount=-2\nkerning first=75 second=110 amount=-2\nkerning first=75 second=112 amount=-2\nkerning first=75 second=241 amount=-2\nkerning first=76 second=118 amount=-10\nkerning first=76 second=121 amount=-10\nkerning first=76 second=253 amount=-10\nkerning first=76 second=255 amount=-10\nkerning first=76 second=67 amount=-5\nkerning first=76 second=71 amount=-5\nkerning first=76 second=79 amount=-5\nkerning first=76 second=81 amount=-5\nkerning first=76 second=216 amount=-5\nkerning first=76 second=199 amount=-5\nkerning first=76 second=210 amount=-5\nkerning first=76 second=211 amount=-5\nkerning first=76 second=212 amount=-5\nkerning first=76 second=213 amount=-5\nkerning first=76 second=214 amount=-5\nkerning first=76 second=85 amount=-4\nkerning first=76 second=217 amount=-4\nkerning first=76 second=218 amount=-4\nkerning first=76 second=219 amount=-4\nkerning first=76 second=220 amount=-4\nkerning first=76 second=34 amount=-26\nkerning first=76 second=39 amount=-26\nkerning first=76 second=87 amount=-11\nkerning first=76 second=84 amount=-21\nkerning first=76 second=117 amount=-3\nkerning first=76 second=249 amount=-3\nkerning first=76 second=250 amount=-3\nkerning first=76 second=251 amount=-3\nkerning first=76 second=252 amount=-3\nkerning first=76 second=86 amount=-14\nkerning first=76 second=89 amount=-19\nkerning first=76 second=221 amount=-19\nkerning first=76 second=65 amount=1\nkerning first=76 second=192 amount=1\nkerning first=76 second=193 amount=1\nkerning first=76 second=194 amount=1\nkerning first=76 second=195 amount=1\nkerning first=76 second=196 amount=1\nkerning first=76 second=197 amount=1\nkerning first=77 second=84 amount=-2\nkerning first=77 second=89 amount=-2\nkerning first=77 second=221 amount=-2\nkerning first=77 second=65 amount=1\nkerning first=77 second=192 amount=1\nkerning first=77 second=193 amount=1\nkerning first=77 second=194 amount=1\nkerning first=77 second=195 amount=1\nkerning first=77 second=196 amount=1\nkerning first=77 second=197 amount=1\nkerning first=77 second=88 amount=1\nkerning first=78 second=84 amount=-2\nkerning first=78 second=89 amount=-2\nkerning first=78 second=221 amount=-2\nkerning first=78 second=65 amount=1\nkerning first=78 second=192 amount=1\nkerning first=78 second=193 amount=1\nkerning first=78 second=194 amount=1\nkerning first=78 second=195 amount=1\nkerning first=78 second=196 amount=1\nkerning first=78 second=197 amount=1\nkerning first=78 second=88 amount=1\nkerning first=79 second=84 amount=-2\nkerning first=79 second=86 amount=-2\nkerning first=79 second=89 amount=-3\nkerning first=79 second=221 amount=-3\nkerning first=79 second=65 amount=-2\nkerning first=79 second=192 amount=-2\nkerning first=79 second=193 amount=-2\nkerning first=79 second=194 amount=-2\nkerning first=79 second=195 amount=-2\nkerning first=79 second=196 amount=-2\nkerning first=79 second=197 amount=-2\nkerning first=79 second=88 amount=-2\nkerning first=79 second=44 amount=-8\nkerning first=79 second=46 amount=-8\nkerning first=79 second=90 amount=-2\nkerning first=80 second=118 amount=1\nkerning first=80 second=121 amount=1\nkerning first=80 second=253 amount=1\nkerning first=80 second=255 amount=1\nkerning first=80 second=111 amount=-1\nkerning first=80 second=242 amount=-1\nkerning first=80 second=243 amount=-1\nkerning first=80 second=244 amount=-1\nkerning first=80 second=245 amount=-1\nkerning first=80 second=246 amount=-1\nkerning first=80 second=65 amount=-11\nkerning first=80 second=192 amount=-11\nkerning first=80 second=193 amount=-11\nkerning first=80 second=194 amount=-11\nkerning first=80 second=195 amount=-11\nkerning first=80 second=196 amount=-11\nkerning first=80 second=197 amount=-11\nkerning first=80 second=88 amount=-2\nkerning first=80 second=44 amount=-25\nkerning first=80 second=46 amount=-25\nkerning first=80 second=90 amount=-2\nkerning first=80 second=99 amount=-1\nkerning first=80 second=100 amount=-1\nkerning first=80 second=101 amount=-1\nkerning first=80 second=103 amount=-1\nkerning first=80 second=113 amount=-1\nkerning first=80 second=231 amount=-1\nkerning first=80 second=232 amount=-1\nkerning first=80 second=233 amount=-1\nkerning first=80 second=234 amount=-1\nkerning first=80 second=235 amount=-1\nkerning first=80 second=97 amount=-1\nkerning first=80 second=224 amount=-1\nkerning first=80 second=225 amount=-1\nkerning first=80 second=226 amount=-1\nkerning first=80 second=227 amount=-1\nkerning first=80 second=228 amount=-1\nkerning first=80 second=229 amount=-1\nkerning first=80 second=74 amount=-16\nkerning first=84 second=118 amount=-6\nkerning first=84 second=121 amount=-6\nkerning first=84 second=253 amount=-6\nkerning first=84 second=255 amount=-6\nkerning first=84 second=67 amount=-2\nkerning first=84 second=71 amount=-2\nkerning first=84 second=79 amount=-2\nkerning first=84 second=81 amount=-2\nkerning first=84 second=216 amount=-2\nkerning first=84 second=199 amount=-2\nkerning first=84 second=210 amount=-2\nkerning first=84 second=211 amount=-2\nkerning first=84 second=212 amount=-2\nkerning first=84 second=213 amount=-2\nkerning first=84 second=214 amount=-2\nkerning first=84 second=111 amount=-8\nkerning first=84 second=242 amount=-8\nkerning first=84 second=243 amount=-8\nkerning first=84 second=244 amount=-8\nkerning first=84 second=245 amount=-8\nkerning first=84 second=246 amount=-8\nkerning first=84 second=87 amount=1\nkerning first=84 second=84 amount=1\nkerning first=84 second=117 amount=-7\nkerning first=84 second=249 amount=-7\nkerning first=84 second=250 amount=-7\nkerning first=84 second=251 amount=-7\nkerning first=84 second=252 amount=-7\nkerning first=84 second=122 amount=-5\nkerning first=84 second=86 amount=1\nkerning first=84 second=89 amount=1\nkerning first=84 second=221 amount=1\nkerning first=84 second=65 amount=-6\nkerning first=84 second=192 amount=-6\nkerning first=84 second=193 amount=-6\nkerning first=84 second=194 amount=-6\nkerning first=84 second=195 amount=-6\nkerning first=84 second=196 amount=-6\nkerning first=84 second=197 amount=-6\nkerning first=84 second=44 amount=-17\nkerning first=84 second=46 amount=-17\nkerning first=84 second=99 amount=-8\nkerning first=84 second=100 amount=-8\nkerning first=84 second=101 amount=-8\nkerning first=84 second=103 amount=-8\nkerning first=84 second=113 amount=-8\nkerning first=84 second=231 amount=-8\nkerning first=84 second=232 amount=-8\nkerning first=84 second=233 amount=-8\nkerning first=84 second=234 amount=-8\nkerning first=84 second=235 amount=-8\nkerning first=84 second=120 amount=-6\nkerning first=84 second=45 amount=-18\nkerning first=84 second=173 amount=-18\nkerning first=84 second=109 amount=-9\nkerning first=84 second=110 amount=-9\nkerning first=84 second=112 amount=-9\nkerning first=84 second=241 amount=-9\nkerning first=84 second=83 amount=-1\nkerning first=84 second=97 amount=-9\nkerning first=84 second=224 amount=-9\nkerning first=84 second=225 amount=-9\nkerning first=84 second=226 amount=-9\nkerning first=84 second=227 amount=-9\nkerning first=84 second=228 amount=-9\nkerning first=84 second=229 amount=-9\nkerning first=84 second=115 amount=-9\nkerning first=84 second=74 amount=-19\nkerning first=85 second=65 amount=-2\nkerning first=85 second=192 amount=-2\nkerning first=85 second=193 amount=-2\nkerning first=85 second=194 amount=-2\nkerning first=85 second=195 amount=-2\nkerning first=85 second=196 amount=-2\nkerning first=85 second=197 amount=-2\nkerning first=86 second=118 amount=-1\nkerning first=86 second=121 amount=-1\nkerning first=86 second=253 amount=-1\nkerning first=86 second=255 amount=-1\nkerning first=86 second=67 amount=-1\nkerning first=86 second=71 amount=-1\nkerning first=86 second=79 amount=-1\nkerning first=86 second=81 amount=-1\nkerning first=86 second=216 amount=-1\nkerning first=86 second=199 amount=-1\nkerning first=86 second=210 amount=-1\nkerning first=86 second=211 amount=-1\nkerning first=86 second=212 amount=-1\nkerning first=86 second=213 amount=-1\nkerning first=86 second=214 amount=-1\nkerning first=86 second=111 amount=-4\nkerning first=86 second=242 amount=-4\nkerning first=86 second=243 amount=-4\nkerning first=86 second=244 amount=-4\nkerning first=86 second=245 amount=-4\nkerning first=86 second=246 amount=-4\nkerning first=86 second=117 amount=-2\nkerning first=86 second=249 amount=-2\nkerning first=86 second=250 amount=-2\nkerning first=86 second=251 amount=-2\nkerning first=86 second=252 amount=-2\nkerning first=86 second=65 amount=-6\nkerning first=86 second=192 amount=-6\nkerning first=86 second=193 amount=-6\nkerning first=86 second=194 amount=-6\nkerning first=86 second=195 amount=-6\nkerning first=86 second=196 amount=-6\nkerning first=86 second=197 amount=-6\nkerning first=86 second=44 amount=-18\nkerning first=86 second=46 amount=-18\nkerning first=86 second=99 amount=-3\nkerning first=86 second=100 amount=-3\nkerning first=86 second=101 amount=-3\nkerning first=86 second=103 amount=-3\nkerning first=86 second=113 amount=-3\nkerning first=86 second=231 amount=-3\nkerning first=86 second=232 amount=-3\nkerning first=86 second=233 amount=-3\nkerning first=86 second=234 amount=-3\nkerning first=86 second=235 amount=-3\nkerning first=86 second=45 amount=-3\nkerning first=86 second=173 amount=-3\nkerning first=86 second=97 amount=-4\nkerning first=86 second=224 amount=-4\nkerning first=86 second=225 amount=-4\nkerning first=86 second=226 amount=-4\nkerning first=86 second=227 amount=-4\nkerning first=86 second=228 amount=-4\nkerning first=86 second=229 amount=-4\nkerning first=87 second=111 amount=-2\nkerning first=87 second=242 amount=-2\nkerning first=87 second=243 amount=-2\nkerning first=87 second=244 amount=-2\nkerning first=87 second=245 amount=-2\nkerning first=87 second=246 amount=-2\nkerning first=87 second=84 amount=1\nkerning first=87 second=117 amount=-1\nkerning first=87 second=249 amount=-1\nkerning first=87 second=250 amount=-1\nkerning first=87 second=251 amount=-1\nkerning first=87 second=252 amount=-1\nkerning first=87 second=65 amount=-3\nkerning first=87 second=192 amount=-3\nkerning first=87 second=193 amount=-3\nkerning first=87 second=194 amount=-3\nkerning first=87 second=195 amount=-3\nkerning first=87 second=196 amount=-3\nkerning first=87 second=197 amount=-3\nkerning first=87 second=44 amount=-10\nkerning first=87 second=46 amount=-10\nkerning first=87 second=99 amount=-2\nkerning first=87 second=100 amount=-2\nkerning first=87 second=101 amount=-2\nkerning first=87 second=103 amount=-2\nkerning first=87 second=113 amount=-2\nkerning first=87 second=231 amount=-2\nkerning first=87 second=232 amount=-2\nkerning first=87 second=233 amount=-2\nkerning first=87 second=234 amount=-2\nkerning first=87 second=235 amount=-2\nkerning first=87 second=45 amount=-5\nkerning first=87 second=173 amount=-5\nkerning first=87 second=97 amount=-3\nkerning first=87 second=224 amount=-3\nkerning first=87 second=225 amount=-3\nkerning first=87 second=226 amount=-3\nkerning first=87 second=227 amount=-3\nkerning first=87 second=228 amount=-3\nkerning first=87 second=229 amount=-3\nkerning first=88 second=118 amount=-2\nkerning first=88 second=121 amount=-2\nkerning first=88 second=253 amount=-2\nkerning first=88 second=255 amount=-2\nkerning first=88 second=67 amount=-2\nkerning first=88 second=71 amount=-2\nkerning first=88 second=79 amount=-2\nkerning first=88 second=81 amount=-2\nkerning first=88 second=216 amount=-2\nkerning first=88 second=199 amount=-2\nkerning first=88 second=210 amount=-2\nkerning first=88 second=211 amount=-2\nkerning first=88 second=212 amount=-2\nkerning first=88 second=213 amount=-2\nkerning first=88 second=214 amount=-2\nkerning first=88 second=111 amount=-2\nkerning first=88 second=242 amount=-2\nkerning first=88 second=243 amount=-2\nkerning first=88 second=244 amount=-2\nkerning first=88 second=245 amount=-2\nkerning first=88 second=246 amount=-2\nkerning first=88 second=117 amount=-2\nkerning first=88 second=249 amount=-2\nkerning first=88 second=250 amount=-2\nkerning first=88 second=251 amount=-2\nkerning first=88 second=252 amount=-2\nkerning first=88 second=86 amount=1\nkerning first=88 second=99 amount=-2\nkerning first=88 second=100 amount=-2\nkerning first=88 second=101 amount=-2\nkerning first=88 second=103 amount=-2\nkerning first=88 second=113 amount=-2\nkerning first=88 second=231 amount=-2\nkerning first=88 second=232 amount=-2\nkerning first=88 second=233 amount=-2\nkerning first=88 second=234 amount=-2\nkerning first=88 second=235 amount=-2\nkerning first=88 second=45 amount=-4\nkerning first=88 second=173 amount=-4\nkerning first=89 second=118 amount=-2\nkerning first=89 second=121 amount=-2\nkerning first=89 second=253 amount=-2\nkerning first=89 second=255 amount=-2\nkerning first=89 second=67 amount=-2\nkerning first=89 second=71 amount=-2\nkerning first=89 second=79 amount=-2\nkerning first=89 second=81 amount=-2\nkerning first=89 second=216 amount=-2\nkerning first=89 second=199 amount=-2\nkerning first=89 second=210 amount=-2\nkerning first=89 second=211 amount=-2\nkerning first=89 second=212 amount=-2\nkerning first=89 second=213 amount=-2\nkerning first=89 second=214 amount=-2\nkerning first=89 second=85 amount=-7\nkerning first=89 second=217 amount=-7\nkerning first=89 second=218 amount=-7\nkerning first=89 second=219 amount=-7\nkerning first=89 second=220 amount=-7\nkerning first=89 second=111 amount=-5\nkerning first=89 second=242 amount=-5\nkerning first=89 second=243 amount=-5\nkerning first=89 second=244 amount=-5\nkerning first=89 second=245 amount=-5\nkerning first=89 second=246 amount=-5\nkerning first=89 second=87 amount=1\nkerning first=89 second=84 amount=1\nkerning first=89 second=117 amount=-3\nkerning first=89 second=249 amount=-3\nkerning first=89 second=250 amount=-3\nkerning first=89 second=251 amount=-3\nkerning first=89 second=252 amount=-3\nkerning first=89 second=122 amount=-2\nkerning first=89 second=86 amount=1\nkerning first=89 second=89 amount=1\nkerning first=89 second=221 amount=1\nkerning first=89 second=65 amount=-7\nkerning first=89 second=192 amount=-7\nkerning first=89 second=193 amount=-7\nkerning first=89 second=194 amount=-7\nkerning first=89 second=195 amount=-7\nkerning first=89 second=196 amount=-7\nkerning first=89 second=197 amount=-7\nkerning first=89 second=88 amount=1\nkerning first=89 second=44 amount=-16\nkerning first=89 second=46 amount=-16\nkerning first=89 second=99 amount=-5\nkerning first=89 second=100 amount=-5\nkerning first=89 second=101 amount=-5\nkerning first=89 second=103 amount=-5\nkerning first=89 second=113 amount=-5\nkerning first=89 second=231 amount=-5\nkerning first=89 second=232 amount=-5\nkerning first=89 second=233 amount=-5\nkerning first=89 second=234 amount=-5\nkerning first=89 second=235 amount=-5\nkerning first=89 second=120 amount=-2\nkerning first=89 second=45 amount=-4\nkerning first=89 second=173 amount=-4\nkerning first=89 second=109 amount=-3\nkerning first=89 second=110 amount=-3\nkerning first=89 second=112 amount=-3\nkerning first=89 second=241 amount=-3\nkerning first=89 second=83 amount=-1\nkerning first=89 second=97 amount=-6\nkerning first=89 second=224 amount=-6\nkerning first=89 second=225 amount=-6\nkerning first=89 second=226 amount=-6\nkerning first=89 second=227 amount=-6\nkerning first=89 second=228 amount=-6\nkerning first=89 second=229 amount=-6\nkerning first=89 second=115 amount=-5\nkerning first=89 second=74 amount=-7\nkerning first=90 second=118 amount=-2\nkerning first=90 second=121 amount=-2\nkerning first=90 second=253 amount=-2\nkerning first=90 second=255 amount=-2\nkerning first=90 second=67 amount=-2\nkerning first=90 second=71 amount=-2\nkerning first=90 second=79 amount=-2\nkerning first=90 second=81 amount=-2\nkerning first=90 second=216 amount=-2\nkerning first=90 second=199 amount=-2\nkerning first=90 second=210 amount=-2\nkerning first=90 second=211 amount=-2\nkerning first=90 second=212 amount=-2\nkerning first=90 second=213 amount=-2\nkerning first=90 second=214 amount=-2\nkerning first=90 second=111 amount=-2\nkerning first=90 second=242 amount=-2\nkerning first=90 second=243 amount=-2\nkerning first=90 second=244 amount=-2\nkerning first=90 second=245 amount=-2\nkerning first=90 second=246 amount=-2\nkerning first=90 second=117 amount=-1\nkerning first=90 second=249 amount=-1\nkerning first=90 second=250 amount=-1\nkerning first=90 second=251 amount=-1\nkerning first=90 second=252 amount=-1\nkerning first=90 second=65 amount=1\nkerning first=90 second=192 amount=1\nkerning first=90 second=193 amount=1\nkerning first=90 second=194 amount=1\nkerning first=90 second=195 amount=1\nkerning first=90 second=196 amount=1\nkerning first=90 second=197 amount=1\nkerning first=90 second=99 amount=-2\nkerning first=90 second=100 amount=-2\nkerning first=90 second=101 amount=-2\nkerning first=90 second=103 amount=-2\nkerning first=90 second=113 amount=-2\nkerning first=90 second=231 amount=-2\nkerning first=90 second=232 amount=-2\nkerning first=90 second=233 amount=-2\nkerning first=90 second=234 amount=-2\nkerning first=90 second=235 amount=-2\nkerning first=97 second=118 amount=-1\nkerning first=97 second=121 amount=-1\nkerning first=97 second=253 amount=-1\nkerning first=97 second=255 amount=-1\nkerning first=97 second=34 amount=-5\nkerning first=97 second=39 amount=-5\nkerning first=98 second=118 amount=-1\nkerning first=98 second=121 amount=-1\nkerning first=98 second=253 amount=-1\nkerning first=98 second=255 amount=-1\nkerning first=98 second=34 amount=-2\nkerning first=98 second=39 amount=-2\nkerning first=98 second=122 amount=-1\nkerning first=98 second=120 amount=-1\nkerning first=99 second=34 amount=-1\nkerning first=99 second=39 amount=-1\nkerning first=101 second=118 amount=-1\nkerning first=101 second=121 amount=-1\nkerning first=101 second=253 amount=-1\nkerning first=101 second=255 amount=-1\nkerning first=101 second=34 amount=-1\nkerning first=101 second=39 amount=-1\nkerning first=104 second=34 amount=-8\nkerning first=104 second=39 amount=-8\nkerning first=109 second=34 amount=-8\nkerning first=109 second=39 amount=-8\nkerning first=110 second=34 amount=-8\nkerning first=110 second=39 amount=-8\nkerning first=111 second=118 amount=-1\nkerning first=111 second=121 amount=-1\nkerning first=111 second=253 amount=-1\nkerning first=111 second=255 amount=-1\nkerning first=111 second=34 amount=-11\nkerning first=111 second=39 amount=-11\nkerning first=111 second=122 amount=-1\nkerning first=111 second=120 amount=-2\nkerning first=112 second=118 amount=-1\nkerning first=112 second=121 amount=-1\nkerning first=112 second=253 amount=-1\nkerning first=112 second=255 amount=-1\nkerning first=112 second=34 amount=-2\nkerning first=112 second=39 amount=-2\nkerning first=112 second=122 amount=-1\nkerning first=112 second=120 amount=-1\nkerning first=114 second=118 amount=1\nkerning first=114 second=121 amount=1\nkerning first=114 second=253 amount=1\nkerning first=114 second=255 amount=1\nkerning first=114 second=34 amount=1\nkerning first=114 second=39 amount=1\nkerning first=114 second=111 amount=-2\nkerning first=114 second=242 amount=-2\nkerning first=114 second=243 amount=-2\nkerning first=114 second=244 amount=-2\nkerning first=114 second=245 amount=-2\nkerning first=114 second=246 amount=-2\nkerning first=114 second=44 amount=-10\nkerning first=114 second=46 amount=-10\nkerning first=114 second=99 amount=-1\nkerning first=114 second=100 amount=-1\nkerning first=114 second=101 amount=-1\nkerning first=114 second=103 amount=-1\nkerning first=114 second=113 amount=-1\nkerning first=114 second=231 amount=-1\nkerning first=114 second=232 amount=-1\nkerning first=114 second=233 amount=-1\nkerning first=114 second=234 amount=-1\nkerning first=114 second=235 amount=-1\nkerning first=114 second=97 amount=-3\nkerning first=114 second=224 amount=-3\nkerning first=114 second=225 amount=-3\nkerning first=114 second=226 amount=-3\nkerning first=114 second=227 amount=-3\nkerning first=114 second=228 amount=-3\nkerning first=114 second=229 amount=-3\nkerning first=118 second=34 amount=1\nkerning first=118 second=39 amount=1\nkerning first=118 second=111 amount=-1\nkerning first=118 second=242 amount=-1\nkerning first=118 second=243 amount=-1\nkerning first=118 second=244 amount=-1\nkerning first=118 second=245 amount=-1\nkerning first=118 second=246 amount=-1\nkerning first=118 second=44 amount=-8\nkerning first=118 second=46 amount=-8\nkerning first=118 second=99 amount=-1\nkerning first=118 second=100 amount=-1\nkerning first=118 second=101 amount=-1\nkerning first=118 second=103 amount=-1\nkerning first=118 second=113 amount=-1\nkerning first=118 second=231 amount=-1\nkerning first=118 second=232 amount=-1\nkerning first=118 second=233 amount=-1\nkerning first=118 second=234 amount=-1\nkerning first=118 second=235 amount=-1\nkerning first=118 second=97 amount=-1\nkerning first=118 second=224 amount=-1\nkerning first=118 second=225 amount=-1\nkerning first=118 second=226 amount=-1\nkerning first=118 second=227 amount=-1\nkerning first=118 second=228 amount=-1\nkerning first=118 second=229 amount=-1\nkerning first=120 second=111 amount=-2\nkerning first=120 second=242 amount=-2\nkerning first=120 second=243 amount=-2\nkerning first=120 second=244 amount=-2\nkerning first=120 second=245 amount=-2\nkerning first=120 second=246 amount=-2\nkerning first=120 second=99 amount=-2\nkerning first=120 second=100 amount=-2\nkerning first=120 second=101 amount=-2\nkerning first=120 second=103 amount=-2\nkerning first=120 second=113 amount=-2\nkerning first=120 second=231 amount=-2\nkerning first=120 second=232 amount=-2\nkerning first=120 second=233 amount=-2\nkerning first=120 second=234 amount=-2\nkerning first=120 second=235 amount=-2\nkerning first=121 second=34 amount=1\nkerning first=121 second=39 amount=1\nkerning first=121 second=111 amount=-1\nkerning first=121 second=242 amount=-1\nkerning first=121 second=243 amount=-1\nkerning first=121 second=244 amount=-1\nkerning first=121 second=245 amount=-1\nkerning first=121 second=246 amount=-1\nkerning first=121 second=44 amount=-8\nkerning first=121 second=46 amount=-8\nkerning first=121 second=99 amount=-1\nkerning first=121 second=100 amount=-1\nkerning first=121 second=101 amount=-1\nkerning first=121 second=103 amount=-1\nkerning first=121 second=113 amount=-1\nkerning first=121 second=231 amount=-1\nkerning first=121 second=232 amount=-1\nkerning first=121 second=233 amount=-1\nkerning first=121 second=234 amount=-1\nkerning first=121 second=235 amount=-1\nkerning first=121 second=97 amount=-1\nkerning first=121 second=224 amount=-1\nkerning first=121 second=225 amount=-1\nkerning first=121 second=226 amount=-1\nkerning first=121 second=227 amount=-1\nkerning first=121 second=228 amount=-1\nkerning first=121 second=229 amount=-1\nkerning first=122 second=111 amount=-1\nkerning first=122 second=242 amount=-1\nkerning first=122 second=243 amount=-1\nkerning first=122 second=244 amount=-1\nkerning first=122 second=245 amount=-1\nkerning first=122 second=246 amount=-1\nkerning first=122 second=99 amount=-1\nkerning first=122 second=100 amount=-1\nkerning first=122 second=101 amount=-1\nkerning first=122 second=103 amount=-1\nkerning first=122 second=113 amount=-1\nkerning first=122 second=231 amount=-1\nkerning first=122 second=232 amount=-1\nkerning first=122 second=233 amount=-1\nkerning first=122 second=234 amount=-1\nkerning first=122 second=235 amount=-1\nkerning first=254 second=118 amount=-1\nkerning first=254 second=121 amount=-1\nkerning first=254 second=253 amount=-1\nkerning first=254 second=255 amount=-1\nkerning first=254 second=34 amount=-2\nkerning first=254 second=39 amount=-2\nkerning first=254 second=122 amount=-1\nkerning first=254 second=120 amount=-1\nkerning first=208 second=84 amount=-2\nkerning first=208 second=86 amount=-2\nkerning first=208 second=89 amount=-3\nkerning first=208 second=221 amount=-3\nkerning first=208 second=65 amount=-2\nkerning first=208 second=192 amount=-2\nkerning first=208 second=193 amount=-2\nkerning first=208 second=194 amount=-2\nkerning first=208 second=195 amount=-2\nkerning first=208 second=196 amount=-2\nkerning first=208 second=197 amount=-2\nkerning first=208 second=88 amount=-2\nkerning first=208 second=44 amount=-8\nkerning first=208 second=46 amount=-8\nkerning first=208 second=90 amount=-2\nkerning first=192 second=118 amount=-4\nkerning first=192 second=121 amount=-4\nkerning first=192 second=253 amount=-4\nkerning first=192 second=255 amount=-4\nkerning first=192 second=67 amount=-1\nkerning first=192 second=71 amount=-1\nkerning first=192 second=79 amount=-1\nkerning first=192 second=81 amount=-1\nkerning first=192 second=216 amount=-1\nkerning first=192 second=199 amount=-1\nkerning first=192 second=210 amount=-1\nkerning first=192 second=211 amount=-1\nkerning first=192 second=212 amount=-1\nkerning first=192 second=213 amount=-1\nkerning first=192 second=214 amount=-1\nkerning first=192 second=85 amount=-1\nkerning first=192 second=217 amount=-1\nkerning first=192 second=218 amount=-1\nkerning first=192 second=219 amount=-1\nkerning first=192 second=220 amount=-1\nkerning first=192 second=34 amount=-9\nkerning first=192 second=39 amount=-9\nkerning first=192 second=111 amount=-1\nkerning first=192 second=242 amount=-1\nkerning first=192 second=243 amount=-1\nkerning first=192 second=244 amount=-1\nkerning first=192 second=245 amount=-1\nkerning first=192 second=246 amount=-1\nkerning first=192 second=87 amount=-5\nkerning first=192 second=84 amount=-10\nkerning first=192 second=117 amount=-1\nkerning first=192 second=249 amount=-1\nkerning first=192 second=250 amount=-1\nkerning first=192 second=251 amount=-1\nkerning first=192 second=252 amount=-1\nkerning first=192 second=122 amount=1\nkerning first=192 second=86 amount=-7\nkerning first=192 second=89 amount=-7\nkerning first=192 second=221 amount=-7\nkerning first=193 second=118 amount=-4\nkerning first=193 second=121 amount=-4\nkerning first=193 second=253 amount=-4\nkerning first=193 second=255 amount=-4\nkerning first=193 second=67 amount=-1\nkerning first=193 second=71 amount=-1\nkerning first=193 second=79 amount=-1\nkerning first=193 second=81 amount=-1\nkerning first=193 second=216 amount=-1\nkerning first=193 second=199 amount=-1\nkerning first=193 second=210 amount=-1\nkerning first=193 second=211 amount=-1\nkerning first=193 second=212 amount=-1\nkerning first=193 second=213 amount=-1\nkerning first=193 second=214 amount=-1\nkerning first=193 second=85 amount=-1\nkerning first=193 second=217 amount=-1\nkerning first=193 second=218 amount=-1\nkerning first=193 second=219 amount=-1\nkerning first=193 second=220 amount=-1\nkerning first=193 second=34 amount=-9\nkerning first=193 second=39 amount=-9\nkerning first=193 second=111 amount=-1\nkerning first=193 second=242 amount=-1\nkerning first=193 second=243 amount=-1\nkerning first=193 second=244 amount=-1\nkerning first=193 second=245 amount=-1\nkerning first=193 second=246 amount=-1\nkerning first=193 second=87 amount=-5\nkerning first=193 second=84 amount=-10\nkerning first=193 second=117 amount=-1\nkerning first=193 second=249 amount=-1\nkerning first=193 second=250 amount=-1\nkerning first=193 second=251 amount=-1\nkerning first=193 second=252 amount=-1\nkerning first=193 second=122 amount=1\nkerning first=193 second=86 amount=-7\nkerning first=193 second=89 amount=-7\nkerning first=193 second=221 amount=-7\nkerning first=194 second=118 amount=-4\nkerning first=194 second=121 amount=-4\nkerning first=194 second=253 amount=-4\nkerning first=194 second=255 amount=-4\nkerning first=194 second=67 amount=-1\nkerning first=194 second=71 amount=-1\nkerning first=194 second=79 amount=-1\nkerning first=194 second=81 amount=-1\nkerning first=194 second=216 amount=-1\nkerning first=194 second=199 amount=-1\nkerning first=194 second=210 amount=-1\nkerning first=194 second=211 amount=-1\nkerning first=194 second=212 amount=-1\nkerning first=194 second=213 amount=-1\nkerning first=194 second=214 amount=-1\nkerning first=194 second=85 amount=-1\nkerning first=194 second=217 amount=-1\nkerning first=194 second=218 amount=-1\nkerning first=194 second=219 amount=-1\nkerning first=194 second=220 amount=-1\nkerning first=194 second=34 amount=-9\nkerning first=194 second=39 amount=-9\nkerning first=194 second=111 amount=-1\nkerning first=194 second=242 amount=-1\nkerning first=194 second=243 amount=-1\nkerning first=194 second=244 amount=-1\nkerning first=194 second=245 amount=-1\nkerning first=194 second=246 amount=-1\nkerning first=194 second=87 amount=-5\nkerning first=194 second=84 amount=-10\nkerning first=194 second=117 amount=-1\nkerning first=194 second=249 amount=-1\nkerning first=194 second=250 amount=-1\nkerning first=194 second=251 amount=-1\nkerning first=194 second=252 amount=-1\nkerning first=194 second=122 amount=1\nkerning first=194 second=86 amount=-7\nkerning first=194 second=89 amount=-7\nkerning first=194 second=221 amount=-7\nkerning first=195 second=118 amount=-4\nkerning first=195 second=121 amount=-4\nkerning first=195 second=253 amount=-4\nkerning first=195 second=255 amount=-4\nkerning first=195 second=67 amount=-1\nkerning first=195 second=71 amount=-1\nkerning first=195 second=79 amount=-1\nkerning first=195 second=81 amount=-1\nkerning first=195 second=216 amount=-1\nkerning first=195 second=199 amount=-1\nkerning first=195 second=210 amount=-1\nkerning first=195 second=211 amount=-1\nkerning first=195 second=212 amount=-1\nkerning first=195 second=213 amount=-1\nkerning first=195 second=214 amount=-1\nkerning first=195 second=85 amount=-1\nkerning first=195 second=217 amount=-1\nkerning first=195 second=218 amount=-1\nkerning first=195 second=219 amount=-1\nkerning first=195 second=220 amount=-1\nkerning first=195 second=34 amount=-9\nkerning first=195 second=39 amount=-9\nkerning first=195 second=111 amount=-1\nkerning first=195 second=242 amount=-1\nkerning first=195 second=243 amount=-1\nkerning first=195 second=244 amount=-1\nkerning first=195 second=245 amount=-1\nkerning first=195 second=246 amount=-1\nkerning first=195 second=87 amount=-5\nkerning first=195 second=84 amount=-10\nkerning first=195 second=117 amount=-1\nkerning first=195 second=249 amount=-1\nkerning first=195 second=250 amount=-1\nkerning first=195 second=251 amount=-1\nkerning first=195 second=252 amount=-1\nkerning first=195 second=122 amount=1\nkerning first=195 second=86 amount=-7\nkerning first=195 second=89 amount=-7\nkerning first=195 second=221 amount=-7\nkerning first=196 second=118 amount=-4\nkerning first=196 second=121 amount=-4\nkerning first=196 second=253 amount=-4\nkerning first=196 second=255 amount=-4\nkerning first=196 second=67 amount=-1\nkerning first=196 second=71 amount=-1\nkerning first=196 second=79 amount=-1\nkerning first=196 second=81 amount=-1\nkerning first=196 second=216 amount=-1\nkerning first=196 second=199 amount=-1\nkerning first=196 second=210 amount=-1\nkerning first=196 second=211 amount=-1\nkerning first=196 second=212 amount=-1\nkerning first=196 second=213 amount=-1\nkerning first=196 second=214 amount=-1\nkerning first=196 second=85 amount=-1\nkerning first=196 second=217 amount=-1\nkerning first=196 second=218 amount=-1\nkerning first=196 second=219 amount=-1\nkerning first=196 second=220 amount=-1\nkerning first=196 second=34 amount=-9\nkerning first=196 second=39 amount=-9\nkerning first=196 second=111 amount=-1\nkerning first=196 second=242 amount=-1\nkerning first=196 second=243 amount=-1\nkerning first=196 second=244 amount=-1\nkerning first=196 second=245 amount=-1\nkerning first=196 second=246 amount=-1\nkerning first=196 second=87 amount=-5\nkerning first=196 second=84 amount=-10\nkerning first=196 second=117 amount=-1\nkerning first=196 second=249 amount=-1\nkerning first=196 second=250 amount=-1\nkerning first=196 second=251 amount=-1\nkerning first=196 second=252 amount=-1\nkerning first=196 second=122 amount=1\nkerning first=196 second=86 amount=-7\nkerning first=196 second=89 amount=-7\nkerning first=196 second=221 amount=-7\nkerning first=197 second=118 amount=-4\nkerning first=197 second=121 amount=-4\nkerning first=197 second=253 amount=-4\nkerning first=197 second=255 amount=-4\nkerning first=197 second=67 amount=-1\nkerning first=197 second=71 amount=-1\nkerning first=197 second=79 amount=-1\nkerning first=197 second=81 amount=-1\nkerning first=197 second=216 amount=-1\nkerning first=197 second=199 amount=-1\nkerning first=197 second=210 amount=-1\nkerning first=197 second=211 amount=-1\nkerning first=197 second=212 amount=-1\nkerning first=197 second=213 amount=-1\nkerning first=197 second=214 amount=-1\nkerning first=197 second=85 amount=-1\nkerning first=197 second=217 amount=-1\nkerning first=197 second=218 amount=-1\nkerning first=197 second=219 amount=-1\nkerning first=197 second=220 amount=-1\nkerning first=197 second=34 amount=-9\nkerning first=197 second=39 amount=-9\nkerning first=197 second=111 amount=-1\nkerning first=197 second=242 amount=-1\nkerning first=197 second=243 amount=-1\nkerning first=197 second=244 amount=-1\nkerning first=197 second=245 amount=-1\nkerning first=197 second=246 amount=-1\nkerning first=197 second=87 amount=-5\nkerning first=197 second=84 amount=-10\nkerning first=197 second=117 amount=-1\nkerning first=197 second=249 amount=-1\nkerning first=197 second=250 amount=-1\nkerning first=197 second=251 amount=-1\nkerning first=197 second=252 amount=-1\nkerning first=197 second=122 amount=1\nkerning first=197 second=86 amount=-7\nkerning first=197 second=89 amount=-7\nkerning first=197 second=221 amount=-7\nkerning first=199 second=84 amount=-2\nkerning first=200 second=118 amount=-2\nkerning first=200 second=121 amount=-2\nkerning first=200 second=253 amount=-2\nkerning first=200 second=255 amount=-2\nkerning first=200 second=111 amount=-1\nkerning first=200 second=242 amount=-1\nkerning first=200 second=243 amount=-1\nkerning first=200 second=244 amount=-1\nkerning first=200 second=245 amount=-1\nkerning first=200 second=246 amount=-1\nkerning first=200 second=84 amount=2\nkerning first=200 second=117 amount=-1\nkerning first=200 second=249 amount=-1\nkerning first=200 second=250 amount=-1\nkerning first=200 second=251 amount=-1\nkerning first=200 second=252 amount=-1\nkerning first=200 second=99 amount=-1\nkerning first=200 second=100 amount=-1\nkerning first=200 second=101 amount=-1\nkerning first=200 second=103 amount=-1\nkerning first=200 second=113 amount=-1\nkerning first=200 second=231 amount=-1\nkerning first=200 second=232 amount=-1\nkerning first=200 second=233 amount=-1\nkerning first=200 second=234 amount=-1\nkerning first=200 second=235 amount=-1\nkerning first=201 second=118 amount=-2\nkerning first=201 second=121 amount=-2\nkerning first=201 second=253 amount=-2\nkerning first=201 second=255 amount=-2\nkerning first=201 second=111 amount=-1\nkerning first=201 second=242 amount=-1\nkerning first=201 second=243 amount=-1\nkerning first=201 second=244 amount=-1\nkerning first=201 second=245 amount=-1\nkerning first=201 second=246 amount=-1\nkerning first=201 second=84 amount=2\nkerning first=201 second=117 amount=-1\nkerning first=201 second=249 amount=-1\nkerning first=201 second=250 amount=-1\nkerning first=201 second=251 amount=-1\nkerning first=201 second=252 amount=-1\nkerning first=201 second=99 amount=-1\nkerning first=201 second=100 amount=-1\nkerning first=201 second=101 amount=-1\nkerning first=201 second=103 amount=-1\nkerning first=201 second=113 amount=-1\nkerning first=201 second=231 amount=-1\nkerning first=201 second=232 amount=-1\nkerning first=201 second=233 amount=-1\nkerning first=201 second=234 amount=-1\nkerning first=201 second=235 amount=-1\nkerning first=202 second=118 amount=-2\nkerning first=202 second=121 amount=-2\nkerning first=202 second=253 amount=-2\nkerning first=202 second=255 amount=-2\nkerning first=202 second=111 amount=-1\nkerning first=202 second=242 amount=-1\nkerning first=202 second=243 amount=-1\nkerning first=202 second=244 amount=-1\nkerning first=202 second=245 amount=-1\nkerning first=202 second=246 amount=-1\nkerning first=202 second=84 amount=2\nkerning first=202 second=117 amount=-1\nkerning first=202 second=249 amount=-1\nkerning first=202 second=250 amount=-1\nkerning first=202 second=251 amount=-1\nkerning first=202 second=252 amount=-1\nkerning first=202 second=99 amount=-1\nkerning first=202 second=100 amount=-1\nkerning first=202 second=101 amount=-1\nkerning first=202 second=103 amount=-1\nkerning first=202 second=113 amount=-1\nkerning first=202 second=231 amount=-1\nkerning first=202 second=232 amount=-1\nkerning first=202 second=233 amount=-1\nkerning first=202 second=234 amount=-1\nkerning first=202 second=235 amount=-1\nkerning first=203 second=118 amount=-2\nkerning first=203 second=121 amount=-2\nkerning first=203 second=253 amount=-2\nkerning first=203 second=255 amount=-2\nkerning first=203 second=111 amount=-1\nkerning first=203 second=242 amount=-1\nkerning first=203 second=243 amount=-1\nkerning first=203 second=244 amount=-1\nkerning first=203 second=245 amount=-1\nkerning first=203 second=246 amount=-1\nkerning first=203 second=84 amount=2\nkerning first=203 second=117 amount=-1\nkerning first=203 second=249 amount=-1\nkerning first=203 second=250 amount=-1\nkerning first=203 second=251 amount=-1\nkerning first=203 second=252 amount=-1\nkerning first=203 second=99 amount=-1\nkerning first=203 second=100 amount=-1\nkerning first=203 second=101 amount=-1\nkerning first=203 second=103 amount=-1\nkerning first=203 second=113 amount=-1\nkerning first=203 second=231 amount=-1\nkerning first=203 second=232 amount=-1\nkerning first=203 second=233 amount=-1\nkerning first=203 second=234 amount=-1\nkerning first=203 second=235 amount=-1\nkerning first=204 second=84 amount=-2\nkerning first=204 second=89 amount=-2\nkerning first=204 second=221 amount=-2\nkerning first=204 second=65 amount=1\nkerning first=204 second=192 amount=1\nkerning first=204 second=193 amount=1\nkerning first=204 second=194 amount=1\nkerning first=204 second=195 amount=1\nkerning first=204 second=196 amount=1\nkerning first=204 second=197 amount=1\nkerning first=204 second=88 amount=1\nkerning first=205 second=84 amount=-2\nkerning first=205 second=89 amount=-2\nkerning first=205 second=221 amount=-2\nkerning first=205 second=65 amount=1\nkerning first=205 second=192 amount=1\nkerning first=205 second=193 amount=1\nkerning first=205 second=194 amount=1\nkerning first=205 second=195 amount=1\nkerning first=205 second=196 amount=1\nkerning first=205 second=197 amount=1\nkerning first=205 second=88 amount=1\nkerning first=206 second=84 amount=-2\nkerning first=206 second=89 amount=-2\nkerning first=206 second=221 amount=-2\nkerning first=206 second=65 amount=1\nkerning first=206 second=192 amount=1\nkerning first=206 second=193 amount=1\nkerning first=206 second=194 amount=1\nkerning first=206 second=195 amount=1\nkerning first=206 second=196 amount=1\nkerning first=206 second=197 amount=1\nkerning first=206 second=88 amount=1\nkerning first=207 second=84 amount=-2\nkerning first=207 second=89 amount=-2\nkerning first=207 second=221 amount=-2\nkerning first=207 second=65 amount=1\nkerning first=207 second=192 amount=1\nkerning first=207 second=193 amount=1\nkerning first=207 second=194 amount=1\nkerning first=207 second=195 amount=1\nkerning first=207 second=196 amount=1\nkerning first=207 second=197 amount=1\nkerning first=207 second=88 amount=1\nkerning first=209 second=84 amount=-2\nkerning first=209 second=89 amount=-2\nkerning first=209 second=221 amount=-2\nkerning first=209 second=65 amount=1\nkerning first=209 second=192 amount=1\nkerning first=209 second=193 amount=1\nkerning first=209 second=194 amount=1\nkerning first=209 second=195 amount=1\nkerning first=209 second=196 amount=1\nkerning first=209 second=197 amount=1\nkerning first=209 second=88 amount=1\nkerning first=210 second=84 amount=-2\nkerning first=210 second=86 amount=-2\nkerning first=210 second=89 amount=-3\nkerning first=210 second=221 amount=-3\nkerning first=210 second=65 amount=-2\nkerning first=210 second=192 amount=-2\nkerning first=210 second=193 amount=-2\nkerning first=210 second=194 amount=-2\nkerning first=210 second=195 amount=-2\nkerning first=210 second=196 amount=-2\nkerning first=210 second=197 amount=-2\nkerning first=210 second=88 amount=-2\nkerning first=210 second=44 amount=-8\nkerning first=210 second=46 amount=-8\nkerning first=210 second=90 amount=-2\nkerning first=211 second=84 amount=-2\nkerning first=211 second=86 amount=-2\nkerning first=211 second=89 amount=-3\nkerning first=211 second=221 amount=-3\nkerning first=211 second=65 amount=-2\nkerning first=211 second=192 amount=-2\nkerning first=211 second=193 amount=-2\nkerning first=211 second=194 amount=-2\nkerning first=211 second=195 amount=-2\nkerning first=211 second=196 amount=-2\nkerning first=211 second=197 amount=-2\nkerning first=211 second=88 amount=-2\nkerning first=211 second=44 amount=-8\nkerning first=211 second=46 amount=-8\nkerning first=211 second=90 amount=-2\nkerning first=212 second=84 amount=-2\nkerning first=212 second=86 amount=-2\nkerning first=212 second=89 amount=-3\nkerning first=212 second=221 amount=-3\nkerning first=212 second=65 amount=-2\nkerning first=212 second=192 amount=-2\nkerning first=212 second=193 amount=-2\nkerning first=212 second=194 amount=-2\nkerning first=212 second=195 amount=-2\nkerning first=212 second=196 amount=-2\nkerning first=212 second=197 amount=-2\nkerning first=212 second=88 amount=-2\nkerning first=212 second=44 amount=-8\nkerning first=212 second=46 amount=-8\nkerning first=212 second=90 amount=-2\nkerning first=213 second=84 amount=-2\nkerning first=213 second=86 amount=-2\nkerning first=213 second=89 amount=-3\nkerning first=213 second=221 amount=-3\nkerning first=213 second=65 amount=-2\nkerning first=213 second=192 amount=-2\nkerning first=213 second=193 amount=-2\nkerning first=213 second=194 amount=-2\nkerning first=213 second=195 amount=-2\nkerning first=213 second=196 amount=-2\nkerning first=213 second=197 amount=-2\nkerning first=213 second=88 amount=-2\nkerning first=213 second=44 amount=-8\nkerning first=213 second=46 amount=-8\nkerning first=213 second=90 amount=-2\nkerning first=214 second=84 amount=-2\nkerning first=214 second=86 amount=-2\nkerning first=214 second=89 amount=-3\nkerning first=214 second=221 amount=-3\nkerning first=214 second=65 amount=-2\nkerning first=214 second=192 amount=-2\nkerning first=214 second=193 amount=-2\nkerning first=214 second=194 amount=-2\nkerning first=214 second=195 amount=-2\nkerning first=214 second=196 amount=-2\nkerning first=214 second=197 amount=-2\nkerning first=214 second=88 amount=-2\nkerning first=214 second=44 amount=-8\nkerning first=214 second=46 amount=-8\nkerning first=214 second=90 amount=-2\nkerning first=217 second=65 amount=-2\nkerning first=217 second=192 amount=-2\nkerning first=217 second=193 amount=-2\nkerning first=217 second=194 amount=-2\nkerning first=217 second=195 amount=-2\nkerning first=217 second=196 amount=-2\nkerning first=217 second=197 amount=-2\nkerning first=218 second=65 amount=-2\nkerning first=218 second=192 amount=-2\nkerning first=218 second=193 amount=-2\nkerning first=218 second=194 amount=-2\nkerning first=218 second=195 amount=-2\nkerning first=218 second=196 amount=-2\nkerning first=218 second=197 amount=-2\nkerning first=219 second=65 amount=-2\nkerning first=219 second=192 amount=-2\nkerning first=219 second=193 amount=-2\nkerning first=219 second=194 amount=-2\nkerning first=219 second=195 amount=-2\nkerning first=219 second=196 amount=-2\nkerning first=219 second=197 amount=-2\nkerning first=220 second=65 amount=-2\nkerning first=220 second=192 amount=-2\nkerning first=220 second=193 amount=-2\nkerning first=220 second=194 amount=-2\nkerning first=220 second=195 amount=-2\nkerning first=220 second=196 amount=-2\nkerning first=220 second=197 amount=-2\nkerning first=221 second=118 amount=-2\nkerning first=221 second=121 amount=-2\nkerning first=221 second=253 amount=-2\nkerning first=221 second=255 amount=-2\nkerning first=221 second=67 amount=-2\nkerning first=221 second=71 amount=-2\nkerning first=221 second=79 amount=-2\nkerning first=221 second=81 amount=-2\nkerning first=221 second=216 amount=-2\nkerning first=221 second=199 amount=-2\nkerning first=221 second=210 amount=-2\nkerning first=221 second=211 amount=-2\nkerning first=221 second=212 amount=-2\nkerning first=221 second=213 amount=-2\nkerning first=221 second=214 amount=-2\nkerning first=221 second=85 amount=-7\nkerning first=221 second=217 amount=-7\nkerning first=221 second=218 amount=-7\nkerning first=221 second=219 amount=-7\nkerning first=221 second=220 amount=-7\nkerning first=221 second=111 amount=-5\nkerning first=221 second=242 amount=-5\nkerning first=221 second=243 amount=-5\nkerning first=221 second=244 amount=-5\nkerning first=221 second=245 amount=-5\nkerning first=221 second=246 amount=-5\nkerning first=221 second=87 amount=1\nkerning first=221 second=84 amount=1\nkerning first=221 second=117 amount=-3\nkerning first=221 second=249 amount=-3\nkerning first=221 second=250 amount=-3\nkerning first=221 second=251 amount=-3\nkerning first=221 second=252 amount=-3\nkerning first=221 second=122 amount=-2\nkerning first=221 second=86 amount=1\nkerning first=221 second=89 amount=1\nkerning first=221 second=221 amount=1\nkerning first=221 second=65 amount=-7\nkerning first=221 second=192 amount=-7\nkerning first=221 second=193 amount=-7\nkerning first=221 second=194 amount=-7\nkerning first=221 second=195 amount=-7\nkerning first=221 second=196 amount=-7\nkerning first=221 second=197 amount=-7\nkerning first=221 second=88 amount=1\nkerning first=221 second=44 amount=-16\nkerning first=221 second=46 amount=-16\nkerning first=221 second=99 amount=-5\nkerning first=221 second=100 amount=-5\nkerning first=221 second=101 amount=-5\nkerning first=221 second=103 amount=-5\nkerning first=221 second=113 amount=-5\nkerning first=221 second=231 amount=-5\nkerning first=221 second=232 amount=-5\nkerning first=221 second=233 amount=-5\nkerning first=221 second=234 amount=-5\nkerning first=221 second=235 amount=-5\nkerning first=221 second=120 amount=-2\nkerning first=221 second=45 amount=-4\nkerning first=221 second=173 amount=-4\nkerning first=221 second=109 amount=-3\nkerning first=221 second=110 amount=-3\nkerning first=221 second=112 amount=-3\nkerning first=221 second=241 amount=-3\nkerning first=221 second=83 amount=-1\nkerning first=221 second=97 amount=-6\nkerning first=221 second=224 amount=-6\nkerning first=221 second=225 amount=-6\nkerning first=221 second=226 amount=-6\nkerning first=221 second=227 amount=-6\nkerning first=221 second=228 amount=-6\nkerning first=221 second=229 amount=-6\nkerning first=221 second=115 amount=-5\nkerning first=221 second=74 amount=-7\nkerning first=224 second=118 amount=-1\nkerning first=224 second=121 amount=-1\nkerning first=224 second=253 amount=-1\nkerning first=224 second=255 amount=-1\nkerning first=224 second=34 amount=-5\nkerning first=224 second=39 amount=-5\nkerning first=225 second=118 amount=-1\nkerning first=225 second=121 amount=-1\nkerning first=225 second=253 amount=-1\nkerning first=225 second=255 amount=-1\nkerning first=225 second=34 amount=-5\nkerning first=225 second=39 amount=-5\nkerning first=226 second=118 amount=-1\nkerning first=226 second=121 amount=-1\nkerning first=226 second=253 amount=-1\nkerning first=226 second=255 amount=-1\nkerning first=226 second=34 amount=-5\nkerning first=226 second=39 amount=-5\nkerning first=227 second=118 amount=-1\nkerning first=227 second=121 amount=-1\nkerning first=227 second=253 amount=-1\nkerning first=227 second=255 amount=-1\nkerning first=227 second=34 amount=-5\nkerning first=227 second=39 amount=-5\nkerning first=228 second=118 amount=-1\nkerning first=228 second=121 amount=-1\nkerning first=228 second=253 amount=-1\nkerning first=228 second=255 amount=-1\nkerning first=228 second=34 amount=-5\nkerning first=228 second=39 amount=-5\nkerning first=229 second=118 amount=-1\nkerning first=229 second=121 amount=-1\nkerning first=229 second=253 amount=-1\nkerning first=229 second=255 amount=-1\nkerning first=229 second=34 amount=-5\nkerning first=229 second=39 amount=-5\nkerning first=231 second=34 amount=-1\nkerning first=231 second=39 amount=-1\nkerning first=232 second=118 amount=-1\nkerning first=232 second=121 amount=-1\nkerning first=232 second=253 amount=-1\nkerning first=232 second=255 amount=-1\nkerning first=232 second=34 amount=-1\nkerning first=232 second=39 amount=-1\nkerning first=233 second=118 amount=-1\nkerning first=233 second=121 amount=-1\nkerning first=233 second=253 amount=-1\nkerning first=233 second=255 amount=-1\nkerning first=233 second=34 amount=-1\nkerning first=233 second=39 amount=-1\nkerning first=234 second=118 amount=-1\nkerning first=234 second=121 amount=-1\nkerning first=234 second=253 amount=-1\nkerning first=234 second=255 amount=-1\nkerning first=234 second=34 amount=-1\nkerning first=234 second=39 amount=-1\nkerning first=235 second=118 amount=-1\nkerning first=235 second=121 amount=-1\nkerning first=235 second=253 amount=-1\nkerning first=235 second=255 amount=-1\nkerning first=235 second=34 amount=-1\nkerning first=235 second=39 amount=-1\nkerning first=241 second=34 amount=-8\nkerning first=241 second=39 amount=-8\nkerning first=242 second=118 amount=-1\nkerning first=242 second=121 amount=-1\nkerning first=242 second=253 amount=-1\nkerning first=242 second=255 amount=-1\nkerning first=242 second=34 amount=-11\nkerning first=242 second=39 amount=-11\nkerning first=242 second=122 amount=-1\nkerning first=242 second=120 amount=-2\nkerning first=243 second=118 amount=-1\nkerning first=243 second=121 amount=-1\nkerning first=243 second=253 amount=-1\nkerning first=243 second=255 amount=-1\nkerning first=243 second=34 amount=-11\nkerning first=243 second=39 amount=-11\nkerning first=243 second=122 amount=-1\nkerning first=243 second=120 amount=-2\nkerning first=244 second=118 amount=-1\nkerning first=244 second=121 amount=-1\nkerning first=244 second=253 amount=-1\nkerning first=244 second=255 amount=-1\nkerning first=244 second=34 amount=-11\nkerning first=244 second=39 amount=-11\nkerning first=244 second=122 amount=-1\nkerning first=244 second=120 amount=-2\nkerning first=245 second=118 amount=-1\nkerning first=245 second=121 amount=-1\nkerning first=245 second=253 amount=-1\nkerning first=245 second=255 amount=-1\nkerning first=245 second=34 amount=-11\nkerning first=245 second=39 amount=-11\nkerning first=245 second=122 amount=-1\nkerning first=245 second=120 amount=-2\nkerning first=246 second=118 amount=-1\nkerning first=246 second=121 amount=-1\nkerning first=246 second=253 amount=-1\nkerning first=246 second=255 amount=-1\nkerning first=246 second=34 amount=-11\nkerning first=246 second=39 amount=-11\nkerning first=246 second=122 amount=-1\nkerning first=246 second=120 amount=-2\nkerning first=253 second=34 amount=1\nkerning first=253 second=39 amount=1\nkerning first=253 second=111 amount=-1\nkerning first=253 second=242 amount=-1\nkerning first=253 second=243 amount=-1\nkerning first=253 second=244 amount=-1\nkerning first=253 second=245 amount=-1\nkerning first=253 second=246 amount=-1\nkerning first=253 second=44 amount=-8\nkerning first=253 second=46 amount=-8\nkerning first=253 second=99 amount=-1\nkerning first=253 second=100 amount=-1\nkerning first=253 second=101 amount=-1\nkerning first=253 second=103 amount=-1\nkerning first=253 second=113 amount=-1\nkerning first=253 second=231 amount=-1\nkerning first=253 second=232 amount=-1\nkerning first=253 second=233 amount=-1\nkerning first=253 second=234 amount=-1\nkerning first=253 second=235 amount=-1\nkerning first=253 second=97 amount=-1\nkerning first=253 second=224 amount=-1\nkerning first=253 second=225 amount=-1\nkerning first=253 second=226 amount=-1\nkerning first=253 second=227 amount=-1\nkerning first=253 second=228 amount=-1\nkerning first=253 second=229 amount=-1\nkerning first=255 second=34 amount=1\nkerning first=255 second=39 amount=1\nkerning first=255 second=111 amount=-1\nkerning first=255 second=242 amount=-1\nkerning first=255 second=243 amount=-1\nkerning first=255 second=244 amount=-1\nkerning first=255 second=245 amount=-1\nkerning first=255 second=246 amount=-1\nkerning first=255 second=44 amount=-8\nkerning first=255 second=46 amount=-8\nkerning first=255 second=99 amount=-1\nkerning first=255 second=100 amount=-1\nkerning first=255 second=101 amount=-1\nkerning first=255 second=103 amount=-1\nkerning first=255 second=113 amount=-1\nkerning first=255 second=231 amount=-1\nkerning first=255 second=232 amount=-1\nkerning first=255 second=233 amount=-1\nkerning first=255 second=234 amount=-1\nkerning first=255 second=235 amount=-1\nkerning first=255 second=97 amount=-1\nkerning first=255 second=224 amount=-1\nkerning first=255 second=225 amount=-1\nkerning first=255 second=226 amount=-1\nkerning first=255 second=227 amount=-1\nkerning first=255 second=228 amount=-1\nkerning first=255 second=229 amount=-1\n"; +} + +},{}],8:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.create = create; + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _utils = require('./utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** +* dat-guiVR Javascript Controller Library for VR +* https://github.com/dataarts/dat.guiVR +* +* Copyright 2016 Data Arts Team, Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +function create() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + group = _ref.group, + panel = _ref.panel; + + var interaction = (0, _interaction2.default)(panel); + + interaction.events.on('onPressed', handleOnPress); + interaction.events.on('tick', handleTick); + interaction.events.on('onReleased', handleOnRelease); + + var tempMatrix = new THREE.Matrix4(); + var tPosition = new THREE.Vector3(); + + //let oldParent; + + function handleTick() { + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + input = _ref2.input; + + var folder = (0, _utils.getTopLevelFolder)(group); + if (folder === undefined || folder.grabDisabled) { + return; + } + + if (input.mouse) { + if (input.pressed && input.selected && input.raycast.ray.intersectPlane(input.mousePlane, input.mouseIntersection)) { + if (input.interaction.press === interaction) { + input.mouseIntersection.sub(input.mouseOffset); + + input.selected.parent.updateMatrixWorld(); + input.selected.parent.worldToLocal(input.mouseIntersection); + + //NOTE:: in orthographic mode, we've already mutated the position of folders, + //meaning there could be some inconsistency with the mouseIntersection point no longer being right... + //I thought this was playing a role in a bug with orthographic folder layout, appears ok for now. + folder.position.copy(input.mouseIntersection); + + folder.updateMatrix(); + return; + } + } else if (input.intersections.length > 0) { + var hitObject = input.intersections[0].object; + if (hitObject === panel) { + hitObject.updateMatrixWorld(); + //failing to account for the position not necessarily being the world position? + tPosition.setFromMatrixPosition(hitObject.matrixWorld); + + input.mousePlane.setFromNormalAndCoplanarPoint(input.mouseCamera.getWorldDirection(input.mousePlane.normal), tPosition); + // console.log( input.mousePlane ); + } + } + } + } + + function handleOnPress(p) { + var inputObject = p.inputObject, + input = p.input; + + + var folder = (0, _utils.getTopLevelFolder)(group); + if (folder === undefined) { + return; + } + + if (folder.beingMoved === true) { + return; + } + + if (input.mouse) { + if (input.intersections.length > 0) { + if (input.raycast.ray.intersectPlane(input.mousePlane, input.mouseIntersection)) { + var hitObject = input.intersections[0].object; + if (hitObject !== panel) { + return; + } + + input.selected = folder; + + if (folder.grabDisabled) return; + + input.selected.updateMatrixWorld(); + tPosition.setFromMatrixPosition(input.selected.matrixWorld); + + input.mouseOffset.copy(input.mouseIntersection).sub(tPosition); + // console.log( input.mouseOffset ); + } + } + } else { + if (folder.grabDisabled) return; + + tempMatrix.getInverse(inputObject.matrixWorld); + + folder.matrix.premultiply(tempMatrix); + folder.matrix.decompose(folder.position, folder.quaternion, folder.scale); + + folder.oldParent = folder.parent; + //failing to account for the position not necessarily being the world position? + inputObject.add(folder); + } + + p.locked = true; + + folder.beingMoved = true; + + input.events.emit('grabbed', input); + } + + function handleOnRelease(p) { + var inputObject = p.inputObject, + input = p.input; + + + var folder = (0, _utils.getTopLevelFolder)(group); + if (folder === undefined) { + return; + } + + if (folder.beingMoved === false) { + return; + } + + if (input.mouse) { + input.selected = undefined; + } else { + + if (folder.oldParent === undefined) { + return; + } + + folder.matrix.premultiply(inputObject.matrixWorld); + folder.matrix.decompose(folder.position, folder.quaternion, folder.scale); + folder.oldParent.add(folder); + folder.oldParent = undefined; + } + + folder.beingMoved = false; + + input.events.emit('grabReleased', folder); + } + + return interaction; +} + +},{"./interaction":13,"./utils":23}],9:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var grabBar = exports.grabBar = function () { + var image = new Image(); + image.src = 'data:image/png;base64,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/GMzLdsAADskaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzEzMiA3OS4xNTkyODQsIDIwMTYvMDQvMTktMTM6MTM6NDAgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE2LTA5LTI4VDE2OjI1OjMyLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTYtMDktMjhUMTY6Mzc6MjMtMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE2LTA5LTI4VDE2OjM3OjIzLTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmFhYTFjMTQzLTUwZmUtOTQ0My1hNThmLWEyM2VkNTM3MDdmMDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjdlNzdmYmZjLTg1ZDQtMTFlNi1hYzhmLWFjNzU0ZWQ1ODM3ZjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmM1ZmM0ZGYyLTkxY2MtZTI0MS04Y2VjLTMzODIyY2Q1ZWFlOTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjNWZjNGRmMi05MWNjLWUyNDEtOGNlYy0zMzgyMmNkNWVhZTk8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTYtMDktMjhUMTY6MjU6MzItMDc6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y29udmVydGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmFhYTFjMTQzLTUwZmUtOTQ0My1hNThmLWEyM2VkNTM3MDdmMDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wOS0yOFQxNjozNzoyMy0wNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj42NDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+OhF7RwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAlElEQVR42uzZsQ3AIAxEUTuTZJRskt5LRFmCdTLapUKCBijo/F0hn2SkJxIKXJJlrsOSFwAAAABA6vKI6O7BUorXdZu1/VEWEZeZfbN5m/ZamjfK+AQAAAAAAAAAAAAAAAAAAAAAACBfuaSna7i/dd1mbX+USTrN7J7N27TX0rxRxgngZYifIAAAAJC4fgAAAP//AwAuMVPw20hxCwAAAABJRU5ErkJggg=='; + + var texture = new THREE.Texture();texture.name = 'tttt1'; + texture.image = image; + texture.needsUpdate = true; + // texture.minFilter = THREE.LinearMipMapLinearFilter; + // texture.magFilter = THREE.LinearFilter; + // texture.generateMipmaps = false; + + var material = new THREE.MeshBasicMaterial({ + // color: 0xff0000, + side: THREE.DoubleSide, + transparent: true, + map: texture + }); + material.alphaTest = 0.5; + + return function () { + var geometry = new THREE.PlaneGeometry(image.width / 1000, image.height / 1000, 1, 1); + + var mesh = new THREE.Mesh(geometry, material); + return mesh; + }; +}(); + +var downArrow = exports.downArrow = function () { + var image = new Image(); + image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAYAAADS1n9/AAAACXBIWXMAACxLAAAsSwGlPZapAAA4K2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTEwLTIwVDIxOjE4OjI1LTA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0xMC0yMFQyMToxODoyNS0wNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDozMDQyYjI0ZS1iMzc2LWI0NGItOGI4Yy1lZTFjY2IzYWU1MDU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6MzA0MmIyNGUtYjM3Ni1iNDRiLThiOGMtZWUxY2NiM2FlNTA1PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MzA0MmIyNGUtYjM3Ni1iNDRiLThiOGMtZWUxY2NiM2FlNTA1PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjMwNDJiMjRlLWIzNzYtYjQ0Yi04YjhjLWVlMWNjYjNhZTUwNTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTI4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5Uilz0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJdSURBVHja7N3LccJAEIThRuW7ncUeTQhkQAiIDMgIhUIIcFQWJgJ88FKlovwArN2d6Z45cZGA/T9viYftxeVyQYzudLEEASAmAMQEgBjJeWl1xymlNwAHAMdxHHvFxU8pDQCWAFbjOH7I7ACT+O8ANnkhFONv8hoc8prwA7iJfx0pBJP412mGoDMQXwrBN/GbIuiMxJdA8Ev8Zgg6Q/GpEdwRvwmCzlh8SgQPxK+OoMYOMDwYnwrBE/GnCAbXAPKTX//jFJuUUu84fv9k/OusS/8QdAbl387eI4L8mPcznKroTlhyB1jOeC5XCGaMX2ItqwFYATipISgQ/5TX0heA/N62FIJS8Ut+TlD0IlAJgcf4VV4GKiDwGr/W+wDUCDzHrwaAFYH3+FUBsCFgiF8dAAsClvhNAHhHwBS/GQCvCNjiNwXgDQFj/OYAvCBgjW8CgHUEzPHNALCKgD2+KQDWECjENwfACgKV+CYBTBD0AM61ERSIfwbQW4xvFkBGcMw7QTUEheKv8nNBADCMQDG+eQC1EKjGB4CFl78RlFJa4usXTF7njJRvz35eD/FdASiIAKrx3QEohACq8V1cA1S6JpCM7xKAQQRu47sFYAiB6/iuARhA4D6+ewANEVDEpwDQAAFNfBoAFRFQxacCUAEBXXw6AAURUManBFAAAW18WgAzIqCOTw1gBgT08ekBTBDsnjh0xx5fAkBGMADYPnDINh+DAKCHQCa+FIA7EUjFlwPwBwK5+JIAfkAgGR9w+JWwOef6zWDV+PIAYuLfxgWAWIIAEBMAYgJAjOR8DgD+6Ozgv4uy9gAAAABJRU5ErkJggg=='; + + var texture = new THREE.Texture();texture.name = 'tttt3'; + texture.image = image; + texture.needsUpdate = true; + texture.minFilter = THREE.LinearMipMapLinearFilter; + texture.magFilter = THREE.LinearFilter; + // texture.anisotropic + // texture.generateMipmaps = false; + + var material = new THREE.MeshBasicMaterial({ + // color: 0xff0000, + side: THREE.DoubleSide, + transparent: true, + map: texture + }); + material.alphaTest = 0.2; + + return function () { + var h = 0.3; + var geo = new THREE.PlaneGeometry(image.width / 1000 * h, image.height / 1000 * h, 1, 1); + geo.translate(-0.005, -0.004, 0); + return new THREE.Mesh(geo, material); + }; +}(); + +var checkmark = exports.checkmark = function () { + var image = new Image(); + image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAYAAADS1n9/AAAACXBIWXMAACxLAAAsSwGlPZapAAA4K2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTEwLTIwVDIxOjMzOjUzLTA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0xMC0yMFQyMTozMzo1My0wNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo2ODcxYTk5Yy0zNjE5LTlkNGEtODdkNi0wYWE5YTRiNWU4Mjc8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6Njg3MWE5OWMtMzYxOS05ZDRhLTg3ZDYtMGFhOWE0YjVlODI3PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6Njg3MWE5OWMtMzYxOS05ZDRhLTg3ZDYtMGFhOWE0YjVlODI3PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY4NzFhOTljLTM2MTktOWQ0YS04N2Q2LTBhYTlhNGI1ZTgyNzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTI4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5z9RT3AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAATtSURBVHja7Jzbb5RFGMZ/2xbCvVhASExUiI144w0hQtHEGrHgISqgN6KgtNYWAb0w0Wo1XqrbPbSlokYSxfMhemX/Aa7wGAVq8XTp30DXi5mJm0a2u9v3/b6Z2XludrOHdw/PMzPP+74zX6FWqyGFgYEBElpGD/AecCtwB/Dbcm+Ym5sT+/Cu9P/nim6gCDwCXAt8DVyX5RdIAsgPBaAEjNQ9diPwFbA5CSB+TAFP/c/jW4HPgL4kgHgxCww1eP5m4GN7mwQQEbos+U808dqtwEf2NgkgErc/0yT5Dn12OdiSBBA++aUWyXfYAnwDXJ8EEG6qNwkMryDGZpsi3pAEEB6qV3D7raIP+NKmikkAgeAt4IhgvJvsTJAE4DkKwCngsELss0kA/q/5s8AhhdjTwEFpd5ogS35VaeTPAk8Di0kA/pJfEl7zHU7SuHKYlgAP1vyykNtfihkt8pMAZEkaVohbVYqbBCCIU8CTCnFLwJj2l08CWNma/7aS268Cx6QNXxKArHmeBh5XWk7GsiA/TwGMYfa/hUp+mfYaO824/eGsyM9LAC9gmiPvAzsDI7/Lrs1DSiN/KI8flCXGgVft/V7gDLArIAFMh+r2fRDAS8DEksc2Ah8C/R3s9svAaJ5TWlbkv3yF59Zjdr1s93ja13L7Fev2azELYLwB+Q5rMb3ubR4avpNKbn8aeAa4nLe6tQ3fRJOv7QW+8Ggm6LEjVKOxM4M5D3A57x+pKYAX6wxfs9gAfALs8IB8rcaOKxvXfFC5lgDGgVfafK8zhrty/E+0XHklL7efpQAmWpj2lxPBbTn8J7Po1fZH8QzSAnjNjn4JrMecjsmqWFQA3lVy+yXr9oldAHcKx7sa+DwDY9hj8/yDiqneYicI4FHgR+GYa5WzA83GzhRw1FfyNQTwC3CPvZXEOuBTzEUUJLEqg1TPW/K1TOCfwCBwUTjuNciWjbsxZViNVC+32r4vaeAfwF3AgnDcTVYEtwuNUA3yy5jdu3SyAAB+B3YrLAcbBOoE7yhN+5N2zScJwGAeeAD4TjhuL6aB1Kon6LbkP6Y08o/jSYXPFwEAnAceVhDBVS1mB66xo0H+FKaxs0hgyKodfAF4EPhJqU6w3EywyhqzQ0rkj4RIfpYCALgE7LEzgiRcxbC/wcivoFPedeQHi6y3hP1ljeG8Uoq4NDsoYIo8Wjt5giY/DwHUp4i/KmQHZ+pEUMDs5NFw+0UyOLQRqwDccnAv8L1w3HXAaZsivq5k+IrACSJBnqeD54EDwAfALYJxNwHfKpmysiV/MRYB5H0y6AKwH/hBOO5qYI2C4TsaE/k+CADM1bH3Il8xlETVGr4akcGXs4F/A3fbGcE3VAioth+qAMB0EXd7JoJJPNzGFasAwDSQBpHfVNKu2z9G5PDxePgC8BBwLueRfyLGNT8EAYDZTHIA+QZSs2v+8djcfmgCcHWC+5FvIC3n9kc7hXzfBeCM4R7ky8Yd5/ZDFQD810C6qPgZ0bv9kAVQnyJqFIvexGzmIAnAb1wC7hM2hkXgWToYoV0lzDWQJFLE6Bo7nSAAlyLuY2UNpAoZXootCUAeC5gG0s9tkj9KQtACANNAGqS1PYalRH48AnApYrPby4oEdmgjCaD5FHEvjbeXvYEp7yZEKADnCfZbEfwDPI85L+DIf44OaOy0g38HAM/e7guIRx94AAAAAElFTkSuQmCC'; + + var texture = new THREE.Texture();texture.name = 'tttt3'; + texture.image = image; + texture.needsUpdate = true; + texture.minFilter = THREE.LinearMipMapLinearFilter; + texture.magFilter = THREE.LinearFilter; + // texture.anisotropic + // texture.generateMipmaps = false; + + var material = new THREE.MeshBasicMaterial({ + // color: 0xff0000, + side: THREE.DoubleSide, + transparent: true, + map: texture + }); + material.alphaTest = 0.2; + + return function () { + var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.4; + + //const h = 0.4; + var geo = new THREE.PlaneGeometry(image.width / 1000 * h, image.height / 1000 * h, 1, 1); + geo.translate(0.025 * h / 0.4, 0, 0); + return new THREE.Mesh(geo, material); + }; +}(); + +var dock = exports.dock = function () { + var image = new Image(); + image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+Gkqr6gAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc/ZogMDbGwsJg02BgxamKjjISaNI1Rfm1mnvmh5o3Xe0+abJWtosTGrwV/AVtlrRSRkoWVNbFBz3memknm3M49n/u995zuPRdc8ZyiGpU9oOZNPTYa9k3PzPqqn6ilCg+NdCYUQxuKRiOUtfdbKux4HbBrlT/3r3kWUoYCFTXCg4qmm8JjwpEVU7N5S7hZySYWhE+Eu3S5oPCNrScdfrY54/CnzXo8NgyuBmFfpoSTJaxkdVVYXo5fzS0rv/exX1KXyk9NSmwTb8UgxihhfIwzwjAhehmQOUSAIN2yokx+z0/+BEuSq8isUUBnkQxZTLpEXZbqKYlp0VMychTs/v/tq5HuCzrV68JQ9WhZr+1QvQlfG5b1cWBZX4fgfoDzfDF/aR/630TfKGr+PfCuwelFUUtuw9k6tNxrCT3xI7nFXek0vBxD/Qw0XUHtnNOz332O7iC+Kl91CTu70CHnvfPfIyhnx9hAUU0AAAASUExURfz8/FVVVV1dXf///39/fyZFyb+hjMcAAAAGdFJOU///////ALO/pL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAEESURBVGiB7dhBDoMwDERR7jTiJCPuf5WumphVxXykVJGzIpJ5cgskdo4LjqOBrQA9HA000MD+wPVjvAWcFBjzEBgJpMCcZ8BMIATKPAJKAhlQ5wnwTcApMC5DYCSQAver58BMIATKDRFQEsiAGk8AU0AQMAUEAVNAEDAFBAFTQBAwBQQBU0AQMAUEAVNAEDAFBAFTQBDwcgD/BP4n4sfIXyT8KvOPCX/OfEHBSxpfVPGyzjcWvLXxzRVv77zAwCUOL7JwmccLTVzq8mI7L/fPkkIE4JaHN1247eONJ259efN9i1lzAFGDFh3ClKhVB1EzbNlh3Ij7wxPNBhpoYDWQjga2AD5S/CyIvbmq7gAAAABJRU5ErkJggg=='; + + var texture = new THREE.Texture();texture.name = 'tttt4'; + texture.image = image; + texture.needsUpdate = true; + texture.minFilter = THREE.LinearMipMapLinearFilter; + texture.magFilter = THREE.LinearFilter; + // texture.anisotropic + // texture.generateMipmaps = false; + + var material = new THREE.MeshBasicMaterial({ + // color: 0xff0000, + side: THREE.DoubleSide, + transparent: true, + map: texture + }); + material.alphaTest = 0.2; + + return function () { + var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.4; + + //const h = 0.4; + var geo = new THREE.PlaneGeometry(image.width / 1000 * h, image.height / 1000 * h, 1, 1); + geo.translate(0.025 * h / 0.4, 0, 0); + return new THREE.Mesh(geo, material); + }; +}(); + +var undock = exports.undock = function () { + var image = new Image(); + image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+Gkqr6gAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc/ZogMDbGwsJg02BgxamKjjISaNI1Rfm1mnvmh5o3Xe0+abJWtosTGrwV/AVtlrRSRkoWVNbFBz3memknm3M49n/u995zuPRdc8ZyiGpU9oOZNPTYa9k3PzPqqn6ilCg+NdCYUQxuKRiOUtfdbKux4HbBrlT/3r3kWUoYCFTXCg4qmm8JjwpEVU7N5S7hZySYWhE+Eu3S5oPCNrScdfrY54/CnzXo8NgyuBmFfpoSTJaxkdVVYXo5fzS0rv/exX1KXyk9NSmwTb8UgxihhfIwzwjAhehmQOUSAIN2yokx+z0/+BEuSq8isUUBnkQxZTLpEXZbqKYlp0VMychTs/v/tq5HuCzrV68JQ9WhZr+1QvQlfG5b1cWBZX4fgfoDzfDF/aR/630TfKGr+PfCuwelFUUtuw9k6tNxrCT3xI7nFXek0vBxD/Qw0XUHtnNOz332O7iC+Kl91CTu70CHnvfPfIyhnx9hAUU0AAAASUExURfz8/FVVVV1dXf///39/fyZFyb+hjMcAAAAGdFJOU///////ALO/pL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAEPSURBVGiB7dgxCsQwDATA/EnoJUL//8pVsWWlOLwLUTByFfbEsNc4di4n19XAUYBsrgYaaOB8wP8sGjAWcBowFnAaMBZwGjAWcBjQUAECJAxjQKiAAfJ82gRmBRCYFVBgVECBx+/bgKZsG8gD+0CqsA+kCQBYKwDAOoIASwUEWGYgIFaAgDiEAaECBoQpEJgVQGCOocCogALwjvSoAAP3IA4oCwgNKAsIDWg5wP4FZQEnAWUBJwFlgTsr21BGVrWpzqzoxRKympdrzEoOGEtWcchas4KDZsreP2zn7PULx3gEgVGg6to3CxRdfUOBout/KFD6CcRYQEjAWEBIwFggz33wi2YDDTRQDaCrgSOAH8H8KqggYpAUAAAAAElFTkSuQmCC'; + + var texture = new THREE.Texture();texture.name = 'tttt5'; + texture.image = image; + texture.needsUpdate = true; + texture.minFilter = THREE.LinearMipMapLinearFilter; + texture.magFilter = THREE.LinearFilter; + // texture.anisotropic + // texture.generateMipmaps = false; + + var material = new THREE.MeshBasicMaterial({ + // color: 0xff0000, + side: THREE.DoubleSide, + transparent: true, + map: texture + }); + material.alphaTest = 0.2; + + return function () { + var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.4; + + //const h = 0.4; + var geo = new THREE.PlaneGeometry(image.width / 1000 * h, image.height / 1000 * h, 1, 1); + geo.translate(0.025 * h / 0.4, 0, 0); + return new THREE.Mesh(geo, material); + }; +}(); + +},{}],10:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createImageButton; + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +var _utils = require('./utils'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createImageButton() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + object = _ref.object, + _ref$propertyName = _ref.propertyName, + propertyName = _ref$propertyName === undefined ? 'undefined' : _ref$propertyName, + _ref$func = _ref.func, + func = _ref$func === undefined ? undefined : _ref$func, + _ref$pressing = _ref.pressing, + pressing = _ref$pressing === undefined ? undefined : _ref$pressing, + _ref$image = _ref.image, + image = _ref$image === undefined ? "textures/spotlight.jpg" : _ref$image, + _ref$wide = _ref.wide, + wide = _ref$wide === undefined ? false : _ref$wide, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + height = _ref.height, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth, + _ref$changeColorOnHov = _ref.changeColorOnHover, + changeColorOnHover = _ref$changeColorOnHov === undefined ? true : _ref$changeColorOnHov, + _ref$buttonDepth = _ref.buttonDepth, + buttonDepth = _ref$buttonDepth === undefined ? Layout.BUTTON_DEPTH : _ref$buttonDepth; + + function applyImageToMaterial(image, targetMaterial) { + if (typeof image === "string") { + //TODO cache. Does TextureLoader already cache? + new THREE.TextureLoader().load(image, function (texture) { + texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping; + targetMaterial.map = texture; + targetMaterial.needsUpdate = true; + }); + } else if (image.isTexture) { + targetMaterial.map = image; + } else if (image.isWebGLRenderTarget) { + targetMaterial.map = image.texture; + } else throw "not sure how to interpret image " + image; + targetMaterial.needsUpdate = true; + } + + //XXX magic numbers... + if (!height) height = Layout.PANEL_WIDTH * (wide ? 0.94 : 0.25); + + var BUTTON_WIDTH = width * (wide ? 0.94 : 0.25) - Layout.PANEL_MARGIN; + var BUTTON_HEIGHT = height - Layout.PANEL_MARGIN; + var BUTTON_DEPTH = buttonDepth; + + var group = new THREE.Group(); + group.guiType = "imagebutton"; + group.toString = function () { + return '[' + group.guiType + ': ' + propertyName + ']'; + }; + group.spacing = height; + + var panel = Layout.createPanel(width, height, depth); + group.add(panel); + + // base checkbox + var rect = new THREE.PlaneGeometry(BUTTON_WIDTH, BUTTON_HEIGHT, 1, 1); + rect.translate(BUTTON_WIDTH * 0.5, 0, BUTTON_DEPTH); + + // hitscan volume + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = false; + + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + hitscanVolume.position.z = BUTTON_DEPTH; + if (!wide) hitscanVolume.position.x = width * 0.5;else { + hitscanVolume.position.x = Layout.PANEL_LABEL_TEXT_MARGIN * 0.75; + hitscanVolume.position.y = 0.01; //XXX magic number + } + + var material; + if (image.isMaterial) { + material = image; + } else { + material = new THREE.MeshBasicMaterial(); + material.transparent = true; + applyImageToMaterial(image, material); + } + var filledVolume = new THREE.Mesh(rect.clone(), material); + hitscanVolume.add(filledVolume); + + //button label removed; might want options like a hover label in future. + + var descriptorLabel = textCreator.create(propertyName); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN; + descriptorLabel.position.z = depth; + descriptorLabel.position.y = -0.03; + if (wide) descriptorLabel.visible = false; + + var controllerID = Layout.createControllerIDBox(height, Colors.CONTROLLER_ID_BUTTON); + controllerID.position.z = depth; + + panel.add(descriptorLabel, hitscanVolume, controllerID); + + var interaction = (0, _interaction2.default)(hitscanVolume); + //TODO: drag and hover + interaction.events.on('hovering', handleHover); + interaction.events.on('onPressed', handleOnPress); + interaction.events.on('pressing', handlePressing); + interaction.events.on('onReleased', handleOnRelease); + + updateView(); + + var hoverFunc = undefined; + // I might yet decide to change this interface. + // might use a different name, might want to add listeners to event + // rather than just set callback function. + group.onHover = function (f) { + hoverFunc = f; + return group; + }; + group.onPressing = function (f) { + pressing = f; + return group; + }; + function handleHover(p) { + if (!(0, _utils.isControllerVisible)(group)) { + return; + } + + p.localPoint = getNormalisedLocalCoordinates(p.point); + if (hoverFunc) hoverFunc(p); + } + + function handleOnPress(p) { + //it should be that the checks in index.js mean that methods don't get called on invisible + //objects, rendering these tests redundant... however, that doesn't appear to be the case. + //experienced some bugs particularly with 'modal editor' type panels. + //TODO: either make sure invisible objects aren't called in the first place, + //or make sure all types of object do this more thorough visibility check... + if (!(0, _utils.isControllerVisible)(group)) { + return; + } + + p.localPoint = getNormalisedLocalCoordinates(p.point); + if (object) object[propertyName](p); + if (func) func(p); + + hitscanVolume.position.z = BUTTON_DEPTH * 0.1; + + p.locked = true; + } + + //compute x & y as normalised coordinates from p.point + //could consider moving this computation into interaction.js performStateEvents() + function getNormalisedLocalCoordinates(point) { + var p = hitscanVolume.worldToLocal(point); + p.x /= BUTTON_WIDTH; + p.y /= BUTTON_HEIGHT; + p.y += 0.5; + p.x = Math.max(Math.min(p.x, 1), 0); + p.y = Math.max(Math.min(p.y, 1), 0); + return p; + } + + function handlePressing(p) { + if (!(0, _utils.isControllerVisible)(group)) { + return; + } + + p.localPoint = getNormalisedLocalCoordinates(p.point); + //console.log(`pressing at (${point.x}, ${point.y})`); //first instance of 'pressing' is always at (1, 1) + //nb, likely to need a different strategy for dual wielding + if (pressing) pressing(p); + } + + function handleOnRelease() { + hitscanVolume.position.z = BUTTON_DEPTH * 0.5; + } + + function updateView() { + if (!material.color) return; + if (interaction.hovering()) { + if (changeColorOnHover) material.color.setHex(0xFFFFFF); + } else { + if (changeColorOnHover) material.color.setHex(0xCCCCCC); + } + } + + group.interaction = interaction; + group.hitscan = [hitscanVolume, panel]; + + var grabInteraction = Grab.create({ group: group, panel: panel }); + + group.updateControl = function (inputObjects) { + interaction.update(inputObjects); + grabInteraction.update(inputObjects); + updateView(); + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + return group; +} /** + * Big button with an image on (which might come from a file or existing texture, + * the texture might be from a RenderTarget...). + * + * Also usable as an 'xy controller' via addXYController method. + * + * API subject to change. + * + * I'd put this more separate from the datgui modules but need to think a little + * bit about how to structure that etc. Very un-DRY, but I'm starting by just + * copying existing button.js in its entirety. + * + * TODO: not just simple 'bang' function but callbacks for hover / etc. + * + * + * Copyright Data Arts Team, Google inc. 2016 / Peter Todd, 2017 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15,"./utils":23}],11:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createImageButtonGrid; + +var _textlabel = require('./textlabel'); + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +var _utils = require('./utils'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createImageButtonGrid() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + objects = _ref.objects, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + rowHeight = _ref.rowHeight, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth, + _ref$columns = _ref.columns, + columns = _ref$columns === undefined ? 4 : _ref$columns; + + function applyImageToMaterial(image, targetMaterial) { + if (typeof image === "string") { + //TODO cache. Does TextureLoader already cache? + new THREE.TextureLoader().load(image, function (texture) { + texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping; + targetMaterial.map = texture; + targetMaterial.needsUpdate = true; + }); + } else if (image.isTexture) { + targetMaterial.map = image; + } else if (image.isWebGLRenderTarget) { + targetMaterial.map = image.texture; + } else throw "not sure how to interpret image " + image; + targetMaterial.needsUpdate = true; + } + + var margin = Layout.PANEL_MARGIN * 3; + var BUTTON_WIDTH = (width - margin) * (1 / columns); + //TODO: add setRowHeight method + var BUTTON_HEIGHT = rowHeight > 0 ? rowHeight : BUTTON_WIDTH; + var BUTTON_DEPTH = Layout.BUTTON_DEPTH; + + var group = new THREE.Group(); + group.guiType = "imagebuttongrid"; + group.toString = function () { + return '[' + group.guiType + ': ' + objects + ']'; + }; + + var rows = Math.ceil(objects.length / columns); + var height = Layout.PANEL_MARGIN + BUTTON_HEIGHT * rows; + group.spacing = height; + + group.setRowHeight = function (h) { + rowHeight = BUTTON_HEIGHT = h; + height = Layout.PANEL_MARGIN + BUTTON_HEIGHT * rows; + group.spacing = height; + layoutButtons(); + return group; + }; + + var highlightLastPressed = false; + var lastPressed = null; + var lastPressedCol = void 0; + group.highlightLastPressed = function () { + var col = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0x3355EE; + + highlightLastPressed = col !== false; + lastPressedCol = col; + return group; + }; + + var panel = void 0, + grabInteraction = void 0, + buttons = []; + + layoutButtons(); + + function initPanel() { + if (panel) group.remove(panel); + panel = Layout.createPanel(width, height, depth); + group.add(panel); + + var controllerID = Layout.createControllerIDBox(height, Colors.CONTROLLER_ID_BUTTON); + controllerID.position.z = depth; + panel.add(controllerID); + + grabInteraction = Grab.create({ group: group, panel: panel }); + + buttons.forEach(function (b) { + return group.remove(b); + }); + buttons = []; + group.guiChildren = buttons; + } + + function layoutButtons() { + initPanel(); + //TODO: padding + var buttonWPadded = BUTTON_WIDTH * 0.99, + buttonHPadded = BUTTON_HEIGHT * 0.99; + var rect = new THREE.PlaneGeometry(buttonWPadded, buttonHPadded, 1, 1); + rect.translate(buttonWPadded / 2, -buttonHPadded / 2, BUTTON_DEPTH); + + var i = 0; + + //TODO: toggles rather than triggers... + objects.forEach(function (obj, i) { + if (!obj.image && !obj.text) { + return; + } + var subgroup = new THREE.Group(); //note: reducing nesting could improve performance. + subgroup.guiType = "imageButtonGridElement"; + group.add(subgroup); + buttons.push(subgroup); + + var col = i % columns; + var row = Math.floor(i / columns); + + subgroup.position.x = 2 * Layout.PANEL_MARGIN + BUTTON_WIDTH * col; + subgroup.position.y = height / 2 - BUTTON_HEIGHT * row; + subgroup.position.z = BUTTON_DEPTH; + + // hitscan volume. + // This material could probably be reused. + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = false; + + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + + var material = new THREE.MeshBasicMaterial(); + material.transparent = true; + if (obj.image) applyImageToMaterial(obj.image, material); + if (obj.text) { + var text = textCreator.create(obj.text); + var _margin = 2 * Layout.GRID_BUTTON_MARGIN; + var h = Layout.TEXT_SCALE * text.layout.height; + var w = text.computeWidth(); + if (w > BUTTON_WIDTH - _margin) { + text.constrainBounds(BUTTON_WIDTH - _margin, BUTTON_HEIGHT - _margin); //<-- + h = Layout.TEXT_SCALE * text.layout.height; + w = text.computeWidth(); + } + subgroup.add(text); + subgroup.text = text; + text.position.x = obj.textX || 0.5 * (BUTTON_WIDTH - w); + text.position.y = obj.textY || -0.5 * BUTTON_HEIGHT - h; + text.position.z = BUTTON_DEPTH * 1.2; + } + var filledVolume = new THREE.Mesh(rect.clone(), material); + hitscanVolume.add(filledVolume); + + //button label & descriptor label removed. + //Tooltip text option added. Might want to be able to pass in richer things... + //maybe an arbitrary THREE object would work well... + if (obj.tip) { + var tipText = (0, _textlabel.createToolTip)(textCreator, obj.tip, BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_DEPTH); + + //subgroup.add(tipText); + subgroup.tipText = tipText; + } + + //panel.add( descriptorLabel, hitscanVolume, controllerID ); + subgroup.add(hitscanVolume); + panel.add(subgroup); + + var interaction = (0, _interaction2.default)(hitscanVolume); + interaction.events.on('onPressed', handleOnPress); + interaction.events.on('onReleased', handleOnRelease); + + function handleOnPress(p) { + if (subgroup.visible === false) { + return; + } + + p.locked = true; + //TODO: standardise handling of exceptions in callbacks + try { + obj.func(); + } catch (e) { + obj.error = e || 'undefined exception'; + return; + } + lastPressed = obj; + subgroup.position.z = BUTTON_DEPTH * 0.4; + } + + function handleOnRelease() { + subgroup.position.z = BUTTON_DEPTH; + if (obj.release) obj.release(); + } + //quick color hack... + obj.hoverCol = obj.text ? 0x888 : 0xFFFFFF; + obj.noHoverCol = obj.text ? 0x111 : 0xCCCCCC; + subgroup.updateView = function () { + if (highlightLastPressed && lastPressed === obj) { + material.color.setHex(lastPressedCol); + } else material.color.setHex(interaction.hovering() ? obj.hoverCol : obj.noHoverCol); + if (subgroup.tipText) (0, _utils.setVisibility)(subgroup, subgroup.tipText, interaction.hovering()); + if (obj.error) material.color.setHex(0xAA3333); + }; + + subgroup.updateView(); + + subgroup.interaction = interaction; + subgroup.hitscan = hitscanVolume; //XXX: making this single element rather than array, + //that means these 'subgroup' buttons aren't acting exactly as normal dat.GUIVR controllers + }); + + group.hitscan = buttons.map(function (b) { + return b.hitscan; + }); //.push(panel); + group.hitscan.push(panel); + } + + function updateView() { + buttons.forEach(function (b) { + return b.updateView(); + }); + } + + group.updateControl = function (inputObjects) { + buttons.forEach(function (b) { + b.interaction.update(inputObjects); + }); + //interaction.update( inputObjects ); + grabInteraction.update(inputObjects); + updateView(); + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + return group; +} /** + * Grid of buttons with images on (which might come from a file or existing texture, + * the texture might be from a RenderTarget...). + * + * I'd put this more separate from the datgui modules but need to think a little + * bit about how to structure that etc. Very un-DRY, but I'm starting by just + * copying existing imagebutton.js in its entirety. + * + * TODO: not just simple 'bang' function but callbacks for hover / etc. + * + * + * Copyright Data Arts Team, Google inc. 2016 / Peter Todd, 2017 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15,"./sharedmaterials":19,"./textlabel":22,"./utils":23}],12:[function(require,module,exports){ +'use strict'; + +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; }; + +var _events = require('events'); + +var _events2 = _interopRequireDefault(_events); + +var _slider = require('./slider'); + +var _slider2 = _interopRequireDefault(_slider); + +var _checkbox = require('./checkbox'); + +var _checkbox2 = _interopRequireDefault(_checkbox); + +var _button = require('./button'); + +var _button2 = _interopRequireDefault(_button); + +var _folder = require('./folder'); + +var _folder2 = _interopRequireDefault(_folder); + +var _dropdown = require('./dropdown'); + +var _dropdown2 = _interopRequireDefault(_dropdown); + +var _imagebutton = require('./imagebutton'); + +var _imagebutton2 = _interopRequireDefault(_imagebutton); + +var _imagebuttongrid = require('./imagebuttongrid'); + +var _imagebuttongrid2 = _interopRequireDefault(_imagebuttongrid); + +var _keyboard = require('./keyboard'); + +var _keyboard2 = _interopRequireDefault(_keyboard); + +var _textbox = require('./textbox'); + +var _textbox2 = _interopRequireDefault(_textbox); + +var _colorpicker = require('./colorpicker'); + +var _colorpicker2 = _interopRequireDefault(_colorpicker); + +var _sdftext = require('./sdftext'); + +var SDFText = _interopRequireWildcard(_sdftext); + +var _utils = require('./utils'); + +var _interaction = require('./interaction'); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//PJT: I'd rather inject custom extensions like this, but will work that out later. + + +var GUIVR = function DATGUIVR() { + + /* + SDF font + */ + var textCreator = SDFText.creator(); + + /* + Lists. + InputObjects are things like VIVE controllers, cardboard headsets, etc. + Controllers are the DAT GUI sliders, checkboxes, etc. + */ + var inputObjects = []; + var controllers = []; + + /* + Functions for determining whether a given controller is visible (by which we + mean not hidden, not 'visible' in terms of the camera orientation etc), and + for retrieving the list of visible hitscanObjects dynamically. + This might benefit from some caching especially in cases with large complex GUIs. + I haven't measured the impact of garbage collection etc. + */ + function getVisibleControllers() { + // not terribly efficient + return controllers.filter(_utils.isControllerVisible); + } + function getVisibleHitscanObjects() { + //XXX WARNING::: + //there could exist situations in which members of hitscan for a visible controller are not themselves visible. + //this can happen for eg if the 'visible' property of the particular hitscan is in an invisible modal editor. + //we could check that, adding a more robust filter to each hitscan array... for now, it is the responsibility of + //controllers to either only return hitscan objects that are currently active, or to set 'visible' explicitly. + var tmp = getVisibleControllers().map(function (o) { + return o.hitscan.filter(function (h) { + return h.visible; + }); + }); + return tmp.reduce(function (a, b) { + return a.concat(b); + }, []); + } + + var mouseEnabled = false; + var mouseRenderer = undefined; + var onOrthoMouseRelease = undefined; //keep track so that we don't attach multiple events (particularly when resizing window) + + var autoUpdate = true; + + function enableMouse(camera, renderer) { + mouseEnabled = true; + mouseRenderer = renderer; + mouseInput.mouseCamera = camera; + if (camera.isOrthographicCamera) { + if (!onOrthoMouseRelease) { + onOrthoMouseRelease = function onOrthoMouseRelease(f) { + return f.fixFolderPosition(); + }; + mouseInput.events.on('grabReleased', onOrthoMouseRelease); + } + } else { + if (onOrthoMouseRelease) { + mouseInput.events.removeListener('grabReleased', onOrthoMouseRelease); + onOrthoMouseRelease = undefined; + } + } + return mouseInput.laser; + } + + function disableMouse() { + mouseEnabled = false; + if (onOrthoMouseRelease) { + mouseInput.events.removeListener('grabReleased', onOrthoMouseRelease); + onOrthoMouseRelease = undefined; + } + } + + /* + The default laser pointer coming out of each InputObject. + */ + var laserMaterial = new THREE.LineBasicMaterial({ color: 0x55aaff, transparent: true, blending: THREE.AdditiveBlending }); + function createLaser() { + var g = new THREE.BufferGeometry(); + g.setAttribute('position', new THREE.BufferAttribute(new Float32Array([0, 0, 0, 0, 0, 0]))); + return new THREE.Line(g, laserMaterial); + } + + /* + A "cursor", eg the ball that appears at the end of your laser. + */ + var cursorMaterial = new THREE.MeshBasicMaterial({ color: 0x444444, transparent: true, blending: THREE.AdditiveBlending }); + function createCursor() { + return new THREE.Mesh(new THREE.SphereGeometry(0.006, 4, 4), cursorMaterial); + } + + /* + Creates a generic Input type. + Takes any THREE.Object3D type object and uses its position + and orientation as an input device. + A laser pointer is included and will be updated. + Contains state about which Interaction is currently being used or hover. + */ + function createInput() { + var inputObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new THREE.Group(); + + var input = { + raycast: new THREE.Raycaster(new THREE.Vector3(), new THREE.Vector3()), + laser: createLaser(), + cursor: createCursor(), + object: inputObject, + pressed: false, + gripped: false, + events: new _events2.default(), + interaction: { + grip: undefined, + press: undefined, + hover: undefined + } + }; + + input.laser.add(input.cursor); + + return input; + } + + /* + MouseInput. + Allows you to click on the screen when not in VR for debugging. + */ + var mouseInput = createMouseInput(); + + function createMouseInput() { + var mouse = new THREE.Vector2(-1, -1); + + var input = createInput(); + input.mouse = mouse; + input.mouseIntersection = new THREE.Vector3(); + input.mouseOffset = new THREE.Vector3(); + input.mousePlane = new THREE.Plane(); + input.intersections = []; + + // set my enableMouse + input.mouseCamera = undefined; + + window.addEventListener('mousemove', function (event) { + if (!event.buttons) input.pressed = false; // reduce interaction between makeDraggable drag and this drag + + // if a specific renderer has been defined + if (mouseRenderer) { + var clientRect = mouseRenderer.domElement.getBoundingClientRect(); + mouse.x = (event.clientX - clientRect.left) / clientRect.width * 2 - 1; + mouse.y = -((event.clientY - clientRect.top) / clientRect.height) * 2 + 1; + } + // default to fullscreen + else { + mouse.x = event.clientX / window.innerWidth * 2 - 1; + mouse.y = -(event.clientY / window.innerHeight) * 2 + 1; + } + }, false); + + window.addEventListener('mousedown', function (event) { + if (input.intersections.length > 0) { + // prevent mouse down from triggering other listeners (polyfill, etc) + // commented out 28 April 2022, generally pretty bad practice + // event.stopImmediatePropagation(); + } + input.pressed = true; //sometimes we care about the mouse being pressed, even on background + //will be set false at end of first update. Shouldn't be necessary to add a new property... + //onPressed should be adequate. + input.clicked = true; + }, true); + + window.addEventListener('mouseup', function (event) { + input.pressed = false; + }, false); + + return input; + } + + /* + Public function users run to give DAT GUI an input device. + Automatically detects for ViveController and binds buttons + haptic feedback. + Returns a laser pointer so it can be directly added to scene. + The laser will then have two methods: + laser.pressed(), laser.gripped() + These can then be bound to any button the user wants. Useful for binding to + cardboard or alternate input devices. + For example... + document.addEventListener( 'mousedown', function(){ laser.pressed( true ); } ); + */ + function addInputObject(object) { + var input = createInput(object); + + input.laser.pressed = function (flag) { + var hits = input.intersections; + // only pay attention to presses over the GUI + if (flag && hits && hits.length > 0) { + input.pressed = true; + input.clicked = true; + } else { + input.pressed = false; + } + }; + + input.laser.gripped = function (flag) { + input.gripped = flag; + }; + + input.laser.cursor = input.cursor; + + if (THREE.ViveController && object instanceof THREE.ViveController) { + bindViveController(input, object, input.laser.pressed, input.laser.gripped); + } + + inputObjects.push(input); + + return input.laser; + } + + /* + Here are the main dat gui controller types. + */ + + function addSlider(object, propertyName) { + var min = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.0; + var max = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 100.0; + + var slider = (0, _slider2.default)({ + textCreator: textCreator, propertyName: propertyName, object: object, min: min, max: max, + initialValue: object[propertyName] + }); + + controllers.push(slider); + + return slider; + } + + function addCheckbox(object, propertyName) { + var checkbox = (0, _checkbox2.default)({ + textCreator: textCreator, propertyName: propertyName, object: object, + initialValue: object[propertyName] + }); + + controllers.push(checkbox); + + return checkbox; + } + + function addButton(object, propertyName) { + var button = (0, _button2.default)({ + textCreator: textCreator, propertyName: propertyName, object: object + }); + + controllers.push(button); + return button; + } + + /** + * + * @param {function} func to call back when button pressed + * @param {*} image can be filename, WebGLRenderTarget or Material + * @param {Boolean} wide whether to make button fill entire width of panel (api subject to change) + */ + function addImageButton(func, image, wide, height) { + var object = { f: func }; + var propertyName = 'f'; + + //see also folder.js where this is added to group object... + //as such this function also needs to be passed as an argument to createFolder. + //perhaps all of these 'addX' functions could be initially put onto an object so that + //new additions could be added slightly more easily. + var button = (0, _imagebutton2.default)({ + textCreator: textCreator, object: object, propertyName: propertyName, image: image, wide: wide, height: height + }); + controllers.push(button); + return button; + } + + function addXYController(pressing, image, wide, height) { + var propertyName = ''; + var button = (0, _imagebutton2.default)({ + textCreator: textCreator, pressing: pressing, propertyName: propertyName, image: image, wide: wide, height: height + }); + controllers.push(button); + return button; + } + + /* + This interface may be subject to change. Arguments are objects describing buttons + First object may be an integer for the number of columns to use. + */ + function addImageButtonPanel(cols) { + var columns = Number.isInteger(cols) ? cols : 4; + + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var objects = args; + if (!Number.isInteger(cols)) objects.unshift(cols); + var grid = (0, _imagebuttongrid2.default)({ textCreator: textCreator, objects: objects, columns: columns }); + controllers.push(grid); + return grid; + } + + function addKeyboard(keyListener) { + if (!keyListener) keyListener = function keyListener(k) { + return console.log('keyDown ' + k); + }; + var kb = (0, _keyboard2.default)({ keyListener: keyListener, textCreator: textCreator }); + controllers.push(kb); + return kb; + } + + function addTextbox(object, propertyName) { + var box = (0, _textbox2.default)({ textCreator: textCreator, object: object, propertyName: propertyName }); + controllers.push(box); + return box; + } + + function addColorPicker(object, propertyName) { + var box = (0, _colorpicker2.default)({ textCreator: textCreator, object: object, propertyName: propertyName }); + controllers.push(box); + return box; + } + + function addDropdown(object, propertyName, options) { + var dropdown = (0, _dropdown2.default)({ + textCreator: textCreator, propertyName: propertyName, object: object, options: options + }); + + controllers.push(dropdown); + return dropdown; + } + + /* + An implicit Add function which detects for property type + and gives you the correct controller. + Dropdown: + add( object, propertyName, objectType ) + Slider: + add( object, propertyOfNumberType, min, max ) + Checkbox: + add( object, propertyOfBooleanType ) + Button: + add( object, propertyOfFunctionType ) + Not used directly. Used by folders. + */ + + function add(object, propertyName, arg3, arg4) { + + if (object === undefined) { + return undefined; + } else if (object.isFolder) return object; + + if (object[propertyName] === undefined) { + console.warn('no property named', propertyName, 'on object', object); + return new THREE.Group(); + } + + if (isObject(arg3) || isArray(arg3)) { + return addDropdown(object, propertyName, arg3); + } + + if (isNumber(object[propertyName])) { + return addSlider(object, propertyName, arg3, arg4); + } + + if (isBoolean(object[propertyName])) { + return addCheckbox(object, propertyName); + } + + if (isFunction(object[propertyName])) { + return addButton(object, propertyName); + } + + if (isString(object[propertyName])) { + return addTextbox(object, propertyName); + } + + if (isColor(object[propertyName])) { + return addColorPicker(object, propertyName); + } + + // add couldn't figure it out, pass it back to folder + return undefined; + } + + function addSimpleSlider() { + var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + + var proxy = { + number: min + }; + + return addSlider(proxy, 'number', min, max); + } + + function addSimpleDropdown() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + var proxy = { + option: '' + }; + + if (options !== undefined) { + proxy.option = isArray(options) ? options[0] : options[Object.keys(options)[0]]; + } + + return addDropdown(proxy, 'option', options); + } + + function addSimpleCheckbox() { + var defaultOption = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + var proxy = { + checked: defaultOption + }; + + return addCheckbox(proxy, 'checked'); + } + + function addSimpleButton(fn) { + var proxy = { + button: fn !== undefined ? fn : function () {} + }; + + return addButton(proxy, 'button'); + } + + /* + Not used directly; used by folders. + Remove controllers from the global list of all controllers known to dat.GUIVR. + Calls removeTest first to check input arguments. returns false if this test fails. + returns true if successful. + Note that this function does not recursively remove elements from folders; that is dealt with in the folder code which calls this. + + */ + function remove() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var argSet = [].concat(_toConsumableArray(new Set(args))); //just in case there were repeated elements in args, turn into Set then back to array. + if (!removeTest.apply(undefined, _toConsumableArray(argSet))) return false; + argSet.forEach(function (obj) { + var i = controllers.indexOf(obj); + if (i > -1) controllers.splice(i, 1);else { + // I can't see how this'd happen now we guard against repeated elements. + console.log("Internal error in remove, not anticipated by removeTest. Internal dat.GUIVR state may be inconsistent."); + return false; + } + }); + return true; + } + + /* + Verify that all of the items in provided arguments are existing controllers that should be ok to remove. + Returns false if there are any mismatches, true if believed ok to continue with actual remove() + If any of the provided args are folders (have isFolder property) this is called recursively. + This will result in redundant work as each folder will also call it again as it's removed, but this is cheap + and it means that any error should be caught as early as possible and the whole process aborted. + */ + function removeTest() { + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + for (var i = 0; i < args.length; i++) { + var obj = args[i]; + if (controllers.indexOf(obj) === -1 || !obj.folder.hasChild(obj)) { + //TODO: toString implementations for controllers + console.log("Can't remove controller " + obj); //not sure the preferred way of reporting problem to user. + return false; + } + if (obj.isFolder) { + if (!removeTest.apply(undefined, _toConsumableArray(obj.guiChildren))) return false; + } + } + return true; + } + + /** + * Completely remove all GUI elements from the system globally, + * including removing any objects from the scene hierarchy. + */ + function clearAll() { + controllers.forEach(function (c) { + c.visible = false;if (c.parent && !c.parent.guiChildren) c.parent.remove(c); + }); + controllers.splice(0, controllers.length); + } + + /* + Creates a folder with the name. + Folders are THREE.Group type objects and can do group.add() for siblings. + Folders will automatically attempt to lay its children out in sequence. + Folders are given the add() functionality so that they can do + folder.add( ... ) to create controllers. + */ + + function create(name) { + var folder = (0, _folder2.default)({ + textCreator: textCreator, + name: name, + guiAdd: add, + guiRemove: remove, + addControllerFuncs: { + addSlider: addSimpleSlider, + addDropdown: addSimpleDropdown, + addCheckbox: addSimpleCheckbox, + addButton: addSimpleButton, + addImageButton: addImageButton, + addXYController: addXYController, + addImageButtonPanel: addImageButtonPanel, + addKeyboard: addKeyboard, + addTextbox: addTextbox + }, + globalControllers: controllers, + //??? + addHeaderFuncs: {} + }); + + controllers.push(folder); + + return folder; + } + + /* + Perform the necessary updates, raycasts on its own RAF. + */ + + var tPosition = new THREE.Vector3(); + var tDirection = new THREE.Vector3(0, 0, -1); + var tMatrix = new THREE.Matrix4(); + + function update() { + var isOrthographic = mouseEnabled && mouseInput.mouseCamera.isOrthographicCamera; + if (autoUpdate) requestAnimationFrame(update); + + var hitscanObjects = getVisibleHitscanObjects(); + var controllers = getVisibleControllers(); + var folders = controllers.filter(function (c) { + return c.folder === c; + }); //all top-level folders + folders.forEach(function (f) { + f.userData.isOrthographic = isOrthographic ? mouseInput.mouseCamera : false; + if (f.modalWasSetInCurrentFrame) { + f.requestLayout(); + f.modalWasSetInCurrentFrame = false; // protect any newly-displayed modalEditor from being cleared + } + if (f.userData.layoutPending) f.performLayout(); + }); + + if (mouseEnabled) { + //TODO: lock mouse on hover?? + mouseInput.intersections = performMouseInput(hitscanObjects, mouseInput); + } + + inputObjects.forEach(function () { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + box = _ref.box, + object = _ref.object, + raycast = _ref.raycast, + laser = _ref.laser, + cursor = _ref.cursor, + interaction = _ref.interaction; + + var index = arguments[1]; + + checkCancelledInteractions(interaction, hitscanObjects); + object.updateMatrixWorld(); + + tPosition.set(0, 0, 0).setFromMatrixPosition(object.matrixWorld); + tMatrix.identity().extractRotation(object.matrixWorld); + + tDirection.set(0, 0, -1); + //altering direction e.g. to point in direction of extended trigger finger, rather than 'main axis' of Vive controller... + //maybe this should be in userData. + if (object.laserRotateModifier) tDirection.applyQuaternion(object.laserRotateModifier); + tDirection.applyMatrix4(tMatrix).normalize(); + + raycast.set(tPosition, tDirection); + + // laser.geometry.vert ices[ 0 ].copy( tPosition ); + var a = laser.geometry.getAttribute('position').array; + a[0] = tPosition.x;a[1] = tPosition.y;a[2] = tPosition.z; + + // debug... + // laser.geometry.vert ices[ 1 ].copy( tPosition ).add( tDirection.multiplyScalar( 1 ) ); + + var intersections = raycast.intersectObjects(hitscanObjects, false); + parseIntersections(intersections, laser, cursor); + + inputObjects[index].intersections = intersections; + //want to add info (hit disctance) to object for use outside... just adding entirety of intersections in case useful + if (object.userData) object.userData.guiIntersections = intersections; + }); + + var inputs = inputObjects.slice(); + + if (mouseEnabled) { + inputs.push(mouseInput); + } + + controllers.forEach(function (c) { + return c.updateControl(inputs); + }); + //now check if any press on any input hit any non'modal editor'... if so, we'll remove modals from all folders + //(this isn't perfect; if you are actively interacting with something and press other button somewhere else, it'll remove your object) + var hitNonModals = inputs.filter(function (input) { + return input.hitNonModal; + }); + if (hitNonModals.length != 0) { + hitNonModals.forEach(function (h) { + return h.hitNonModal = false; + }); //remove flags so they don't persist to subsequent updates + folders.forEach(function (f) { + return f.clearModalEditor(); + }); //this function is designed to not hide items newly displayed in this frame + } + mouseInput.clicked = false; + inputObjects.forEach(function (o) { + return o.clicked = false; + }); + return mouseInput.intersections; //sjpt wanted this + } + + //if any input.interactions have hitVolume that corresponds to something not currently in hitscanObjects, + //that interaction should be cancelled. Especially problematic with e.g. pressing 'reattach' when the parent is closed. + function checkCancelledInteractions(interactions, hitscanObjects) { + ['press', 'grip', 'hover'].forEach(function (interactionName) { + var interaction = interactions[interactionName]; + if (interaction && hitscanObjects.indexOf(interaction.hitVolume) < 0) { + interactions[interactionName] = undefined; + //only be polite to inform the interaction as well; update with empty inputObjects arg should do the trick. + interaction.update([]); + } + }); + } + + function updateLaser(laser, point) { + var pp = laser.geometry.getAttribute('position').array; + pp[3] = point.x; + pp[4] = point.y; + pp[5] = point.z; + pp.needsUpdate = true; + //laser.geometry.vert ices[ 1 ].copy( point ); + laser.visible = true; + laser.geometry.computeBoundingSphere(); + laser.geometry.computeBoundingBox(); + //laser.geometry.verticesNeedUpdate = true; + } + + function parseIntersections(intersections, laser, cursor) { + if (intersections.length > 0) { + var firstHit = intersections[0]; + updateLaser(laser, firstHit.point); + cursor.position.copy(firstHit.point); + cursor.visible = true; + cursor.updateMatrixWorld(); + } else { + laser.visible = false; + cursor.visible = false; + } + } + + function parseMouseIntersection(intersection, laser, cursor) { + cursor.position.copy(intersection); + updateLaser(laser, cursor.position); + } + + function performMouseIntersection(raycast, mouse, camera) { + raycast.setFromCamera(mouse, camera); + var hitscanObjects = getVisibleHitscanObjects(); + return raycast.intersectObjects(hitscanObjects, false); + } + + function mouseIntersectsPlane(raycast, v, plane) { + return raycast.ray.intersectPlane(plane, v); + } + + function performMouseInput(hitscanObjects) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + box = _ref2.box, + object = _ref2.object, + raycast = _ref2.raycast, + laser = _ref2.laser, + cursor = _ref2.cursor, + mouse = _ref2.mouse, + mouseCamera = _ref2.mouseCamera, + interaction = _ref2.interaction; + + checkCancelledInteractions(interaction, hitscanObjects); + var intersections = []; + + if (mouseCamera) { + intersections = performMouseIntersection(raycast, mouse, mouseCamera); + parseIntersections(intersections, laser, cursor); + cursor.visible = true; + laser.visible = true; + } + + return intersections; + } + + update(); + + /* + Public methods. + */ + + var publicInterface = { + create: create, + addInputObject: addInputObject, + enableMouse: enableMouse, + disableMouse: disableMouse, + textCreator: textCreator, //cheap way of exposing this so it can be used by host application. + globalEvents: _interaction.globalEvents, + clearAll: clearAll, + update: update + }; + // allow user to call "dat.GUIVR.autoUpdate = false" and then update manually with + // "dat.GUIVR.update()" + // expose autoUpdate as property so that the reference will be properly effected + Object.defineProperty(publicInterface, 'autoUpdate', { get: function get() { + return autoUpdate; + }, set: function set(v) { + return autoUpdate = v; + } }); + return publicInterface; +}(); + +if (window) { + if (window.dat === undefined) { + window.dat = {}; + } + + window.dat.GUIVR = GUIVR; +} + +if (module) { + module.exports = { + dat: GUIVR + }; +} + +if (typeof define === 'function' && define.amd) { + define([], GUIVR); +} + +/* + Bunch of state-less utility functions. +*/ + +function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} + +function isBoolean(n) { + return typeof n === 'boolean'; +} + +function isFunction(functionToCheck) { + var getType = {}; + return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; +} + +// only {} objects not arrays +// which are technically objects but you're just being pedantic +function isObject(item) { + return (typeof item === 'undefined' ? 'undefined' : _typeof(item)) === 'object' && !Array.isArray(item) && item !== null; +} + +function isArray(o) { + return Array.isArray(o); +} + +function isString(o) { + return typeof o === 'string'; +} + +function isColor(o) { + if ((typeof o === 'undefined' ? 'undefined' : _typeof(o)) !== 'object') return false; + return o.isColor ? true : false; +} + +/* + Controller-specific support. +*/ + +function bindViveController(input, controller, pressed, gripped) { + controller.addEventListener('triggerdown', function () { + return pressed(true); + }); + controller.addEventListener('triggerup', function () { + return pressed(false); + }); + controller.addEventListener('gripsdown', function () { + return gripped(true); + }); + controller.addEventListener('gripsup', function () { + return gripped(false); + }); + + var gamepad = controller.getGamepad(); + function vibrate(t, a) { + if (gamepad && gamepad.hapticActuators && gamepad.hapticActuators.length > 0) { + gamepad.hapticActuators[0].pulse(t, a); + } + } + + function hapticsTap() { + setIntervalTimes(function (x, t, a) { + return vibrate(1 - a, 0.5); + }, 10, 20); + } + + function hapticsEcho() { + setIntervalTimes(function (x, t, a) { + return vibrate(4, 1.0 * (1 - a)); + }, 100, 4); + } + + input.events.on('onControllerHeld', function (input) { + vibrate(0.3, 0.3); + }); + + input.events.on('grabbed', function () { + hapticsTap(); + }); + + input.events.on('grabReleased', function () { + hapticsEcho(); + }); + + input.events.on('pinned', function () { + hapticsTap(); + }); + + input.events.on('pinReleased', function () { + hapticsEcho(); + }); +} + +function setIntervalTimes(cb, delay, times) { + var x = 0; + var id = setInterval(function () { + cb(x, times, x / times); + x++; + if (x >= times) { + clearInterval(id); + } + }, delay); + return id; +} + +},{"./button":1,"./checkbox":2,"./colorpicker":3,"./dropdown":5,"./folder":6,"./imagebutton":10,"./imagebuttongrid":11,"./interaction":13,"./keyboard":14,"./sdftext":18,"./slider":20,"./textbox":21,"./utils":23,"events":27}],13:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.globalEvents = undefined; +exports.default = createInteraction; + +var _events = require('events'); + +var _events2 = _interopRequireDefault(_events); + +var _utils = require('./utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** +* dat-guiVR Javascript Controller Library for VR +* https://github.com/dataarts/dat.guiVR +* +* Copyright 2016 Data Arts Team, Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +var globalEvents = exports.globalEvents = new _events2.default(); + +function createInteraction(hitVolume) { + var events = new _events2.default(); + + var anyHover = false; + var anyPressing = false; + var anyActive = false; + + var tVector = new THREE.Vector3(); + var availableInputs = []; + + function update(inputObjects) { + + anyHover = false; + anyPressing = false; + anyActive = false; + + inputObjects.forEach(function (input) { + + if (availableInputs.indexOf(input) < 0) { + availableInputs.push(input); + } + + var _extractHit = extractHit(input), + hitObject = _extractHit.hitObject, + hitPoint = _extractHit.hitPoint; + + var hover = hitVolume === hitObject; + anyHover = anyHover || hover; + + performStateEvents({ + input: input, + hover: hover, + hitObject: hitObject, hitPoint: hitPoint, + buttonName: 'pressed', + buttonClickName: 'clicked', //maybe not stable part of API... + interactionName: 'press', + downName: 'onPressed', + holdName: 'pressing', + upName: 'onReleased', + //inventing a 'hovering' event that only applies to 'pressed' button... + //this should not be considered a stable interface, but I wants it more than I + //want to make something totally coherent and robust just now. + hoverName: 'hovering' + }); + + performStateEvents({ + input: input, + hover: hover, + hitObject: hitObject, hitPoint: hitPoint, + buttonName: 'gripped', + interactionName: 'grip', + downName: 'onGripped', + holdName: 'gripping', + upName: 'onReleaseGrip' + }); + + events.emit('tick', { + input: input, + hitObject: hitObject, + inputObject: input.object + }); + }); + } + + function extractHit(input) { + if (input.intersections.length <= 0) { + return { + hitPoint: tVector.setFromMatrixPosition(input.cursor.matrixWorld).clone(), //xxx: garbage? + hitObject: undefined + }; + } else { + return { + hitPoint: input.intersections[0].point, + hitObject: input.intersections[0].object + }; + } + } + + function performStateEvents() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + input = _ref.input, + hover = _ref.hover, + hitObject = _ref.hitObject, + hitPoint = _ref.hitPoint, + buttonName = _ref.buttonName, + buttonClickName = _ref.buttonClickName, + interactionName = _ref.interactionName, + downName = _ref.downName, + holdName = _ref.holdName, + upName = _ref.upName, + hoverName = _ref.hoverName; + + if (input[buttonName] === true && hitObject === undefined) { + //clicked and didn't hit any GUI object. + //flag that what we've clicked *isn't* part of a modal editor + input.hitNonModal = true; + return; + } + + // hovering and button NOT down + if (hoverName && hover && input[buttonName] === false) { + var payload = { + input: input, + hitObject: hitObject, + point: hitPoint, + inputObject: input.object, + locked: false + }; + events.emit(hoverName, payload); + } + + // hovering and button down but no interactions active yet + //---> should be ^ button 'clicked'... ie only if it came down since the last update. + //so, should we pass 'buttonClickName' as an argument (and use buttonName if not provided)? + //--->>>> XXX: is this \\\\\\\\\\\\\\//////////// working with Vive controllers? + if (hover && input[buttonClickName || buttonName] === true && input.interaction[interactionName] === undefined) { + + var _payload = { + input: input, + hitObject: hitObject, + point: hitPoint, + inputObject: input.object, + locked: false + }; + + //flag that what we've clicked *isn't* part of a modal editor + if (!hitObject.userData.partOfModal) input.hitNonModal = true; + + promoteZOrder(hitObject); + + //emit global click event as well... + globalEvents.emit(downName, _payload); + events.emit(downName, _payload); + + if (_payload.locked) { + input.interaction[interactionName] = interaction; + input.interaction.hover = interaction; + } + + anyPressing = true; + anyActive = true; + } + + // button still down and this is the active interaction + if (input[buttonName] && input.interaction[interactionName] === interaction) { + var _payload2 = { + input: input, + hitObject: hitObject, + point: hitPoint, + inputObject: input.object, + locked: false + }; + + events.emit(holdName, _payload2); + + anyPressing = true; + + input.events.emit('onControllerHeld'); + } + + // button not down and this is the active interaction + if (input[buttonName] === false && input.interaction[interactionName] === interaction) { + input.interaction[interactionName] = undefined; + input.interaction.hover = undefined; + events.emit(upName, { + input: input, + hitObject: hitObject, + point: hitPoint, + inputObject: input.object + }); + } + } + + function promoteZOrder(hitObject) { + var topFolder = (0, _utils.getTopLevelFolder)(hitObject); + topFolder.promoteZOrder(); + } + + function isMainHover() { + + var noMainHover = true; + for (var i = 0; i < availableInputs.length; i++) { + if (availableInputs[i].interaction.hover !== undefined) { + noMainHover = false; + break; + } + } + + if (noMainHover) { + return anyHover; + } + + if (availableInputs.filter(function (input) { + return input.interaction.hover === interaction; + }).length > 0) { + return true; + } + + return false; + } + + var interaction = { + hovering: isMainHover, + pressing: function pressing() { + return anyPressing; + }, + update: update, + events: events, + hitVolume: hitVolume + }; + + return interaction; +} + +},{"./utils":23,"events":27}],14:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createKeyboard; + +var _events = require('events'); + +var _events2 = _interopRequireDefault(_events); + +var _imagebuttongrid = require('./imagebuttongrid'); + +var _imagebuttongrid2 = _interopRequireDefault(_imagebuttongrid); + +var _imagebutton = require('./imagebutton'); + +var _imagebutton2 = _interopRequireDefault(_imagebutton); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createKeyboard() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + keyListener = _ref.keyListener, + textCreator = _ref.textCreator; + + var group = new THREE.Group(); + var offsetTransform = new THREE.Group(); + group.add(offsetTransform); + + var events = new _events2.default(); + events.on('keyDown', keyListener); + + var lowerChars = "1234567890-=qwertyuiop[]asdfghjkl;'#\\zxcvbnm,./ ".split(''); + var objects = lowerChars.map(function (k) { + return { func: function func() { + return events.emit('keyDown', k); + }, text: k }; + }); + var lowerKeys = (0, _imagebuttongrid2.default)({ textCreator: textCreator, objects: objects, columns: 12 }); + offsetTransform.add(lowerKeys); + + var upperChars = "!\"£$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>? ".split(''); + objects = upperChars.map(function (k) { + return { func: function func() { + return events.emit('keyDown', k); + }, text: k }; + }); + var upperKeys = (0, _imagebuttongrid2.default)({ textCreator: textCreator, objects: objects, columns: 12 }); + upperKeys.visible = false; + offsetTransform.add(upperKeys); + + var shift = false; + function shiftToggle() { + shift = !shift; + lowerKeys.visible = !shift; + upperKeys.visible = shift; + } + + var spaceBar = (0, _imagebuttongrid2.default)({ textCreator: textCreator, columns: 1, rowHeight: 0.1, objects: [{ func: function func() { + return events.emit('keyDown', ' '); + }, text: 'space' }] }); + offsetTransform.add(spaceBar); + var y = spaceBar.position.y = -0.5 * (lowerKeys.spacing + spaceBar.spacing); + + objects = [{ text: "shift", func: shiftToggle }, { text: "backspace", func: function func() { + return events.emit('keyDown', '\b'); + } }, { text: "enter", func: function func() { + return events.emit('keyDown', '\n'); + } }]; + var specialKeys = (0, _imagebuttongrid2.default)({ textCreator: textCreator, objects: objects, columns: 3, rowHeight: 0.1 }); + offsetTransform.add(specialKeys); + specialKeys.position.y = y - 0.5 * (spaceBar.spacing + specialKeys.spacing); + group.spacing = lowerKeys.spacing + spaceBar.spacing + specialKeys.spacing; + //this looks right, must admit I haven't thought through exactly why it should be. + offsetTransform.position.y = specialKeys.spacing; + + Object.defineProperty(group, 'hitscan', { + get: function get() { + return [specialKeys.hitscan, spaceBar.hitscan, shift ? upperKeys.hitscan : lowerKeys.hitscan].reduce(function (a, b) { + return a.concat(b); + }, []); + } + }); + + spaceBar.folder = upperKeys.folder = lowerKeys.folder = specialKeys.folder = group; + group.updateControl = function (inputs) { + specialKeys.updateControl(inputs); + lowerKeys.updateControl(inputs); + spaceBar.updateControl(inputs); + upperKeys.updateControl(inputs); + }; + + return group; +} /** + * + * TODO: cursors... + * Maybe something like mobile input where you switch between letters & numbers / symbols + * + * Something like a split keyboard ala https://medium.com/aaronn/vr-text-input-split-keyboard-e5bf3fd87a4c + * might be better. + * + * Peter Todd 2017 + */ + +},{"./imagebutton":10,"./imagebuttongrid":11,"events":27}],15:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.GRID_BUTTON_MARGIN = exports.TEXT_SCALE = exports.CHECKBOX_SIZE = exports.BORDER_THICKNESS = exports.FOLDER_GRAB_HEIGHT = exports.FOLDER_HEIGHT = exports.SUBFOLDER_WIDTH = exports.FOLDER_WIDTH = exports.BUTTON_DEPTH = exports.CONTROLLER_ID_DEPTH = exports.CONTROLLER_ID_WIDTH = exports.PANEL_VALUE_TEXT_MARGIN = exports.PANEL_LABEL_TEXT_MARGIN = exports.PANEL_MARGIN = exports.PANEL_SPACING = exports.PANEL_DEPTH = exports.PANEL_HEIGHT = exports.PANEL_WIDTH = undefined; +exports.alignLeft = alignLeft; +exports.createPanel = createPanel; +exports.resizePanel = resizePanel; +exports.createControllerIDBox = createControllerIDBox; +exports.createDownArrow = createDownArrow; + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +/** +* dat-guiVR Javascript Controller Library for VR +* https://github.com/dataarts/dat.guiVR +* +* Copyright 2016 Data Arts Team, Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +function alignLeft(obj) { + if (obj instanceof THREE.Mesh) { + obj.geometry.computeBoundingBox(); + var width = obj.geometry.boundingBox.max.x - obj.geometry.boundingBox.max.y; + obj.geometry.translate(width, 0, 0); + return obj; + } else if (obj instanceof THREE.BufferGeometry) { + obj.computeBoundingBox(); + var _width = obj.boundingBox.max.x - obj.boundingBox.max.y; + obj.translate(_width, 0, 0); + return obj; + } +} + +function createPanel(width, height, depth, uniqueMaterial) { + var material = uniqueMaterial ? new THREE.MeshBasicMaterial({ color: 0xffffff }) : SharedMaterials.PANEL; + var panel = new THREE.Mesh(new THREE.BoxGeometry(width, height, depth), material); + panel.geometry.translate(width * 0.5, 0, 0); + + if (uniqueMaterial) { + material.color.setHex(Colors.DEFAULT_BACK); + } else { + Colors.colorizeGeometry(panel.geometry, Colors.DEFAULT_BACK); + } + + panel.userData.currentWidth = width; + panel.userData.currentHeight = height; + panel.userData.currentDepth = depth; + + return panel; +} +function resizePanel(panel, width, height, depth) { + panel.geometry.scale(width / panel.userData.currentWidth, height / panel.userData.currentHeight, depth / panel.userData.currentDepth); + panel.userData.currentWidth = width; + panel.userData.currentHeight = height; + panel.userData.currentDepth = depth; +} + +function createControllerIDBox(height, color) { + var panel = new THREE.Mesh(new THREE.BoxGeometry(CONTROLLER_ID_WIDTH, height, CONTROLLER_ID_DEPTH), SharedMaterials.PANEL); + panel.geometry.translate(CONTROLLER_ID_WIDTH * 0.5, 0, 0); + Colors.colorizeGeometry(panel.geometry, color); + return panel; +} + +function createDownArrow() { + var w = 0.0096; + var h = 0.016; + var sh = new THREE.Shape(); + sh.moveTo(0, 0); + sh.lineTo(-w, h); + sh.lineTo(w, h); + sh.lineTo(0, 0); + + var geo = new THREE.ShapeGeometry(sh); + geo.translate(0, -h * 0.5, 0); + + return new THREE.Mesh(geo, SharedMaterials.PANEL); +} + +var PANEL_WIDTH = exports.PANEL_WIDTH = 1.0; +var PANEL_HEIGHT = exports.PANEL_HEIGHT = 0.08; +var PANEL_DEPTH = exports.PANEL_DEPTH = 0.01; +var PANEL_SPACING = exports.PANEL_SPACING = 0; //.001; +var PANEL_MARGIN = exports.PANEL_MARGIN = 0.015; +var PANEL_LABEL_TEXT_MARGIN = exports.PANEL_LABEL_TEXT_MARGIN = 0.06; +var PANEL_VALUE_TEXT_MARGIN = exports.PANEL_VALUE_TEXT_MARGIN = 0.02; +var CONTROLLER_ID_WIDTH = exports.CONTROLLER_ID_WIDTH = 0.02; +var CONTROLLER_ID_DEPTH = exports.CONTROLLER_ID_DEPTH = 0.001; +var BUTTON_DEPTH = exports.BUTTON_DEPTH = 0.01; +var FOLDER_WIDTH = exports.FOLDER_WIDTH = 1.026; +var SUBFOLDER_WIDTH = exports.SUBFOLDER_WIDTH = 1.0; +var FOLDER_HEIGHT = exports.FOLDER_HEIGHT = 0.09; +var FOLDER_GRAB_HEIGHT = exports.FOLDER_GRAB_HEIGHT = 0.0512; +var BORDER_THICKNESS = exports.BORDER_THICKNESS = 0.01; +var CHECKBOX_SIZE = exports.CHECKBOX_SIZE = 0.05; +var TEXT_SCALE = exports.TEXT_SCALE = 0.00024; +var GRID_BUTTON_MARGIN = exports.GRID_BUTTON_MARGIN = 0.01; + +},{"./colors":4,"./sharedmaterials":19}],16:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.create = create; + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function create() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + group = _ref.group, + panel = _ref.panel; + + var interaction = (0, _interaction2.default)(panel); + + interaction.events.on('onGripped', handleOnGrip); + interaction.events.on('onReleaseGrip', handleOnGripRelease); + + //let oldParent; + var oldPosition = new THREE.Vector3(); + var oldRotation = new THREE.Euler(); + + var rotationGroup = new THREE.Group(); + rotationGroup.scale.set(0.3, 0.3, 0.3); + rotationGroup.position.set(-0.015, 0.015, 0.0); + + function handleOnGrip(p) { + var inputObject = p.inputObject, + input = p.input; + + + var folder = group.folder; + if (folder === undefined) { + return; + } + + if (folder.beingMoved === true) { + return; + } + + oldPosition.copy(folder.position); + oldRotation.copy(folder.rotation); + + folder.position.set(0, 0, 0); + folder.rotation.set(0, 0, 0); + folder.rotation.x = -Math.PI * 0.5; + + folder.oldParent = folder.parent; + + rotationGroup.add(folder); + + inputObject.add(rotationGroup); + + p.locked = true; + + folder.beingMoved = true; + + input.events.emit('pinned', input); + } + + function handleOnGripRelease() { + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + inputObject = _ref2.inputObject, + input = _ref2.input; + + var folder = group.folder; + if (folder === undefined) { + return; + } + + if (folder.oldParent === undefined) { + return; + } + + if (folder.beingMoved === false) { + return; + } + + folder.oldParent.add(folder); + folder.oldParent = undefined; + + folder.position.copy(oldPosition); + folder.rotation.copy(oldRotation); + + folder.beingMoved = false; + + input.events.emit('pinReleased', input); + } + + return interaction; +} /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +},{"./interaction":13}],17:[function(require,module,exports){ +'use strict'; + +/** + * PJT: This is a variation on sdfshader from bmfont, which should Just Work with logarithmic depth buffers. + * It should also allow some other aspects of THREE rendering to be incorporated, like fog, clipping planes... + * Environment maps and various other bits from MeshBasicMaterial are removed. + * At time of writing, this is work in progress, and somewhat more bloated than it needs to be. + * The shader code is designed to be used with ShaderMaterial rather than RawShaderMaterial. + */ +// import * as Layout from './layout'; +var assign = require('object-assign'); + +/** + * starting from THREE meshbasic shaders, pruning / modifying... + */ +var meshbasic_vert = '\n#define USE_MAP\n#define USE_UV\n#include \n#include \n//#include \n#include \n#include \n#include \n\nvoid main() { \n vUv = uv;\n\t#include \n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n}\n'; + +var /*sjpt was const */meshbasic_frag = '\n#define USE_MAP\n#define USE_UV\nuniform vec3 color;\nuniform float opacity;\n\n#include \n//#include \n#include \n#include \n#include \n#include \n#include \n\n/////\nfloat aastep(float value) {\n // We now assume WebGL2 and so the derivatives are available, \n // so afwidth depends on scale of gui\n float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757;\n return smoothstep(0.5 - afwidth, 0.5 + afwidth, value);\n}\n////\n\nvoid main() {\n\n\t#include \n\n ///\n vec4 diffuseColor = vec4( color, opacity );\n \n vec4 texColor = texture2D(map, vUv);\n float alpha = aastep(texColor.a);\n gl_FragColor = vec4(color, opacity * alpha);\n if (gl_FragColor.a < 0.0001) discard;\n ///\n\n\t#include \n //XXX: big chunk removed from original meshbasic_frag here.\n #include \n\t#include \n\t#include \n}\n'; + +if (+THREE.REVISION > 151) { + // sjpt patch + meshbasic_frag = '\n#define USE_MAP\n#define USE_UV\nuniform vec3 color;\nuniform float opacity;\n\n#include \n//#include \n#include \n#include \n#include \n#include \n#include \n\n/////\nfloat aastep(float value) {\n // We now assume WebGL2 and so the derivatives are available, \n // so afwidth depends on scale of gui\n float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757;\n return smoothstep(0.5 - afwidth, 0.5 + afwidth, value);\n}\n////\n\nvoid main() {\n\n\t#include \n\n ///\n vec4 diffuseColor = vec4( color, opacity );\n \n vec4 texColor = texture2D(map, vUv);\n float alpha = aastep(texColor.a);\n gl_FragColor = vec4(color, opacity * alpha);\n if (gl_FragColor.a < 0.0001) discard;\n ///\n\n\t#include \n //XXX: big chunk removed from original meshbasic_frag here.\n #include \n\t#include \n\t#include \n}\n'; + console.warn('colorspace_fragment used'); +} + +module.exports = function createSDFShader(opt) { + opt = opt || {}; + var opacity = typeof opt.opacity === 'number' ? opt.opacity : 1; + ///-- hardcoded in shader code, guivr never passed these in opt -- + //var alphaTest = typeof opt.alphaTest === 'number' ? opt.alphaTest : 0.0001 + //var precision = opt.precision || 'highp' + var color = opt.color; + var map = opt.map; + + opt.extensions = opt.extensions || {}; + opt.extensions.derivatives = true; //nb, false defaults for fragDepth, drawBuffers, shaderTextureLOD will no longer be there. + opt.name = "SDF text material"; + + // remove to satisfy r73 + delete opt.map; + delete opt.color; + delete opt.precision; + delete opt.opacity; + + return assign({ + uniforms: { + opacity: { type: 'f', value: opacity }, + map: { type: 't', value: map || new THREE.Texture() }, + color: { type: 'c', value: new THREE.Color(color) } + }, + vertexShader: meshbasic_vert, + fragmentShader: meshbasic_frag + }, opt); +}; + +},{"object-assign":31}],18:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createMaterial = createMaterial; +exports.creator = creator; + +var _sdfshader_logdepth = require('./sdfshader_logdepth'); + +var _sdfshader_logdepth2 = _interopRequireDefault(_sdfshader_logdepth); + +var _threeBmfontText = require('three-bmfont-text'); + +var _threeBmfontText2 = _interopRequireDefault(_threeBmfontText); + +var _parseBmfontAscii = require('parse-bmfont-ascii'); + +var _parseBmfontAscii2 = _interopRequireDefault(_parseBmfontAscii); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _font = require('./font'); + +var Font = _interopRequireWildcard(_font); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createMaterial(color) { + + var image = Font.image(); + var texture = new THREE.Texture(image);texture.name = 'sdfFontTexture'; + texture.needsUpdate = true; + texture.minFilter = THREE.LinearFilter; + texture.magFilter = THREE.LinearFilter; + texture.generateMipmaps = false; + + //NB::: somewhat experimental replacement of RawShader code from bmfont with variation of MeshBasic shader + //this should allow for logdepth, fog is also anticipated to work reasonably well... + //tonemapping etc may conceivably be improved... YMMV. + var material = new THREE.ShaderMaterial((0, _sdfshader_logdepth2.default)({ + side: THREE.DoubleSide, + transparent: true, + color: color, + map: texture, + type: 'SDF Text' + })); + return material; +} /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var textScale = Layout.TEXT_SCALE; + +function creator() { + + var font = (0, _parseBmfontAscii2.default)(Font.fnt()); + + var colorMaterials = {}; + + function createText(str, font) { + var color = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0xffffff; + var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1.0; + var width = arguments[4]; + var height = arguments[5]; + + + var geometry = (0, _threeBmfontText2.default)({ + text: str, + align: 'left', + width: width, + height: height, + flipY: true, + font: font + }); + + var layout = geometry.layout; + + var material = colorMaterials[color]; + if (material === undefined) { + material = colorMaterials[color] = createMaterial(color); + } + var mesh = new THREE.Mesh(geometry, material); + mesh.scale.multiply(new THREE.Vector3(1, -1, 1)); + + var finalScale = scale * textScale; + + mesh.scale.multiplyScalar(finalScale); + + mesh.position.y = layout.height * 0.5 * finalScale; + + return mesh; + } + + function create(str) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$color = _ref.color, + color = _ref$color === undefined ? 0xffffff : _ref$color, + _ref$scale = _ref.scale, + scale = _ref$scale === undefined ? 1.0 : _ref$scale; + + var group = new THREE.Group(); + + var mesh = createText(str, font, color, scale); + group.add(mesh); + group.layout = mesh.geometry.layout; + group.computeWidth = function () { + return group.layout.width * scale * Layout.TEXT_SCALE; + }; + group.computeHeight = function () { + return group.layout.height * scale * Layout.TEXT_SCALE; + }; + + group.constrainBounds = function (w, h) { + group.remove(mesh); + var s = Layout.TEXT_SCALE; + mesh = createText(str, font, color, scale, w / s, h / s); + var hFactor = mesh.geometry.layout.height * s / h; + if (hFactor > 1) { + str = str.substring(0, 0.95 * str.length / hFactor) + '...'; + mesh = createText(str, font, color, scale, w / s, h / s); + } + group.add(mesh); + group.layout = mesh.geometry.layout; + }; + + group.updateLabel = function (str) { + if (mesh.userData.labelString !== str) { + mesh.geometry.update(str); + mesh.userData.labelString = str; + } + }; + + return group; + } + + return { + create: create, + getMaterial: function getMaterial() { + return material; + } //XXX: this dates back quite a long way, not sure it was ever right. + }; +} + +},{"./font":7,"./layout":15,"./sdfshader_logdepth":17,"parse-bmfont-ascii":32,"three-bmfont-text":34}],19:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TOOLTIP = exports.FOLDER = exports.LOCATOR = exports.PANEL = undefined; + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var PANEL = exports.PANEL = new THREE.MeshBasicMaterial({ color: 0xffffff, vertexColors: true }); /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var LOCATOR = exports.LOCATOR = new THREE.MeshBasicMaterial(); +var FOLDER = exports.FOLDER = new THREE.MeshBasicMaterial({ color: 0x000000 }); +var TOOLTIP = exports.TOOLTIP = new THREE.MeshBasicMaterial({ color: 0x205080, transparent: false, opacity: 0.8 }); + +},{"./colors":4}],20:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createSlider; + +var _textlabel = require('./textlabel'); + +var _textlabel2 = _interopRequireDefault(_textlabel); + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +var _palette = require('./palette'); + +var Palette = _interopRequireWildcard(_palette); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createSlider() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + object = _ref.object, + _ref$propertyName = _ref.propertyName, + propertyName = _ref$propertyName === undefined ? 'undefined' : _ref$propertyName, + _ref$initialValue = _ref.initialValue, + initialValue = _ref$initialValue === undefined ? 0.0 : _ref$initialValue, + _ref$min = _ref.min, + min = _ref$min === undefined ? 0.0 : _ref$min, + _ref$max = _ref.max, + max = _ref$max === undefined ? 1.0 : _ref$max, + _ref$step = _ref.step, + step = _ref$step === undefined ? 0.1 : _ref$step, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + _ref$initialHeight = _ref.initialHeight, + initialHeight = _ref$initialHeight === undefined ? Layout.PANEL_HEIGHT : _ref$initialHeight, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth; + + var state = { + alpha: 1.0, + value: initialValue, + step: step, + useStep: true, + precision: 1, + listen: false, + min: min, + max: max, + onChangedCB: undefined, + onFinishedChange: undefined, + pressing: false + }; + + state.step = getImpliedStep(state.value, state.min, state.max); + state.precision = numDecimals(state.step); + state.alpha = getAlphaFromValue(state.value, state.min, state.max); + + var group = new THREE.Group(); + group.guiType = "slider"; + group.toString = function () { + return '[' + group.guiType + ': ' + propertyName + ']'; + }; + + var descriptorLabel = textCreator.create(propertyName); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN; + descriptorLabel.position.z = depth; + descriptorLabel.position.y = -0.03; + + var panel = void 0; + group.setHeight = function (height) { + if (panel) group.remove(panel); + + group.spacing = height; + + var SLIDER_WIDTH = width * 0.5 - Layout.PANEL_MARGIN; + var SLIDER_HEIGHT = height - Layout.PANEL_MARGIN; + var SLIDER_DEPTH = depth; + + // filled volume + var rect = new THREE.BoxGeometry(SLIDER_WIDTH, SLIDER_HEIGHT, SLIDER_DEPTH); + rect.translate(SLIDER_WIDTH * 0.5, 0, 0); + // Layout.alignLeft( rect ); + + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = false; + + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + hitscanVolume.position.z = depth; + hitscanVolume.position.x = width * 0.5; + hitscanVolume.name = 'hitscanVolume'; + + // sliderBG volume + var sliderBG = new THREE.Mesh(rect.clone(), SharedMaterials.PANEL); + Colors.colorizeGeometry(sliderBG.geometry, Colors.SLIDER_BG); + sliderBG.position.z = depth * 0.5; + sliderBG.position.x = SLIDER_WIDTH + Layout.PANEL_MARGIN; + + var material = new THREE.MeshBasicMaterial({ color: Colors.DEFAULT_COLOR }); + var filledVolume = new THREE.Mesh(rect.clone(), material); + filledVolume.position.z = depth * 0.5; + hitscanVolume.add(filledVolume); + + var endLocator = new THREE.Mesh(new THREE.BoxGeometry(0.05, 0.05, 0.05, 1, 1, 1), SharedMaterials.LOCATOR); + endLocator.position.x = SLIDER_WIDTH; + hitscanVolume.add(endLocator); + endLocator.visible = false; + + var valueLabel = textCreator.create(state.value.toString()); + valueLabel.position.x = Layout.PANEL_VALUE_TEXT_MARGIN + width * 0.5; + valueLabel.position.z = depth * 2.5; + valueLabel.position.y = -0.0325; + + var controllerID = Layout.createControllerIDBox(height, Colors.CONTROLLER_ID_SLIDER); + controllerID.position.z = depth; + + panel = Layout.createPanel(width, height, depth); + panel.name = 'panel'; + panel.add(descriptorLabel, hitscanVolume, sliderBG, valueLabel, controllerID); + + group.add(panel); + + updateValueLabel(state.value); + updateSlider(); + + function updateValueLabel(value) { + if (state.useStep) { + valueLabel.updateLabel(roundToDecimal(state.value, state.precision).toString()); + } else { + valueLabel.updateLabel(state.value.toString()); + } + } + + function updateView() { + if (state.pressing) { + material.color.setHex(Colors.INTERACTION_COLOR); + } else if (interaction.hovering()) { + material.color.setHex(Colors.HIGHLIGHT_COLOR); + } else { + material.color.setHex(Colors.DEFAULT_COLOR); + } + } + + function updateSlider() { + filledVolume.scale.x = Math.min(Math.max(getAlphaFromValue(state.value, state.min, state.max) * width, 0.000001), width); + } + + function updateObject(value) { + object[propertyName] = value; + } + + function updateStateFromAlpha(alpha) { + state.alpha = getClampedAlpha(alpha); + state.value = getValueFromAlpha(state.alpha, state.min, state.max); + if (state.useStep) { + state.value = getSteppedValue(state.value, state.step); + } + state.value = getClampedValue(state.value, state.min, state.max); + } + + function listenUpdate() { + state.value = getValueFromObject(); + state.alpha = getAlphaFromValue(state.value, state.min, state.max); + state.alpha = getClampedAlpha(state.alpha); + } + + function getValueFromObject() { + return parseFloat(object[propertyName]); + } + + group.onChange = function (callback) { + state.onChangedCB = callback; + return group; + }; + + group.step = function (step) { + state.step = step; + state.precision = numDecimals(state.step); + state.useStep = true; + + state.alpha = getAlphaFromValue(state.value, state.min, state.max); + + updateStateFromAlpha(state.alpha); + updateValueLabel(state.value); + updateSlider(); + return group; + }; + + group.listen = function () { + state.listen = true; + return group; + }; + + var interaction = (0, _interaction2.default)(hitscanVolume); + interaction.events.on('onPressed', handlePress); + interaction.events.on('pressing', handleHold); + interaction.events.on('onReleased', handleRelease); + + function handlePress(p) { + if (group.visible === false) { + return; + } + state.pressing = true; + p.locked = true; + } + + function handleHold() { + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + point = _ref2.point; + + if (group.visible === false) { + return; + } + + state.pressing = true; + + filledVolume.updateMatrixWorld(); + endLocator.updateMatrixWorld(); + + var a = new THREE.Vector3().setFromMatrixPosition(filledVolume.matrixWorld); + var b = new THREE.Vector3().setFromMatrixPosition(endLocator.matrixWorld); + + var previousValue = state.value; + + updateStateFromAlpha(getPointAlpha(point, { a: a, b: b })); + updateValueLabel(state.value); + updateSlider(); + updateObject(state.value); + + if (previousValue !== state.value && state.onChangedCB) { + state.onChangedCB(state.value); + } + } + + function handleRelease() { + state.pressing = false; + } + + group.interaction = interaction; + group.hitscan = [hitscanVolume, panel]; + + var grabInteraction = Grab.create({ group: group, panel: panel }); + var paletteInteraction = Palette.create({ group: group, panel: panel }); + + group.updateControl = function (inputObjects) { + interaction.update(inputObjects); + grabInteraction.update(inputObjects); + paletteInteraction.update(inputObjects); + + if (state.listen) { + listenUpdate(); + updateValueLabel(state.value); + updateSlider(); + } + updateView(); + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + group.min = function (m) { + state.min = m; + state.alpha = getAlphaFromValue(state.value, state.min, state.max); + updateStateFromAlpha(state.alpha); + updateValueLabel(state.value); + updateSlider(); + return group; + }; + + group.max = function (m) { + state.max = m; + state.alpha = getAlphaFromValue(state.value, state.min, state.max); + updateStateFromAlpha(state.alpha); + updateValueLabel(state.value); + updateSlider(); + return group; + }; + if (group.folder) group.folder.requestLayout(); + return group; + }; // /setHeight + group.setHeight(initialHeight); + return group; +} /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ta = new THREE.Vector3(); +var tb = new THREE.Vector3(); +var tToA = new THREE.Vector3(); +var aToB = new THREE.Vector3(); + +function getPointAlpha(point, segment) { + ta.copy(segment.b).sub(segment.a); + tb.copy(point).sub(segment.a); + + var projected = tb.projectOnVector(ta); + + tToA.copy(point).sub(segment.a); + + aToB.copy(segment.b).sub(segment.a).normalize(); + + var side = tToA.normalize().dot(aToB) >= 0 ? 1 : -1; + + var length = segment.a.distanceTo(segment.b) * side; + + var alpha = projected.length() / length; + if (alpha > 1.0) { + alpha = 1.0; + } + if (alpha < 0.0) { + alpha = 0.0; + } + return alpha; +} + +function lerp(min, max, value) { + return (1 - value) * min + value * max; +} + +function map_range(value, low1, high1, low2, high2) { + return low2 + (high2 - low2) * (value - low1) / (high1 - low1); +} + +function getClampedAlpha(alpha) { + if (alpha > 1) { + return 1; + } + if (alpha < 0) { + return 0; + } + return alpha; +} + +function getClampedValue(value, min, max) { + if (value < min) { + return min; + } + if (value > max) { + return max; + } + return value; +} + +function getImpliedStep(value, min, max) { + //PJT: what would we like step to look like? + //Something that has about the order of magnitude, and looks nice in base 10? + var r = max - min; + var step = r / 100; //what is the ratio of number of decimals to order of magnitude? + + return step; + + // if( value === 0 ){ + // return 1; // What are we, psychics? //<<<<--- no, so we should base impliedStep on min/max, not value + // } else { + // // Hey Doug, check this out. + // return Math.pow(10, Math.floor(Math.log(Math.abs(value))/Math.LN10))/10; + // } +} + +function getValueFromAlpha(alpha, min, max) { + return map_range(alpha, 0.0, 1.0, min, max); +} + +function getAlphaFromValue(value, min, max) { + return map_range(value, min, max, 0.0, 1.0); +} + +function getSteppedValue(value, step) { + if (value % step != 0) { + return Math.round(value / step) * step; + } + return value; +} + +function numDecimals(x) { + x = x.toString(); + if (x.indexOf('.') > -1) { + return x.length - x.indexOf('.') - 1; + } else { + return 0; + } +} + +function roundToDecimal(value, decimals) { + if (Math.abs(value) < 0.01 && value !== 0) return value.toExponential(3); + var tenTo = Math.pow(10, decimals); + return Math.round(value * tenTo) / tenTo; +} + +},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15,"./palette":16,"./sharedmaterials":19,"./textlabel":22}],21:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createTextBox; + +var _index = require('./index'); + +var GUI = _interopRequireWildcard(_index); + +var _textlabel = require('./textlabel'); + +var _textlabel2 = _interopRequireDefault(_textlabel); + +var _interaction = require('./interaction'); + +var _interaction2 = _interopRequireDefault(_interaction); + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _grab = require('./grab'); + +var Grab = _interopRequireWildcard(_grab); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function createTextBox() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + textCreator = _ref.textCreator, + object = _ref.object, + _ref$propertyName = _ref.propertyName, + propertyName = _ref$propertyName === undefined ? 'undefined' : _ref$propertyName, + _ref$width = _ref.width, + width = _ref$width === undefined ? Layout.PANEL_WIDTH : _ref$width, + _ref$height = _ref.height, + height = _ref$height === undefined ? Layout.PANEL_HEIGHT : _ref$height, + _ref$depth = _ref.depth, + depth = _ref$depth === undefined ? Layout.PANEL_DEPTH : _ref$depth; + + // big old copy / paste from button.js. Might try to factor out some of this common code. + var BUTTON_WIDTH = width * 0.5 - Layout.PANEL_MARGIN; + var BUTTON_HEIGHT = height - Layout.PANEL_MARGIN; + var BUTTON_DEPTH = Layout.BUTTON_DEPTH; + + var group = new THREE.Group(); + group.guiType = "textbox"; + group.toString = function () { + return '[' + group.guiType + ': ' + propertyName + ']'; + }; + + var panel = Layout.createPanel(width, height, depth); + group.add(panel); + + // base checkbox + var divisions = 4; + var aspectRatio = BUTTON_WIDTH / BUTTON_HEIGHT; + var rect = new THREE.BoxGeometry(BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_DEPTH, Math.floor(divisions * aspectRatio), divisions, divisions); + rect.translate(BUTTON_WIDTH * 0.5, 0, 0); + + // hitscan volume + var hitscanMaterial = new THREE.MeshBasicMaterial(); + hitscanMaterial.visible = false; + + var hitscanVolume = new THREE.Mesh(rect.clone(), hitscanMaterial); + hitscanVolume.position.z = BUTTON_DEPTH * 0.5; + hitscanVolume.position.x = width * 0.5; + + var material = new THREE.MeshBasicMaterial({ color: 0xFFFFFF }); + var filledVolume = new THREE.Mesh(rect.clone(), material); + hitscanVolume.add(filledVolume); + + //how can I change color of text? + var buttonLabel = textCreator.create(object[propertyName], { color: 0x0000000, scale: 0.866 }); + + // This is a real hack since we need to fit the text position to the font scaling + // Please fix me. + //buttonLabel.position.x = BUTTON_WIDTH * 0.5 - buttonLabel.layout.width * 0.000011 * 0.5; + buttonLabel.position.x = 0.015; + buttonLabel.position.z = BUTTON_DEPTH * 1.2; + buttonLabel.position.y = -0.025; + filledVolume.add(buttonLabel); + + var descriptorLabel = textCreator.create(propertyName); + descriptorLabel.position.x = Layout.PANEL_LABEL_TEXT_MARGIN; + descriptorLabel.position.z = depth; + descriptorLabel.position.y = -0.03; + + var controllerID = Layout.createControllerIDBox(height, Colors.CONTROLLER_ID_BUTTON); + controllerID.position.z = depth; + + panel.add(descriptorLabel, hitscanVolume, controllerID); + + var interaction = (0, _interaction2.default)(hitscanVolume); + interaction.events.on('onPressed', handleOnPress); + + updateView(); + + function updateString(str) { + object[propertyName] = str; + buttonLabel.updateLabel(str); + } + var keyboard; + function toggleKeyboard() { + if (keyboard) { + keyboard.visible = !keyboard.visible; + if (keyboard.visible) group.folder.setModalEditor(keyboard); + return; + } else { + keyboard = dat.GUIVR.create("keyboard"); + group.add(keyboard); + keyboard.folder = group.folder; + group.folder.setModalEditor(keyboard); + keyboard.position.x = width; + keyboard.position.y = Layout.FOLDER_HEIGHT; + keyboard.hideHeader(); + keyboard.addKeyboard(function (k) { + var str = object[propertyName]; + switch (k) { + case '\n': + //setting "keyboard.visible = false" in the middle of event + //handler seems to kill all event processing from then on. + //setTimeout is an adequate workaround for now. + setTimeout(toggleKeyboard, 100); + break; + case '\b': + str = str.substring(0, str.length - 1); + updateString(str); + break; + default: + str += k; + updateString(str); + } + }); + } + } + + function handleOnPress(p) { + //this test should be redundant now + // if( group.visible === false ){ + // return; + // } + + //object[ propertyName ](); + + //hitscanVolume.position.z = BUTTON_DEPTH * 0.1; + + // create a keyboard and attach it as child of group... + // or just make sure existing keyboard is visible. + toggleKeyboard(); + + p.locked = true; + } + + function updateView() { + + if (interaction.hovering()) { + material.color.setHex(Colors.TEXTBOX_HIGHLIGHT_BG); + } else { + material.color.setHex(Colors.TEXTBOX_BG); + } + } + + group.interaction = interaction; + group.hitscan = [hitscanVolume, panel]; + + var grabInteraction = Grab.create({ group: group, panel: panel }); + + group.updateControl = function (inputObjects) { + interaction.update(inputObjects); + grabInteraction.update(inputObjects); + updateView(); + }; + + group.name = function (str) { + descriptorLabel.updateLabel(str); + return group; + }; + + return group; +} /** + * When the textbox is focussed, a keyboard should be created... + * There should also be a way of dismissing it later. It may be that we want to + * prevent multiple keyboards being made simultaneously? + * + * In order to make it appear, it can be added as a child of the texbox node itself... + * This'll mean that it gets dragged around by the parent GUI as it moves.... + * Makes for relatively clean, simple implementation at least. + * At the moment, keyboard positioning is messed up by this arrangement. + * Removing grabber makes it less likely a user will do this, but might be worth fixing the basic bug. + * + */ + +},{"./colors":4,"./grab":8,"./index":12,"./interaction":13,"./layout":15,"./sharedmaterials":19,"./textlabel":22}],22:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createTextLabel; +exports.createToolTip = createToolTip; + +var _colors = require('./colors'); + +var Colors = _interopRequireWildcard(_colors); + +var _sharedmaterials = require('./sharedmaterials'); + +var SharedMaterials = _interopRequireWildcard(_sharedmaterials); + +var _layout = require('./layout'); + +var Layout = _interopRequireWildcard(_layout); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function createTextLabel(textCreator, str) { + var width = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.4; + var depth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.029; + var fgColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0xffffff; + var bgColor = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : Colors.DEFAULT_BACK; + var scale = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1.0; + + + var group = new THREE.Group(); + group.guiType = "textlabel"; + group.toString = function () { + return '[' + group.guiType + ': ' + str + ']'; + }; + + var internalPositioning = new THREE.Group(); //rather unnecessary. + group.add(internalPositioning); + + var text = textCreator.create(str.toString(), { color: fgColor, scale: scale }); + internalPositioning.add(text); + group.userData.text = text; + + group.setString = function (str) { + if (str === undefined) str = "[undefined]"; + text.updateLabel(str.toString()); + //text.constrainBounds(totalWidth, 0.04); + }; + + group.setNumber = function (str) { + text.updateLabel(str.toFixed(2)); + }; + + text.position.z = depth; + + var backBounds = 0.01; + var margin = 0.01; + var totalWidth = width; + var totalHeight = 0.04 + margin * 2; + + //text.constrainBounds(totalWidth, 0.04); + + var labelBackGeometry = new THREE.BoxGeometry(totalWidth, totalHeight, depth, 1, 1, 1); + labelBackGeometry.applyMatrix4(new THREE.Matrix4().makeTranslation(totalWidth * 0.5 - margin, 0, 0)); + + var labelBackMesh = new THREE.Mesh(labelBackGeometry, SharedMaterials.PANEL); + Colors.colorizeGeometry(labelBackMesh.geometry, bgColor); + + labelBackMesh.position.y = 0.03; + internalPositioning.add(labelBackMesh); + internalPositioning.position.y = -totalHeight * 0.5; + + group.back = labelBackMesh; + + return group; +} /** + * dat-guiVR Javascript Controller Library for VR + * https://github.com/dataarts/dat.guiVR + * + * Copyright 2016 Data Arts Team, Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var defaultParentHeight = Layout.PANEL_HEIGHT + Layout.PANEL_SPACING; +function createToolTip(textCreator, tip, parentWidth) { + var parentHeight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : defaultParentHeight; + var parentDepth = arguments[4]; + + var tipText = textCreator.create(tip); + + var tipGroup = new THREE.Group(); + + var w = tipText.computeWidth(); + var h = Layout.TEXT_SCALE * tipText.layout.height; + + tipGroup.position.x = 0.5 * parentWidth; + tipGroup.position.y = -1.05 * parentHeight - h; + tipGroup.position.z = parentDepth * 3; + tipGroup.visible = false; + + // subgroup.add(tipGroup); + tipGroup.add(tipText); + // subgroup.tipText = tipGroup; + + var paddedW = w + 0.03, + paddedH = h + 0.03; + var tipRect = new THREE.PlaneGeometry(paddedW, paddedH, 1, 1); + var tipBackground = new THREE.Mesh(tipRect, SharedMaterials.TOOLTIP); + tipBackground.position.x = 0; //paddedW / 2; + tipBackground.position.y = h / 2; + tipBackground.position.z = -parentDepth * 0.5; + tipGroup.add(tipBackground); + + tipText.position.x = -0.5 * w; + tipText.position.y = -0.5 * h + 0.0015; + + tipGroup.userData.w = w; + tipGroup.userData.h = h; + + return tipGroup; +} + +},{"./colors":4,"./layout":15,"./sharedmaterials":19}],23:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isControllerVisible = isControllerVisible; +exports.setVisibility = setVisibility; +exports.getTopLevelFolder = getTopLevelFolder; +exports.getFolder = getFolder; +exports.setBoxFromObject = setBoxFromObject; +/** basic utility functions */ + +function isControllerVisible(control) { + var folder = control.folder; + //note: the basis on which a controller is considered visible revised for 'header' objects. + //for now, this should allow header controllers to update while folder is collapsed. + //only applies to checkbox, pending design revision & fuller implementation... + + //---- isShownInFolderHeader no longer relevant, but ending up with something that looks similar.... + //isHeaderObject will apply to the actual control appearing in the folder header, whereas + //isShownInFolderHeader was when such objects weren't so fully-fledged + //if (control.isShownInFolderHeader) return isControllerVisible(folder); //<<<<< still hitting folded button??? (also, try npm audit) + if (control.isHeaderObject) return isControllerVisible(folder); + + //XXX having some definite bugs e.g. missing events over 'pictures / materials' folder header in demo. + + if (!control.visible) return false; + + while (folder.folder !== folder) { + if (folder.isCollapsed() || !folder.visible) return false; + folder = folder.folder; + } + if (!folder.parent) return false; + return folder.visible; +} + +/** + * Invisible THREE objects incur significant CPU cost. + * This avoids that by removing them from scene hierarchy. + * + * If visible is true, make sure child.visible=true and is a child of parent. + * If visible is false, make sure child.visible=false and is removed from scene hierarchy. + */ +function setVisibility(parent, child, visible) { + var isChild = parent.children.includes(child); + child.visible = visible; + //make sure we use original THREE methods that this library overrides (TODO: refactor...) + if (visible && !isChild) THREE.Group.prototype.add.call(parent, child); + if (!visible && isChild) THREE.Group.prototype.remove.call(parent, child); + if (!parent.visible) console.warn("setVisibility called on child " + child + " of invisible parent " + parent); +} + +/** + * Returns the highest level of parent folder in the gui hiearchy containing a given object. + * nb. older versions of this function would return the input object if it didn't have a 'folder' property. + * Now, it is intended that it should either return a folder if appropriate, or nothing. + * @param {*} group either a folder, or an object whose parent has a folder... apologies, this is not the clearest spec. + * ... intention is that it should work with any gui element, in particular any hitObject in interaction.js... + */ +function getTopLevelFolder(group) { + var folder = getFolder(group); + while (folder.folder !== folder) { + folder = folder.folder; + }return folder; +} + +function getFolder(group) { + if (group.folder) return group.folder; + var node = group.parent; + while (!node.folder && group.parent) { + node = node.parent; + }return node.folder; +} + +//we need to avoid NaN because of TextGeometry position having itemSize == 2 which upsets Vector3.fromBufferAttribute +//https://github.com/mrdoob/three.js/issues/14352 +function setBoxFromObject(box, obj) { + var wonkyGeom = []; + obj.traverse(function (o) { + if (o.geometry && o.geometry.isBufferGeometry && o.geometry.attributes.position.itemSize !== 3) { + o.geometry.isBufferGeometry = false; + wonkyGeom.push(o.geometry); + } + }); + box.setFromObject(obj); + wonkyGeom.forEach(function (g) { + return g.isBufferGeometry = true; + }); + return box; +} + +},{}],24:[function(require,module,exports){ +var str = Object.prototype.toString + +module.exports = anArray + +function anArray(arr) { + return ( + arr.BYTES_PER_ELEMENT + && str.call(arr.buffer) === '[object ArrayBuffer]' + || Array.isArray(arr) + ) +} + +},{}],25:[function(require,module,exports){ +module.exports = function numtype(num, def) { + return typeof num === 'number' + ? num + : (typeof def === 'number' ? def : 0) +} +},{}],26:[function(require,module,exports){ +module.exports = function(dtype) { + switch (dtype) { + case 'int8': + return Int8Array + case 'int16': + return Int16Array + case 'int32': + return Int32Array + case 'uint8': + return Uint8Array + case 'uint16': + return Uint16Array + case 'uint32': + return Uint32Array + case 'float32': + return Float32Array + case 'float64': + return Float64Array + case 'array': + return Array + case 'uint8_clamped': + return Uint8ClampedArray + } +} + +},{}],27:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); + } + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); + }; + + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); +} + +function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } +} + +function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } +} + +},{}],28:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} + +},{}],29:[function(require,module,exports){ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} + +},{}],30:[function(require,module,exports){ +var wordWrap = require('word-wrapper') +var xtend = require('xtend') +var number = require('as-number') + +var X_HEIGHTS = ['x', 'e', 'a', 'o', 'n', 's', 'r', 'c', 'u', 'm', 'v', 'w', 'z'] +var M_WIDTHS = ['m', 'w'] +var CAP_HEIGHTS = ['H', 'I', 'N', 'E', 'F', 'K', 'L', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] + + +var TAB_ID = '\t'.charCodeAt(0) +var SPACE_ID = ' '.charCodeAt(0) +var ALIGN_LEFT = 0, + ALIGN_CENTER = 1, + ALIGN_RIGHT = 2 + +module.exports = function createLayout(opt) { + return new TextLayout(opt) +} + +function TextLayout(opt) { + this.glyphs = [] + this._measure = this.computeMetrics.bind(this) + this.update(opt) +} + +TextLayout.prototype.update = function(opt) { + opt = xtend({ + measure: this._measure + }, opt) + this._opt = opt + this._opt.tabSize = number(this._opt.tabSize, 4) + + if (!opt.font) + throw new Error('must provide a valid bitmap font') + + var glyphs = this.glyphs + var text = opt.text||'' + var font = opt.font + this._setupSpaceGlyphs(font) + + var lines = wordWrap.lines(text, opt) + var minWidth = opt.width || 0 + + //clear glyphs + glyphs.length = 0 + + //get max line width + var maxLineWidth = lines.reduce(function(prev, line) { + return Math.max(prev, line.width, minWidth) + }, 0) + + //the pen position + var x = 0 + var y = 0 + var lineHeight = number(opt.lineHeight, font.common.lineHeight) + var baseline = font.common.base + var descender = lineHeight-baseline + var letterSpacing = opt.letterSpacing || 0 + var height = lineHeight * lines.length - descender + var align = getAlignType(this._opt.align) + + //draw text along baseline + y -= height + + //the metrics for this text layout + this._width = maxLineWidth + this._height = height + this._descender = lineHeight - baseline + this._baseline = baseline + this._xHeight = getXHeight(font) + this._capHeight = getCapHeight(font) + this._lineHeight = lineHeight + this._ascender = lineHeight - descender - this._xHeight + + //layout each glyph + var self = this + lines.forEach(function(line, lineIndex) { + var start = line.start + var end = line.end + var lineWidth = line.width + var lastGlyph + + //for each glyph in that line... + for (var i=start; i= width || nextPen >= width) + break + + //otherwise continue along our line + curPen = nextPen + curWidth = nextWidth + lastGlyph = glyph + } + count++ + } + + //make sure rightmost edge lines up with rendered glyphs + if (lastGlyph) + curWidth += lastGlyph.xoffset + + return { + start: start, + end: start + count, + width: curWidth + } +} + +//getters for the private vars +;['width', 'height', + 'descender', 'ascender', + 'xHeight', 'baseline', + 'capHeight', + 'lineHeight' ].forEach(addGetter) + +function addGetter(name) { + Object.defineProperty(TextLayout.prototype, name, { + get: wrapper(name), + configurable: true + }) +} + +//create lookups for private vars +function wrapper(name) { + return (new Function([ + 'return function '+name+'() {', + ' return this._'+name, + '}' + ].join('\n')))() +} + +function getGlyphById(font, id) { + if (!font.chars || font.chars.length === 0) + return null + + var glyphIdx = findChar(font.chars, id) + if (glyphIdx >= 0) + return font.chars[glyphIdx] + return null +} + +function getXHeight(font) { + for (var i=0; i= 0) + return font.chars[idx].height + } + return 0 +} + +function getMGlyph(font) { + for (var i=0; i= 0) + return font.chars[idx] + } + return 0 +} + +function getCapHeight(font) { + for (var i=0; i= 0) + return font.chars[idx].height + } + return 0 +} + +function getKerning(font, left, right) { + if (!font.kernings || font.kernings.length === 0) + return 0 + + var table = font.kernings + for (var i=0; i 0 + }) + + // provide visible glyphs for convenience + this.visibleGlyphs = glyphs + + // get common vertex data + var positions = vertices.positions(glyphs) + var uvs = vertices.uvs(glyphs, texWidth, texHeight, flipY) + var indices = createIndices([], { + clockwise: true, + type: 'uint16', + count: glyphs.length + }) + + // update vertex data + this.setIndex(indices) + this.setAttribute('position', new THREE.BufferAttribute(positions, 2)) + this.setAttribute('uv', new THREE.BufferAttribute(uvs, 2)) + + // update multipage data + if (!opt.multipage && 'page' in this.attributes) { + // disable multipage rendering + this.removeAttribute('page') + } else if (opt.multipage) { + // enable multipage rendering + var pages = vertices.pages(glyphs) + this.setAttribute('page', new THREE.BufferAttribute(pages, 1)) + } +} + +TextGeometry.prototype.computeBoundingSphere = function () { + if (this.boundingSphere === null) { + this.boundingSphere = new THREE.Sphere() + } + + var positions = this.attributes.position.array + var itemSize = this.attributes.position.itemSize + if (!positions || !itemSize || positions.length < 2) { + this.boundingSphere.radius = 0 + this.boundingSphere.center.set(0, 0, 0) + return + } + utils.computeSphere(positions, this.boundingSphere) + if (isNaN(this.boundingSphere.radius)) { + console.error('THREE.BufferGeometry.computeBoundingSphere(): ' + + 'Computed radius is NaN. The ' + + '"position" attribute is likely to have NaN values.') + } +} + +TextGeometry.prototype.computeBoundingBox = function () { + if (this.boundingBox === null) { + this.boundingBox = new THREE.Box3() + } + + var bbox = this.boundingBox + var positions = this.attributes.position.array + var itemSize = this.attributes.position.itemSize + if (!positions || !itemSize || positions.length < 2) { + bbox.makeEmpty() + return + } + utils.computeBox(positions, bbox) +} + +},{"./lib/utils":35,"./lib/vertices":36,"inherits":28,"layout-bmfont-text":30,"quad-indices":33}],35:[function(require,module,exports){ +var itemSize = 2 +var box = { min: [0, 0], max: [0, 0] } + +function bounds (positions) { + var count = positions.length / itemSize + box.min[0] = positions[0] + box.min[1] = positions[1] + box.max[0] = positions[0] + box.max[1] = positions[1] + + for (var i = 0; i < count; i++) { + var x = positions[i * itemSize + 0] + var y = positions[i * itemSize + 1] + box.min[0] = Math.min(x, box.min[0]) + box.min[1] = Math.min(y, box.min[1]) + box.max[0] = Math.max(x, box.max[0]) + box.max[1] = Math.max(y, box.max[1]) + } +} + +module.exports.computeBox = function (positions, output) { + bounds(positions) + output.min.set(box.min[0], box.min[1], 0) + output.max.set(box.max[0], box.max[1], 0) +} + +module.exports.computeSphere = function (positions, output) { + bounds(positions) + var minX = box.min[0] + var minY = box.min[1] + var maxX = box.max[0] + var maxY = box.max[1] + var width = maxX - minX + var height = maxY - minY + var length = Math.sqrt(width * width + height * height) + output.center.set(minX + width / 2, minY + height / 2, 0) + output.radius = length / 2 +} + +},{}],36:[function(require,module,exports){ +module.exports.pages = function pages (glyphs) { + var pages = new Float32Array(glyphs.length * 4 * 1) + var i = 0 + glyphs.forEach(function (glyph) { + var id = glyph.data.page || 0 + pages[i++] = id + pages[i++] = id + pages[i++] = id + pages[i++] = id + }) + return pages +} + +module.exports.uvs = function uvs (glyphs, texWidth, texHeight, flipY) { + var uvs = new Float32Array(glyphs.length * 4 * 2) + var i = 0 + glyphs.forEach(function (glyph) { + var bitmap = glyph.data + var bw = (bitmap.x + bitmap.width) + var bh = (bitmap.y + bitmap.height) + + // top left position + var u0 = bitmap.x / texWidth + var v1 = bitmap.y / texHeight + var u1 = bw / texWidth + var v0 = bh / texHeight + + if (flipY) { + v1 = (texHeight - bitmap.y) / texHeight + v0 = (texHeight - bh) / texHeight + } + + // BL + uvs[i++] = u0 + uvs[i++] = v1 + // TL + uvs[i++] = u0 + uvs[i++] = v0 + // TR + uvs[i++] = u1 + uvs[i++] = v0 + // BR + uvs[i++] = u1 + uvs[i++] = v1 + }) + return uvs +} + +module.exports.positions = function positions (glyphs) { + var positions = new Float32Array(glyphs.length * 4 * 2) + var i = 0 + glyphs.forEach(function (glyph) { + var bitmap = glyph.data + + // bottom left position + var x = glyph.position[0] + bitmap.xoffset + var y = glyph.position[1] + bitmap.yoffset + + // quad size + var w = bitmap.width + var h = bitmap.height + + // BL + positions[i++] = x + positions[i++] = y + // TL + positions[i++] = x + positions[i++] = y + h + // TR + positions[i++] = x + w + positions[i++] = y + h + // BR + positions[i++] = x + w + positions[i++] = y + }) + return positions +} + +},{}],37:[function(require,module,exports){ +var newline = /\n/ +var newlineChar = '\n' +var whitespace = /\s/ + +module.exports = function(text, opt) { + var lines = module.exports.lines(text, opt) + return lines.map(function(line) { + return text.substring(line.start, line.end) + }).join('\n') +} + +module.exports.lines = function wordwrap(text, opt) { + opt = opt||{} + + //zero width results in nothing visible + if (opt.width === 0 && opt.mode !== 'nowrap') + return [] + + text = text||'' + var width = typeof opt.width === 'number' ? opt.width : Number.MAX_VALUE + var start = Math.max(0, opt.start||0) + var end = typeof opt.end === 'number' ? opt.end : text.length + var mode = opt.mode + + var measure = opt.measure || monospace + if (mode === 'pre') + return pre(measure, text, start, end, width) + else + return greedy(measure, text, start, end, width, mode) +} + +function idxOf(text, chr, start, end) { + var idx = text.indexOf(chr, start) + if (idx === -1 || idx > end) + return end + return idx +} + +function isWhitespace(chr) { + return whitespace.test(chr) +} + +function pre(measure, text, start, end, width) { + var lines = [] + var lineStart = start + for (var i=start; i start) { + if (isWhitespace(text.charAt(lineEnd))) + break + lineEnd-- + } + if (lineEnd === start) { + if (nextStart > start + newlineChar.length) nextStart-- + lineEnd = nextStart // If no characters to break, show all. + } else { + nextStart = lineEnd + //eat whitespace at end of line + while (lineEnd > start) { + if (!isWhitespace(text.charAt(lineEnd - newlineChar.length))) + break + lineEnd-- + } + } + } + if (lineEnd >= start) { + var result = measure(text, start, lineEnd, testWidth) + lines.push(result) + } + start = nextStart + } + return lines +} + +//determines the visible number of glyphs within a given width +function monospace(text, start, end, width) { + var glyphs = Math.min(width, end-start) + return { + start: start, + end: start+glyphs + } +} +},{}],38:[function(require,module,exports){ +module.exports = extend + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function extend() { + var target = {} + + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i] + + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target +} + +},{}]},{},[12]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2J1dHRvbi5qcyIsIm1vZHVsZXMvZGF0Z3VpdnIvY2hlY2tib3guanMiLCJtb2R1bGVzL2RhdGd1aXZyL2NvbG9ycGlja2VyLmpzIiwibW9kdWxlcy9kYXRndWl2ci9jb2xvcnMuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2Ryb3Bkb3duLmpzIiwibW9kdWxlcy9kYXRndWl2ci9mb2xkZXIuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2ZvbnQuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2dyYWIuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2dyYXBoaWMuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2ltYWdlYnV0dG9uLmpzIiwibW9kdWxlcy9kYXRndWl2ci9pbWFnZWJ1dHRvbmdyaWQuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2luZGV4LmpzIiwibW9kdWxlcy9kYXRndWl2ci9pbnRlcmFjdGlvbi5qcyIsIm1vZHVsZXMvZGF0Z3VpdnIva2V5Ym9hcmQuanMiLCJtb2R1bGVzL2RhdGd1aXZyL2xheW91dC5qcyIsIm1vZHVsZXMvZGF0Z3VpdnIvcGFsZXR0ZS5qcyIsIm1vZHVsZXMvZGF0Z3VpdnIvc2Rmc2hhZGVyX2xvZ2RlcHRoLmpzIiwibW9kdWxlcy9kYXRndWl2ci9zZGZ0ZXh0LmpzIiwibW9kdWxlcy9kYXRndWl2ci9zaGFyZWRtYXRlcmlhbHMuanMiLCJtb2R1bGVzL2RhdGd1aXZyL3NsaWRlci5qcyIsIm1vZHVsZXMvZGF0Z3VpdnIvdGV4dGJveC5qcyIsIm1vZHVsZXMvZGF0Z3VpdnIvdGV4dGxhYmVsLmpzIiwibW9kdWxlcy9kYXRndWl2ci91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9hbi1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcy1udW1iZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZHR5cGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sYXlvdXQtYm1mb250LXRleHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1ibWZvbnQtYXNjaWkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcXVhZC1pbmRpY2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RocmVlLWJtZm9udC10ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RocmVlLWJtZm9udC10ZXh0L2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy90aHJlZS1ibWZvbnQtdGV4dC9saWIvdmVydGljZXMuanMiLCJub2RlX21vZHVsZXMvd29yZC13cmFwcGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O2tCQ3dCd0IsWTs7QUFMeEI7Ozs7QUFDQTs7SUFBWSxNOztBQUNaOztJQUFZLE07O0FBQ1o7O0lBQVksSTs7Ozs7O0FBdEJaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JlLFNBQVMsWUFBVCxHQU9QO0FBQUEsaUZBQUosRUFBSTtBQUFBLE1BTk4sV0FNTSxRQU5OLFdBTU07QUFBQSxNQUxOLE1BS00sUUFMTixNQUtNO0FBQUEsK0JBSk4sWUFJTTtBQUFBLE1BSk4sWUFJTSxxQ0FKUyxXQUlUO0FBQUEsd0JBSE4sS0FHTTtBQUFBLE1BSE4sS0FHTSw4QkFIRSxPQUFPLFdBR1Q7QUFBQSx5QkFGTixNQUVNO0FBQUEsTUFGTixNQUVNLCtCQUZHLE9BQU8sWUFFVjtBQUFBLHdCQUROLEtBQ007QUFBQSxNQUROLEtBQ00sOEJBREUsT0FBTyxXQUNUOztBQUVOLE1BQU0sZUFBZSxRQUFRLEdBQVIsR0FBYyxPQUFPLFlBQTFDO0FBQ0Es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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxyXG4qIGRhdC1ndWlWUiBKYXZhc2NyaXB0IENvbnRyb2xsZXIgTGlicmFyeSBmb3IgVlJcclxuKiBodHRwczovL2dpdGh1Yi5jb20vZGF0YWFydHMvZGF0Lmd1aVZSXHJcbipcclxuKiBDb3B5cmlnaHQgMjAxNiBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIEluYy5cclxuKlxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4qXHJcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4qXHJcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgY3JlYXRlSW50ZXJhY3Rpb24gZnJvbSAnLi9pbnRlcmFjdGlvbic7XHJcbmltcG9ydCAqIGFzIENvbG9ycyBmcm9tICcuL2NvbG9ycyc7XHJcbmltcG9ydCAqIGFzIExheW91dCBmcm9tICcuL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIEdyYWIgZnJvbSAnLi9ncmFiJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJ1dHRvbigge1xyXG4gIHRleHRDcmVhdG9yLFxyXG4gIG9iamVjdCxcclxuICBwcm9wZXJ0eU5hbWUgPSAndW5kZWZpbmVkJyxcclxuICB3aWR0aCA9IExheW91dC5QQU5FTF9XSURUSCxcclxuICBoZWlnaHQgPSBMYXlvdXQuUEFORUxfSEVJR0hULFxyXG4gIGRlcHRoID0gTGF5b3V0LlBBTkVMX0RFUFRIXHJcbn0gPSB7fSApe1xyXG5cclxuICBjb25zdCBCVVRUT05fV0lEVEggPSB3aWR0aCAqIDAuNSAtIExheW91dC5QQU5FTF9NQVJHSU47XHJcbiAgY29uc3QgQlVUVE9OX0hFSUdIVCA9IGhlaWdodCAtIExheW91dC5QQU5FTF9NQVJHSU47XHJcbiAgY29uc3QgQlVUVE9OX0RFUFRIID0gTGF5b3V0LkJVVFRPTl9ERVBUSDtcclxuXHJcbiAgY29uc3QgZ3JvdXAgPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICBncm91cC5ndWlUeXBlID0gXCJidXR0b25cIjtcclxuICBncm91cC50b1N0cmluZyA9ICgpID0+IGBbJHtncm91cC5ndWlUeXBlfTogJHtwcm9wZXJ0eU5hbWV9XWA7XHJcblxyXG4gIGNvbnN0IHBhbmVsID0gTGF5b3V0LmNyZWF0ZVBhbmVsKCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApO1xyXG4gIGdyb3VwLmFkZCggcGFuZWwgKTtcclxuXHJcbiAgLy8gIGJhc2UgY2hlY2tib3hcclxuICBjb25zdCBkaXZpc2lvbnMgPSA0O1xyXG4gIGNvbnN0IGFzcGVjdFJhdGlvID0gQlVUVE9OX1dJRFRIIC8gQlVUVE9OX0hFSUdIVDtcclxuICBjb25zdCByZWN0ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KCBCVVRUT05fV0lEVEgsIEJVVFRPTl9IRUlHSFQsIEJVVFRPTl9ERVBUSCwgTWF0aC5mbG9vciggZGl2aXNpb25zICogYXNwZWN0UmF0aW8gKSwgZGl2aXNpb25zLCBkaXZpc2lvbnMgKTtcclxuICByZWN0LnRyYW5zbGF0ZSggQlVUVE9OX1dJRFRIICogMC41LCAwLCAwICk7XHJcblxyXG4gIC8vICBoaXRzY2FuIHZvbHVtZVxyXG4gIGNvbnN0IGhpdHNjYW5NYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCgpO1xyXG4gIGhpdHNjYW5NYXRlcmlhbC52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGhpdHNjYW5Wb2x1bWUgPSBuZXcgVEhSRUUuTWVzaCggcmVjdC5jbG9uZSgpLCBoaXRzY2FuTWF0ZXJpYWwgKTtcclxuICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEggKiAwLjU7XHJcbiAgaGl0c2NhblZvbHVtZS5wb3NpdGlvbi54ID0gd2lkdGggKiAwLjU7XHJcblxyXG4gIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHsgY29sb3I6IENvbG9ycy5CVVRUT05fQ09MT1IgfSk7XHJcbiAgY29uc3QgZmlsbGVkVm9sdW1lID0gbmV3IFRIUkVFLk1lc2goIHJlY3QuY2xvbmUoKSwgbWF0ZXJpYWwgKTtcclxuICBoaXRzY2FuVm9sdW1lLmFkZCggZmlsbGVkVm9sdW1lICk7XHJcblxyXG5cclxuICBjb25zdCBidXR0b25MYWJlbCA9IHRleHRDcmVhdG9yLmNyZWF0ZSggcHJvcGVydHlOYW1lLCB7IHNjYWxlOiAwLjg2NiB9ICk7XHJcblxyXG4gIC8vICBUaGlzIGlzIGEgcmVhbCBoYWNrIHNpbmNlIHdlIG5lZWQgdG8gZml0IHRoZSB0ZXh0IHBvc2l0aW9uIHRvIHRoZSBmb250IHNjYWxpbmdcclxuICAvLyAgUGxlYXNlIGZpeCBtZS5cclxuICBidXR0b25MYWJlbC5wb3NpdGlvbi54ID0gQlVUVE9OX1dJRFRIICogMC41IC0gYnV0dG9uTGFiZWwubGF5b3V0LndpZHRoICogMC4wMDAwMTEgKiAwLjU7XHJcbiAgYnV0dG9uTGFiZWwucG9zaXRpb24ueiA9IEJVVFRPTl9ERVBUSCAqIDEuMjtcclxuICBidXR0b25MYWJlbC5wb3NpdGlvbi55ID0gLTAuMDI1O1xyXG4gIGZpbGxlZFZvbHVtZS5hZGQoIGJ1dHRvbkxhYmVsICk7XHJcblxyXG5cclxuICBjb25zdCBkZXNjcmlwdG9yTGFiZWwgPSB0ZXh0Q3JlYXRvci5jcmVhdGUoIHByb3BlcnR5TmFtZSApO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi54ID0gTGF5b3V0LlBBTkVMX0xBQkVMX1RFWFRfTUFSR0lOO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgZGVzY3JpcHRvckxhYmVsLnBvc2l0aW9uLnkgPSAtMC4wMztcclxuXHJcbiAgY29uc3QgY29udHJvbGxlcklEID0gTGF5b3V0LmNyZWF0ZUNvbnRyb2xsZXJJREJveCggaGVpZ2h0LCBDb2xvcnMuQ09OVFJPTExFUl9JRF9CVVRUT04gKTtcclxuICBjb250cm9sbGVySUQucG9zaXRpb24ueiA9IGRlcHRoO1xyXG5cclxuICBwYW5lbC5hZGQoIGRlc2NyaXB0b3JMYWJlbCwgaGl0c2NhblZvbHVtZSwgY29udHJvbGxlcklEICk7XHJcblxyXG4gIGNvbnN0IGludGVyYWN0aW9uID0gY3JlYXRlSW50ZXJhY3Rpb24oIGhpdHNjYW5Wb2x1bWUgKTtcclxuICBpbnRlcmFjdGlvbi5ldmVudHMub24oICdvblByZXNzZWQnLCBoYW5kbGVPblByZXNzICk7XHJcbiAgaW50ZXJhY3Rpb24uZXZlbnRzLm9uKCAnb25SZWxlYXNlZCcsIGhhbmRsZU9uUmVsZWFzZSApO1xyXG5cclxuICB1cGRhdGVWaWV3KCk7XHJcblxyXG4gIGZ1bmN0aW9uIGhhbmRsZU9uUHJlc3MoIHAgKXtcclxuICAgIGlmKCBncm91cC52aXNpYmxlID09PSBmYWxzZSApe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXSgpO1xyXG5cclxuICAgIGhpdHNjYW5Wb2x1bWUucG9zaXRpb24ueiA9IEJVVFRPTl9ERVBUSCAqIDAuMTtcclxuXHJcbiAgICBwLmxvY2tlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoYW5kbGVPblJlbGVhc2UoKXtcclxuICAgIGhpdHNjYW5Wb2x1bWUucG9zaXRpb24ueiA9IEJVVFRPTl9ERVBUSCAqIDAuNTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpZXcoKXtcclxuXHJcbiAgICBpZiggaW50ZXJhY3Rpb24uaG92ZXJpbmcoKSApe1xyXG4gICAgICBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIENvbG9ycy5CVVRUT05fSElHSExJR0hUX0NPTE9SICk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIENvbG9ycy5CVVRUT05fQ09MT1IgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBncm91cC5pbnRlcmFjdGlvbiA9IGludGVyYWN0aW9uO1xyXG4gIGdyb3VwLmhpdHNjYW4gPSBbIGhpdHNjYW5Wb2x1bWUsIHBhbmVsIF07XHJcblxyXG4gIGNvbnN0IGdyYWJJbnRlcmFjdGlvbiA9IEdyYWIuY3JlYXRlKCB7IGdyb3VwLCBwYW5lbCB9ICk7XHJcblxyXG4gIGdyb3VwLnVwZGF0ZUNvbnRyb2wgPSBmdW5jdGlvbiggaW5wdXRPYmplY3RzICl7XHJcbiAgICBpbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG4gICAgZ3JhYkludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcbiAgICB1cGRhdGVWaWV3KCk7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAubmFtZSA9IGZ1bmN0aW9uKCBzdHIgKXtcclxuICAgIGRlc2NyaXB0b3JMYWJlbC51cGRhdGVMYWJlbCggc3RyICk7XHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfTtcclxuICBncm91cC5idXR0b25MYWJlbCA9IGZ1bmN0aW9uKCBzdHIgKXtcclxuICAgIGJ1dHRvbkxhYmVsLnVwZGF0ZUxhYmVsKCBzdHIgKTtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9O1xyXG5cclxuICByZXR1cm4gZ3JvdXA7XHJcbn0iLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0IGNyZWF0ZVRleHRMYWJlbCBmcm9tICcuL3RleHRsYWJlbCc7XHJcbmltcG9ydCBjcmVhdGVJbnRlcmFjdGlvbiBmcm9tICcuL2ludGVyYWN0aW9uJztcclxuaW1wb3J0ICogYXMgQ29sb3JzIGZyb20gJy4vY29sb3JzJztcclxuaW1wb3J0ICogYXMgTGF5b3V0IGZyb20gJy4vbGF5b3V0JztcclxuaW1wb3J0ICogYXMgR3JhcGhpYyBmcm9tICcuL2dyYXBoaWMnO1xyXG5pbXBvcnQgKiBhcyBTaGFyZWRNYXRlcmlhbHMgZnJvbSAnLi9zaGFyZWRtYXRlcmlhbHMnO1xyXG5pbXBvcnQgKiBhcyBHcmFiIGZyb20gJy4vZ3JhYic7XHJcbmltcG9ydCB7IENIRUNLQk9YX1NJWkUgfSBmcm9tICcuL2xheW91dCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDaGVja2JveCgge1xyXG4gIHRleHRDcmVhdG9yLFxyXG4gIG9iamVjdCxcclxuICBwcm9wZXJ0eU5hbWUgPSAndW5kZWZpbmVkJyxcclxuICBpbml0aWFsVmFsdWUgPSBmYWxzZSxcclxuICB3aWR0aCA9IExheW91dC5QQU5FTF9XSURUSCxcclxuICBoZWlnaHQgPSBMYXlvdXQuUEFORUxfSEVJR0hULFxyXG4gIGRlcHRoID0gTGF5b3V0LlBBTkVMX0RFUFRIXHJcbn0gPSB7fSApe1xyXG5cclxuICBjb25zdCBzdGF0ZSA9IHtcclxuICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXHJcbiAgICBsaXN0ZW46IGZhbHNlXHJcbiAgfTtcclxuICBcclxuICBjb25zdCBDSEVDS0JPWF9QQUQgPSBMYXlvdXQuUEFORUxfSEVJR0hUIC0gTGF5b3V0LkNIRUNLQk9YX1NJWkU7XHJcbiAgXHJcbiAgY29uc3QgZ3JvdXAgPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICBncm91cC5ndWlUeXBlID0gXCJjaGVja2JveFwiO1xyXG4gIGdyb3VwLnRvU3RyaW5nID0gKCkgPT4gYFske2dyb3VwLmd1aVR5cGV9OiAke3Byb3BlcnR5TmFtZX1dYDtcclxuICBcclxuICBjb25zdCBkZXNjcmlwdG9yTGFiZWwgPSB0ZXh0Q3JlYXRvci5jcmVhdGUoIHByb3BlcnR5TmFtZSApO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi54ID0gTGF5b3V0LlBBTkVMX0xBQkVMX1RFWFRfTUFSR0lOO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgZGVzY3JpcHRvckxhYmVsLnBvc2l0aW9uLnkgPSAtMC4wMztcclxuXHJcbiAgbGV0IG9uQ2hhbmdlZENCO1xyXG4gIGxldCBvbkZpbmlzaENoYW5nZUNCO1xyXG5cclxuICBncm91cC5vbkNoYW5nZSA9IGZ1bmN0aW9uKCBjYWxsYmFjayApe1xyXG4gICAgb25DaGFuZ2VkQ0IgPSBjYWxsYmFjaztcclxuICAgIHJldHVybiBncm91cDtcclxuICB9O1xyXG5cclxuICBncm91cC5saXN0ZW4gPSBmdW5jdGlvbigpe1xyXG4gICAgc3RhdGUubGlzdGVuID0gdHJ1ZTtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9O1xyXG5cclxuICBncm91cC5uYW1lID0gZnVuY3Rpb24oIHN0ciApe1xyXG4gICAgZGVzY3JpcHRvckxhYmVsLnVwZGF0ZUxhYmVsKCBzdHIgKTtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9O1xyXG5cclxuICBsZXQgY2hlY2ttYXJrLCBib3JkZXJCb3gsIGludGVyYWN0aW9uO1xyXG4gIFxyXG4gIGZ1bmN0aW9uIGhhbmRsZU9uUHJlc3MoIHAgKXtcclxuICAgIGlmKCBncm91cC52aXNpYmxlID09PSBmYWxzZSApe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGUudmFsdWUgPSAhc3RhdGUudmFsdWU7XHJcblxyXG4gICAgb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXSA9IHN0YXRlLnZhbHVlO1xyXG5cclxuICAgIGlmKCBvbkNoYW5nZWRDQiApe1xyXG4gICAgICBvbkNoYW5nZWRDQiggc3RhdGUudmFsdWUgKTtcclxuICAgIH1cclxuXHJcbiAgICBwLmxvY2tlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVWaWV3KCl7XHJcbiAgICBjaGVja21hcmsudmlzaWJsZSA9IHN0YXRlLnZhbHVlO1xyXG4gICAgYm9yZGVyQm94LnZpc2libGUgPSBpbnRlcmFjdGlvbi5ob3ZlcmluZygpO1xyXG4gICAgaWYgKF9oZWFkZXIpIHtcclxuICAgICAgX2hlYWRlci5jaGVja21hcmsudmlzaWJsZSA9IHN0YXRlLnZhbHVlO1xyXG4gICAgICBfaGVhZGVyLmJvcmRlckJveC52aXNpYmxlID0gX2hlYWRlci5pbnRlcmFjdGlvbi5ob3ZlcmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuXHJcbiAgbGV0IGlzU2hvd25JbkZvbGRlckhlYWRlciA9IGZhbHNlO1xyXG4gIGdyb3VwLnNob3dJbkZvbGRlckhlYWRlciA9ICh2YWx1ZT10cnVlKSA9PiB7XHJcbiAgICBpZiAodmFsdWUgIT09IGlzU2hvd25JbkZvbGRlckhlYWRlcikge1xyXG4gICAgICBpc1Nob3duSW5Gb2xkZXJIZWFkZXIgPSB2YWx1ZTtcclxuICAgICAgLy9ncm91cC5mb2xkZXJIZWFkZXJPYmplY3QgPSB2YWx1ZSA/IGdldEZvbGRlckhlYWRlck9iamVjdCA6IG51bGw7XHJcbiAgICAgIC8veHh4OiBjYW4ndCB1c2Ugb3JkaW5hcnkgYWRkLi4uXHJcbiAgICAgIF9oZWFkZXIgPSBnZXRGb2xkZXJIZWFkZXJPYmplY3QoKTtcclxuICAgICAgaWYgKHZhbHVlKSBncm91cC5mb2xkZXIuYWRkSGVhZGVySXRlbShfaGVhZGVyKTtcclxuICAgICAgZWxzZSBfaGVhZGVyLnZpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdyb3VwLCAnaXNTaG93bkluRm9sZGVySGVhZGVyJywge1xyXG4gICAgZ2V0OiAoKSA9PiB7IHJldHVybiBpc1Nob3duSW5Gb2xkZXJIZWFkZXIgfSxcclxuICAgIHNldDogZ3JvdXAuc2hvd0luRm9sZGVySGVhZGVyXHJcbiAgfSk7XHJcbiAgbGV0IF9oZWFkZXI7XHJcbiAgZnVuY3Rpb24gZ2V0Rm9sZGVySGVhZGVyT2JqZWN0KCkge1xyXG4gICAgaWYgKF9oZWFkZXIpIHJldHVybiBfaGVhZGVyO1xyXG4gICAgbGV0IHNpemUgPSBMYXlvdXQuUEFORUxfSEVJR0hUICogMC42O1xyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShzaXplLCBzaXplLCBkZXB0aCk7XHJcbiAgICByZWN0LnRyYW5zbGF0ZShzaXplKjAuNSwgMCwgMCk7XHJcbiAgICBjb25zdCBoaXRzY2FuTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoKTtcclxuICAgIGhpdHNjYW5NYXRlcmlhbC52aXNpYmxlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGhpdHNjYW5Wb2x1bWUgPSBuZXcgVEhSRUUuTWVzaChyZWN0LmNsb25lKCksIGhpdHNjYW5NYXRlcmlhbCk7XHJcbiAgICBfaGVhZGVyID0gaGl0c2NhblZvbHVtZTsgLy9YWFg6IHNpZGUtZWZmZWN0Li4uXHJcbiAgICAvLyB4IHBvc2l0aW9uIGlzIHNldCBpbiBmb2xkZXIgcGVyZm9ybUhlYWRlckxheW91dCgpXHJcbiAgICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnogPSBkZXB0aDtcclxuICAgIFxyXG4gICAgLy9UT0RPOiBnZXQgdGhpcyB0byB3b3JrLi4uIGFkZCB0b29sdGlwXHJcbiAgICBjb25zdCBib3JkZXJCb3ggPSBMYXlvdXQuY3JlYXRlUGFuZWwoc2l6ZSArIExheW91dC5CT1JERVJfVEhJQ0tORVNTLCBzaXplICsgTGF5b3V0LkJPUkRFUl9USElDS05FU1MsIGRlcHRoLCB0cnVlICk7XHJcbiAgICBfaGVhZGVyLmJvcmRlckJveCA9IGJvcmRlckJveDtcclxuICAgIGJvcmRlckJveC5tYXRlcmlhbC5jb2xvci5zZXRIZXgoIDB4MWY3YWU3ICk7XHJcbiAgICBib3JkZXJCb3gucG9zaXRpb24ueCA9IC1MYXlvdXQuQk9SREVSX1RISUNLTkVTUyAqIDAuNSArIHdpZHRoICogMC41O1xyXG4gICAgYm9yZGVyQm94LnBvc2l0aW9uLnogPSBkZXB0aCAqIDAuNTtcclxuICBcclxuICAgIGNvbnN0IGNoZWNrbWFyayA9IEdyYXBoaWMuY2hlY2ttYXJrKDAuNCAqIHNpemUgLyBMYXlvdXQuQ0hFQ0tCT1hfU0laRSk7XHJcbiAgICBfaGVhZGVyLmNoZWNrbWFyayA9IGNoZWNrbWFyaztcclxuICAgIGNoZWNrbWFyay52aXNpYmxlID0gc3RhdGUudmFsdWU7XHJcbiAgICBjaGVja21hcmsucG9zaXRpb24ueiA9IGRlcHRoICogMC41MTtcclxuICAgIGhpdHNjYW5Wb2x1bWUuYWRkKGNoZWNrbWFyayk7XHJcblxyXG4gICAgY29uc3QgaW50ZXJhY3Rpb24gPSBjcmVhdGVJbnRlcmFjdGlvbihoaXRzY2FuVm9sdW1lKTtcclxuICAgIGludGVyYWN0aW9uLmV2ZW50cy5vbignb25QcmVzc2VkJywgaGFuZGxlSGVhZGVyUHJlc3MpO1xyXG4gICAgX2hlYWRlci5pbnRlcmFjdGlvbiA9IGludGVyYWN0aW9uO1xyXG5cclxuICAgIC8vYWRkIHVwZGF0ZUNvbnRyb2wgbWV0aG9kIGhlcmUgLSBhdHRlbXB0IHRvIG1ha2UgZ2VuZXJpYyB2ZXJzaW9uIGluIGZvbGRlciB3YXMgaW5hZGVxdWF0ZVxyXG4gICAgX2hlYWRlci51cGRhdGVDb250cm9sID0gaW5wdXRPYmplY3RzID0+IHtcclxuICAgICAgaWYgKHN0YXRlLmxpc3Rlbikge1xyXG4gICAgICAgIHN0YXRlLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5TmFtZV07XHJcbiAgICAgIH1cclxuICAgICAgLy9uYjogaW50ZXJhY3Rpb24gd2lsbCBiZSBmcm9tIGdldEZvbGRlckhlYWRlck9iamVjdCgpIHNjb3BlLCBcclxuICAgICAgLy9ub3QgdGhlIG1haW4gb25lIHRoYXQgYXBwbGllcyB0aGF0IGFwcGxpZXMgdG8gdGhlIG9yZGluYXJ5IGNvbnRyb2wuXHJcbiAgICAgIGludGVyYWN0aW9uLnVwZGF0ZShpbnB1dE9iamVjdHMpO1xyXG4gICAgICB1cGRhdGVWaWV3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIF9oZWFkZXI7XHJcbiAgfVxyXG5cclxuICAvL1RPRE8gcmV2aWV3IG5lZWQgZm9yIHNlcGFyYXRlIGhlYWRlciB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb25cclxuICBmdW5jdGlvbiBoYW5kbGVIZWFkZXJQcmVzcyhwKXtcclxuICAgIGlmIChncm91cC5mb2xkZXIudmlzaWJsZSA9PT0gZmFsc2UgfHwgX2hlYWRlci52aXNpYmxlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgc3RhdGUudmFsdWUgPSAhc3RhdGUudmFsdWU7XHJcbiAgICBvYmplY3RbcHJvcGVydHlOYW1lXSA9IHN0YXRlLnZhbHVlO1xyXG4gICAgaWYgKG9uQ2hhbmdlZENCKSBvbkNoYW5nZWRDQihzdGF0ZS52YWx1ZSk7XHJcbiAgICBwLmxvY2tlZCA9IHRydWU7XHJcblxyXG4gICAgLy9tYWtlIHN1cmUgdmlldyBpcyBhbHNvIHVwIHRvIGRhdGU7IHVwZGF0ZVZpZXcoKSB3b24ndCBoYXBwZW4gd2hlbiBwYXJlbnQgZm9sZGVyIGlzIGNvbGxhcHNlZFxyXG4gICAgX2hlYWRlci5jaGVja21hcmsudmlzaWJsZSA9IHN0YXRlLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbGV0IHBhbmVsO1xyXG4gIC8vYWxsIGxheW91dCBldGMgaXMgZG9uZSBpbnNpZGUgc2V0SGVpZ2h0LCB3aGljaCBpcyBjYWxsZWQgb25jZSBhdCBzdGFydC5cclxuICAvL2FueSBjYWxsYmFja3MgZXRjIHJlbWFpbiBhc3NvY2lhdGVkIHdpdGggJ2dyb3VwJy5cclxuICBncm91cC5zZXRIZWlnaHQgPSBuZXdIZWlnaHQgPT4ge1xyXG4gICAgaWYgKHBhbmVsKSBncm91cC5yZW1vdmUocGFuZWwpO1xyXG4gICAgXHJcbiAgICBncm91cC5zcGFjaW5nID0gbmV3SGVpZ2h0O1xyXG4gICAgXHJcbiAgICBjb25zdCBDSEVDS0JPWF9XSURUSCA9IG5ld0hlaWdodCAtIENIRUNLQk9YX1BBRDtcclxuICAgIGNvbnN0IENIRUNLQk9YX0hFSUdIVCA9IENIRUNLQk9YX1dJRFRIO1xyXG4gICAgY29uc3QgQ0hFQ0tCT1hfREVQVEggPSBkZXB0aDtcclxuICAgIGNvbnN0IENIRUNLTUFSS19TSVpFID0gMC40ICogQ0hFQ0tCT1hfV0lEVEggLyBMYXlvdXQuQ0hFQ0tCT1hfU0laRTtcclxuICBcclxuICAgIHBhbmVsID0gTGF5b3V0LmNyZWF0ZVBhbmVsKCB3aWR0aCwgbmV3SGVpZ2h0LCBkZXB0aCApO1xyXG4gICAgZ3JvdXAuYWRkKCBwYW5lbCApO1xyXG4gIFxyXG4gICAgLy8gIGJhc2UgY2hlY2tib3hcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoIENIRUNLQk9YX1dJRFRILCBDSEVDS0JPWF9IRUlHSFQsIENIRUNLQk9YX0RFUFRIICk7XHJcbiAgICByZWN0LnRyYW5zbGF0ZSggQ0hFQ0tCT1hfV0lEVEggKiAwLjUsIDAsIDAgKTtcclxuICBcclxuICBcclxuICAgIC8vICBoaXRzY2FuIHZvbHVtZVxyXG4gICAgY29uc3QgaGl0c2Nhbk1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7XHJcbiAgICBoaXRzY2FuTWF0ZXJpYWwudmlzaWJsZSA9IGZhbHNlO1xyXG4gIFxyXG4gICAgY29uc3QgaGl0c2NhblZvbHVtZSA9IG5ldyBUSFJFRS5NZXNoKCByZWN0LmNsb25lKCksIGhpdHNjYW5NYXRlcmlhbCApO1xyXG4gICAgaGl0c2NhblZvbHVtZS5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnggPSB3aWR0aCAqIDAuNTtcclxuICBcclxuICAgIC8vICBvdXRsaW5lIHZvbHVtZVxyXG4gICAgLy8gY29uc3Qgb3V0bGluZSA9IG5ldyBUSFJFRS5Cb3hIZWxwZXIoIGhpdHNjYW5Wb2x1bWUgKTtcclxuICAgIC8vIG91dGxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCBDb2xvcnMuT1VUTElORV9DT0xPUiApO1xyXG4gIFxyXG4gICAgLy8gIGNoZWNrYm94IHZvbHVtZVxyXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoeyBjb2xvcjogQ29sb3JzLkNIRUNLQk9YX0JHX0NPTE9SIH0pO1xyXG4gICAgY29uc3QgZmlsbGVkVm9sdW1lID0gbmV3IFRIUkVFLk1lc2goIHJlY3QuY2xvbmUoKSwgbWF0ZXJpYWwgKTtcclxuICAgIGhpdHNjYW5Wb2x1bWUuYWRkKCBmaWxsZWRWb2x1bWUgKTtcclxuICBcclxuICBcclxuICAgIGNvbnN0IGNvbnRyb2xsZXJJRCA9IExheW91dC5jcmVhdGVDb250cm9sbGVySURCb3goIG5ld0hlaWdodCwgQ29sb3JzLkNPTlRST0xMRVJfSURfQ0hFQ0tCT1ggKTtcclxuICAgIGNvbnRyb2xsZXJJRC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgXHJcbiAgICBib3JkZXJCb3ggPSBMYXlvdXQuY3JlYXRlUGFuZWwoIENIRUNLQk9YX1dJRFRIICsgTGF5b3V0LkJPUkRFUl9USElDS05FU1MsIENIRUNLQk9YX0hFSUdIVCArIExheW91dC5CT1JERVJfVEhJQ0tORVNTLCBDSEVDS0JPWF9ERVBUSCwgdHJ1ZSApO1xyXG4gICAgYm9yZGVyQm94Lm1hdGVyaWFsLmNvbG9yLnNldEhleCggMHgxZjdhZTcgKTtcclxuICAgIGJvcmRlckJveC5wb3NpdGlvbi54ID0gLUxheW91dC5CT1JERVJfVEhJQ0tORVNTICogMC41ICsgd2lkdGggKiAwLjU7XHJcbiAgICBib3JkZXJCb3gucG9zaXRpb24ueiA9IGRlcHRoICogMC41O1xyXG4gIFxyXG4gICAgY2hlY2ttYXJrID0gR3JhcGhpYy5jaGVja21hcmsoIENIRUNLTUFSS19TSVpFICk7XHJcbiAgICBjaGVja21hcmsucG9zaXRpb24ueiA9IGRlcHRoICogMC41MTtcclxuICAgIGhpdHNjYW5Wb2x1bWUuYWRkKCBjaGVja21hcmsgKTtcclxuICBcclxuICAgIHBhbmVsLmFkZCggZGVzY3JpcHRvckxhYmVsLCBoaXRzY2FuVm9sdW1lLCBjb250cm9sbGVySUQsIGJvcmRlckJveCApO1xyXG4gIFxyXG4gICAgLy8gZ3JvdXAuYWRkKCBmaWxsZWRWb2x1bWUsIG91dGxpbmUsIGhpdHNjYW5Wb2x1bWUsIGRlc2NyaXB0b3JMYWJlbCApO1xyXG4gIFxyXG4gICAgaW50ZXJhY3Rpb24gPSBjcmVhdGVJbnRlcmFjdGlvbiggaGl0c2NhblZvbHVtZSApO1xyXG4gICAgaW50ZXJhY3Rpb24uZXZlbnRzLm9uKCAnb25QcmVzc2VkJywgaGFuZGxlT25QcmVzcyApO1xyXG4gIFxyXG4gICAgdXBkYXRlVmlldygpO1xyXG4gIFxyXG4gIFxyXG4gICAgZ3JvdXAuaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvbjtcclxuICAgIGdyb3VwLmhpdHNjYW4gPSBbIGhpdHNjYW5Wb2x1bWUsIHBhbmVsIF07XHJcbiAgICBcclxuICAgIGNvbnN0IGdyYWJJbnRlcmFjdGlvbiA9IEdyYWIuY3JlYXRlKCB7IGdyb3VwLCBwYW5lbCB9ICk7XHJcbiAgICBcclxuICAgIGdyb3VwLnVwZGF0ZUNvbnRyb2wgPSBmdW5jdGlvbiggaW5wdXRPYmplY3RzICl7XHJcbiAgICAgIGlmKCBzdGF0ZS5saXN0ZW4gKXtcclxuICAgICAgICBzdGF0ZS52YWx1ZSA9IG9iamVjdFsgcHJvcGVydHlOYW1lIF07XHJcbiAgICAgIH1cclxuICAgICAgaW50ZXJhY3Rpb24udXBkYXRlKCBpbnB1dE9iamVjdHMgKTtcclxuICAgICAgZ3JhYkludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcbiAgICAgIHVwZGF0ZVZpZXcoKTtcclxuICAgIH07XHJcblxyXG4gICAgaWYoZ3JvdXAuZm9sZGVyKSBncm91cC5mb2xkZXIucmVxdWVzdExheW91dCgpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfTtcclxuICBcclxuICBncm91cC5zZXRIZWlnaHQoaGVpZ2h0KTtcclxuXHJcbiAgcmV0dXJuIGdyb3VwO1xyXG59IiwiLyoqXHJcbiAqIFRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhbiBpbWFnZWJ1dHRvbiB3aXRoIGEgc29saWQgY29sb3IgTWVzaEJhc2ljTWF0ZXJpYWxcclxuICogV2hlbiBwcmVzc2VkIGl0IGNvdWxkIGJyaW5nIHVwIHNvbWUga2luZCBvZiBwaWNrZXIgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24uXHJcbiAqXHJcbiAqIEZvciBub3csIGp1c3QgZ29pbmcgd2l0aCBSR0Igc2xpZGVycyBhcyBJIHNob3VsZG4ndCBzcGVuZCB0b28gbG9uZyBvbiB0aGlzIEFUTSxcclxuICogYnV0IHZlcnkgdGVtcHRlZCBieSBwcm9zcGVjdCBvZiBhbiBIUyBzcXVhcmUgd2l0aCBWIHNsaWRlci4uLlxyXG4gKiBvciBIIHNsaWRlciBhbmQgU1Ygc3F1YXJlIHdoaWNoIHNlZW1zIHRvIGJlIHdoYXQgZGF0Lmd1aSB1c2VzLlxyXG4gKiBPciBzb21ldGhpbmcgZmFuY2llciBsaWtlIGEgaHVlIGNpcmNsZSBhcm91bmQgYW4gU1YgdHJpYW5nbGUgZXRjIGV0Yy5cclxuICpcclxuICpcclxuICogUGV0ZXIgVG9kZCAyMDE3XHJcbiAqL1xyXG5cclxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IGNyZWF0ZUltYWdlQnV0dG9uIGZyb20gJy4vaW1hZ2VidXR0b24nO1xyXG5pbXBvcnQgKiBhcyBDb2xvcnMgZnJvbSAnLi9jb2xvcnMnO1xyXG5pbXBvcnQgKiBhcyBMYXlvdXQgZnJvbSAnLi9sYXlvdXQnO1xyXG5pbXBvcnQgKiBhcyBTaGFyZWRNYXRlcmlhbHMgZnJvbSAnLi9zaGFyZWRtYXRlcmlhbHMnO1xyXG5pbXBvcnQgKiBhcyBHcmFiIGZyb20gJy4vZ3JhYic7XHJcblxyXG4vL3NuaXBwZXQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vaHVnaHNrL2dsc2wtaHN2MnJnYi9ibG9iL21hc3Rlci9pbmRleC5nbHNsXHJcbi8vKG5vdCBnb2luZyB0byB0aGUgbGVuZ3RocyBvZiBnbHNsaWZ5LCBqdXN0IGNvcHlpbmcgdGhlIGZ1bmN0aW9uKVxyXG5jb25zdCBoc3YycmdiID0gYFxyXG52ZWMzIGhzdjJyZ2IodmVjMyBjKSB7XHJcbiAgICB2ZWM0IEsgPSB2ZWM0KDEuMCwgMi4wIC8gMy4wLCAxLjAgLyAzLjAsIDMuMCk7XHJcbiAgICB2ZWMzIHAgPSBhYnMoZnJhY3QoYy54eHggKyBLLnh5eikgKiA2LjAgLSBLLnd3dyk7XHJcbiAgICByZXR1cm4gYy56ICogbWl4KEsueHh4LCBjbGFtcChwIC0gSy54eHgsIDAuMCwgMS4wKSwgYy55KTtcclxufWA7XHJcblxyXG5jb25zdCBWZXJ0U2hhZGVyID0gYFxyXG52YXJ5aW5nIHZlYzIgdlV2O1xyXG5cclxudm9pZCBtYWluKCkge1xyXG4gICAgdlV2ID0gdXY7XHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbn1cclxuYDtcclxuXHJcbmNvbnN0IFNWRnJhZ1NoYWRlciA9IGBcclxudW5pZm9ybSB2ZWMzIHNlbGVjdGVkSFNWO1xyXG52YXJ5aW5nIHZlYzIgdlV2O1xyXG4ke2hzdjJyZ2J9XHJcblxyXG52b2lkIG1haW4oKSB7XHJcbiAgICB2ZWMzIGhzdiA9IHZlYzMoc2VsZWN0ZWRIU1YueCwgdlV2KTtcclxuXHJcbiAgICAvLyBkcmF3IGEgYmxhY2sgY2lyY2xlIGFyb3VuZCBzZWxlY3RlZCBTVi5cclxuICAgIC8vIG1pZ2h0IGxvb2sgYmV0dGVyIHZpYSBzZXBhcmF0ZSB0aHJlZSBvYmplY3QsIGJ1dCBzaGFkZXIgaXMgbGVzcyBob3VzZWtlZXBpbmdcclxuICAgIC8vIG5lZWQgdG8ga25vdyBhc3BlY3QgcmF0aW8gaWYgSSB3YW50IGl0IHRvIGJlIGEgcHJvcGVyIGNpcmNsZSwgdGhvdWdoLlxyXG4gICAgZmxvYXQgZCA9IGxlbmd0aChzZWxlY3RlZEhTVi55eiAtIHZVdik7XHJcbiAgICBpZiAoZCA8IDAuMDE1ICYmIGQgPiAwLjAxKSBoc3YueiA9IDAuO1xyXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IHNxcnQoaHN2MnJnYihoc3YpKTtcclxuICAgIGdsX0ZyYWdDb2xvci53ID0gMS4wOyAvLyBzanB0XHJcbn1cclxuYDtcclxuXHJcbmNvbnN0IEhTbGlkZXJGcmFnU2hhZGVyID0gYFxyXG51bmlmb3JtIHZlYzMgc2VsZWN0ZWRIU1Y7XHJcbnZhcnlpbmcgdmVjMiB2VXY7XHJcbiR7aHN2MnJnYn1cclxuXHJcbnZvaWQgbWFpbigpIHtcclxuICAgIC8vIGRyYXcgYSByZWN0YW5ndWxhciBpbmRpY2F0b3IgYXJvdW5kIHNlbGVjdGVkIEhcclxuICAgIC8vIG1pZ2h0IGxvb2sgYmV0dGVyIHZpYSBzZXBhcmF0ZSB0aHJlZSBvYmplY3QsIGJ1dCBzaGFkZXIgaXMgc2ltcGxlclxyXG4gICAgZmxvYXQgZGlzdCA9IGFicyhzZWxlY3RlZEhTVi54IC0gdlV2LngpO1xyXG4gICAgYm9vbCBpbmRpY2F0b3IgPSBkaXN0IDwgMC4wMSAmJiBkaXN0ID4gMC4wMDU7XHJcbiAgICBmbG9hdCB2ID0gaW5kaWNhdG9yID8gMC4gOiAxLjtcclxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBzcXJ0KGhzdjJyZ2IodmVjMyh2VXYueCwgMS4sIHYpKSk7XHJcbiAgICBnbF9GcmFnQ29sb3IudyA9IDEuMDsgLy8gc2pwdFxyXG59XHJcbmA7XHJcblxyXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE3MjQyMTQ0L2phdmFzY3JpcHQtY29udmVydC1oc2ItaHN2LWNvbG9yLXRvLXJnYi1hY2N1cmF0ZWx5XHJcbi8vd2h5IG5vdCB1c2UgVEhSRUUuQ29sb3IgbWV0aG9kcz9cclxuLyogYWNjZXB0cyBwYXJhbWV0ZXJzXHJcbiAqIGggIE9iamVjdCA9IHtoOngsIHM6eSwgdjp6fVxyXG4gKiBPUlxyXG4gKiBoLCBzLCB2XHJcbiovXHJcbmZ1bmN0aW9uIEhTVnRvUkdCKGgsIHMsIHYpIHtcclxuICAgIHZhciByLCBnLCBiLCBpLCBmLCBwLCBxLCB0O1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvL2hhY2sgdG8gdGFrZSBUSFJFRS5WZWN0b3IzLi4uXHJcbiAgICAgICAgaWYgKGgueCAhPT0gdW5kZWZpbmVkKSBzID0gaC55LCB2ID0gaC56LCBoID0gaC54O1xyXG4gICAgICAgIGVsc2UgcyA9IGgucywgdiA9IGgudiwgaCA9IGguaDtcclxuICAgIH1cclxuICAgIGkgPSBNYXRoLmZsb29yKGggKiA2KTtcclxuICAgIGYgPSBoICogNiAtIGk7XHJcbiAgICBwID0gdiAqICgxIC0gcyk7XHJcbiAgICBxID0gdiAqICgxIC0gZiAqIHMpO1xyXG4gICAgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKTtcclxuICAgIHN3aXRjaCAoaSAlIDYpIHtcclxuICAgICAgICBjYXNlIDA6IHIgPSB2LCBnID0gdCwgYiA9IHA7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTogciA9IHEsIGcgPSB2LCBiID0gcDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOiByID0gcCwgZyA9IHYsIGIgPSB0OyBicmVhaztcclxuICAgICAgICBjYXNlIDM6IHIgPSBwLCBnID0gcSwgYiA9IHY7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDogciA9IHQsIGcgPSBwLCBiID0gdjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA1OiByID0gdiwgZyA9IHAsIGIgPSBxOyBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcjogcixcclxuICAgICAgICBnOiBnLFxyXG4gICAgICAgIGI6IGJcclxuICAgIH07XHJcbn1cclxuLyogYWNjZXB0cyBwYXJhbWV0ZXJzXHJcbiAqIHIgIE9iamVjdCA9IHtyLCBnLCBifVxyXG4gKiBPUlxyXG4gKiByLCBnLCBiXHJcbiovXHJcbmZ1bmN0aW9uIFJHQnRvSFNWKHIsIGcsIGIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgZyA9IHIuZywgYiA9IHIuYiwgciA9IHIucjtcclxuICAgIH1cclxuICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKSwgbWluID0gTWF0aC5taW4ociwgZywgYiksXHJcbiAgICAgICAgZCA9IG1heCAtIG1pbixcclxuICAgICAgICBoLFxyXG4gICAgICAgIHMgPSAobWF4ID09PSAwID8gMCA6IGQgLyBtYXgpLFxyXG4gICAgICAgIHYgPSBtYXg7XHJcblxyXG4gICAgc3dpdGNoIChtYXgpIHtcclxuICAgICAgICBjYXNlIG1pbjogaCA9IDA7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgKyBkICogKGcgPCBiID8gNjogMCk7IGggLz0gNiAqIGQ7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgKyBkICogMjsgaCAvPSA2ICogZDsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBiOiBoID0gKHIgLSBnKSArIGQgKiA0OyBoIC89IDYgKiBkOyBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGg6IGgsXHJcbiAgICAgICAgczogcyxcclxuICAgICAgICB2OiB2LFxyXG4gICAgICAgIHg6IGgsIHk6IHMsIHo6IHYgLy9zbyB0aGF0IHdlIGNhbiBkbyBWZWN0b3IzLmNvcHkodGhpcylcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNvbG9yUGlja2VyKCB7XHJcbiAgICBvYmplY3QsXHJcbiAgICBwcm9wZXJ0eU5hbWUsIC8vbXVzdCBiZSBhIFRIUkVFLkNvbG9yIGZvciBub3cuLi4gc2hvdWxkIHJlZmVyIHRvIG9yaWdpbmFsIGRhdC5ndWkgdG8gc2VlIHdoYXQgaXQgdGFrZXNcclxuICAgIHRleHRDcmVhdG9yLFxyXG4gICAgd2lkdGggPSBMYXlvdXQuUEFORUxfV0lEVEgsXHJcbiAgICBoZWlnaHQgPSBMYXlvdXQuUEFORUxfSEVJR0hULFxyXG4gICAgZGVwdGggPSBMYXlvdXQuUEFORUxfREVQVEggLyAzLlxyXG59ID0ge30pIHtcclxuICAgIC8vIG1ha2UgdGhlIG1haW4gZ3JvdXAgYmUgKmRpcmVjdGx5KiB0aGUgb25lIHJldHVybmVkIGJ5IGNyZWF0ZUltYWdlQnV0dG9uO1xyXG4gICAgLy8gd2UnbGwgdGFrZSBjYXJlIG9mIGR5bmFtaWNhbGx5IGFkZGluZyBhbmQgcmVtb3ZpbmcgY2hpbGRyZW4gYmFzZWQgb24gYXR0YWNoZWQuLi5cclxuICAgIC8vIHdpbGwgd2FudCB0byB0aGluayBhYm91dCBsaXN0ZW5lciBmdW5jdGlvbnMgZXRjLlxyXG4gICAgbGV0IGZ1bmMgPSB0b2dnbGVEZXRhaWxQYW5lbDtcclxuICAgIGxldCBjb2xvciA9IG9iamVjdFtwcm9wZXJ0eU5hbWVdOyAvL2ZvciBub3csIHRoaXMnZCBiZXR0ZXIgYmUgYSBUSFJFRS5Db2xvciBvciB3ZSdsbCBmcmVhayBvdXQuXHJcbiAgICBjb25zdCBjID0gUkdCdG9IU1YoY29sb3IpO1xyXG4gICAgY29uc3QgdW5pZm9ybXMgPSB7c2VsZWN0ZWRIU1Y6IHt2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjMoYy5oLCBjLnMsIGMudil9fTtcclxuICAgIGNvbnN0IGltYWdlID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogY29sb3J9KTtcclxuICAgIGNvbnN0IGV2ZW50cyA9IG5ldyBFbWl0dGVyKCk7XHJcbiAgICBjb25zdCBjaGFuZ2VDb2xvck9uSG92ZXIgPSBmYWxzZTtcclxuICAgIGNvbnN0IHN0YXRlID0ge1xyXG4gICAgICAgIGxpc3RlbjogZmFsc2VcclxuICAgIH07XHJcbiAgICAvL1RPRE8gbWFrZSBzdXJlIGNvbG9yIHBhdGNoIG9jY3VwaWVzIGZ1bGwgd2lkdGguICBBZGQgdGV4dCBsYWJlbCB3aXRoIGhleCB2YWx1ZT9cclxuICAgIGNvbnN0IGdyb3VwID0gY3JlYXRlSW1hZ2VCdXR0b24oe1xyXG4gICAgICAgIHRleHRDcmVhdG9yLCBmdW5jLCBpbWFnZSwgcHJvcGVydHlOYW1lLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgY2hhbmdlQ29sb3JPbkhvdmVyXHJcbiAgICB9KTtcclxuICAgIGdyb3VwLmd1aVR5cGUgPSBcIkNvbG9yUGlja2VyXCI7XHJcblxyXG4gICAgdmFyIHBhbmVsO1xyXG5cclxuICAgIC8vIGNoYW5nZSBjb2xvdXIgaW4gcGxhY2UsIGNvdXJzZSBnYW1tYSBjb21wZW5zYXRpb25cclxuICAgIGZ1bmN0aW9uIGNvbHBvdyhjLCBwPTAuNDU0NSkge1xyXG4gICAgICAgIGMuciA9IE1hdGgucG93KGMuciwgcCk7ICAvLyB1Z2xpZnkgZG9lc24ndCB1bmRlcnN0YW5kICoqXHJcbiAgICAgICAgYy5nID0gTWF0aC5wb3coYy5nLCBwKTsgIC8vIHVnbGlmeSBkb2Vzbid0IHVuZGVyc3RhbmQgKipcclxuICAgICAgICBjLmIgPSBNYXRoLnBvdyhjLmIsIHApOyAgLy8gdWdsaWZ5IGRvZXNuJ3QgdW5kZXJzdGFuZCAqKlxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNoYW5nZUZuKCkge1xyXG4gICAgICAgIGltYWdlLmNvbG9yLnNldChjb2xvcik7XHJcbiAgICAgICAgY29scG93KGltYWdlLmNvbG9yKTtcclxuICAgICAgICBldmVudHMuZW1pdCgnb25DaGFuZ2UnLCBjb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmFuY3lQYW5lbCA9IHRydWU7XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0UGFuZWxQb3NpdGlvbigpIHtcclxuICAgICAgICBpZiAoIXBhbmVsKSByZXR1cm47XHJcbiAgICAgICAgcGFuZWwucG9zaXRpb24uc2V0KDAsIDAsIDUqZGVwdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvZ2dsZURldGFpbFBhbmVsKCkge1xyXG4gICAgICAgIGlmIChwYW5lbCkge1xyXG4gICAgICAgICAgICBwYW5lbC52aXNpYmxlID0gIXBhbmVsLnZpc2libGU7XHJcbiAgICAgICAgICAgIGlmIChwYW5lbC52aXNpYmxlKSBncm91cC5mb2xkZXIuc2V0TW9kYWxFZGl0b3IocGFuZWwpO1xyXG4gICAgICAgICAgICBzZXRQYW5lbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3b3VsZCBiZSBoYW5keSB0byBoYXZlIGEgd2F5IHRvIG1ha2UgbmFycm93ZXIgcGFuZWxcclxuICAgICAgICAgICAgcGFuZWwgPSBkYXQuR1VJVlIuY3JlYXRlKFwiQ29sb3IgQ2hvb3NlclwiKTtcclxuICAgICAgICAgICAgcGFuZWwuaGlkZUhlYWRlcigpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZhbmN5UGFuZWwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFNWTWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zOiB1bmlmb3JtcyxcclxuICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFZlcnRTaGFkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNWRnJhZ1NoYWRlclxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXRTViA9IChwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuc2VsZWN0ZWRIU1YudmFsdWUueSA9IHAubG9jYWxQb2ludC54O1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNlbGVjdGVkSFNWLnZhbHVlLnogPSBwLmxvY2FsUG9pbnQueTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IEhTVnRvUkdCKHVuaWZvcm1zLnNlbGVjdGVkSFNWLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvci5zZXRSR0IoYy5yLCBjLmcsIGMuYik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm4oKTtcclxuICAgICAgICAgICAgICAgICAgICBITWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGxldCB3aWRlID0gdHJ1ZSwgYnV0dG9uRGVwdGggPSBMYXlvdXQuQlVUVE9OX0RFUFRILzEwO1xyXG4gICAgICAgICAgICAgICAgcGFuZWwuYWRkWFlDb250cm9sbGVyKHNldFNWLCBTVk1hdGVyaWFsLCB3aWRlLCBMYXlvdXQuUEFORUxfV0lEVEggLyAyLCBkZXB0aCwgYnV0dG9uRGVwdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgSE1hdGVyaWFsID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtczogdW5pZm9ybXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBWZXJ0U2hhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBIU2xpZGVyRnJhZ1NoYWRlclxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRIKHApIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zZWxlY3RlZEhTVi52YWx1ZS54ID0gcC5sb2NhbFBvaW50Lng7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IEhTVnRvUkdCKHVuaWZvcm1zLnNlbGVjdGVkSFNWLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvci5zZXRSR0IoYy5yLCBjLmcsIGMuYik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm4oKTtcclxuICAgICAgICAgICAgICAgICAgICBITWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vVE9ETzogY2hlY2sgbGF5b3V0XHJcbiAgICAgICAgICAgICAgICBwYW5lbC5hZGRYWUNvbnRyb2xsZXIoc2V0SCwgSE1hdGVyaWFsLCB3aWRlLCBMYXlvdXQuUEFORUxfSEVJR0hULCBkZXB0aCwgYnV0dG9uRGVwdGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcGFuZWwuYWRkKGNvbG9yLCAncicsIDAsIDEpLm9uQ2hhbmdlKGNoYW5nZUZuKTtcclxuICAgICAgICAgICAgICAgIHBhbmVsLmFkZChjb2xvciwgJ2cnLCAwLCAxKS5vbkNoYW5nZShjaGFuZ2VGbik7XHJcbiAgICAgICAgICAgICAgICBwYW5lbC5hZGQoY29sb3IsICdiJywgMCwgMSkub25DaGFuZ2UoY2hhbmdlRm4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdyb3VwLmFkZChwYW5lbCk7XHJcbiAgICAgICAgICAgIGdyb3VwLmZvbGRlci5zZXRNb2RhbEVkaXRvcihwYW5lbCk7XHJcbiAgICAgICAgICAgIHNldFBhbmVsUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgcGFuZWwuZm9sZGVyID0gZ3JvdXAuZm9sZGVyOyAvL21pZ2h0IHN0aWxsIHdhbnQgdG8gZG91YmxlIGNoZWNrIGZvbGRlciBoaWVyYXJjaHlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAub25DaGFuZ2UgPSAoY2FsbGJhY2spID0+IHtcclxuICAgICAgICBldmVudHMub24oJ29uQ2hhbmdlJywgY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiBncm91cDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvcmlnaW5hbFVwZGF0ZUNvbnRyb2wgPSBncm91cC51cGRhdGVDb250cm9sO1xyXG4gICAgZ3JvdXAudXBkYXRlQ29udHJvbCA9IGZ1bmN0aW9uKCBpbnB1dE9iamVjdHMgKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmxpc3RlbikgbGlzdGVuVXBkYXRlKCk7XHJcbiAgICAgICAgb3JpZ2luYWxVcGRhdGVDb250cm9sKGlucHV0T2JqZWN0cyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGxpc3RlblVwZGF0ZSgpIHtcclxuICAgICAgICAvL29iamVjdCByZWYgbWlnaHQgaGF2ZSBjaGFuZ2VkLCBhcyB3ZWxsIGFzIHZhbHVlLlxyXG4gICAgICAgIC8vZXZlbiBpZiByZWYgaGFzbid0IGNoYW5nZWQsIHZhbHVlIHN0aWxsIG1pZ2h0J3ZlLCBhbmQgd2UncmUgbm90IGN1cnJlbnRseSByZWZsZWN0aW5nIHRoYXQuXHJcbiAgICAgICAgY29sb3IgPSBvYmplY3RbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICBpbWFnZS5jb2xvci5jb3B5KGNvbG9yKTtcclxuICAgICAgICBjb2xwb3coaW1hZ2UuY29sb3IpO1xyXG4gICAgICAgIHVuaWZvcm1zLnNlbGVjdGVkSFNWLnZhbHVlLmNvcHkoUkdCdG9IU1YoY29sb3IpKTtcclxuICAgIH1cclxuICAgIGdyb3VwLmxpc3RlbiA9ICgpID0+IHtcclxuICAgICAgICBzdGF0ZS5saXN0ZW4gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBncm91cDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbn1cclxuIiwiLyoqXHJcbiogZGF0LWd1aVZSIEphdmFzY3JpcHQgQ29udHJvbGxlciBMaWJyYXJ5IGZvciBWUlxyXG4qIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhYXJ0cy9kYXQuZ3VpVlJcclxuKlxyXG4qIENvcHlyaWdodCAyMDE2IERhdGEgQXJ0cyBUZWFtLCBHb29nbGUgSW5jLlxyXG4qXHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbipcclxuKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbipcclxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKi9cclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTE9SID0gMHgyRkExRDY7XHJcbmV4cG9ydCBjb25zdCBISUdITElHSFRfQ09MT1IgPSAweDQzYjVlYTtcclxuZXhwb3J0IGNvbnN0IElOVEVSQUNUSU9OX0NPTE9SID0gMHgwN0FCRjc7XHJcbmV4cG9ydCBjb25zdCBFTUlTU0lWRV9DT0xPUiA9IDB4MjIyMjIyO1xyXG5leHBvcnQgY29uc3QgSElHSExJR0hUX0VNSVNTSVZFX0NPTE9SID0gMHg5OTk5OTk7XHJcbmV4cG9ydCBjb25zdCBPVVRMSU5FX0NPTE9SID0gMHg5OTk5OTk7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0sgPSAweDA2MDYwNjtcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9MREVSX0JBQ0sgPSAweDEwMTAxMDtcclxuZXhwb3J0IGNvbnN0IEhJR0hMSUdIVF9CQUNLID0gMHgzMTMxMzE7XHJcbmV4cG9ydCBjb25zdCBJTkFDVElWRV9DT0xPUiA9IDB4MTYxODI5O1xyXG5leHBvcnQgY29uc3QgQ09OVFJPTExFUl9JRF9TTElERVIgPSAweDJmYTFkNjtcclxuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfSURfQ0hFQ0tCT1ggPSAweDgwNjc4NztcclxuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfSURfQlVUVE9OID0gMHhlNjFkNWY7XHJcbmV4cG9ydCBjb25zdCBDT05UUk9MTEVSX0lEX1RFWFQgPSAweDFlZDM2ZjtcclxuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfSURfRFJPUERPV04gPSAweGZmZjAwMDtcclxuZXhwb3J0IGNvbnN0IERST1BET1dOX0JHX0NPTE9SID0gMHhmZmZmZmY7XHJcbmV4cG9ydCBjb25zdCBEUk9QRE9XTl9GR19DT0xPUiA9IDB4MDAwMDAwO1xyXG5leHBvcnQgY29uc3QgQ0hFQ0tCT1hfQkdfQ09MT1IgPSAweGZmZmZmZjtcclxuZXhwb3J0IGNvbnN0IEJVVFRPTl9DT0xPUiA9IDB4ZTYxZDVmO1xyXG5leHBvcnQgY29uc3QgQlVUVE9OX0hJR0hMSUdIVF9DT0xPUiA9IDB4ZmEzMTczO1xyXG5leHBvcnQgY29uc3QgU0xJREVSX0JHID0gMHg0NDQ0NDQ7XHJcbmV4cG9ydCBjb25zdCBURVhUQk9YX0JHID0gMHhGMEYwRjA7XHJcbmV4cG9ydCBjb25zdCBURVhUQk9YX0hJR0hMSUdIVF9CRyA9IDB4RkZGRkZGO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplR2VvbWV0cnkoIGdlb21ldHJ5LCBjb2xvciApe1xyXG4gIGNvbnN0IGNvbCA9IG5ldyBUSFJFRS5Db2xvcihjb2xvcik7IFxyXG4gIGxldCBjID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdjb2xvcicpO1xyXG4gIGxldCBhO1xyXG4gIGlmICghYykge1xyXG4gICAgYSA9IG5ldyBGbG9hdDMyQXJyYXkoZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmFycmF5Lmxlbmd0aCkuZmlsbCgwLjUpO1xyXG4gICAgYyA9IGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnY29sb3InLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKGEsIDMpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgYSA9IGMuYXJyYXk7XHJcbiAgfVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrPTMpIHtcclxuICAgIGFbaV0gPSBjb2wucjtcclxuICAgIGFbaSsxXSA9IGNvbC5nO1xyXG4gICAgYVtpKzJdID0gY29sLmI7XHJcbiAgfVxyXG4gIGMubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAvLyBnZW9tZXRyeS5mYWNlcy5mb3JFYWNoKCBmdW5jdGlvbihmYWNlKXtcclxuICAvLyAgIGZhY2UuY29sb3Iuc2V0SGV4KGNvbG9yKTtcclxuICAvLyB9KTtcclxuICAvLyBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuICByZXR1cm4gZ2VvbWV0cnk7XHJcbn0iLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0IGNyZWF0ZVRleHRMYWJlbCwge2NyZWF0ZVRvb2xUaXB9IGZyb20gJy4vdGV4dGxhYmVsJztcclxuaW1wb3J0IGNyZWF0ZUludGVyYWN0aW9uIGZyb20gJy4vaW50ZXJhY3Rpb24nO1xyXG5pbXBvcnQgKiBhcyBDb2xvcnMgZnJvbSAnLi9jb2xvcnMnO1xyXG5pbXBvcnQgKiBhcyBMYXlvdXQgZnJvbSAnLi9sYXlvdXQnO1xyXG5pbXBvcnQgKiBhcyBHcmFwaGljIGZyb20gJy4vZ3JhcGhpYyc7XHJcbmltcG9ydCAqIGFzIEdyYWIgZnJvbSAnLi9ncmFiJztcclxuaW1wb3J0IHtzZXRWaXNpYmlsaXR5fSBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlRHJvcGRvd24oIHtcclxuICB0ZXh0Q3JlYXRvcixcclxuICBvYmplY3QsXHJcbiAgcHJvcGVydHlOYW1lID0gJ3VuZGVmaW5lZCcsXHJcbiAgaW5pdGlhbFZhbHVlID0gZmFsc2UsXHJcbiAgb3B0aW9ucyA9IFtdLFxyXG4gIHdpZHRoID0gTGF5b3V0LlBBTkVMX1dJRFRILFxyXG4gIGhlaWdodCA9IExheW91dC5QQU5FTF9IRUlHSFQsXHJcbiAgZGVwdGggPSBMYXlvdXQuUEFORUxfREVQVEhcclxufSA9IHt9ICl7XHJcblxyXG5cclxuICBjb25zdCBzdGF0ZSA9IHtcclxuICAgIG9wZW46IGZhbHNlLFxyXG4gICAgbGlzdGVuOiBmYWxzZVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IERST1BET1dOX1dJRFRIID0gd2lkdGggKiAwLjUgLSBMYXlvdXQuUEFORUxfTUFSR0lOO1xyXG4gIGNvbnN0IERST1BET1dOX0hFSUdIVCA9IGhlaWdodCAtIExheW91dC5QQU5FTF9NQVJHSU47XHJcbiAgY29uc3QgRFJPUERPV05fREVQVEggPSBkZXB0aDtcclxuICBjb25zdCBEUk9QRE9XTl9PUFRJT05fSEVJR0hUID0gaGVpZ2h0IC0gTGF5b3V0LlBBTkVMX01BUkdJTiAqIDEuMjtcclxuICBjb25zdCBEUk9QRE9XTl9NQVJHSU4gPSBMYXlvdXQuUEFORUxfTUFSR0lOICogLTAuNDtcclxuICBjb25zdCBNQVhfRFJPUERPV05fTEFCRUxTX0lOX0NPTFVNTiA9IDI1O1xyXG5cclxuICBjb25zdCBncm91cCA9IG5ldyBUSFJFRS5Hcm91cCgpO1xyXG4gIGdyb3VwLmd1aVR5cGUgPSBcImRyb3Bkb3duXCI7XHJcbiAgZ3JvdXAudG9TdHJpbmcgPSAoKSA9PiBgWyR7Z3JvdXAuZ3VpVHlwZX06ICR7cHJvcGVydHlOYW1lfV1gO1xyXG5cclxuICAvL2FsbG93IGZvciBwcm9ncmFtbWF0aWMgc2V0LiBBUEkgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHN0YWJsZS5cclxuICBncm91cC51c2VyRGF0YS5zb3VyY2VPYmplY3QgPSBvYmplY3Q7XHJcbiAgZ3JvdXAudXNlckRhdGEuc291cmNlUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xyXG4gIGdyb3VwLnVzZXJEYXRhLnNldFZhbHVlID0gdiA9PiB7XHJcbiAgICBpZiAob3B0aW9ucy5pbmRleE9mKHYpID09PSAtMSkge1xyXG4gICAgICAvL0kgY291bGQgY29uc2lkZXIgYW5ub3RhdGluZyBHVUkgaXRzZWxmIHdpdGggZXJyb3IgbGFiZWxzLi4uXHJcbiAgICAgIGNvbnNvbGUud2FybihgZGF0LkdVSVZSOiBVbmtub3duIG9wdGlvbiBcIiR7dn1cIiBmb3IgZHJvcGRvd24gXCIke3Byb3BlcnR5TmFtZX1cIi5cXG5WYWxpZCBvcHRpb25zOiBbJHtvcHRpb25zLmpvaW4oJywgJyl9XWApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBvYmplY3RbcHJvcGVydHlOYW1lXSA9IHY7XHJcbiAgICBpZiAob25DaGFuZ2VkQ0IpIG9uQ2hhbmdlZENCKG9iamVjdFtwcm9wZXJ0eU5hbWVdKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHBhbmVsID0gTGF5b3V0LmNyZWF0ZVBhbmVsKCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApO1xyXG4gIGdyb3VwLmFkZCggcGFuZWwgKTtcclxuXHJcbiAgZ3JvdXAuaGl0c2NhbiA9IFsgcGFuZWwgXTtcclxuXHJcbiAgY29uc3QgbW9kYWxEcm9wZG93biA9IG5ldyBUSFJFRS5Hcm91cCgpO1xyXG4gIG1vZGFsRHJvcGRvd24udmlzaWJsZSA9IGZhbHNlO1xyXG4gIG1vZGFsRHJvcGRvd24uaGl0c2NhbiA9IFtdO1xyXG4gIGNvbnN0IGxhYmVsSW50ZXJhY3Rpb25zID0gW107XHJcbiAgY29uc3Qgb3B0aW9uTGFiZWxzID0gW107XHJcblxyXG4gIC8vICBmaW5kIGFjdHVhbGx5IHdoaWNoIGxhYmVsIGlzIHNlbGVjdGVkXHJcbiAgY29uc3QgaW5pdGlhbExhYmVsID0gZmluZExhYmVsRnJvbVByb3AoKTtcclxuXHJcblxyXG5cclxuICBmdW5jdGlvbiBmaW5kTGFiZWxGcm9tUHJvcCgpe1xyXG4gICAgaWYoIEFycmF5LmlzQXJyYXkoIG9wdGlvbnMgKSApe1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKCBmdW5jdGlvbiggb3B0aW9uTmFtZSApe1xyXG4gICAgICAgIHJldHVybiBvcHRpb25OYW1lID09PSBvYmplY3RbIHByb3BlcnR5TmFtZSBdXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbmQoIGZ1bmN0aW9uKCBvcHRpb25OYW1lICl7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eU5hbWVdID09PSBvcHRpb25zWyBvcHRpb25OYW1lIF07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlT3B0aW9uKCBsYWJlbFRleHQsIGlzT3B0aW9uICl7XHJcbiAgICAvL1RPRE86IHRydW5jYXRlIGxvbmcgbGFiZWxUZXh0LCBtYXliZSBzaG93IGZ1bGwgdmVyc2lvbiB3aGVuIGhvdmVyaW5nLlxyXG4gICAgY29uc3QgbGFiZWwgPSBjcmVhdGVUZXh0TGFiZWwoXHJcbiAgICAgIHRleHRDcmVhdG9yLCBsYWJlbFRleHQsXHJcbiAgICAgIC8vY2hlY2sgd2lkdGggdmFsdWUuLi5cclxuICAgICAgRFJPUERPV05fV0lEVEgsIGRlcHRoLFxyXG4gICAgICBDb2xvcnMuRFJPUERPV05fRkdfQ09MT1IsIENvbG9ycy5EUk9QRE9XTl9CR19DT0xPUixcclxuICAgICAgMC44NjZcclxuICAgICk7XHJcbiAgICBsYWJlbC5iYWNrLmd1aVR5cGUgPSAnZHJvcGRvd25PcHRpb24nO1xyXG4gICAgbGFiZWwuZ3VpVHlwZSA9ICdkcm9wZG93bk9wdGlvbic7XHJcblxyXG4gICAgaWYgKGlzT3B0aW9uKSBtb2RhbERyb3Bkb3duLmhpdHNjYW4ucHVzaCggbGFiZWwuYmFjayApO1xyXG4gICAgZWxzZSBncm91cC5oaXRzY2FuLnB1c2goIGxhYmVsLmJhY2sgKTtcclxuICAgIGNvbnN0IGxhYmVsSW50ZXJhY3Rpb24gPSBjcmVhdGVJbnRlcmFjdGlvbiggbGFiZWwuYmFjayApO1xyXG4gICAgbGFiZWxJbnRlcmFjdGlvbi5ndWlUeXBlID0gJ2Ryb3Bkb3duT3B0aW9uJztcclxuICAgIGxhYmVsSW50ZXJhY3Rpb25zLnB1c2goIGxhYmVsSW50ZXJhY3Rpb24gKTtcclxuICAgIG9wdGlvbkxhYmVscy5wdXNoKCBsYWJlbCApO1xyXG5cclxuXHJcbiAgICBpZiggaXNPcHRpb24gKXtcclxuICAgICAgbGFiZWxJbnRlcmFjdGlvbi5ldmVudHMub24oICdvblByZXNzZWQnLCBmdW5jdGlvbiggcCApe1xyXG4gICAgICAgIHN0YXRlLm9wZW4gPSBtb2RhbERyb3Bkb3duLnZpc2libGU7XHJcbiAgICAgICAgc2VsZWN0ZWRMYWJlbC5zZXRTdHJpbmcoIGxhYmVsVGV4dCApO1xyXG5cclxuICAgICAgICBsZXQgcHJvcGVydHlDaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmKCBBcnJheS5pc0FycmF5KCBvcHRpb25zICkgKXtcclxuICAgICAgICAgIHByb3BlcnR5Q2hhbmdlZCA9IG9iamVjdFsgcHJvcGVydHlOYW1lIF0gIT09IGxhYmVsVGV4dDtcclxuICAgICAgICAgIGlmKCBwcm9wZXJ0eUNoYW5nZWQgKXtcclxuICAgICAgICAgICAgb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXSA9IGxhYmVsVGV4dDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIHByb3BlcnR5Q2hhbmdlZCA9IG9iamVjdFsgcHJvcGVydHlOYW1lIF0gIT09IG9wdGlvbnNbIGxhYmVsVGV4dCBdO1xyXG4gICAgICAgICAgaWYoIHByb3BlcnR5Q2hhbmdlZCApe1xyXG4gICAgICAgICAgICBvYmplY3RbIHByb3BlcnR5TmFtZSBdID0gb3B0aW9uc1sgbGFiZWxUZXh0IF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgY29sbGFwc2VPcHRpb25zKCk7XHJcbiAgICAgICAgc3RhdGUub3BlbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiggb25DaGFuZ2VkQ0IgJiYgcHJvcGVydHlDaGFuZ2VkICl7XHJcbiAgICAgICAgICBvbkNoYW5nZWRDQiggb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIG9uQ2hvb3NlQ0IgKXtcclxuICAgICAgICAgIG9uQ2hvb3NlQ0IoIG9iamVjdFsgcHJvcGVydHlOYW1lIF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcC5sb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBsYWJlbEludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUHJlc3NlZCcsIGZ1bmN0aW9uKCBwICl7XHJcbiAgICAgICAgc3RhdGUub3BlbiA9IG1vZGFsRHJvcGRvd24udmlzaWJsZTtcclxuICAgICAgICBpZiggc3RhdGUub3BlbiA9PT0gZmFsc2UgKXtcclxuICAgICAgICAgIG9wZW5PcHRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICBjb2xsYXBzZU9wdGlvbnMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHAubG9ja2VkID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsYWJlbC5pc09wdGlvbiA9IGlzT3B0aW9uO1xyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29sbGFwc2VPcHRpb25zKCl7XHJcbiAgICBzdGF0ZS5vcGVuID0gZmFsc2U7XHJcbiAgICBpZiAoZ3JvdXAuZm9sZGVyKSBncm91cC5mb2xkZXIuY2xlYXJNb2RhbEVkaXRvcigpOyAvL3Nob3VsZCB3ZSBjaGVjayBpZiBpdCB3YXNuJ3Qgc2V0IHRvIHNvbWV0aGluZyBlbHNlPz9cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG9wZW5PcHRpb25zKCl7XHJcbiAgICBzdGF0ZS5vcGVuID0gdHJ1ZTtcclxuICAgIGdyb3VwLmZvbGRlci5zZXRNb2RhbEVkaXRvcihtb2RhbERyb3Bkb3duKTtcclxuICAgIC8vcmV0dXJuO1xyXG4gICAgLy9sYWJlbC5pc09wdGlvbiBzZWVtcyBtb3N0bHkgcmVkdW5kYW50LlxyXG4gICAgLy9sYWJlbHMgJiBiYWNrcyBzaG91bGQgYmUgYWRkZWQgdG8gYSBncm91cCB0byBiZSB1c2VkIGFzICdtb2RhbCBlZGl0b3InLCBcclxuICAgIC8vbWFraW5nIGV2ZXJ5dGhpbmcgdmlzaWJsZSAvIGludmlzaWJsZSB3aXRoIG9uZSBwcm9wZXJ0eVxyXG4gICAgLy8obmIsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdyBpbiBhIGdyb3VwIHVzZWQgYXMgJ21vZGFsIGVkaXRvcicsIHdlIHN0aWxsIG5lZWQgdG8gc2V0IHZpc2libGUuLi5cclxuICAgIC8vc2VlIGNvbW1lbnQgaW4gaW5kZXguanMgZ2V0VmlzaWJsZUhpdHNjYW5PYmplY3RzKCkpXHJcbiAgICBvcHRpb25MYWJlbHMuZm9yRWFjaCggZnVuY3Rpb24oIGxhYmVsICl7XHJcbiAgICAgIGlmKCBsYWJlbC5pc09wdGlvbiApe1xyXG4gICAgICAgIGxhYmVsLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIGxhYmVsLmJhY2sudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gIGJhc2Ugb3B0aW9uXHJcbiAgY29uc3Qgc2VsZWN0ZWRMYWJlbCA9IGNyZWF0ZU9wdGlvbiggaW5pdGlhbExhYmVsIHx8ICcgJywgZmFsc2UgKTtcclxuICBzZWxlY3RlZExhYmVsLnBvc2l0aW9uLnggPSBMYXlvdXQuUEFORUxfTUFSR0lOICogMC41ICsgd2lkdGggKiAwLjU7XHJcbiAgc2VsZWN0ZWRMYWJlbC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgXHJcbiAgY29uc3QgZG93bkFycm93ID0gR3JhcGhpYy5kb3duQXJyb3coKTtcclxuICAvLyBDb2xvcnMuY29sb3JpemVHZW9tZXRyeSggZG93bkFycm93Lmdlb21ldHJ5LCBDb2xvcnMuRFJPUERPV05fRkdfQ09MT1IgKTtcclxuICBkb3duQXJyb3cucG9zaXRpb24uc2V0KCBEUk9QRE9XTl9XSURUSCAtIDAuMDQsIDAsIGRlcHRoICogMS4wMSApO1xyXG4gIHNlbGVjdGVkTGFiZWwuYWRkKCBkb3duQXJyb3cgKTtcclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZUxhYmVsUG9zaXRpb24oIGxhYmVsLCBpbmRleCApe1xyXG4gICAgbGFiZWwucG9zaXRpb24ueSA9IC1EUk9QRE9XTl9NQVJHSU4gLSAoaW5kZXglTUFYX0RST1BET1dOX0xBQkVMU19JTl9DT0xVTU4rMSkgKiAoIERST1BET1dOX09QVElPTl9IRUlHSFQgKTtcclxuICAgIGxhYmVsLnBvc2l0aW9uLnogPSBkZXB0aDtcclxuICAgIGxhYmVsLnBvc2l0aW9uLnggKz0gRFJPUERPV05fV0lEVEggKiBNYXRoLmZsb29yKGluZGV4IC8gTUFYX0RST1BET1dOX0xBQkVMU19JTl9DT0xVTU4pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gb3B0aW9uVG9MYWJlbCggb3B0aW9uTmFtZSwgaW5kZXggKXtcclxuICAgIGNvbnN0IG9wdGlvbkxhYmVsID0gY3JlYXRlT3B0aW9uKCBvcHRpb25OYW1lLCB0cnVlICk7XHJcbiAgICBjb25maWd1cmVMYWJlbFBvc2l0aW9uKCBvcHRpb25MYWJlbCwgaW5kZXggKTtcclxuICAgIHJldHVybiBvcHRpb25MYWJlbDtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkTGFiZWwuYWRkKG1vZGFsRHJvcGRvd24pO1xyXG4gIGlmKCBBcnJheS5pc0FycmF5KCBvcHRpb25zICkgKXtcclxuICAgIG1vZGFsRHJvcGRvd24uYWRkKC4uLm9wdGlvbnMubWFwKG9wdGlvblRvTGFiZWwpKTtcclxuICB9XHJcbiAgZWxzZXtcclxuICAgIG1vZGFsRHJvcGRvd24uYWRkKCAuLi5PYmplY3Qua2V5cyhvcHRpb25zKS5tYXAoIG9wdGlvblRvTGFiZWwgKSApO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbGxhcHNlT3B0aW9ucygpO1xyXG5cclxuICBjb25zdCBkZXNjcmlwdG9yTGFiZWwgPSB0ZXh0Q3JlYXRvci5jcmVhdGUoIHByb3BlcnR5TmFtZSApO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi54ID0gTGF5b3V0LlBBTkVMX0xBQkVMX1RFWFRfTUFSR0lOO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgZGVzY3JpcHRvckxhYmVsLnBvc2l0aW9uLnkgPSAtMC4wMztcclxuXHJcbiAgY29uc3QgY29udHJvbGxlcklEID0gTGF5b3V0LmNyZWF0ZUNvbnRyb2xsZXJJREJveCggaGVpZ2h0LCBDb2xvcnMuQ09OVFJPTExFUl9JRF9EUk9QRE9XTiApO1xyXG4gIGNvbnRyb2xsZXJJRC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcblxyXG5cclxuICBjb25zdCBib3JkZXJCb3ggPSBMYXlvdXQuY3JlYXRlUGFuZWwoIERST1BET1dOX1dJRFRIICsgTGF5b3V0LkJPUkRFUl9USElDS05FU1MsIERST1BET1dOX0hFSUdIVCArIExheW91dC5CT1JERVJfVEhJQ0tORVNTICogMC41LCBEUk9QRE9XTl9ERVBUSCwgdHJ1ZSApO1xyXG4gIGJvcmRlckJveC5tYXRlcmlhbC5jb2xvci5zZXRIZXgoIDB4MWY3YWU3ICk7XHJcbiAgYm9yZGVyQm94LnBvc2l0aW9uLnggPSAtTGF5b3V0LkJPUkRFUl9USElDS05FU1MgKiAwLjUgKyB3aWR0aCAqIDAuNTtcclxuICBib3JkZXJCb3gucG9zaXRpb24ueiA9IGRlcHRoICogMC41O1xyXG5cclxuICBwYW5lbC5hZGQoIGRlc2NyaXB0b3JMYWJlbCwgY29udHJvbGxlcklELCBzZWxlY3RlZExhYmVsLCBib3JkZXJCb3ggKTtcclxuXHJcblxyXG4gIHVwZGF0ZVZpZXcoKTtcclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlVmlldygpe1xyXG5cclxuICAgIGxhYmVsSW50ZXJhY3Rpb25zLmZvckVhY2goIGZ1bmN0aW9uKCBpbnRlcmFjdGlvbiwgaW5kZXggKXtcclxuICAgICAgY29uc3QgbGFiZWwgPSBvcHRpb25MYWJlbHNbIGluZGV4IF07XHJcbiAgICAgIGlmKCBsYWJlbC5pc09wdGlvbiApe1xyXG4gICAgICAgIGlmKCBpbnRlcmFjdGlvbi5ob3ZlcmluZygpICl7XHJcbiAgICAgICAgICBDb2xvcnMuY29sb3JpemVHZW9tZXRyeSggbGFiZWwuYmFjay5nZW9tZXRyeSwgQ29sb3JzLkhJR0hMSUdIVF9DT0xPUiApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgQ29sb3JzLmNvbG9yaXplR2VvbWV0cnkoIGxhYmVsLmJhY2suZ2VvbWV0cnksIENvbG9ycy5EUk9QRE9XTl9CR19DT0xPUiApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3RhdGUub3BlbiA9IG1vZGFsRHJvcGRvd24udmlzaWJsZTsgLy9hcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgaXMgYmVsaWV2ZWQgdG8gYmUgcmVsaWFibGUsIGJ1dCBiZXdhcmUgZHJhZ29ucywgZnV0dXJlIHJlYWRlci5cclxuICAgIGlmIChncm91cC51c2VyRGF0YS50aXBPYmopIHtcclxuICAgICAgLy8gaWYgKGxhYmVsSW50ZXJhY3Rpb25zWzBdLmhvdmVyaW5nKCkpIHtcclxuICAgICAgLy8gICBjb25zb2xlLmxvZyhncm91cC51c2VyRGF0YS50aXApO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIHNldFZpc2liaWxpdHkocGFuZWwsIGdyb3VwLnVzZXJEYXRhLnRpcE9iaiwgbGFiZWxJbnRlcmFjdGlvbnNbMF0uaG92ZXJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBpZiggbGFiZWxJbnRlcmFjdGlvbnNbMF0uaG92ZXJpbmcoKSB8fCBzdGF0ZS5vcGVuICl7XHJcbiAgICAgIGJvcmRlckJveC52aXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGJvcmRlckJveC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgb25DaGFuZ2VkQ0I7XHJcbiAgbGV0IG9uRmluaXNoQ2hhbmdlQ0I7XHJcbiAgbGV0IG9uQ2hvb3NlQ0I7XHJcblxyXG4gIGdyb3VwLm9uQ2hhbmdlID0gZnVuY3Rpb24oIGNhbGxiYWNrICl7XHJcbiAgICBvbkNoYW5nZWRDQiA9IGNhbGxiYWNrO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH07XHJcbiAgZ3JvdXAub25DaG9vc2UgPSBmdW5jdGlvbiggY2FsbGJhY2sgKXtcclxuICAgIG9uQ2hvb3NlQ0IgPSBjYWxsYmFjaztcclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGNvbnN0IGdyYWJJbnRlcmFjdGlvbiA9IEdyYWIuY3JlYXRlKCB7IGdyb3VwLCBwYW5lbCB9ICk7XHJcblxyXG4gIGdyb3VwLmxpc3RlbiA9IGZ1bmN0aW9uKCl7XHJcbiAgICBzdGF0ZS5saXN0ZW4gPSB0cnVlO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLnVwZGF0ZUNvbnRyb2wgPSBmdW5jdGlvbiggaW5wdXRPYmplY3RzICl7XHJcbiAgICBpZiggc3RhdGUubGlzdGVuICl7XHJcbiAgICAgIHNlbGVjdGVkTGFiZWwuc2V0U3RyaW5nKCBmaW5kTGFiZWxGcm9tUHJvcCgpICk7XHJcbiAgICB9XHJcbiAgICBsYWJlbEludGVyYWN0aW9ucy5mb3JFYWNoKCBmdW5jdGlvbiggbGFiZWxJbnRlcmFjdGlvbiApe1xyXG4gICAgICBsYWJlbEludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcbiAgICB9KTtcclxuICAgIGdyYWJJbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG4gICAgdXBkYXRlVmlldygpO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLm5hbWUgPSBmdW5jdGlvbiggc3RyICl7XHJcbiAgICBkZXNjcmlwdG9yTGFiZWwudXBkYXRlTGFiZWwoIHN0ciApO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLnNldFRvb2xUaXAgPSB0aXAgPT4ge1xyXG4gICAgY29uc3Qgb2JqID0gZ3JvdXA7XHJcbiAgICBvYmoudXNlckRhdGEudGlwID0gdGlwO1xyXG4gICAgLy9UT0RPOiBwYXkgbW9yZSBhdHRlbnRpb24gdG8gbGF5b3V0IGNvbmZpZyAvIG1ha2UgY3JlYXRlVG9vbFRpcCBoYXZlIHNpbXBsZXIgYXJndW1lbnRzXHJcbiAgICAvL25iLCBvYmouc3BhY2luZyBtYXkgYmUgdW5kZWZpbmVkLCBidXQgc2hvdWxkIG5vdyBoYXZlIHNlbnNpYmxlIGRlZmF1bHQuXHJcbiAgICBvYmoudXNlckRhdGEudGlwT2JqID0gY3JlYXRlVG9vbFRpcCh0ZXh0Q3JlYXRvciwgdGlwLCBMYXlvdXQuRk9MREVSX1dJRFRILCBvYmouc3BhY2luZywgTGF5b3V0LkJVVFRPTl9ERVBUSCk7XHJcbiAgICAvLy8vLS0tIHNlZSBsYWJlbEludGVyYWN0aW9uc1swXSBhYm92ZSBmb3IgaGFuZGxpbmcgdXBkYXRlLi4uXHJcbiAgfVxyXG4gIGdyb3VwLmdldFRvb2xUaXAgPSAoKSA9PiBncm91cC51c2VyRGF0YS50aXA7XHJcblxyXG5cclxuICByZXR1cm4gZ3JvdXA7XHJcbn1cclxuIiwiLyoqXHJcbiogZGF0LWd1aVZSIEphdmFzY3JpcHQgQ29udHJvbGxlciBMaWJyYXJ5IGZvciBWUlxyXG4qIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhYXJ0cy9kYXQuZ3VpVlJcclxuKlxyXG4qIENvcHlyaWdodCAyMDE2IERhdGEgQXJ0cyBUZWFtLCBHb29nbGUgSW5jLlxyXG4qXHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbipcclxuKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbipcclxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKi9cclxuXHJcbmltcG9ydCB7IGNyZWF0ZVRvb2xUaXAgfSBmcm9tICcuL3RleHRsYWJlbCc7XHJcbmltcG9ydCBjcmVhdGVJbnRlcmFjdGlvbiBmcm9tICcuL2ludGVyYWN0aW9uJztcclxuaW1wb3J0ICogYXMgQ29sb3JzIGZyb20gJy4vY29sb3JzJztcclxuaW1wb3J0ICogYXMgTGF5b3V0IGZyb20gJy4vbGF5b3V0JztcclxuaW1wb3J0ICogYXMgR3JhcGhpYyBmcm9tICcuL2dyYXBoaWMnO1xyXG5pbXBvcnQgKiBhcyBTaGFyZWRNYXRlcmlhbHMgZnJvbSAnLi9zaGFyZWRtYXRlcmlhbHMnO1xyXG5pbXBvcnQgKiBhcyBHcmFiIGZyb20gJy4vZ3JhYic7XHJcbmltcG9ydCAqIGFzIFBhbGV0dGUgZnJvbSAnLi9wYWxldHRlJztcclxuaW1wb3J0IHsgZ2V0VG9wTGV2ZWxGb2xkZXIsIHNldEJveEZyb21PYmplY3QsIHNldFZpc2liaWxpdHkgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgRk9MREVSX1dJRFRIIH0gZnJvbSAnLi9sYXlvdXQnO1xyXG5cclxuLy9JZiB5b3UncmUgbG9va2luZyBmb3IgbWFpbiBjcmVhdGVGb2xkZXIgZnVuY3Rpb24sIGl0J3MgZnVydGhlciBiZWxvdy4uLlxyXG5cclxuLyoqXHJcbiAqIE5vdCBlbnRpcmVseSBzdXJlIGFib3V0IHN0YXJ0aW5nIHRvIGFkZCB0aGlzIGtpbmQgb2YgZ2xvYmFsIHN0YXRlIG1hbmFhZ2VtZW50IGhlcmUuLi5cclxuICogVGhpcyBpcyBmb3Igei1vcmRlciBpbiAyZCBvcnRob2dyYXBoaWMgbW9kZSwgYW5kIG1heWJlIHNvbWUgb3RoZXIgdGhpbmdzIG9uZSBkYXkuXHJcbiAqL1xyXG5jb25zdCB0b3BGb2xkZXJTdGFjayA9IFtdO1xyXG5cclxuY29uc3Qgc2NyYXRjaEZvbGRlckJveCA9IG5ldyBUSFJFRS5Cb3gzKCksIHNjcmF0Y2hDYW1Cb3ggPSBuZXcgVEhSRUUuQm94MygpLCBzY3JhdGNoU2l6ZSA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcblxyXG5mdW5jdGlvbiBvcnRob2dyYXBoaWNGb2xkZXJMYXlvdXQoKSB7XHJcbiAgY29uc3QgY2FtID0gdG9wRm9sZGVyU3RhY2tbMF0udXNlckRhdGEuaXNPcnRob2dyYXBoaWM7XHJcbiAgaWYgKCFjYW0gfHwgdG9wRm9sZGVyU3RhY2subGVuZ3RoIDw9IDEpIHJldHVybjtcclxuICAvL2NhbUJveFNldHVwKGNhbSk7XHJcbiAgY29uc3QgdGZzID0gdG9wRm9sZGVyU3RhY2suZmlsdGVyKHggPT4geC52aXNpYmxlKTtcclxuICBjb25zdCBuZWFyID0gY2FtLm5lYXIsIGZhciA9IGNhbS5mYXIsIG4gPSB0ZnMubGVuZ3RoO1xyXG4gIC8vIEF0dGVtcHQgdG8ga2VlcCBzb21lIG9sZCB6IHZhbHVlcyB0aHJldyBvdGhlcnMgb3V0LFxyXG4gIC8vIGVzcGVjaWFsbHkgaWYgbWFueSBmb2xkZXJzIHVuZG9ja2VkIGluIHdoaWNoIGNhc2Ugd2UgaGl0IHRoZSBcIkdVSVZSIFdhcm5pbmdcIiBiZWxvd1xyXG4gIC8vIGFuZCBzb21ldGltZXMgdGhlIG1lbnVzIGZyb3plLlxyXG4gIC8vIFNvIHdlIHVzZSB0aGUgc2ltcGxlciB6IC0gaS9uIGJlbG93LlxyXG4gIC8vY29uc3QgenMgPSB0ZnMubWFwKGYgPT4gZi5wb3NpdGlvbi56KS5zb3J0KChhLGIpPT5hLWIpO1xyXG4gIC8venNbLTFdID0gLTk5OTk7IC8vIEkgc3VwcG9zZSB0aGlzIGlzIHRvIGRlYWwgd2l0aCBhY2Nlc3NpbmcgenNbaS0xXSBiZWxvdyDCr1xcXyjjg4QpXy/Cr1xyXG4gIC8venMuZm9yRWFjaCggKHosaSkgPT4genNbaV0gPSBNYXRoLm1heCh6c1tpXSwgenNbaS0xXSArIDEwKkxheW91dC5QQU5FTF9ERVBUSCkpOyAvLyBpbiBjYXNlIG9mIGVxdWFsc1xyXG4gIFxyXG4gIHRmcy5mb3JFYWNoKChmLCBpKSA9PiB7XHJcbiAgICAvL2xldCB6ID0gLTAuOSpmYXIgKyBpKjEwKkxheW91dC5QQU5FTF9ERVBUSDtcclxuICAgIC8vY29uc3QgeiA9IHpzW2ldO1xyXG4gICAgY29uc3QgeiA9IGkvbjtcclxuICAgIGlmICh6ICE9PSBmLnBvc2l0aW9uLnopIHtcclxuICAgICAgZi5wb3NpdGlvbi56ID0gejtcclxuICAgICAgZi51cGRhdGVNYXRyaXgoKTtcclxuICAgICAgZi5maXhGb2xkZXJQb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIGlmICh0ZnNbbi0xXS5wb3NpdGlvbi56ID49IG5lYXIgLSBMYXlvdXQuUEFORUxfREVQVEgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiR1VJVlIgV2FybmluZzogbGlrZWx5IHByb2JsZW0gd2l0aCB6LW9yZGVyIGluIG9ydGhvZ3JhcGhpY0ZvbGRlckxheW91dFwiKTtcclxuICB9XHJcbiAgLy9jb25zb2xlLmxvZyhgWyR7dG9wRm9sZGVyU3RhY2subWFwKGY9PmYuZm9sZGVyTmFtZSArICdcXHQ6ICcgKyBmLnBvc2l0aW9uLnopLmpvaW4oJ1xcbicpfV1gKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FtQm94U2V0dXAoY2FtKSB7XHJcbiAgaWYgKCFjYW0uaXNPcnRob2dyYXBoaWNDYW1lcmEpIHJldHVybjtcclxuICBjb25zdCBuZWFyID0gY2FtLm5lYXIsIGZhciA9IGNhbS5mYXIsIG4gPSB0b3BGb2xkZXJTdGFjay5sZW5ndGg7XHJcbiAgY29uc3QgbCA9IGNhbS5sZWZ0LCByID0gY2FtLnJpZ2h0LCB0ID0gY2FtLnRvcCwgYiA9IGNhbS5ib3R0b207XHJcbiAgY29uc3QgeiA9IGNhbS5wb3NpdGlvbi56OyAvL25vdCBzdHJpY3RseSByaWdodC4uLlxyXG4gIHNjcmF0Y2hDYW1Cb3gubWluLnNldChsLCBiLCAtZmFyICsgeik7XHJcbiAgc2NyYXRjaENhbUJveC5tYXguc2V0KHIsIHQsIC1uZWFyICsgeik7XHJcbiAgcmV0dXJuIHNjcmF0Y2hDYW1Cb3g7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUZvbGRlcih7XHJcbiAgdGV4dENyZWF0b3IsXHJcbiAgbmFtZSxcclxuICBndWlBZGQsXHJcbiAgZ3VpUmVtb3ZlLFxyXG4gIGFkZENvbnRyb2xsZXJGdW5jcyxcclxuICBnbG9iYWxDb250cm9sbGVyc1xyXG59ID0ge30gKXtcclxuXHJcbiAgY29uc3QgTUFYX0ZPTERFUl9JVEVNU19JTl9DT0xVTU4gPSA0MDtcclxuXHJcbiAgY29uc3Qgd2lkdGggPSBMYXlvdXQuRk9MREVSX1dJRFRIO1xyXG4gIGNvbnN0IGRlcHRoID0gTGF5b3V0LlBBTkVMX0RFUFRIO1xyXG5cclxuICBjb25zdCBzdGF0ZSA9IHtcclxuICAgIGNvbGxhcHNlZDogZmFsc2UsXHJcbiAgICBwcmV2aW91c1BhcmVudDogdW5kZWZpbmVkXHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ3JvdXAgPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICBncm91cC5ndWlUeXBlID0gXCJmb2xkZXJcIjtcclxuICBncm91cC50b1N0cmluZyA9ICgpID0+IGBbJHtncm91cC5ndWlUeXBlfTogJHtuYW1lfV1gO1xyXG5cclxuICBjb25zdCBjb2xsYXBzZUdyb3VwID0gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgZ3JvdXAuYWRkKCBjb2xsYXBzZUdyb3VwICk7XHJcblxyXG4gIHZhciBpc0FjY29yZGlvbiA9IGZhbHNlO1xyXG4gIC8qKiBXaGVuIHRydWUsIHdpbGwga2VlcCBvbmx5IG9uZSBjaGlsZCBmb2xkZXIgb2YgdGhpcyBmb2xkZXIgb3BlbiBhdCBhIHRpbWUuXHJcbiAgICogU2libGluZ3MgYXV0b21hdGljYWxseSBjbG9zZS5cclxuICAgKi9cclxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIGdyb3VwLCAnYWNjb3JkaW9uJywge1xyXG4gICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBpc0FjY29yZGlvbjtcclxuICAgIH0sXHJcbiAgICBzZXQ6ICggbmV3VmFsdWUgKSA9PiB7XHJcbiAgICAgIGlmICggbmV3VmFsdWUgJiYgIWlzQWNjb3JkaW9uICkgZ3JvdXAuZ3VpQ2hpbGRyZW4uZmlsdGVyKCBjPT5jLmlzRm9sZGVyICkubWFwKCBjPT5jLmNsb3NlKCkgKTtcclxuICAgICAgaXNBY2NvcmRpb24gPSBuZXdWYWx1ZTtcclxuICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvL2ZsYWcgdGhlIG5lZWQgZm9yIHBlcmZvcm1pbmcgbGF5b3V0IG9mIHRoZSBmb2xkZXIgaGllcmFyY2h5IGluIHdoaWNoIHRoaXMgaXMgY29udGFpbmVkLlxyXG4gIGdyb3VwLnJlcXVlc3RMYXlvdXQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB0b3BGb2xkZXIgPSBnZXRUb3BMZXZlbEZvbGRlcihncm91cCk7XHJcbiAgICBpZiAodG9wRm9sZGVyLnVzZXJEYXRhLmxheW91dEluUHJvZ3Jlc3MpIHtcclxuICAgICAgY29uc29sZS5sb2coYHJlcXVlc3RlZCBsYXlvdXQgb2YgZm9sZGVyICR7Z3JvdXAuZm9sZGVyTmFtZX0gd2hpbGUgbGF5b3V0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuLi5gKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvL3RvcEZvbGRlci5yZXF1ZXN0TGF5b3V0KCk7XHJcbiAgICAgIHRvcEZvbGRlci51c2VyRGF0YS5sYXlvdXRQZW5kaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy9zaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBpbmRleC5qcyB1cGRhdGUoPykgZm9yIGVhY2ggdG9wRm9sZGVyLCB0aGVuIGZyb20gd2l0aGluIHBlcmZvcm1MYXlvdXQoKSBmb3IgZWFjaCBjaGlsZCBmb2xkZXJcclxuICBncm91cC5wZXJmb3JtTGF5b3V0ID0gcGVyZm9ybUxheW91dDtcclxuXHJcbiAgY29uc3Qgc3RyYWlnaHRSb3RhdGlvbiA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XHJcbiAgLy9wcm92aWRlIGFyZ3VtZW50cyBmb3IgaG93IGNvbnN0cmFpbmVkIHRvIGJlLCBhbmQgcmUtdXNlIHNhbWUgZnVuY3Rpb24gYm90aCBvbiBkZXRhY2ggYW5kIGVsc2V3aGVyZT9cclxuICBncm91cC5maXhGb2xkZXJQb3NpdGlvbiA9IGZ1bmN0aW9uKHRocmVzaD0wLjAxKSB7XHJcbiAgICBjb25zdCBmID0gdGhpcztcclxuICAgIGlmICghZi51c2VyRGF0YS5pc09ydGhvZ3JhcGhpYykgcmV0dXJuO1xyXG4gICAgLy9hbHdheXMgZm9yY2Ugcm90YXRpb24gc3RyYWlnaHQgZm9yd2FyZC4uLlxyXG4gICAgZi5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHN0cmFpZ2h0Um90YXRpb24pO1xyXG5cclxuICAgIC8vd2UgbmVlZCB0byBhdm9pZCBOYU4gYmVjYXVzZSBvZiBUZXh0R2VvbWV0cnkgcG9zaXRpb24gaGF2aW5nIGl0ZW1TaXplID09IDIgd2hpY2ggdXBzZXRzIFZlY3RvcjMuZnJvbUJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgLy9odHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL2lzc3Vlcy8xNDM1MlxyXG4gICAgLy9tYXliZSBJIGNvdWxkIHVzZSBhIEJveDIgYW55d2F5IHNpbmNlIDNkIG1pZ2h0IGp1c3QgY29uZnVzZSB0aGluZ3MuXHJcbiAgICBjb25zdCBib3ggPSBzZXRCb3hGcm9tT2JqZWN0KHNjcmF0Y2hGb2xkZXJCb3gsIGYpO1xyXG4gICAgY29uc3QgYm94VyA9IGJveC5tYXgueCAtIGJveC5taW4ueCwgYm94SCA9IGJveC5tYXgueS1ib3gubWF4Lnk7XHJcbiAgICBcclxuICAgIGNvbnN0IGNhbSA9IGYudXNlckRhdGEuaXNPcnRob2dyYXBoaWM7XHJcbiAgICBjb25zdCBjYW1Cb3ggPSBjYW1Cb3hTZXR1cChjYW0pOyAvL2JpdCB3YXN0ZWZ1bCB0byBjYWxsIHRoaXMgaGVyZSwgYnV0IGluc2lnbmlmaWNhbnQuXHJcbiAgICAvL3JlYWxseSwgSSB3YW50IHRvIGtub3cgaWYgaXQncyAnbW9zdGx5JyBpbnZpc2libGUuXHJcbiAgICAvL1VzaW5nIHR3byBib3hlcywgcmF0aGVyIHRoYW4gZnJ1c3R1bS5zZXRGcm9tTWF0cml4KCBtYXQubXVsdGlwbHlNYXRyaWNlcyggY2FtLnByb2plY3Rpb25NYXRyaXgsIGNhbS5tYXRyaXhXb3JsZEludmVyc2UgKSApO1xyXG4gICAgLy8oZnJ1c3R1bSBpcyB1bm5lY2Vzc2FyeSAqY291Z2gqaWYgd2UgYXNzdW1lIG9ydGhvZ3JhcGhpYyBwZXJzcGVjdGl2ZSwgbm8gY2FtZXJhIHRyYW5zZm9ybSAmIGFyZSBnZW5lcmFsbHkgbGF4IGFib3V0IHoqKVxyXG4gICAgY29uc3QgaW50ZXJzZWN0aW9uID0gYm94LmludGVyc2VjdChjYW1Cb3gpOyAvL2NhcmVmdWwgb2Ygb3JkZXI7IGludGVyc2VjdCgpIG11dGF0ZXNcclxuICAgIC8vKFhYWDogc3RyaWN0bHkgc3BlYWtpbmcsIGlkZWFsbHkgSSB3b3VsZCB0YWtlIGNhbWVyYSBtYXRyaXhXb3JsZCBpbnRvIGFjY291bnQgaWYgSSB3YW50IHRvIGJlIHByb3BlcilcclxuICAgIC8vKG1pZ2h0IGp1c3QgbWFrZSBsb2cgYSB3YXJuaW5nIGlmIGl0J3Mgc2V0IGhvdyBJIGRvbid0IGV4cGVjdCBpdCwgYnV0IHByZWZlciBub3QgdG8gbGVhdmUgdHJhcHMuKVxyXG4gICAgXHJcbiAgICAvL2xvb2sgYXQgZGltZW5zaW9ucyBvZiBpbnRlcnNlY3Rpb24gYW5kIGZvcmNlIGlud2FyZHMgaWYgbmVjZXNzYXJ5Li4uXHJcbiAgICBjb25zdCBpbnRlcnNlY3Rpb25TaXplID0gaW50ZXJzZWN0aW9uLmdldFNpemUoc2NyYXRjaFNpemUpO1xyXG4gICAgY29uc3Qgc2NyZWVuVyA9IGNhbS5yaWdodCAtIGNhbS5sZWZ0LCBzY3JlZW5IID0gY2FtLnRvcCAtIGNhbS5ib3R0b207XHJcbiAgICAvL3dvcmsgaW4gdW5pdHMgYXMgZnJhY3Rpb24gb2YgYm94IHdpZHRoIChhbHRob3VnaCB0aGF0J3Mgbm90IGEgZ3JlYXQgaWRlYSB3aXRoIG11bHRpLWNvbHVtbiBmb2xkZXJzKVxyXG4gICAgaW50ZXJzZWN0aW9uU2l6ZS54IC89IGJveFc7IGludGVyc2VjdGlvblNpemUueSAvPSBib3hXO1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICAvL2NvbnNvbGUubG9nKGAke2YuZm9sZGVyTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoaW50ZXJzZWN0aW9uU2l6ZSl9LCB0aHJlc2g6ICR7dGhyZXNofWApO1xyXG4gICAgaWYgKGludGVyc2VjdGlvblNpemUueCA8IHRocmVzaCkgeyAvL1RPRE86IHBhcmFtYXRlcmlzZSAvIG5vbi1tYWdpYy1udW1iZXJcclxuICAgICAgLy9UT0RPIHdvcmsgb3V0IHdoaWNoIHNpZGUgd2UncmUgb24sIG1vdmUgYnkgb2JqZWN0IHdpZHRoLi4uXHJcbiAgICAgIGYucG9zaXRpb24ueCA9IGNhbS5sZWZ0ICsgc2NyZWVuVy8yO1xyXG4gICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoaW50ZXJzZWN0aW9uU2l6ZS55IDwgdGhyZXNoKSB7XHJcbiAgICAgIGYucG9zaXRpb24ueSA9IGNhbS5ib3R0b20gKyBzY3JlZW5ILzI7XHJcbiAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChuZWVkc1VwZGF0ZSkgZi51cGRhdGVNYXRyaXgoKTtcclxuICB9XHJcblxyXG4gIGdyb3VwLmlzQ29sbGFwc2VkID0gKCkgPT4geyByZXR1cm4gc3RhdGUuY29sbGFwc2VkIH1cclxuICBcclxuICAvL3VzZWZ1bCB0byBoYXZlIGFjY2VzcyB0byB0aGlzIGFzIHdlbGwuIFVzaW5nIGluIHJlbW92ZSBpbXBsZW1lbnRhdGlvblxyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShncm91cCwgJ2d1aUNoaWxkcmVuJywge1xyXG4gICAgLy9wZXJoYXBzIG1vZGFsRWRpdG9yIHNob3VsZCBhbHNvIGNvdW50IGFzIGEgbWVtYmVyIG9mIHRoaXMuLi5cclxuICAgIC8vY3VycmVudGx5IGNhbid0IHNlZSBhbnl0aGluZyBpbiBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvdWxkIHJlcXVpcmUgdGhhdFxyXG4gICAgLy8tLSBhZGRpbmcgaGVhZGVySXRlbXMgdGhvdWdoLCBzbyB0aGV5J2xsIGdldCBwaWNrZWQgdXAgYnkgcmVtb3ZlKClcclxuICAgIC8vIC0gbWF5YmUgc2FtZSBzaG91bGQgYXBwbHkgdG8gbW9kYWxFZGl0b3JcclxuICAgIGdldDogKCkgPT4geyByZXR1cm4gWyAuLi5jb2xsYXBzZUdyb3VwLmNoaWxkcmVuLCAuLi5oZWFkZXJJdGVtcy5jaGlsZHJlbiBdIH1cclxuICB9KTtcclxuICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIG9mIHRoZSBzdXBwbGllZCBhcmdzIGFyZSBtZW1iZXJzIG9mIHRoaXMgZm9sZGVyXHJcbiAgZ3JvdXAuaGFzQ2hpbGQgPSBmdW5jdGlvbiAoIC4uLmFyZ3MgKXtcclxuICAgIHJldHVybiAhYXJncy5pbmNsdWRlcygob2JqKSA9PiB7IHJldHVybiBncm91cC5ndWlDaGlsZHJlbi5pbmRleE9mKG9iaikgPT09IC0xfSk7XHJcbiAgfVxyXG5cclxuICBncm91cC5mb2xkZXJOYW1lID0gbmFtZTsgLy9mb3IgZGVidWdnaW5nXHJcbiAgXHJcbiAgLy8gIFllYWguIEdyb3NzLlxyXG4gIGNvbnN0IGFkZE9yaWdpbmFsID0gVEhSRUUuR3JvdXAucHJvdG90eXBlLmFkZDtcclxuICAvL2FzIGxvbmcgYXMgbm8tb25lIGV4cGVjdHMgdGhpcyB0byBiZWhhdmUgbGlrZSBhIHJlZ3VsYXIgVEhSRUUuR3JvdXAsIHRoZSBjaGFuZ2VkIGRlZmluaXRpb24gb2YgcmVtb3ZlIHNob3VsZG4ndCBodXJ0XHJcbiAgY29uc3QgcmVtb3ZlT3JpZ2luYWwgPSBUSFJFRS5Hcm91cC5wcm90b3R5cGUucmVtb3ZlOyBcclxuXHJcbiAgZnVuY3Rpb24gYWRkSW1wbCggbyApe1xyXG4gICAgLy8gSSBjb3VsZCBjaGFuZ2UgdGhpcyBmdW5jdGlvbiBhcyBwYXJ0IG9mIGEgcmVmYWN0b3IgdG8gcGxhY2UgZXZlcnl0aGluZyBhdCB0b3BGb2xkZXIgbGV2ZWwuLi5cclxuICAgIC8vIGlzIHRoYXQgYSBnb29kIGlkZWEsIG9yIGEgYmFkIGlkZWE/XHJcbiAgICBhZGRPcmlnaW5hbC5jYWxsKCBncm91cCwgbyApO1xyXG4gIH1cclxuICBmdW5jdGlvbiByZW1vdmVJbXBsKCBvICl7XHJcbiAgICByZW1vdmVPcmlnaW5hbC5jYWxsKCBncm91cCwgbyApO1xyXG4gIH1cclxuXHJcbiAgLy9hZGRJbXBsKCBjb2xsYXBzZUdyb3VwICk7IC8vcmVkdW5kYW50LlxyXG5cclxuICBjb25zdCBwYW5lbCA9IExheW91dC5jcmVhdGVQYW5lbCggd2lkdGgsIExheW91dC5GT0xERVJfSEVJR0hULCBkZXB0aCwgdHJ1ZSApO1xyXG4gIGFkZEltcGwoIHBhbmVsICk7XHJcblxyXG4gIGNvbnN0IGRlc2NyaXB0b3JMYWJlbCA9IHRleHRDcmVhdG9yLmNyZWF0ZSggbmFtZSApO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi54ID0gTGF5b3V0LlBBTkVMX0xBQkVMX1RFWFRfTUFSR0lOICogMS41O1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi55ID0gLTAuMDM7XHJcbiAgZGVzY3JpcHRvckxhYmVsLnBvc2l0aW9uLnogPSBkZXB0aDtcclxuICBwYW5lbC5hZGQoIGRlc2NyaXB0b3JMYWJlbCApO1xyXG5cclxuICBjb25zdCBkb3duQXJyb3cgPSBMYXlvdXQuY3JlYXRlRG93bkFycm93KCk7XHJcbiAgQ29sb3JzLmNvbG9yaXplR2VvbWV0cnkoIGRvd25BcnJvdy5nZW9tZXRyeSwgMHhmZmZmZmYgKTtcclxuICBkb3duQXJyb3cucG9zaXRpb24uc2V0KCAwLjA1LCAwLCBkZXB0aCAgKiAxLjAxICk7XHJcbiAgcGFuZWwuYWRkKCBkb3duQXJyb3cgKTtcclxuXHJcbiAgY29uc3QgZ3JhYmJlciA9IExheW91dC5jcmVhdGVQYW5lbCggd2lkdGgsIExheW91dC5GT0xERVJfR1JBQl9IRUlHSFQsIGRlcHRoLCB0cnVlICk7XHJcbiAgZ3JhYmJlci5wb3NpdGlvbi55ID0gTGF5b3V0LkZPTERFUl9IRUlHSFQgKiAwLjg2OyAvL1hYWDogbWFnaWMgbnVtYmVyXHJcbiAgZ3JhYmJlci5uYW1lID0gJ2dyYWJiZXInO1xyXG4gIGFkZEltcGwoIGdyYWJiZXIgKTtcclxuXHJcbiAgY29uc3QgZ3JhYkJhciA9IEdyYXBoaWMuZ3JhYkJhcigpO1xyXG4gIGdyYWJCYXIucG9zaXRpb24uc2V0KCB3aWR0aCAqIDAuNSwgMCwgZGVwdGggKiAxLjAwMSApO1xyXG4gIGdyYWJiZXIuYWRkKCBncmFiQmFyICk7XHJcbiAgZ3JvdXAuaXNGb2xkZXIgPSB0cnVlO1xyXG4gIGdyb3VwLmhpZGVHcmFiYmVyID0gZnVuY3Rpb24oKSB7IGdyYWJiZXIudmlzaWJsZSA9IGZhbHNlIH07XHJcbiAgZ3JvdXAuc2hvd0dyYWJiZXIgPSBmdW5jdGlvbigpIHsgZ3JhYmJlci52aXNpYmxlID0gdHJ1ZSB9O1xyXG4gIGdyb3VwLmhpZGVIZWFkZXIgPSBmdW5jdGlvbigpIHsgXHJcbiAgICBncm91cC5oaWRlR3JhYmJlcigpO1xyXG4gICAgLy9kZXNjcmlwdG9yTGFiZWwudmlzaWJsZSA9IGRvd25BcnJvdy52aXNpYmxlID0gcGFuZWwudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgcGFuZWwudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH07XHJcbiAgZ3JvdXAuc2hvd0hlYWRlciA9ICgpID0+IHtcclxuICAgIC8vZ3JhYmJlci52aXNpYmxlID0gZGVzY3JpcHRvckxhYmVsLnZpc2libGUgPSBkb3duQXJyb3cudmlzaWJsZSA9IHBhbmVsLnZpc2libGUgPSB0cnVlO1xyXG4gICAgcGFuZWwudmlzaWJsZSA9IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgLy9UT0RPOiBpbnRlcmZhY2UgZm9yIGFkZGluZyB0aGluZ3MgdG8gdGhpcy4uLiBOT1QgJ3Nob3dJbkZvbGRlckhlYWRlcicgbWV0aG9kIC8gcHJvcGVydHkgb24gbGluZWFyIGl0ZW1zLi4uXHJcbiAgY29uc3QgaGVhZGVySXRlbXMgPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICBwYW5lbC5hZGQoaGVhZGVySXRlbXMpO1xyXG4gIC8vdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8gbWFrZSBvYmogYmVoYXZlIGFzIGNvbnRyb2xsZXIgbGF5ZWQgb3V0IGluIGhlYWRlckl0ZW1zLFxyXG4gIC8vYmFzZWQgb24gc29tZSBhc3N1bXB0aW9ucyBhYm91dCBvYmogdGhhdCBtYXkgYmUgdHJ1ZSBhdCB0aW1lIG9mIHdyaXRpbmcuLi5cclxuICAvL2J1dCBhcmUgcGVuZGluZyBtb3JlIHJpZ29yb3VzIHNwZWNpZmljYXRpb24gLyByZWZhY3RvcmluZyBldGMuXHJcbiAgZ3JvdXAuYWRkSGVhZGVySXRlbSA9IGZ1bmN0aW9uKG9iail7XHJcbiAgICBoZWFkZXJJdGVtcy5hZGQob2JqKTtcclxuICAgIG9iai5mb2xkZXIgPSBncm91cDtcclxuICAgIG9iai5pc0hlYWRlck9iamVjdCA9IHRydWU7XHJcblxyXG4gICAgLy9hbHNvIG5lZWQgdG8gYWRkIHRvIGdsb2JhbCBjb250cm9sbGVycyBsaXN0IGV0Yy4gTkI6OiBtYWtlIHN1cmUgdGhhdCB0aGV5IHdpbGwgZ2V0IHJlbW92ZWQgYXMgd2VsbFxyXG4gICAgLy8tLS0gdGhpcyBnZW5lcmljIGludGVyYWN0aW9uLnVwZGF0ZSBkb2Vzbid0IG1ha2UgbGlzdGVuKCkgd29yayBwcm9wZXJseS5cclxuICAgIGlmICghb2JqLnVwZGF0ZUNvbnRyb2wpIG9iai51cGRhdGVDb250cm9sID0gaW5wdXRPYmplY3RzID0+IG9iai5pbnRlcmFjdGlvbi51cGRhdGUoaW5wdXRPYmplY3RzKTtcclxuICAgIG9iai5oaXRzY2FuID0gWyBvYmogXTsgLy9oYWNreSBoYWNreVxyXG4gICAgZ2xvYmFsQ29udHJvbGxlcnMucHVzaChvYmopO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBjb25zdCBkZXRhY2hCdXR0b25NYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7Y29sb3I6IDB4ODg4ODg4LCB0cmFuc3BhcmVudDogdHJ1ZX0pO1xyXG4gIGNvbnN0IGggPSBMYXlvdXQuRk9MREVSX0hFSUdIVCAqIDAuODtcclxuICBjb25zdCBkZXRhY2hCdXR0b25SZWN0ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KCBoLCBoLCBMYXlvdXQuQlVUVE9OX0RFUFRIKjIgKTtcclxuICAvL3NvbWV3aGF0IGJhY2t3YXJkcyB3YXkgb2YgZ2V0dGluZyB0ZXh0dXJlcy4uLiBUT0RPIG1heWJlIGNoYW5nZSAoYWxvbmcgd2l0aCBvdGhlciBzdHlsZSBjb25zaXN0ZW5jeSB0eXBlIHN0dWZmKVxyXG4gIGNvbnN0IGRvY2tUZXh0dXJlID0gR3JhcGhpYy5kb2NrKCkubWF0ZXJpYWwubWFwO1xyXG4gIGNvbnN0IHVuZG9ja1RleHR1cmUgPSBHcmFwaGljLnVuZG9jaygpLm1hdGVyaWFsLm1hcDtcclxuICBkZXRhY2hCdXR0b25NYXRlcmlhbC5tYXAgPSB1bmRvY2tUZXh0dXJlO1xyXG4gIGNvbnN0IGRldGFjaEJ1dHRvbiA9IG5ldyBUSFJFRS5NZXNoKCAgZGV0YWNoQnV0dG9uUmVjdCwgZGV0YWNoQnV0dG9uTWF0ZXJpYWwgKTtcclxuICBkZXRhY2hCdXR0b24udmlzaWJsZSA9IGZhbHNlO1xyXG4gIGRldGFjaEJ1dHRvbi5wb3NpdGlvbi54ID0gTGF5b3V0LkZPTERFUl9XSURUSCAtIExheW91dC5GT0xERVJfSEVJR0hUO1xyXG4gIGNvbnN0IGRldGFjaEJ1dHRvbkludGVyYWN0aW9uID0gY3JlYXRlSW50ZXJhY3Rpb24oZGV0YWNoQnV0dG9uKTtcclxuICBkZXRhY2hCdXR0b24uaW50ZXJhY3Rpb24gPSBkZXRhY2hCdXR0b25JbnRlcmFjdGlvbjtcclxuICBkZXRhY2hCdXR0b25JbnRlcmFjdGlvbi5ldmVudHMub24oICdvblByZXNzZWQnLCBmdW5jdGlvbiggcCApe1xyXG4gICAgaWYgKGdyb3VwLmRldGFjaGVkUGFyZW50KSB7XHJcbiAgICAgIGdyb3VwLnJlYXR0YWNoKCk7XHJcbiAgICB9IGVsc2UgZ3JvdXAuZGV0YWNoKCk7XHJcbiAgICBwLmxvY2tlZCA9IHRydWU7XHJcbiAgfSk7XHJcbiAgLy9oZWFkZXJJdGVtcy5hZGQoZGV0YWNoQnV0dG9uKTtcclxuICBncm91cC5hZGRIZWFkZXJJdGVtKGRldGFjaEJ1dHRvbik7XHJcblxyXG4gIGxldCBpc0RldGFjaGFibGUgPSBmYWxzZTtcclxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIGdyb3VwLCAnZGV0YWNoYWJsZScsIHtcclxuICAgIGdldDogKCkgPT4ge1xyXG4gICAgICByZXR1cm4gaXNEZXRhY2hhYmxlO1xyXG4gICAgfSxcclxuICAgIHNldDogKCBuZXdWYWx1ZSApID0+IHtcclxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBpc0RldGFjaGFibGUpIHJldHVybjtcclxuICAgICAgZGV0YWNoQnV0dG9uLnZpc2libGUgPSBuZXdWYWx1ZTtcclxuICAgICAgaXNEZXRhY2hhYmxlID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICBncm91cC5hZGQgPSBmdW5jdGlvbiggLi4uYXJncyApe1xyXG4gICAgY29uc3QgbmV3Q29udHJvbGxlciA9IGd1aUFkZCggLi4uYXJncyApO1xyXG5cclxuICAgIGlmKCBuZXdDb250cm9sbGVyICl7XHJcbiAgICAgIGdyb3VwLmFkZENvbnRyb2xsZXIoIG5ld0NvbnRyb2xsZXIgKTtcclxuICAgICAgcmV0dXJuIG5ld0NvbnRyb2xsZXI7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICByZXR1cm4gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLypcclxuICAgIFNvbWUgY29udHJvbGxlcnMgbWF5IGJyaW5nIHVwIHN1Yi1HVUlzIHdoaWNoIGhhdmUgdGhlIHBvdGVudGlhbFxyXG4gICAgdG8gb3ZlcmxhcCAvIGNsYXNoLiAgVGhpcyBlbnN1cmVzIG9ubHkgb25lIGlzIHByZXNlbnQgYXQgYSB0aW1lLlxyXG4gICovXHJcbiAgZ3JvdXAuc2V0TW9kYWxFZGl0b3IgPSBmdW5jdGlvbihlKXtcclxuICAgIC8vVGhpcyBjb3VsZCBnbyB3cm9uZyBpZiBmb2xkZXIgaGllcmFyY2h5IGNoYW5nZXMgc2lnbmlmaWNhbnRseS5cclxuICAgIC8vU2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciByb2NrJ24ncm9sbCAoZmFtb3VzIGxhc3Qgd29yZHMpLlxyXG4gICAgLy9JIGNvdWxkIG1ha2UgaXQgc28gdGhhdCBvbmx5IG9uZSBvZiB0aGVzZSB0aGluZ3Mgd2FzIGV2ZXIgdmlzaWJsZVxyXG4gICAgLy9hY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uICBUaGF0IHNob3VsZCBiZSBlYXNpZXIgdG8gbWFrZSByb2J1c3QsIGFueXdheS4uLlxyXG4gICAgLy9hbmQgc2F2ZXMgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuXHJcbiAgICBjb25zdCBmb2xkZXIgPSBnZXRUb3BMZXZlbEZvbGRlcihncm91cCk7XHJcbiAgICBpZiAoZm9sZGVyLm1vZGFsRWRpdG9yKSBmb2xkZXIubW9kYWxFZGl0b3IudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgZm9sZGVyLm1vZGFsRWRpdG9yID0gZTtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgIGlmIChlLnBlcmZvcm1MYXlvdXQpIGUucGVyZm9ybUxheW91dCgpO1xyXG4gICAgZm9sZGVyLm1vZGFsV2FzU2V0SW5DdXJyZW50RnJhbWUgPSB0cnVlO1xyXG4gICAgLy9hZGQgYSBmbGFnIHRvIGFsbCBjaGlsZHJlbiByZWN1cnNpdmVseSBzbyB0aGF0IGludGVyYWN0aW9uIHN5c3RlbSBjYW4gaWRlbnRpZnkgdGhlbSBhcyBiZWxvbmdpbmcgdG8gYSBtb2RhbCBlZGl0b3JcclxuICAgIC8vVE9ETzogc2tpcCBpZiBhbHJlYWR5IGRvbmUuLi5cclxuICAgIGZ1bmN0aW9uIGRlY29yYXRlQ2hpbGRyZW4ocGFyZW50KSB7XHJcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgIGMudXNlckRhdGEucGFydE9mTW9kYWwgPSBlO1xyXG4gICAgICAgIGRlY29yYXRlQ2hpbGRyZW4oYyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZGVjb3JhdGVDaGlsZHJlbihlKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IG1vZGFsIGVkaXRvciBmcm9tIHRoaXMgZm9sZGVyXHJcbiAgICogKipidXQgbm90IGlmIGl0IHdhcyBhZGRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgY29udHJvbGxlciB1cGRhdGUsXHJcbiAgICogYXMgaW5kaWNhdGVkIGJ5IGEgZmxhZyBzZXQgaW4gc2V0TW9kYWxDb250cm9sbGVyIGFuZCByZXNldCBpbiBpbmRleC5qcyB1cGRhdGUqKlxyXG4gICAqL1xyXG4gIGdyb3VwLmNsZWFyTW9kYWxFZGl0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGZvbGRlciA9IGdldFRvcExldmVsRm9sZGVyKGdyb3VwKTtcclxuICAgIGlmICghZm9sZGVyLm1vZGFsV2FzU2V0SW5DdXJyZW50RnJhbWUpIHtcclxuICAgICAgLy9mb2xkZXIuc2V0TW9kYWxFZGl0b3IobnVsbCk7XHJcbiAgICAgIGlmIChmb2xkZXIubW9kYWxFZGl0b3IpIHtcclxuICAgICAgICBmb2xkZXIubW9kYWxFZGl0b3IudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvbGRlci5tb2RhbEVkaXRvciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuXHJcbiAgLyogXHJcbiAgUmVtb3ZlcyB0aGUgZ2l2ZW4gY29udHJvbGxlcnMgZnJvbSB0aGUgR1VJLiAgPj4+T25jZSByZW1vdmVkLCB0aGUgY29udHJvbGxlcnMgd2lsbCBlZmZlY3RpdmVseSBiZSBpbnZhbGlkIGZvciB1c2U8PDxcclxuICA+Pj4gc28gZGlzcG9zZSBvZiB0aGVtIGFzIHdlbGw/IE5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB0ZXh0dXJlcyAvIGFueXRoaW5nIHNoYXJlZC4uLiA8PDxcclxuICBhcyB0aGV5IHdpbGwgYWxzbyBiZSByZW1vdmVkIGZyb20gdGhlIGdsb2JhbCBsaXN0IG9mIGFsbCBkYXQuR1VJVlIgY29udHJvbGxlcnMuICBVc2UgJ2RldGFjaCcgaW5zdGVhZCBpZiBpdCBpc1xyXG4gIGRlc2lyZWQgdG8gcmV1c2UgR1VJIGVsZW1lbnRzIGVsc2V3aGVyZS5cclxuXHJcbiAgSWYgdGhlIGFyZ3VtZW50cyBhcmUgaW52YWxpZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB0aGlzIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMsIFxyXG4gIGFib3J0aW5nIHRoZSBwcm9jZXNzIGFuZCByZXR1cm5pbmcgZmFsc2UgZnJvbSB0aGlzIG1ldGhvZC5cclxuXHJcbiAgTm90ZTogYXMgd2l0aCBhZGQsIHRoaXMgb3ZlcndyaXRlcyBhbiBleGlzdGluZyBwcm9wZXJ0eSBvZiBUSFJFRS5Hcm91cC5cclxuICBBcyBsb25nIGFzIG5vLW9uZSBleHBlY3RzIGZvbGRlcnMgdG8gYmVoYXZlIGxpa2UgcmVndWxhciBUSFJFRS5Hcm91cHMsIHRoYXQgc2hvdWxkbid0IG1hdHRlci5cclxuICAqL1xyXG4gIGdyb3VwLnJlbW92ZSA9IGZ1bmN0aW9uKCAuLi5hcmdzICl7XHJcbiAgICAvL2d1aVJlbW92ZSBpcyBwYXNzZWQgaW4gZnJvbSBpbmRleC5qcyBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHNhbml0eSBjaGVja2luZyAmIHJlbW92aW5nIGZyb20gZ2xvYmFsIGNvbnRyb2xsZXJzIGxpc3RcclxuICAgIGNvbnN0IG9rID0gZ3VpUmVtb3ZlKCAuLi5hcmdzICk7IC8vIGFueSBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgY2F1c2UgdGhpcyB0byByZXR1cm4gZmFsc2Ugd2l0aCBubyBzaWRlLWVmZmVjdHNcclxuICAgIGlmICghb2spIHJldHVybiBmYWxzZTtcclxuICAgIGFyZ3MuZm9yRWFjaCggZnVuY3Rpb24oIG9iaiApe1xyXG4gICAgICBjb25zb2xlLmFzc2VydChncm91cC5oYXNDaGlsZChvYmopLCBcImludGVybmFsIHByb2JsZW0gd2l0aCBob3VzZWtlZXBpbmcgbG9naWMgb2YgZGF0LkdVSVZSIGZvbGRlciBub3QgY2F1Z2h0IGJ5IHNhbml0eSBjaGVja1wiKTtcclxuICAgICAgaWYgKG9iai5pc0ZvbGRlcikge1xyXG4gICAgICAgIG9iai5yZW1vdmUoIC4uLm9iai5ndWlDaGlsZHJlbiApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbGxhcHNlR3JvdXAucmVtb3ZlKG9iaik7XHJcbiAgICB9KTtcclxuICAgIC8vVE9ETzogZGVmZXIgYWN0dWFsIGxheW91dCBwZXJmb3JtYW5jZTsgc2V0IGEgZmxhZyBhbmQgbWFrZSBzdXJlIGl0IGdldHMgZG9uZSBiZWZvcmUgYW55IHJlbmRlcmluZyBvciBoaXQtdGVzdGluZyBoYXBwZW5zLlxyXG4gICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfTtcclxuXHJcbiAgLy9yYXRoZXIgdGhhbiBtZXRob2QsIGRldGFjaGVkUGFyZW50IGJlIGEgcHJvcGVydHkgdGhhdCBkb2VzIHRoaXMgc3R1ZmYgaW4gc2V0dGVyLi4uXHJcbiAgLy9hbnl3YXksIGJvdGggYXJlIHJlYWxseSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlLCBhcyBoaW50ZWQgYnkgXyBpbiBuYW1lLlxyXG4gIGdyb3VwLl9zZXREZXRhY2hlZEZyb20gPSAocGFyZW50KSA9PiB7XHJcbiAgICBncm91cC5kZXRhY2hlZFBhcmVudCA9IHBhcmVudDtcclxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpIHtcclxuICAgICAgZGV0YWNoQnV0dG9uLm1hdGVyaWFsLm1hcCA9IHVuZG9ja1RleHR1cmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZXRhY2hCdXR0b25NYXRlcmlhbC5tYXAgPSBkb2NrVGV4dHVyZTtcclxuICAgICAgZ3JvdXAuc2hvd0hlYWRlcigpO1xyXG4gICAgICBncm91cC5zaG93R3JhYmJlcigpO1xyXG4gICAgICBncm91cC5mb2xkZXIgPSBncm91cDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogRGV0YWNoIGEgY2hpbGQgZm9sZGVyIGZyb20gdGhpcyBmb2xkZXIgaGllcmFyY2h5LCBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZWxzZXdoZXJlIGluIHNjZW5lIGhpZXJhcmNoeS5cclxuICAgKiBcclxuICAgKiAod2lsbCBub3QgYmUgdmlzaWJsZSB1bnRpbCBleHBsaWNpdGx5IGFkZGVkIGVsc2V3aGVyZTsgXHJcbiAgICogY2FsbGluZyBkZXRhY2goKSBpbnN0ZWFkIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBhbmQgaXMgbW9yZSBpbnRlbmRlZCBmb3IgdXNlIGluIGFwcGxpY2F0aW9uIGNvZGVcclxuICAgKiB3aGlsZSB0aGlzIG1ldGhvZCBpcyBtb3JlIG9mIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4pXHJcbiAgICovXHJcbiAgZ3JvdXAuZGV0YWNoQ2hpbGQgPSAoY2hpbGQpID0+IHtcclxuICAgIGlmICghY2hpbGQuaXNGb2xkZXIgfHwgY2hpbGQuZm9sZGVyICE9PSBncm91cCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY2hpbGQuX3NldERldGFjaGVkRnJvbShncm91cCk7XHJcbiAgICBjb2xsYXBzZUdyb3VwLnJlbW92ZShjaGlsZCk7XHJcbiAgICAvL1RIUkVFLk9iamVjdDNELnByb3RvdHlwZS5yZW1vdmUuY2FsbChncm91cCwgY2hpbGQpO1xyXG4gICAgcmVtb3ZlSW1wbChjaGlsZCk7XHJcbiAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XHJcbiAgICByZXR1cm4gZ3JvdXA7IC8vb3IgY2hpbGQ/XHJcbiAgfTtcclxuXHJcbiAgLypcclxuICAgIERldGFjaCB0aGlzIG9iamVjdCBmcm9tIGl0cyBwYXJlbnQsIGFuZCByZWF0dGFjaCB0byBzY2VuZWdyYXBoIGFzIGEgc2libGluZyBvZiB0aGUgJ3RvcCBsZXZlbCcgZm9sZGVyIGluXHJcbiAgICB0aGUgaGllcmFyY2h5IHRoaXMgcHJldmlvdXNseSB3YXMgYSBtZW1iZXIgb2YuXHJcbiAgKi9cclxuICBncm91cC5kZXRhY2ggPSAoKSA9PiB7XHJcbiAgICBpZiAoZ3JvdXAuZm9sZGVyID09PSBncm91cCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy9hdXRvbWF0aWNhbGx5IGFkZCB0byBUSFJFRSBwYXJlbnQgb2YgdG9wIGxldmVsIGZvbGRlciBhbmQgdHJ5IHRvIHNldCBhcHByb3ByaWF0ZSBzY2FsZSAvIHRyYW5zZm9ybS4uLlxyXG4gICAgLy9pZiB0aGF0IGZvbGRlciBiZWluZ01vdmVkIGF0IHRoZSBwcmVzZW50IHRpbWUsIHRoZW4gaXQgd2lsbCBoYXZlIGFuIG9sZFBhcmVudCB0byB3aGljaCB3ZSBzaG91bGQgYXR0YWNoIGluc3RlYWQuXHJcbiAgICAvLy4uLmFsdGhvdWdoIGl0IG1heSBiZSB0aGF0IHdlIHdhbnQgdGhlIGRldGFjaGVkIGZvbGRlciB0byBtb3ZlIHdpdGggdGhlIGNvbnRyb2xsZXIgdW50aWwgYnV0dG9uIGlzIHJlbGVhc2VkLi4uXHJcbiAgICBjb25zdCB0b3BGb2xkZXIgPSBnZXRUb3BMZXZlbEZvbGRlcihncm91cCk7XHJcbiAgICBncm91cC5mb2xkZXIuZGV0YWNoQ2hpbGQoZ3JvdXApO1xyXG4gICAgXHJcbiAgICAvL2FkZGluZyB0byB0b3BGb2xkZXIucGFyZW50IElGIEFWQUlMQUJMRSwgbm90IG9sZFBhcmVudCwgcGVuZGluZyB3b3JraW5nIG91dCB0cmFuc2Zvcm0gbGF0ZXIgaWYgYmVpbmdNb3ZlZC4uLlxyXG4gICAgY29uc3QgcGFyID0gdG9wRm9sZGVyLnBhcmVudCB8fCBncm91cC5wYXJlbnQ7IFxyXG4gICAgaWYgKCFwYXIpIHJldHVybjsgLy9TSlBUIGNoYW5nZSBmcm9tIENTeW50aCwgbm90IGNhcmVmdWxseSByZXZpZXdlZCBidXQgcHJvYmFibHkgcmlnaHQuXHJcbiAgICBwYXIuYWRkKGdyb3VwKTtcclxuICAgIGNvbnN0IG0gPSB0b3BGb2xkZXIubWF0cml4LmNsb25lKCk7XHJcblxyXG4gICAgZ3JvdXAuYXBwbHlNYXRyaXg0KG0pO1xyXG4gICAgbS5zZXRQb3NpdGlvbihuZXcgVEhSRUUuVmVjdG9yMygpKTtcclxuICAgIGNvbnN0IHQgPSBuZXcgVEhSRUUuVmVjdG9yMyhMYXlvdXQuRk9MREVSX1dJRFRILCAwLCAwKS5hcHBseU1hdHJpeDQobSk7XHJcbiAgICBncm91cC5wb3NpdGlvbi5hZGQodCk7XHJcbiAgICBcclxuICAgIGlmICh0b3BGb2xkZXIuYmVpbmdNb3ZlZCkge1xyXG4gICAgICAvL2RldGFjaCB0aGlzIG9iamVjdCBmcm9tIHRvcEZvbGRlci5wYXJlbnQgdGhlbiBhdHRhY2ggdG8gdG9wRm9sZGVyLm9sZFBhcmVudCB3aGlsZSBtYWludGFpbmluZyBtYXRyaXhXb3JsZFxyXG4gICAgICAvLy4uLmFjdHVhbGx5LCAobWF5YmUpIHdlIHdhbnQgdG8gZG8gdGhpcyBzY2VuZVNoaWZ0IGJ1c2luZXNzIHdoZW4gYmVpbmdNb3ZlZCBmaW5pc2hlcy4uLlxyXG4gICAgICAvLyBwdXQgdGhpbmdzIGludG8gc2VtaURldGFjaGVkLCBzbyB0aGF0IHdoZW4gYmVpbmdNb3ZlZCBpcyBzZXQgdG8gZmFsc2UsIHRoZXkgY2FuIGJlIHNoaWZ0ZWQuXHJcbiAgICAgIC8vb3IgbWF5YmUgd2hhdCB3ZSByZWFsbHkgd2FudCBpcyB0byBoYXZlIGFuIG9wdGlvbiB0byAncGluJyBwYW5lbHMgdG9nZXRoZXIgYW5kIHVucGluIHRoZW0sIHJhdGhlciB0aGFuIGFzc3VtZVxyXG4gICAgICAvL2F0dGFjaG1lbnQgY2hhbmdlcyB3aGVuIGJ1dHRvbiByZWxlYXNlZC4gIEZvciBub3csIHRoaXMgaXMgbm90IHF1aXRlIHdvcmtpbmcgcmlnaHQsIHNvLi4uXHJcbiAgICAgIGNvbnN0IGRlZmVyU2NlbmVTaGlmdFdoaWxlTW92aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAvL3dlIGNvdWxkIGp1c3QgZGV0YWNoLCBsZWF2aW5nIHRoZSBvYmplY3QgYXMgZGlyZWN0IGRlc2NlbmRlbnQgb2Ygc2NlbmUsIGJ1dCB0aGVyZSBtYXkgYmUgcmVhbCByZWFzb25zIHRvIHNpdHVhdGVcclxuICAgICAgLy90aGUgR1VJIHdpdGhpbiBoaWVyYXJjaHkgc29tZWhvdyAobGlrZSBhcyBjaGlsZHJlbiBvZiBhIGNvbnRyb2xsZXIpXHJcbiAgICAgIFxyXG4gICAgICBpZiAoZGVmZXJTY2VuZVNoaWZ0V2hpbGVNb3ZpbmcpIHtcclxuICAgICAgICB0b3BGb2xkZXIudXNlckRhdGEuc2VtaURldGFjaGVkLnB1c2goZ3JvdXApO1xyXG4gICAgICAgIHRvcEZvbGRlci51c2VyRGF0YS5vbGRQYXJlbnQgPSB0b3BGb2xkZXIub2xkUGFyZW50Oy8vWFhYOiBoYWNrIGJlY2F1c2UgdG9wRm9sZGVyLm9sZFBhcmVudCB3YXMgYmVpbmcgdW5kZWZpbmVkIGJlZm9yZSBiZWluZ01vdmVkID0gZmFsc2VcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGdyb3VwO1xyXG4gICAgICAgIGNvbnN0IG9sZFBhcmVudCA9IHRvcEZvbGRlci5wYXJlbnQ7IC8vb2xkUGFyZW50IHRvIGRldGFjaCBmcm9tIGlzIHRoZSBjdXJyZW50IHBhcmVudCB3aGlsZSBiZWluZ01vdmVkXHJcbiAgICAgICAgY29uc3QgbmV3UGFyZW50ID0gdG9wRm9sZGVyLm9sZFBhcmVudDsgLy9uZXdQYXJlbnQgdG8gYXR0YWNoIHRvIGlzIG9sZFBhcmVudCBvZiB0aGUgZm9sZGVyIGJlZm9yZSBpdCB3YXMgYmVpbmdNb3ZlZFxyXG4gIFxyXG4gICAgICAgIHNjZW5lU2hpZnQoY2hpbGQsIG9sZFBhcmVudCwgbmV3UGFyZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gXHJcbiAgICBncm91cC51c2VyRGF0YS5pc09ydGhvZ3JhcGhpYyA9IHRvcEZvbGRlci51c2VyRGF0YS5pc09ydGhvZ3JhcGhpYzsgLy9UT0RPOiByZXZpc2UgaG93IHRvIHBhc3MgdGhpcyBpbmZvXHJcbiAgICBncm91cC5maXhGb2xkZXJQb3NpdGlvbigwLjUpO1xyXG4gICAgZ3JvdXAub3BlbigpO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH07XHJcblxyXG4gIC8vYWxhIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jZXhhbXBsZXMvdXRpbHMvU2NlbmVVdGlsc1xyXG4gIGZ1bmN0aW9uIHNjZW5lRGV0YWNoKGNoaWxkLCBwYXJlbnQsIHNjZW5lKSB7XHJcbiAgICBwYXJlbnQudXBkYXRlTWF0cml4V29ybGQoKTtcclxuICAgIGNoaWxkLmFwcGx5TWF0cml4NChwYXJlbnQubWF0cml4V29ybGQpO1xyXG4gICAgcGFyZW50LnJlbW92ZShjaGlsZCk7XHJcbiAgICBzY2VuZS5hZGQoY2hpbGQpXHJcbiAgfVxyXG4gIGZ1bmN0aW9uIHNjZW5lQXR0YWNoKGNoaWxkLCBzY2VuZSwgcGFyZW50KSB7XHJcbiAgICBwYXJlbnQudXBkYXRlTWF0cml4V29ybGQoKTtcclxuICAgIGNoaWxkLmFwcGx5TWF0cml4NCggbmV3IFRIUkVFLk1hdHJpeDQoKS5nZXRJbnZlcnNlKHBhcmVudC5tYXRyaXhXb3JsZCkgKTtcclxuXHRcdHNjZW5lLnJlbW92ZShjaGlsZCk7XHJcblx0XHRwYXJlbnQuYWRkKGNoaWxkKTsgICBcclxuICB9XHJcbiAgZnVuY3Rpb24gc2NlbmVTaGlmdChjaGlsZCwgb2xkUGFyZW50LCBuZXdQYXJlbnQpIHtcclxuICAgIGxldCBub2RlID0gb2xkUGFyZW50O1xyXG4gICAgd2hpbGUgKG5vZGUucGFyZW50KSBub2RlID0gbm9kZS5wYXJlbnQ7XHJcbiAgICBjb25zdCBzY2VuZSA9IG5vZGU7XHJcbiAgICBcclxuICAgIHNjZW5lRGV0YWNoKGNoaWxkLCBvbGRQYXJlbnQsIHNjZW5lKTtcclxuICAgIHNjZW5lQXR0YWNoKGNoaWxkLCBzY2VuZSwgbmV3UGFyZW50KTtcclxuICB9XHJcblxyXG4gIGdyb3VwLmRldGFjaEZyb21QYXJlbnQgPSBncm91cC5kZXRhY2g7XHJcbiAgXHJcbiAgZ3JvdXAucmVhdHRhY2ggPSAoKSA9PiB7XHJcbiAgICBpZiAoIWdyb3VwLmRldGFjaGVkUGFyZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAvL1RPRE86IGNoZWNrIGxheW91dCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIHdyYXBwaW5nIGV0Yy5cclxuICAgIGdyb3VwLmRldGFjaGVkUGFyZW50LmFkZEZvbGRlcihncm91cCk7IC8vIHRoaXMgd2lsbCBhbHNvIGRlYWwgd2l0aCBjb3NtZXRpY3MgKGhpZGVHcmFiYmVyIGV0YylcclxuICAgIGNvbnN0IHRvcEZvbGRlciA9IGdldFRvcExldmVsRm9sZGVyKGdyb3VwLmRldGFjaGVkUGFyZW50KTtcclxuICAgIGlmICh0b3BGb2xkZXIuYmVpbmdNb3ZlZCkge1xyXG4gICAgICAvL21heWJlIHdlIGNvdWxkIGRvIHRoaXMga2luZCBvZiBzdHVmZiBpbiBfc2V0RGV0YWNoZWRGcm9tXHJcbiAgICAgIC8vaW4gYW55IGNhc2UsIGl0J3MgaXJyZWxldmFudCBpZiBcclxuICAgICAgbGV0IHNlbWlzID0gdG9wRm9sZGVyLnVzZXJEYXRhLnNlbWlEZXRhY2hlZDtcclxuICAgICAgY29uc3QgaW5kZXggPSBzZW1pcy5pbmRleE9mKGdyb3VwKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHRvcEZvbGRlci51c2VyRGF0YS5zZW1pRGV0YWNoZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIC8vZ3JvdXAuZGV0YWNoZWRQYXJlbnQgPSBudWxsO1xyXG4gICAgZ3JvdXAuX3NldERldGFjaGVkRnJvbShudWxsKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ3JvdXAuYWRkQ29udHJvbGxlciA9IGZ1bmN0aW9uKCAuLi5hcmdzICl7XHJcbiAgICBhcmdzLmZvckVhY2goIGZ1bmN0aW9uKCBvYmogKXtcclxuICAgICAgaWYgKG9iai5pc0ZvbGRlcikge1xyXG4gICAgICAgIGdyb3VwLmFkZEZvbGRlcihvYmopO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbGxhcHNlR3JvdXAuYWRkKCBvYmogKTtcclxuICAgICAgICBvYmouZm9sZGVyID0gZ3JvdXA7XHJcbiAgICAgIH1cclxuICAgICAgLy9YWFg6IGhhY2tpbmcgaW4gc29tZSB1bml2ZXJzYWwgdG9vbHRpcCBzdXBwb3J0XHJcbiAgICAgIGlmIChvYmouc2V0VG9vbFRpcCkgcmV0dXJuOyAvL2J1dCBub3QgaWYgYSBtb3JlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFscmVhZHkgZXhpc3RzIChzZWUgZHJvcGRvd24uLi4pXHJcbiAgICAgIG9iai5zZXRUb29sVGlwID0gdGlwID0+IHtcclxuICAgICAgICBvYmoudXNlckRhdGEudGlwID0gdGlwO1xyXG4gICAgICAgIC8vVE9ETzogcGF5IG1vcmUgYXR0ZW50aW9uIHRvIGxheW91dCBjb25maWcgLyBtYWtlIGNyZWF0ZVRvb2xUaXAgaGF2ZSBzaW1wbGVyIGFyZ3VtZW50c1xyXG4gICAgICAgIGNvbnN0IHRpcE9iaiA9IGNyZWF0ZVRvb2xUaXAodGV4dENyZWF0b3IsIHRpcCwgTGF5b3V0LkZPTERFUl9XSURUSCwgb2JqLnNwYWNpbmcsIExheW91dC5CVVRUT05fREVQVEgpO1xyXG4gICAgICAgIG9iai51c2VyRGF0YS50aXBPYmogPSB0aXBPYmo7XHJcbiAgICAgICAgLy9hc3NvY2lhdGUgZXZlbnQgd2l0aCBob3ZlciBvbiBhcHByb3ByaWF0ZSBoaXRzY2FuLi4uXHJcblxyXG4gICAgICAgIGlmIChvYmouaW50ZXJhY3Rpb24pIHtcclxuICAgICAgICAgIC8vVE9ETzogZXZlbnRzLm9mZigpIGlmIHJlcGxhY2luZyBvbGQgdG9vbHRpcCAob3Igbm90IHJlcGVhdGluZyBvbigpKS5cclxuICAgICAgICAgIG9iai5pbnRlcmFjdGlvbi5ldmVudHMub24oJ3RpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vZG9uJ3QganVzdCBzZXQgdmlzaWJpbGl0eTsgYWRkL3JlbW92ZSBhcyB0aGVzZSBhcmUga2lsbGluZyBmcmFtZXJhdGUgaW4gbGFyZ2UgVlIgZ3Vpcy5cclxuICAgICAgICAgICAgLy9SRVZJRVcuLi4gY29uc2lkZXJpbmcgbWFraW5nIHRvb2x0aXBzIHdvcmsgd2hlbiBob3ZlcmluZyBvbiBsYWJlbCBhcyB3ZWxsLFxyXG4gICAgICAgICAgICAvLyBidXQgb2YgY291cnNlIHRoaXMgd291bGQgbWVhbiBjaGFuZ2luZyBtb3JlIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBzZXR1cCxcclxuICAgICAgICAgICAgLy8gYW5kIGhhdmluZyBtb3JlIG9iamVjdHMgdG8gdGVzdCBpbiBzY2VuZSBoaWVyYXJjaHkuXHJcbiAgICAgICAgICAgIC8vIExlYXZpbmcgZm9yIG5vdywgaWYgd29ya2luZyBtb3JlIG9uIHRoZSBsaWJyYXJ5LCBob3BlZnVsbHkgZml4IGhvdmVyIGV2ZW50IGV0Yy5cclxuICAgICAgICAgICAgaWYgKG9iai52aXNpYmxlKSBzZXRWaXNpYmlsaXR5KG9iaiwgdGlwT2JqLCBvYmouaW50ZXJhY3Rpb24uaG92ZXJpbmcoKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgY2FuJ3QgY3JlYXRlIHRvb2x0aXAgZm9yICR7b2JqLmd1aVR5cGV9IGJlY2F1c2UgdGhlcmUncyBubyBvYmouaW50ZXJhY3Rpb24gcHJvcGVydHkuLi5gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9iai5nZXRUb29sVGlwID0gKCkgPT4gb2JqLnVzZXJEYXRhLnRpcDtcclxuICAgIH0pO1xyXG5cclxuICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcclxuICB9O1xyXG5cclxuICBncm91cC5hZGRGb2xkZXIgPSBmdW5jdGlvbiggLi4uYXJncyApe1xyXG4gICAgYXJncy5mb3JFYWNoKCBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIC8vVE9ETyBpZiBvYmogaXMgc3RyaW5nLCBtYWtlIGEgbmV3IGd1aSBhbmQgYWRkIC8gcmV0dXJuIGl0Li4uIGJ1dCB3aGF0IGFib3V0IHZhcmFyZ3M/XHJcbiAgICAgIGNvbGxhcHNlR3JvdXAuYWRkKCBvYmogKTtcclxuICAgICAgb2JqLmZvbGRlciA9IGdyb3VwO1xyXG4gICAgICBvYmoubWF0cml4LmlkZW50aXR5KCk7XHJcbiAgICAgIG9iai5zY2FsZS5zZXQoMSwxLDEpO1xyXG4gICAgICBvYmoucG9zaXRpb24uc2V0KDAsMCwwKTtcclxuICAgICAgb2JqLnJvdGF0aW9uLnNldCgwLDAsMCk7XHJcbiAgICAgIFxyXG4gICAgICBvYmouaGlkZUdyYWJiZXIoKTtcclxuICAgICAgb2JqLmNsb3NlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAucHJvbW90ZVpPcmRlciA9ICgpID0+IHtcclxuICAgIGlmIChnZXRUb3BMZXZlbEZvbGRlcihncm91cCkgIT09IGdyb3VwIHx8ICF0b3BGb2xkZXJTdGFjay5pbmNsdWRlcyhncm91cCkpIHtcclxuICAgICAgLy9tYXliZSB0aGlzIHNob3VsZG4ndCBiZSBhICdwdWJsaWMgbWV0aG9kJyAoYnV0IG1heWJlIHRoZXJlIHNob3VsZCBiZSBhIHdlbGwtZGVmaW5lZCBwdWJsaWMgaW50ZXJmYWNlKS5cclxuICAgICAgY29uc29sZS5lcnJvcihgV2FybmluZzogaW5jb25zaXN0ZW5jeSBpbiBmb2xkZXIgaG91c2VrZWVwaW5nYCk7XHJcbiAgICB9XHJcbiAgICB0b3BGb2xkZXJTdGFjay5zcGxpY2UodG9wRm9sZGVyU3RhY2suaW5kZXhPZihncm91cCksIDEpO1xyXG4gICAgdG9wRm9sZGVyU3RhY2sucHVzaChncm91cCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgcHJvbW90aW5nICR7Z3JvdXAuZm9sZGVyTmFtZX1gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBbJHt0b3BGb2xkZXJTdGFjay5tYXAoZj0+Zi5mb2xkZXJOYW1lKS5qb2luKCcsICcpfV1gKTtcclxuICAgIC8vdGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgb2JqZWN0IHogYmVpbmcgZGlmZmVyZW50IGZyb20gd2hlbiBtb3VzZUludGVyc2VjdGlvbiBoaXQgaXQgZWFybGllciBpbiB1cGRhdGUuXHJcbiAgICAvL21vdXNlSW50ZXJzZWN0aW9uIHdpbGwgdGhlbiBsYXRlciBiZSB1c2VkIGluIGhhbmRsZVRpY2sgb2YgZ3JhYiBpbnRlcmFjdGlvbiwgdG8gZnVydGhlciBtdXRhdGUgcG9zaXRpb25cclxuICAgIC8vc2VlbXMgb2sgdGhvdWdoIChhcyBvZiAwNC8xMi8xOClcclxuICAgIGlmIChncm91cC51c2VyRGF0YS5pc09ydGhvZ3JhcGhpYykgb3J0aG9ncmFwaGljRm9sZGVyTGF5b3V0KCk7XHJcbiAgfTtcclxuXHJcbiAgLy9ncm91cC51c2VyRGF0YS5vcnRob2dyYXBoaWNGb2xkZXJMYXlvdXQgPSAgb3J0aG9ncmFwaGljRm9sZGVyTGF5b3V0O1xyXG5cclxuICBmdW5jdGlvbiBwZXJmb3JtTGF5b3V0KCl7XHJcbiAgICBwZXJmb3JtSGVhZGVyTGF5b3V0KCk7XHJcbiAgICBcclxuICAgIGNvbnN0IHdyYXBOZXN0ZWQgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgY29uc3QgdG9wRm9sZGVyID0gZ2V0VG9wTGV2ZWxGb2xkZXIoZ3JvdXApO1xyXG4gICAgLy9zdGFydGluZyB3aG9sZSBuZXcgbGF5b3V0IG9mIHRvcEZvbGRlcj9cclxuICAgIGlmICh0b3BGb2xkZXIgPT09IGdyb3VwKSB7XHJcbiAgICAgIGlmICh0b3BGb2xkZXIubW9kYWxFZGl0b3IgJiYgdG9wRm9sZGVyLm1vZGFsRWRpdG9yLnBlcmZvcm1MYXlvdXQpIHRvcEZvbGRlci5tb2RhbEVkaXRvci5wZXJmb3JtTGF5b3V0KCk7XHJcbiAgICAgIFxyXG4gICAgICB0b3BGb2xkZXIudXNlckRhdGEubGF5b3V0SW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgIHRvcEZvbGRlci51c2VyRGF0YS5jb2x1bW5IZWlnaHQgPSAwO1xyXG4gICAgICB0b3BGb2xkZXIudXNlckRhdGEuY29sdW1uSW5kZXggPSAwO1xyXG4gICAgICB0b3BGb2xkZXIudXNlckRhdGEuY29sdW1uWU9mZiA9IC10b3BGb2xkZXIucG9zaXRpb24ueTtcclxuICAgICAgLy9JIGNvdWxkIHVuZGVmaW5lIHRoZXNlIGF0IHRoZSBlbmQsIGJ1dCB0aGVyZSdzIG5vIHBvaW50LlxyXG5cclxuICAgICAgaWYgKCF0b3BGb2xkZXJTdGFjay5pbmNsdWRlcyhncm91cCkpIHtcclxuICAgICAgICB0b3BGb2xkZXJTdGFjay5wdXNoKGdyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXAudXNlckRhdGEuaXNPcnRob2dyYXBoaWMpIG9ydGhvZ3JhcGhpY0ZvbGRlckxheW91dCgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBhZGRpbmcgJHtncm91cC5mb2xkZXJOYW1lfWApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbJHt0b3BGb2xkZXJTdGFjay5tYXAoZj0+Zi5mb2xkZXJOYW1lKS5qb2luKCcsICcpfV1gKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9rZWVwIGNvdW50aW5nIGNvbHVtbkhlaWdodCAoY3VycmVudCB5KSAmIGluZGV4IGZyb20gcGFyZW50IGZvbGRlci5cclxuICAgICAgZ3JvdXAudXNlckRhdGEuY29sdW1uSGVpZ2h0ID0gZ3JvdXAuZm9sZGVyLnVzZXJEYXRhLmNvbHVtbkhlaWdodDtcclxuICAgICAgZ3JvdXAudXNlckRhdGEuY29sdW1uSW5kZXggPSBncm91cC5mb2xkZXIudXNlckRhdGEuY29sdW1uSW5kZXg7IC8vVE9ETzogbWFrZSBzdXJlIHRvIHRlc3Qgd2l0aCBkZWVwIG5lc3RpbmcuXHJcbiAgICAgIFxyXG4gICAgICBpZiAodG9wRm9sZGVyU3RhY2suaW5jbHVkZXMoZ3JvdXApKSB7XHJcbiAgICAgICAgdG9wRm9sZGVyU3RhY2suc3BsaWNlKHRvcEZvbGRlclN0YWNrLmluZGV4T2YoZ3JvdXApLCAxKTtcclxuICAgICAgICBpZiAoZ3JvdXAudXNlckRhdGEuaXNPcnRob2dyYXBoaWMpIG9ydGhvZ3JhcGhpY0ZvbGRlckxheW91dCgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGByZW1vdmluZyAke2dyb3VwLmZvbGRlck5hbWV9YCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFske3RvcEZvbGRlclN0YWNrLm1hcChmPT5mLmZvbGRlck5hbWUpLmpvaW4oJywgJyl9XWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgY29uc3Qgc3BhY2luZ1BlckNvbnRyb2xsZXIgPSBMYXlvdXQuUEFORUxfSEVJR0hUICsgTGF5b3V0LlBBTkVMX1NQQUNJTkc7XHJcbiAgICBjb25zdCBlbXB0eUZvbGRlclNwYWNlID0gTGF5b3V0LkZPTERFUl9IRUlHSFQgKyBMYXlvdXQuUEFORUxfU1BBQ0lORztcclxuICAgIHZhciB0b3RhbFNwYWNpbmcgPSBlbXB0eUZvbGRlclNwYWNlO1xyXG5cclxuICAgIGNvbGxhcHNlR3JvdXAuY2hpbGRyZW4uZm9yRWFjaCggKGMpID0+IHsgYy52aXNpYmxlID0gIXN0YXRlLmNvbGxhcHNlZCB9ICk7XHJcbiAgICAvL2NoaWxkcmVuIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGd1aUluZGV4LlxyXG4gICAgLy9pZiB0aGV5IGRvbid0IGFscmVhZHkgaGF2ZSBvbmUsIGl0IGNhbiBiZSBhZGRlZCBoZXJlOlxyXG4gICAgLy90aGlzIHNob3VsZCBiZSB0aGUgb25seSBwbGFjZSB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBwcm9wZXJ0eVxyXG4gICAgLy9pdCBhbGxvd3MgZm9yIGRldGFjaGluZyBlbGVtZW50cyBhbmQgcmVhdHRhY2hpbmcgaW4gc2ltaWxhciBwbGFjZSwgZXZlbiBpZiBzb21lIHNpYmxpbmdzIGFyZSBhbHNvIGRldGFjaGVkLlxyXG4gICAgbGV0IGxhc3RHdWlJbmRleCA9IDA7XHJcbiAgICAvL3RyeSB0byBhbGxvdyBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgY2xpZW50IHByb2dyYW0gbWF5IGF0dGVtcHQgdG8gcmVzdG9yZSBpdGVtcyBcclxuICAgIC8vcmVtZW1iZXJpbmcgZGV0YWNoZWRQYXJlbnQgYnV0IG5vdCBndWlJbmRleD8gTm9pc2UuLi5cclxuICAgIC8vY29uc3QgZGV0YWNoZWRDaGlsZHJlbiA9IHRvcEZvbGRlclN0YWNrLmZpbHRlcihmID0+IGYuZGV0YWNoZWRQYXJlbnQgPT09IHRoaXMpO1xyXG4gICAgLy9jb2xsYXBzZUdyb3VwLmNoaWxkcmVuLmNvbmNhdChkZXRhY2hlZENoaWxkcmVuKS5mb3JFYWNoKCAoYywgaSkgPT4ge1xyXG4gICAgY29sbGFwc2VHcm91cC5jaGlsZHJlbi5mb3JFYWNoKCAoYywgaSkgPT4ge1xyXG4gICAgICAgIGlmIChjLmd1aUluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjLmd1aUluZGV4ID0gbGFzdEd1aUluZGV4Kz0xO1xyXG4gICAgICB9IGVsc2UgbGFzdEd1aUluZGV4ID0gYy5ndWlJbmRleDtcclxuICAgIH0pO1xyXG4gICAgY29sbGFwc2VHcm91cC5jaGlsZHJlbi5zb3J0KChhLCBiKSA9PiB7IHJldHVybiBhLmd1aUluZGV4IC0gYi5ndWlJbmRleCB9KTtcclxuXHJcbiAgICBpZiAoIHN0YXRlLmNvbGxhcHNlZCApIHtcclxuICAgICAgZG93bkFycm93LnJvdGF0aW9uLnogPSBNYXRoLlBJICogMC41O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZG93bkFycm93LnJvdGF0aW9uLnogPSAwO1xyXG5cclxuICAgICAgdmFyIHkgPSAwLCBsYXN0SGVpZ2h0ID0gZW1wdHlGb2xkZXJTcGFjZTtcclxuXHJcbiAgICAgIGNvbGxhcHNlR3JvdXAuY2hpbGRyZW4uZm9yRWFjaCggZnVuY3Rpb24oIGNoaWxkLCBpbmRleCApe1xyXG4gICAgICAgIGlmIChjaGlsZC5pc0ZvbGRlcikge1xyXG4gICAgICAgICAgY2hpbGQudXNlckRhdGEuY29sdW1uWU9mZiA9IGdyb3VwLnVzZXJEYXRhLmNvbHVtbllPZmYgLSB5OyAvL2V4Y2VwdCAneScgd2lsbCBiZSB3cm9uZy4uLlxyXG4gICAgICAgICAgY2hpbGQucGVyZm9ybUxheW91dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoICF3cmFwTmVzdGVkICkge1xyXG4gICAgICAgICAgLy9PcmlnaW5hbCBsYXlvdXQgYWxnb3JpdGhtXHJcbiAgICAgICAgICB2YXIgaCA9IGNoaWxkLnNwYWNpbmcgPyBjaGlsZC5zcGFjaW5nIDogc3BhY2luZ1BlckNvbnRyb2xsZXI7XHJcbiAgICAgICAgICAvLyBob3cgZmFyIHRvIGdldCBmcm9tIHRoZSBtaWRkbGUgb2YgcHJldmlvdXMgdG8gbWlkZGxlIG9mIHRoaXMgY2hpbGQ/XHJcbiAgICAgICAgICAvLyBoYWxmIG9mIHRoZSBoZWlnaHQgb2YgcHJldmlvdXMgcGx1cyBoYWxmIGhlaWdodCBvZiB0aGlzLlxyXG4gICAgICAgICAgLy8gaWYgd2UndmUgd3JhcHBlZCB0byBhIG5ldyBjb2x1bW4gcmVjZW50bHksIGhvdyBpcyB0aGlzIGFmZmVjdGVkP1xyXG4gICAgICAgICAgLy8gc3BhY2luZyBwcm9wZXJ0eSBzaG91bGQgdGhlbiBiZSBzcGFjaW5nICp3aXRoaW4gY3VycmVudCBjb2x1bW4qLCBzbyB0aGUgd2F5IHdlIHRyYWNrIHRvdGFsU3BhY2luZyBzaG91bGQgcmVmbGVjdCB0aGF0LlxyXG4gICAgICAgICAgdmFyIHNwYWNpbmcgPSAwLjUgKiAobGFzdEhlaWdodCArIGgpO1xyXG4gIFxyXG4gICAgICAgICAgaWYgKGNoaWxkLmlzRm9sZGVyKSB7XHJcbiAgICAgICAgICAgIC8vIEZvciBmb2xkZXJzLCB0aGUgb3JpZ2luIGlzbid0IGluIHRoZSBtaWRkbGUgb2YgdGhlIGVudGlyZSBoZWlnaHQgb2YgdGhlIGZvbGRlcixcclxuICAgICAgICAgICAgLy8gYnV0IGp1c3QgdGhlIG1pZGRsZSBvZiB0aGUgdG9wIHBhbmVsLlxyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMC41ICogKGxhc3RIZWlnaHQgKyBlbXB0eUZvbGRlclNwYWNlKTtcclxuICAgICAgICAgICAgY2hpbGQucG9zaXRpb24ueSA9IHkgLSBvZmZzZXQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjaGlsZC5wb3NpdGlvbi55ID0geSAtIHNwYWNpbmc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBpbiBhbnkgY2FzZSwgZm9yIHVzZSBieSB0aGUgbmV4dCBvYmplY3QgYWxvbmcgd2UgcmVtZW1iZXIgJ3knIGFzIHRoZSBtaWRkbGUgb2YgdGhlIHdob2xlIHBhbmVsXHJcbiAgICAgICAgICB5IC09IHNwYWNpbmc7XHJcbiAgICAgICAgICBsYXN0SGVpZ2h0ID0gaDtcclxuICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIGlmIChpbmRleCA8IE1BWF9GT0xERVJfSVRFTVNfSU5fQ09MVU1OKVxyXG4gICAgICAgICAgICB0b3RhbFNwYWNpbmcgKz0gaDtcclxuICAgICAgICAgIGNoaWxkLnBvc2l0aW9uLnggPSAwLjAyNjtcclxuICBcclxuICAgICAgICAgIGlmICgoaW5kZXgrMSkgJSBNQVhfRk9MREVSX0lURU1TX0lOX0NPTFVNTiA9PT0gMCkgeSA9IDA7XHJcbiAgXHJcbiAgICAgICAgICBjaGlsZC5wb3NpdGlvbi54ICs9IHdpZHRoICogTWF0aC5mbG9vcihpbmRleCAvIE1BWF9GT0xERVJfSVRFTVNfSU5fQ09MVU1OKTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL25ldyBsYXlvdXQgYWxnb3JpdGhtIFdJUCwgc2hvdWxkIGFsbG93IGZvciBuZXN0ZWQgZm9sZGVycyB0byB3cmFwIHRvIHRoZSB0b3Agb2YgYSBuZXcgY29sdW1uLCB3aXRoIGFsbCBmb2xkZXJzXHJcbiAgICAgICAgICAvL2luIGhpZXJhcmNoeSB1c2luZyBzYW1lIGNvbHVtbiBsYXlvdXRcclxuICAgICAgICAgIGNvbnN0IG1heENvbEhlaWdodCA9IE1BWF9GT0xERVJfSVRFTVNfSU5fQ09MVU1OICogc3BhY2luZ1BlckNvbnRyb2xsZXI7IC8vTUFYX0ZPTERFUl9JVEVNUyBpcyBzbGlnaHQgbWlzbm9tZXJcclxuICAgICAgICAgIGNvbnN0IGggPSBjaGlsZC5zcGFjaW5nID8gY2hpbGQuc3BhY2luZyA6IHNwYWNpbmdQZXJDb250cm9sbGVyO1xyXG4gICAgICAgICAgY29uc3QgY2hpbGREaWRXcmFwID0gY2hpbGQuaXNGb2xkZXIgJiYgY2hpbGQudXNlckRhdGEuY29sdW1uSW5kZXggPiBncm91cC51c2VyRGF0YS5jb2x1bW5JbmRleDtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy9tb3ZlIHRvIGEgbmV3IGNvbHVtbj9cclxuICAgICAgICAgIGlmIChncm91cC51c2VyRGF0YS5jb2x1bW5IZWlnaHQgPiBtYXhDb2xIZWlnaHQpIHtcclxuICAgICAgICAgICAgLy9UT0RPOiBtYXliZSBhZGQgYW4gZXh0cmEgaGVhZGVyIHRoaW5nIHRvIGFsbG93IGZvbGRpbmcgbmVzdGVkIGZvbGRlcj9cclxuICAgICAgICAgICAgZ3JvdXAudXNlckRhdGEuY29sdW1uSW5kZXgrKzsgXHJcbiAgICAgICAgICAgIGdyb3VwLnVzZXJEYXRhLmNvbHVtbkhlaWdodCA9IGg7XHJcbiAgICAgICAgICAgIHRvdGFsU3BhY2luZyA9IDA7IC8vaCB3aWxsIGJlIGFkZGVkIGxhdGVyXHJcbiAgICAgICAgICAgIGxhc3RIZWlnaHQgPSAwOyAvLz8/Pz8gd2hhdCBzaG91bGQgdGhpcyBiZT8gIE9yaWdpbmFsIGFsZ29yaXRobSBpdCdzICdlbXB0eUZvbGRlclNwYWNlJ1xyXG4gICAgICAgICAgICAvL2NoZWNrIGxvZ2ljIG9mIHRoaXMgV1JUIGRlZXBlciBuZXN0aW5nIChzaG91bGQgYmUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdG9wRm9sZGVyIHJhdGhlciB0aGFuIGltbWVkaWF0ZSBwYXJlbnQpXHJcbiAgICAgICAgICAgIC8vd2hhdCBJIHNob3VsZCBkbyBpcyB1c2UgYWNjdW1tdWxhdGlvbiBvZiBhbGwgZm9sZGVyIGxldmVscyArIG9uZSBwYXJlbnQgYWJvdmUuXHJcbiAgICAgICAgICAgIC8veSA9IC1ncm91cC5wb3NpdGlvbi55O1xyXG4gICAgICAgICAgICB5ID0gZ3JvdXAudXNlckRhdGEuY29sdW1uWU9mZjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdyb3VwLnVzZXJEYXRhLmNvbHVtbkhlaWdodCArPSBoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vdmFyIHNwYWNpbmcgPSAwLjUgKiAobGFzdEhlaWdodCArIGgpO1xyXG4gICAgICAgICAgbGV0IHNwYWNpbmcgPSAwLjUgKiAobGFzdEhlaWdodCArIGgpO1xyXG5cclxuXHJcbiAgICAgICAgICBpZiAoY2hpbGQuaXNGb2xkZXIpIHtcclxuICAgICAgICAgICAgLy8gRm9yIGZvbGRlcnMsIHRoZSBvcmlnaW4gaXNuJ3QgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZW50aXJlIGhlaWdodCBvZiB0aGUgZm9sZGVyLFxyXG4gICAgICAgICAgICAvLyBidXQganVzdCB0aGUgbWlkZGxlIG9mIHRoZSB0b3AgcGFuZWwuLi4uXHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwLjUgKiAobGFzdEhlaWdodCArIGVtcHR5Rm9sZGVyU3BhY2UpO1xyXG4gICAgICAgICAgICBjaGlsZC5wb3NpdGlvbi55ID0geSAtIG9mZnNldDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNoaWxkLnBvc2l0aW9uLnkgPSB5IC0gc3BhY2luZztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGluIGFueSBjYXNlLCBmb3IgdXNlIGJ5IHRoZSBuZXh0IG9iamVjdCBhbG9uZyB3ZSByZW1lbWJlciAneScgYXMgdGhlIG1pZGRsZSBvZiB0aGUgd2hvbGUgcGFuZWxcclxuICAgICAgICAgIC8vWFhYOiB0aGlzIGxvZ2ljIGRvZXNuJ3Qgd29yayBmb3IgY29sdW1uIHdyYXBwaW5nLCAoYmVjYXVzZSBvZiBob3cgc3BhY2luZyBpcyBjb21wdXRlZCBhYm92ZT8pXHJcbiAgICAgICAgICB5IC09IHNwYWNpbmc7XHJcbiAgICAgICAgICBsYXN0SGVpZ2h0ID0gaDtcclxuXHJcbiAgICAgICAgICB0b3RhbFNwYWNpbmcgKz0gaDtcclxuICAgICAgICAgIGNoaWxkLnBvc2l0aW9uLnggPSAwLjAyNjtcclxuICAgICAgICAgIGNoaWxkLnBvc2l0aW9uLnggKz0gd2lkdGggKiBncm91cC51c2VyRGF0YS5jb2x1bW5JbmRleDsgLy9uYiBmb3IgbmVzdGVkLCBjb25zaWRlciBkaWZmZXJlbmNlIGJldHdlZW4gZ3JvdXAgJiBwYXJlbnRcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGNoaWxkLmlzRm9sZGVyKSB7XHJcbiAgICAgICAgICAgIC8vaWYgKGNoaWxkLnVzZXJEYXRhLmNvbHVtbkluZGV4ID4gZ3JvdXAudXNlckRhdGEuY29sdW1uSW5kZXgpIGxhc3RIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICBncm91cC51c2VyRGF0YS5jb2x1bW5IZWlnaHQgPSBjaGlsZC51c2VyRGF0YS5jb2x1bW5IZWlnaHQ7XHJcbiAgICAgICAgICAgIGdyb3VwLnVzZXJEYXRhLmNvbHVtbkluZGV4ID0gY2hpbGQudXNlckRhdGEuY29sdW1uSW5kZXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNoaWxkLnVwZGF0ZU1hdHJpeCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ3JvdXAuc3BhY2luZyA9IHRvdGFsU3BhY2luZztcclxuICAgIFxyXG4gICAgLy8gaWYgd2UncmUgYSBzdWJmb2xkZXIsIHVzZSBhIHNtYWxsZXIgcGFuZWxcclxuICAgIGxldCBwYW5lbFdpZHRoID0gTGF5b3V0LkZPTERFUl9XSURUSDtcclxuICAgIGlmIChncm91cC5mb2xkZXIgIT09IGdyb3VwKSB7XHJcbiAgICAgIHBhbmVsV2lkdGggPSBMYXlvdXQuU1VCRk9MREVSX1dJRFRIO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBMYXlvdXQucmVzaXplUGFuZWwocGFuZWwsIHBhbmVsV2lkdGgsIExheW91dC5GT0xERVJfSEVJR0hULCBkZXB0aCk7XHJcblxyXG4gICAgaWYgKHRvcEZvbGRlciA9PT0gZ3JvdXApIHtcclxuICAgICAgZ3JvdXAudXNlckRhdGEubGF5b3V0SW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICBncm91cC51c2VyRGF0YS5sYXlvdXRQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgIGdyb3VwLmZpeEZvbGRlclBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gcGVyZm9ybUhlYWRlckxheW91dCgpIHtcclxuICAgIGxldCBkeCA9IExheW91dC5GT0xERVJfSEVJR0hUO1xyXG4gICAgbGV0IHggPSBMYXlvdXQuRk9MREVSX1dJRFRIO1xyXG4gICAgaGVhZGVySXRlbXMuY2hpbGRyZW4uZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICBpZiAoIWMudmlzaWJsZSkgcmV0dXJuO1xyXG4gICAgICB4IC09IGR4ICogMC44O1xyXG4gICAgICBjLnBvc2l0aW9uLnggPSB4O1xyXG4gICAgICB4IC09IGR4ICogMC4zOyAvL1RPRE86IGRlaGFja2lmeVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpZXcoKXtcclxuICAgIGlmKCBpbnRlcmFjdGlvbi5ob3ZlcmluZygpICl7XHJcbiAgICAgIHBhbmVsLm1hdGVyaWFsLmNvbG9yLnNldEhleCggQ29sb3JzLkhJR0hMSUdIVF9CQUNLICk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBwYW5lbC5tYXRlcmlhbC5jb2xvci5zZXRIZXgoIENvbG9ycy5ERUZBVUxUX0ZPTERFUl9CQUNLICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGdyYWJJbnRlcmFjdGlvbi5ob3ZlcmluZygpICl7XHJcbiAgICAgIGdyYWJiZXIubWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCBDb2xvcnMuSElHSExJR0hUX0JBQ0sgKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGdyYWJiZXIubWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCBDb2xvcnMuREVGQVVMVF9GT0xERVJfQkFDSyApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vVE9ETzogbW9yZSBjb25zaXN0ZW50IGhvdmVyIHN0eWxpbmdcclxuICAgIGlmICggZGV0YWNoQnV0dG9uSW50ZXJhY3Rpb24uaG92ZXJpbmcoKSApIHtcclxuICAgICAgZGV0YWNoQnV0dG9uTWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCAweEZGRkZGRiApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGV0YWNoQnV0dG9uTWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCAweDg4ODg4OCApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBjcmVhdGVJbnRlcmFjdGlvbiggcGFuZWwgKTtcclxuICBpbnRlcmFjdGlvbi5ldmVudHMub24oICdvblByZXNzZWQnLCBmdW5jdGlvbiggcCApe1xyXG4gICAgaWYgKHN0YXRlLmNvbGxhcHNlZCkgZ3JvdXAub3BlbigpO1xyXG4gICAgZWxzZSBncm91cC5jbG9zZSgpO1xyXG4gICAgcC5sb2NrZWQgPSB0cnVlO1xyXG4gIH0pO1xyXG5cclxuICBncm91cC5vcGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXN0YXRlLmNvbGxhcHNlZCkgcmV0dXJuO1xyXG4gICAgaWYgKGdyb3VwLmZvbGRlciAhPT0gZ3JvdXAgJiYgZ3JvdXAuZm9sZGVyLmFjY29yZGlvbikge1xyXG4gICAgICBncm91cC5mb2xkZXIuZ3VpQ2hpbGRyZW4uZmlsdGVyKGM9PmMuaXNGb2xkZXIgJiYgYyAhPT0gZ3JvdXApLmZvckVhY2goYz0+Yy5jbG9zZSgpKTtcclxuICAgIH1cclxuICAgIHN0YXRlLmNvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgYWRkSW1wbChjb2xsYXBzZUdyb3VwKTtcclxuICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcclxuICB9O1xyXG5cclxuICBncm91cC5jbG9zZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHN0YXRlLmNvbGxhcHNlZCkgcmV0dXJuO1xyXG4gICAgc3RhdGUuY29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIHJlbW92ZUltcGwoY29sbGFwc2VHcm91cCk7XHJcbiAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAuZm9sZGVyID0gZ3JvdXA7XHJcblxyXG4gIGNvbnN0IGdyYWJJbnRlcmFjdGlvbiA9IEdyYWIuY3JlYXRlKCB7IGdyb3VwLCBwYW5lbDogZ3JhYmJlciB9ICk7XHJcbiAgY29uc3QgcGFsZXR0ZUludGVyYWN0aW9uID0gUGFsZXR0ZS5jcmVhdGUoIHsgZ3JvdXAsIHBhbmVsIH0gKTtcclxuICBncm91cC51cGRhdGVDb250cm9sID0gZnVuY3Rpb24oIGlucHV0T2JqZWN0cyApe1xyXG4gICAgLy9uYjogaWYgdGhlIGNvbnRyb2wgaXMgbm90IHZpc2libGUgLyBhY3RpdmUsIHRoZW4gaXQgd29uJ3QgaW50ZXJmZXJlLi4uICAgIFxyXG4gICAgLy9idXQgXCJpZiAoIWlzRGV0YWNoYWJsZSlcIiBoZXJlIGNhdXNlcyBwcm9ibGVtcy5cclxuICAgIFxyXG4gICAgLy9oZWFkZXJJdGVtcyBzaG91bGQgbm93IGhhdmUgdGhlaXIgb3duIHVwZGF0ZUNvbnRyb2wgYW5kIGJlIGluIGdsb2JhbENvbnRyb2xsZXJzIGxpc3RcclxuICAgIC8vaGVhZGVySXRlbXMuY2hpbGRyZW4uZm9yRWFjaChvID0+IG8uaW50ZXJhY3Rpb24udXBkYXRlKGlucHV0T2JqZWN0cykpO1xyXG4gICAgaW50ZXJhY3Rpb24udXBkYXRlKCBpbnB1dE9iamVjdHMgKTtcclxuICAgIGdyYWJJbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG4gICAgcGFsZXR0ZUludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcblxyXG4gICAgdXBkYXRlVmlldygpO1xyXG4gIH07XHJcblxyXG4gIC8vJ2dyYWJSZWxlYXNlZCcgaXMgZW1pdHRlZCBvbiBpbnB1dC5ldmVudHMuLi4gdXNlZCBmb3Igb3J0aG8gbW91c2UgZml4Rm9sZGVyUG9zaXRpb25cclxuICBcclxuICBncm91cC5uYW1lID0gZnVuY3Rpb24oIHN0ciApe1xyXG4gICAgZGVzY3JpcHRvckxhYmVsLnVwZGF0ZUxhYmVsKCBzdHIgKTtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9O1xyXG5cclxuICBsZXQgX2JlaW5nTW92ZWQgPSBmYWxzZTtcclxuICAvL2dyb3VwLmhpdHNjYW4gPSBbIHBhbmVsLCBncmFiYmVyLCBkZXRhY2hCdXR0b24gXTtcclxuICBcclxuICAvLy8vL0VYUEVSSU1FTlRBTCBGRUFUVVJFLCBDVVJSRU5UTFkgSEFSRENPREVEIE5PVCBUTyBIQVBQRU5cclxuICAvL3N1Yi1mb2xkZXJzIHRoYXQgYXJlIGRldGFjaGVkIHdoaWxlIG1vdmluZyByZW1haW4gYXR0YWNoZWQgdG8gcGFyZW50IG9iamVjdCAodGhlIGNvbnRyb2xsZXIgdGhhdCdzIG1vdmluZyB0aGVtKVxyXG4gIC8vJiBrZXB0IGluIHNlbWlEZXRhY2hlZCB1bnRpbCBiZWluZ01vdmVkIGlzIHNldCB0byBmYWxzZSwgYXQgd2hpY2ggcG9pbnQgdGhleSBzaGlmdCBhdHRhY2htZW50IHRvIG9sZFBhcmVudFxyXG4gIGdyb3VwLnVzZXJEYXRhLnNlbWlEZXRhY2hlZCA9IFtdO1xyXG5cclxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhncm91cCwge1xyXG4gICAgaGl0c2Nhbjoge1xyXG4gICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICAvL2Rvbid0IG5lZWQgdG8gZmlsdGVyIHZpc2libGUgaGVyZSwgdGhpcydsbCBiZSBkb25lIGluIGluZGV4LmpzIGdldFZpc2libGVIaXRzY2FuT2JqZWN0cygpXHJcbiAgICAgICAgLy8oaW1wbGVtZW50YXRpb24gbm90ZSAzMS83LzE5OyAuLi5oZWFkZXJJdGVtcy5jaGlsZHJlbiBoZXJlIGJlaW5nIHJlbW92ZWQgYXMgZWFjaCBoZWFkZXJJdGVtXHJcbiAgICAgICAgLy9zaG91bGQgbm93IGJlIGNsb3NlciB0byAnZnVsbHkgZmxlZGdlZCcgY29udHJvbGxlcilcclxuICAgICAgICBsZXQgaGl0cyA9IFsgcGFuZWwsIGdyYWJiZXIgXTtcclxuICAgICAgICBpZiAoZ3JvdXAubW9kYWxFZGl0b3IpIGhpdHMgPSBoaXRzLmNvbmNhdCguLi5ncm91cC5tb2RhbEVkaXRvci5oaXRzY2FuKTtcclxuICAgICAgICByZXR1cm4gaGl0cztcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGJlaW5nTW92ZWQ6IHtcclxuICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIF9iZWluZ01vdmVkO1xyXG4gICAgICB9LFxyXG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIF9iZWluZ01vdmVkID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKCFfYmVpbmdNb3ZlZCkge1xyXG4gICAgICAgICAgY29uc3Qgb2xkUGFyZW50ID0gZ3JvdXAucGFyZW50OyAvL29sZFBhcmVudCB0byBkZXRhY2ggZnJvbSBpcyB0aGUgY3VycmVudCBwYXJlbnQgd2hpbGUgYmVpbmdNb3ZlZFxyXG4gICAgICAgICAgY29uc3QgbmV3UGFyZW50ID0gZ3JvdXAudXNlckRhdGEub2xkUGFyZW50OyAvL25ld1BhcmVudCB0byBhdHRhY2ggdG8gaXMgb2xkUGFyZW50IG9mIHRoZSBmb2xkZXIgYmVmb3JlIGl0IHdhcyBiZWluZ01vdmVkXHJcbiAgICAgICAgICAvL2Fzc2VydGlvbi4uLiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKGFuZCBkb2Vzbid0IEFGQUlDVCkuXHJcbiAgICAgICAgICBpZiAoZ2V0VG9wTGV2ZWxGb2xkZXIoZ3JvdXApICE9PSBncm91cCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkhvdXNla2VlcGluZyBwcm9ibGVtIGluIGRhdC5HVUlWUi4uLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgZ3JvdXAudXNlckRhdGEuc2VtaURldGFjaGVkLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgICAgICAvL2FzIHdlbGwgYXMgdGhpcyBjdXJyZW50bHkgZW5kaW5nIHVwIHdpdGggd3JvbmcgdHJhbnNmb3JtLCBJIGFsc28gaGF2ZSB3cm9uZyB0cmFuc2Zvcm0gaWYgSSBkcmFnIGZvbGRlciB3aGlsZSBzZW1pRGVhdGNoZWQuLi5cclxuICAgICAgICAgICAgLy8qKmFsdGhvdWdoIGluIHRoYXQgY2FzZSwgaXQgc2hpZnRzIGJhY2sgdG8gd2hlcmUgaXQgc2hvdWxkIGJlIHdoZW4gYnV0dG9uIGlzIHJlbGVhc2VkKipcclxuICAgICAgICAgICAgc2NlbmVTaGlmdChjaGlsZCwgb2xkUGFyZW50LCBuZXdQYXJlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBncm91cC51c2VyRGF0YS5zZW1pRGV0YWNoZWQgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGZvciAobGV0IGsgaW4gYWRkQ29udHJvbGxlckZ1bmNzKSB7XHJcbiAgICBncm91cFtrXSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhZGRDb250cm9sbGVyRnVuY3Nba10oLi4uYXJncyk7XHJcbiAgICAgIGlmICggY29udHJvbGxlciApe1xyXG4gICAgICAgIGdyb3VwLmFkZENvbnRyb2xsZXIoIGNvbnRyb2xsZXIgKTtcclxuICAgICAgICByZXR1cm4gY29udHJvbGxlcjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBncm91cDtcclxufVxyXG4iLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlKCl7XHJcbiAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICBpbWFnZS5zcmMgPSBgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUVBQ0FNQUFBRHlUajVWQUFBQWpWQk1WRVZIY0V6Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vK3VtQWM3QUFBQUwzUlNUbE1BV25KZmJucURXR1I0YTJaY1luQlJhbFJMZ0g2RVRuUjhVR2gyUm9aRFhsYUhTWW84UUhVMkx5WWNGQXdGbW1VUjFPSUFBSkZoU1VSQlZIaGV0TDJKV211N2pqVUtJUWtrUUxxWnZnTUNaTzJ6VC8zMy9SL3ZTa05Ea2oyVHJPYXJWZDVWNnhEUDNwSmxXZEtRN3FhUGI2K3Zydzh2aitQWi92dnJ4ei8vL1BqNjNzL0c3L2NQMm4wL1haNk9wNlg4ZkpIZmFHLzNqOXE1WC9MS3QvdDN2L1FmdWZRay9Yb3Vib2x6L0RxNUxIN3kxbkxWbDl4ZUg0YjI4amlkbmNaeS9aTTBQK1dmZi83em4vLzgrKzkvL3NHNVV6dGF2M0gxaW5KSVhrbGU4UXZuMytPUk9QMm9qNU9QbXo3ZXYrbTVQRERGeVhhbi9Vd2V3QmQ4MTI0WkRuMm8zZVRCQm1DS0F6WlFmalk3NVdYLy9ZKy9LajZMbjc3Ly91RjNyMjR2SHlmUDVhZTljUlJzYUg1SS80OHZlUXFQNUtoOVg5ejg2d3ZuK3dqaFpmbVlqVHpteUJmbFNPQno1VjFsWE84ZUg1NG13OG56SzhkVEhzblBlcGJ1cHdmdDFWdStQc2x2YVpQdHM3M0ZhV3hYYnAvaVVqeC9JOVNVYzNITHFaMkRobnRWUDBFUmZONzlxOTE4Ky9UMnVGbE84ZXc4QlcrcXc0Uno1UlpiT1RwNWZzSmorZFRxRlovbGxUQXF1TGMrRW04akEvNGRBL1M4OWM5NWtoRWg4WlRZbThlM3ArMFFWOXhQNWY1ZlFqVThWTHVlSjNpdGU5Q1Q5TGV6bjVJRCtLcDh0QjNFbU9mZGVmc2w1ODBQWTFXTURrYUJORlhxSDVWamVTU0c1SGpSZFR6cStlQU1qUCtFTDh2SHlDU3pGelc2TEU5NlByanY3dVZwTXVwMHVsdU1wN0lwdVdYYjdYUTZ3eWNadHRrVWI5M3RvSTI2OXJITEthOGNicDBVbk0ydlR4TTl0L3Y4OEloemVOM2s2U1YvNHRieVpzZTlmZDRRZmQySnZPN204ZUc1VzU3eURSYkFyTUs1dUR2ZUdDVDlRYjdJVit6YUdNNzJ4eFB1UGNMcFNzOGo1OW56cEJ1Zk0zeDI0bkhhdnRvRGhuSVA2U1hWOE42NGFEUWtQVGxSdG5iMnM5OUUzOVJmZFJpZnJyd2tuYnc3Ym8vSmhYbEx3ZWxQbWNpVHg3UFQvbHY3VDdQWjVoSGpsa1B5dFpmUmo1dURSck9UbkE5bXZYOTR4a0IwaDN5dng4MUpCd0l2cXYxNFV6bi8rSzB2ZXllamZlNE5WdUNBRGNYbU96NXIxOXQxOWZLeHZwbjhIUFMwN1ZZais5akhON2xTZm5maTBoK2N6Y1BPZWRBYmRJU2E3MjlQY2c3YXVmdjBsai90MXN2OWFiWlUzcHpJdzZTdDlQdkdNa2FkUVp3aUEzSGtQUG5lNDl5Um5qdFlrYVJDTnZCUXZ1Smd4ekU4WWNCeDc0RU5IY1lacDY3NE9ZTnpoeHdkNHVGcHVOS25qN1lQa0F6SGs3NFJIcnJTOTlwMUp2WmdPUUQ2cjdRVEJNVzh4U0o2UFBGVjQ5T1h4Z0M4dTF5Z2hKTlJzMVZ3dGpINjczRDZSS2ZVY3JiWC92RjBLaCt4N2U2S1VaTzc2eXl4bTJNY3BsT2NiOHc2eEVDY096dDdXUTZFZE9zbkQ4RFpPQi95NTA1SHU1bHpQRjFzdnNvY0hNejdJT0lZWEhzZXpKditZdEh2TjcwZGJpRVRkVHZhTmYyOFZIbkgySDdYYS9xZzVyc3d5VzYra0RhWGQzL0xuNDE5eW5JOGZYL1h6enYzK291bVlBRDVpVlB3cGllVGxESVh4L2h1T2RodlFGSWIxcE5Oa1hOdjN0ZFhsSytSTVFTOU9lRDl4WnhEUi9vTHpacStmYzU2Y0ZhT0J2SDJKaDZHcS9XaVB4aHRqUzlPU3d3ZWJyS1RKOWhiem5BMkpzcWdXZlRYdTFHc1dKalFHRVI4VnYrU0FlUUNFZzdmQnI2N0YvcHpHREFiNzRVRjBDOU5QbnFsZDFyaks5Q1BnVmozRnhpSEJ6MUordmZIbVRIcldqK3MxNU9YQlFWUGV6SkFvNFJRbWZIeThtaWFHeGlnMXh6a1ByajM3T2hFSE16bExlWG05M2lXdnZTSGpOZmk4SUdQbFhkWEJ0QTdOc0lCeWhDbmJ4VkFlUDY4Zitpdmt3SGtzbytDQVQ0Ty9iNVJWK2ZiMnh1ZTFuem9tT2g5eVFBZk9PVk5WVTU1VXhXdHlsK1FEc0tFOHlEcHQ4cEQ4SkMvNG9lT0liN210TVNBcnc4ZmZONXN6SG5XZ1BpTjhyUnpOSWJKaEoxY0ljemZuVURTZ1dlRUFSYWYvWUc4NWdFZlJySDZnSW15YUdTa01hN3YxQTB3b2YyemR2VVNBREovY01Dbm01bnpIUTQwaS9sQkJ4U2FWU2pOSUljTXFieG85R3VuVHFhNXloSnBVS0NWNDhHc0IzQzNQR1VFQ2VDeXFpZnZvMk9EODQxZDd4NHcvUTV6enFnVGxwZUozcnR2MHM0R3ZUa2NsS2RrNUhFTCtTTHd4V0M5T0FoUGdjMk84aVVxNUZmNmZYcXRNTStML2hSV3JCaGdBY2tsbjY5RCsvVDhqS2ZaUUlsT1d6S0FOS2pweTcxSlNoNmI3NFFKbkFGTTdPSGpGbzNjZWQwc0RnMUZQc2VqNmEveFBDb3VPeDJnZVc4Z1RjOTJqbDdpUmhBUHdnRHlpclpPWTNsUldzcGp6K3UreWluVHJIQnowTCtIMTVjbllCcEFOeEJOVEdkQ3lnYXNybmdDWHNBSTkzQ3ZlZ0QxYWYwRW9VTUREb0FhRTVxZVRIYVFlamlzK20zY3p0MVFvSVBqRy9rdzVlMnp2UlFWYTJjOVBaOHExQTlWQW5IN05XVFNlQWEraGl4YTc2RHZRSGpnd2xWSGxzNjVVcHdLM3JaclBJN1JubUVGZWxBU0g1UkhWSzVTNTdsZ0FDcEdHRzlwY29JT2xQeWxzeWdaUUpycTlGRG92citTQVlUTy9aQUFMdmJtaDhNY3J5aXZ0RkNDdittTWgyd1lESGJHRVA1dE1rQTcxZWxHbmJOS09nb01uNStOU0pIRG9sbGpuWjVDcUsxV0syR1hqaXl1Zy9PcWd5ZjdZRGN5ekx0NUk1TnRhMnFkYjZMNFdSMFphMmdUd3FwVVZqc3FvOWVyTGpkZk15ckh1MGJ1SWx6UXpIZFVpRjM1MHp0cFo2ZlZyK3UwUERqNlovWk92Zlg2REIzblBESk5JeFRyWGR4SXFBMnV2Rk1pS0JrYkl5TW1DVHE0dWt5TkFTREVoNU11U0FNRkNWL1pQYThQQ3doRmJEYkdXQmY2SWl6QjNsT1Z1TnZKSlFQWW9JQnc1OTF1cCtPNlc4a2ZxNjdjT0JnQVBhNFVxNDRKWFZaWG1MNU9SRnRadjZrUlU2eGlJaTM4RlhYcGcwWnBRc3ZPNUJ3YmRZU3FuYTdPSXJrUUl1Q2RrdVRRMTVXa1R6SEZJUldlR3NyRjhnZEl2ZUhTc0tQbU9kQUpCTFh1dERFbCtreXRXYjhBT2dZMWtGQld6eDI3WkJuS3NZN0FlUmNLY2ZUckFBMDZxOHQrWmN0ZDlFKzV4SzEydmZWOFBvY1FnN1NpWXIzdXNhMTdTbTJvc25jUTVha25iY0FzWnhNSldBT1RBV1RLVEdUWmQyWWZtOEs4T0RnRHhBemxranRkWW50K2xRR0VxR1F0ZWRQZFNOcEEvb0RPNHZjWTZDRlI5Nm5Rd2Z4aE9xNlFnd29EVmxDNzdlR2dRdXhKQ2Q0L1VIK2RVWHoxN2ZHbVE2NHg1WEdYdFpCSEQ0TS85UEFXTjVLbjZscG5mRUU5OHFDL1pLQWdBSlVCcUU2NDVya2VkRXl0bzBvaXJHSmE4MXpYTnVnWXAxdVh1SExjMHhIdWRrVUh0VWxWOU1zQURXLzBqOWhQRGxjWk5oZitwUkJUUVR4MnhUcGJNb0MrcnM5NDE4RkcvR25McUYzODJWOFBkRDdxakxXVmhhT2JETEJ2TVlCcTBPeTVaQUJqTFQyR05VVEpSSjNGNzlIMEQvb1JMcCtQdHN1bENKQmVER3FzTzc0VTZkNUVLRnN4Z091Z0pnOGFXZHk2S29VWGg0VnNZa1FFY0ZIRHU1cjhHaFZybS9ieWw3TEhZbTJ5Ui91aFRoeE04NXhUanc3ZGtGcnp3ZFhBNWMxTGluRjVmdEpOeU1IR3RKU1kyKzJ2KzZkYzRocDVhTlBnQ1R1b2RtT25ZYlJrZ05NNDFtM2NnL0xVeCtSMHNubUJ6eEdob2p6UXRUbFpNUUNzYVp0cHhRQ1FDYmNaWU9ZelRvVU5wN0JlNWkrNzBJLzRDSVZ1LzVYUy9oUFQ4RFVZWUtzc2Ezc2VGUkVyYVhxbk5nTkF4S3NBNkl4MEFqWHpSditXKzFGYnpyZVhhUlNqeXZIUlJ4b2pRTDBkVTNMS0lFUHoxT00yWlRBSU9tQ2hOWk9IYjE1U2pzdkwwMVZDUHozOHVwL0VVeDBJS3U1YW5yU0d1SW92NjNtVENVSUcyRk52Y04xT0Jna3JRSS9UZWthMmJUNVVxS2p5Zk9hV3QyQ0FMdFQzcFZxQi80QUJzUFp4eFI3bGpDTUR5RWZJV2dtRmp2bzFhSTMxNmVPVDU5YUtoeTBnejBOcXVjbWpmTHlSVW45Z3pSdnNlbVFBNDUxa2dCRWtVcCtqbWlxR1hNWVZBTllSRzJ1WkU1MnpickQ0b2s1bVVRNmhOY2RhY3ZPU1d3endwLzFURG8vdTZVWWpsVFU1cHZ5eURodWxsVERBY1JaSDhXVWNKSmNSTUw3aGUvcVF5YnJWNHE0cEdBRHFvY29BSGZ6dTd6UEFySkN1SFBpU0RQb1I1MTV1Wm8vSHVLQlpKRnNrQTBBMVVTYlVSdjI2WmdDc2JpTERSUUNvWklIQnB5UFh1c1dEcjZPS20rbGRicGtpZjZxNG92YUpZVW5OTTE3MFBrOC9RMnZHbjlBeGJsN3l0eGdneDFPMDZTMTJScllmZWk5a0d4dGNBbnZaQm5JQTVUTE1vTWY4Z1ZHM1NZYzd5WHdVbWZtQjI3c09RRktkWVExODE2bXkycTFwOS9zbEE4VHFJeVJ4dGJPeUEyejVPVFMrZ2htSG1JVVlPdXV0SmNBam5FWDR3UHNMQ1VCVkNPeW1UNFBCUjJaS3d6ZkM2NmpNWGc4R0s1MURYYm5MdUZDTE9URDBXUERWNVNTb0ZwdzAxRHROaVhwOWxvZTRjTDExeWQ5akFQbmgyN1JYWFJ0aUx1YVlKdjBoQUlRQlVvbWlEaTZqaWZIZDZnUXIyVU1ONkxKeStaUU03VUJNUlBnTzA3R1ZPSlRQdjJBQXJqNDRHa3BjWlFuTTA0UFVwcTdvLy9NWnlRQjRmMnlSM1F2U1lnRDlBWGx2aW9EZVNxME56Z0JjUXFudURNVHBBUjlpc2MxTTNRZ1BkWTNnaFpRTktnVFJNVVY4Tkc5ZTh0Y1lnSS9HVEhLTkZvK3Vsb0IwRXFrcFdEUXI0MHd5UUszR1ZRd2dGaW1zWEc1aGxqVWNBeWE2UmpLQU1raVBScVhqenhuZ1dLd0J6cmVQNDVzTVFCdGxpeEtuMWk0QWFyQjdRYTR4d01KRWVYK2dES0JQR1EyQ0FlZ0VVVU5RT0QyV1puM0FBSzBYbE9iTDNESG9TenNWek9QMW5CcWtYSm5xeWMxTC9oSURzSjljVmFuR3RSS1lUaUpoZ0Mvc28yOHh3QjdEaTZldGRRTXd6QlBIVk1uVXJ0b2tBK2ptZDA0ZDgxY01jRXJwR2l2QThpWURxQjAxWkRHM3JlQ0xVclErZ0tOY3E3dk5BQjhtKy9XQUVJV2F2V3pUbitFR2xTMjhPVDNBeDJwOXNNMTVQblZjS1U0ditaU2FtaEJaVG9WYmwveGxCbUIvTGRmcmJhQlQ4UGhMQ2JCUDg3NUt4ZDBxRitVeEJnRy8xUU5MWFVaV0NTTUZQQ08vWUlBMDRzM25sSXpUTmdPa1BrcVRiNjJObVVtV200bUJTTGF0V3hSK0xnSDBESmtnS2tma2ZKQVYwUXV3ckhUT01BVDVLcFBLVHNxZDJ1TEJwMXgrWkUyRitwSy96d0MvZXZUbmdxM05BTzFUQjI3dTNjQ1JpRzF0WDZXaThNQzZIbDBqN2doZUExakF1dWo1clYyQXFQV2hNdU9NYld0b0o4T1MzNWFGam9OYmNvTEdRcUtHZDdId2NzOStUUWNBSFdNSk9HTWhHWVVoQ0FKR2JhdmlKRmdOYUpjUWhUOTFqd1dOSmN1YUFXNVA1NXNNOEg4dkFlQ3V2N1VFREFvR09HMzhWUFRHa284RitWUzQrTEV5d24rNnFrWVg0d1RMUDN3Z3Y3OE5QT2JHWGhvTmJMeUN6cWZkV2ljMlhxWGNNM1RJR0NTRzNhUVA3VjNtYmo4T3RSa0F6QzNYcXp5Zmk1RUI2aWRZUW9mdjNaWXdIWWRKTjE5NkdWdmh6MWdCOEphcDNoVjYzMXQ3SVU3OTlOb2xmNXNCYnFzZlZBSlgrSy9URFNXUU5BckZ2K0paZUpnUnNRY0hROU9IQ1dZSE0veWxKVkM5b0s5L3hBQnAyalAvVVRHMG4rS3hNMk1XWGJtRnhxaHRuYWFBY0dCL0xNd0NxcTlJNFZBeEFGZmsrUTdtR0ZrS3hSdzhuL2U1MkU4TFpYSXlMQmpnRk9aeTBJdWJvM0o4T2ZDM1ZYSHc4TTFML2hZRDNONkFKRjJHYUc0R2tHMGczZG9odDUyQmZaZGwvaGUwcy9KQUxJMnp0aTlBbG90eFc0UDQrVFlRRVZxdlcrMUxwVDdzMW9jK0RlYW1HMUFaQ1UzbUVOTnhwaUpBaEpSR0FueEFmMmQweG1sVE13Qm1DSGFBNnZQVjgrQllYRlBkVDV1dk9rN25QajJYY2hmdTJuTHZtVnNQK2ZpSFY1ZTJQOTJNMzdna0Nhb0hYcCs2Sk9pZjk5ODJRUlIwZVVKakFJa3d3TWwxWEdwdWJtdmg5T0lDZ1NBNWM1LzcxbVc1c1UrOTdRMGN6NFFDTnhuZ1hROXJMTGM5bmR1cndxRTBkMjhON29VNUIvb3MyRENTdUNZaUVkZXluSy9YWWF5R2JicGdnUFJ6aUI4Vi90Z2Qvb2NoblU0NjlYbklRaExtWnNUWmhvY00rMXZiT3AwWkR2Tzh4WXJCb3pmTmNUY3ZNZk03TkpjSnJ2aXdCZVJQKzZlWFJraU9heUVCMkxhTTRycER6TVFvbGUxMERwckJsMmFXaFFxdUxaenRIRTBoSG1oWE1jQmpyaVpxYXNMWVhXY0FPTUxsWVUvUHBsOXhOaGRNUkg4dFhhWWtUeW95OG1EWEc4VWlZVmJvSGNKZzNBSFAxU3NZZ1A1ZTVmVmRKNko4T3lQR2Z0SHJJYXZPQVFLbXoxQ25NZUpzbFY2eDZNVGFSYnV4T0E5VDh6UkI0Z2I1Y3hya2IxNlNuM2FXOTVJclBrbU1QKzJITXBSdWlMVzdJYTc1QWhqYWVqZCt0THU1ZjgzZjN3UVZmbS9KVlNQUmpzK2h1R0Iwc1Zvd0dLRjJ6Q0hteU1idUNnTjBoMHBWSVFpSE5sYUFrZ0hnMVJ0cDBJUkpJczRmZmdSMUs3QWUwUWhkNFJuZVNwMlRYTDNjMGFVR2ZKcjYxRW12Tjk4Tk5LNkFjZUVlVWF1cXp1Y2lWZ1lWZElqN0tGYUFMMW9sNVgxYzg4Ulk0MmpMSmFmdUxCdmFtNWRFU0pNd3Q0UnQ2S1V3aXYxeHZ6eTZkRVQyUGFnbHZZRnIvZ2VhZ1FFMFdwQUVoMkJmcHB3Y0lUeVpBeThYRHlRVUFPNDV4Z1NxMUEweEJnWll1bEkvdDRuTHNidGdBQWtDMG9mNTBKTGRhRG1veGRVazNEcnBsdGZXRGRFcTNDRWNBTzRYaWpaTzdGT3NYbTZZbUM3RFZTOHNzSlkyYi9EeWhneGhURDJNQUIvelhCbnNyZWNpWEh6anFaZ0FNRk5xbm9kRDJEL0g5OWVkOHN1YmwxaFE0d0JCcmRSN3dIdC8ycis4RllyZ2V0VWlta3Z0cnp1aFB3T0NSdFNvN3NrUituWlFDc0RRSWhLYitad08rZ2xkWjd0MGFZNVBpTS9seVgwTE11WFl6VnNNSUQwaCtsWTY0WVJvWktLS0FSQzlDdWhaRmZlRktGZ3FWNHhIM1ZQNHpCdHdjdVVrV0J6b25FRElISU4xRnRBbFlNUFVPd2o5aWFvUnFTWTBRdnlUT1pUSUFPb0g1VENmTkQ2eHJYbk9aYmhNODJ5RjVmUTlMR2QyOHhLTElSTFRneEx0WUtGQ2VQWWY5cyt1QmlObFJGRFJrZ0dNWlE0TmVVdlgwd3ljZytTeThOKzUrb0x4MnRKTnFjS1FlTXJoYjQ0S2VMUHlja2dyR1VCYVV6REFBVVBMeGJXbFNMNjgzQ04wMnMyVkhxbm1EMjlaRkhZTkpIZnRKdXozYmFabGVEUW11Y3gralRpVEk0elpKWnp2U1ovVHpKWDlBS3dqQXpUTjJoQVEwSjByREl6dzgxb1BNbmh4WmtnYUJ1WkpIQlVEODA0M0x3R3dBVGJvM2xxYUJ3c3UvN2kvSFk2NEF2MVY4bUcybHEzalM0Q081RHlCQ3NBV0tCRUJGakMxa0E5VGdkbk1pU0thMGl3ejc1Ry9pZlBEeVN0Ung0djlUU01OREpBL0N3YVF3VmdudU1RWklJVEVlS1BnQ1RLQXZ6bTFIV2xwVVdDWGpBYXhXK1FKNlBuY0ZqSmdkNmpJSURSeGIzZzR2d00wYlZtQzFINDBxckhuREF5VVFUcUpnb3hiaVRJR1lnYThSRVpoMUdGVXE5QWZFTTJibHhCaktBZFU3Y0VWV1BmK3RQOFlBY2tqVS9TNkRFamVRUFJVRFd1UE0wRGlHaVRFS2tSWXcvbUZoK2tXMElhTU9FSWZsMDRYS3lVajkrM045QXZQcXBYNDJIRkFpNThyNVFlTHVQWjdBc1pxNFFreWZhZ21DRmNMS29TTFM3NDVBNk1qdWhrbm9NdDErajJCWkYzaUdjR2pIckt2TWZMZGlEb0g5MHFUTmV4a1FsUWFnVHRIbXhCNnVxSUlEVTJCdGc4Y0xHOEVuSzRNb0VOVi9RQWxpU0FZYmw1aWhIc3l3Q3F1QUozL3VEKy9UNDRBdUlzSEVIOWJ0V2RDSys4d2ozdUpiSUtDYXpBbHFwYjJzR0xJUWl2YjZtOGlxSTRWc0xqYkJYZmpuQkgrdzRDMmZocWtUMXBnZmFsZG9STWJCUUFDQWhZYWlJYjYxNG1yajR3STRMNUdPZXZDZHo5YlhMYjBDV2dINk9Dblo3UW40azcyY215dkRjQklISVJNUlEvV0JXbUJnLzdtdWJ3VmJ3VFlQRzhpWkJEc2poM1JKd2o5cjE4QytoT1Fyd2UwNFowVU1DTHRXdi9QenZmdlEzc0FsSitpQjMzWkhvam92Y09rWEhIbnJLUDlIUWdwek1ISEpWN2lMWWNNY0JhT2xQNDJTVWw0TWpnQWVCL2NrS1BKQWExL0luMEFCb01jckdUNHhoSWFKTURBSGI5S1FEeW9vRkkyZituVDkrd3lpczRBbHlWVW5uMG5hN09sNWdkNGVYdVFac2l6cGZRdFovS1B0QmsrVmc1QjkwUUhMSUhhODJLWkVMNlBmdXFTdDVKbXVncjZsL3J2UmcvZ3lMMWNoZTZOUHVUVXVtUUQ5S3RPM2VYMFhRNW93enZKbVp2TldJN1gvV085NE1yNWVFODV1cG5oQ1hMa1h0cjdWSDdMVUFqamFWL1p5RW8vN3JBb2tmNm5JNGpJUld6b2N4QmNsVU5tZ0xZalJ3b29SbW42V3JpWStSY3c1a3VPcGc5bytWTUp0K1JnM0lzMHNMRVR3TGgzNmhYb1N3RGxpL3dIS2hBMmlWL3kyZUR5cFgyanFnMWpnOHRxMmdqdHNoRmF5cGs4SlArOFc1dHU5TUJVTzlFbDUyMm1QSUllOUxNQlVZdXh4eEg5ZDhwYlFWZkIwRC95M3Y0US9mZlJuN2FjeWRWK3dQcUk2ejBhWjJyREFNLzRZenJXZm12djZBQmFsdWY3QVgxL0hBV2pDeXRNZFh3ZTMyMHN4dGJId1pDUmx4Ym9ZQ3hLWEl3d0JiOGkzMExPUWR3eWg4eWc2eHdwUGNCdk13N1FjU2hISUs2YitTWHg1U2NPaHBMRVAwNmVIa1BIQzNYWWc1aVFhZzZjTG5vNGd2ajk2TDJnT3FZTjJDTVBZVVp1bG1RU25VZGtPcEhXTTh4V3VVQjdyTis0WERIMWtMN1dwLytxZURkeGNEcFJVcnpvVk5FRDJvL0ZRSDZpMDBRSU1QSHlVTzNCaWU4ZzZSSExOOXE5cmJ2NEd4SnVOck1ib1VOZjBkWWg3UitISEhqaFBKT2p1QnBMQU9jRSt5ZzB3U1Y3NWdmWVRQVTdNQ1F4a1pseDVZMWljRU81aGdhUlJVcExIeTduZE1YK0NDK0drMFBVUFU1NUhTN2h3Tm96ZVNyNjlPTkFTbmJDVVVEUnNVOXhicnlxdHhwSEQrRDl1ZEk5SUltTUtkZ2k4N21VWW9ISVcreXRnZGRmOVh3c2FBLzM1Y3F2UFZpTzREcXgyWUdCUkI4djREcDFXbUl1OFFwcUhYRXk5QUZHWXBvbWdNdFRSN0ExOVhrckRmTk9sR244TUNReWI0UU9abjM1YW1zQ09QOEpxcXZjU3BVZmhkYStNVTlNNWdqWkVsSEREQ0UyWDZjYnprMGkxaW5tMU1VN3pRbThOeG5CZERSeVZpcEllR25UQkUxSDRsTE9vZEQxSFZ0dDRPTTRHbEMvL1Z4MGNTSFNUbXlaY3RST0JqT1V0clg3QVlKbktwN0NFS1dIdXE2bmN0bFM4VDlLdy80Zmx6OGpvUXNQZlp1K3czR1pRTkUzbXlhc2dxYkw2Z3FKUWNPb005a0srdndDNkU3bU54OXFGM1lSZUFaT3RwOFRVMnZUY0wxMXJkcElDamZvYzNlRVdHVHF5L3IzMW0wYXVKSDB4Qk8vbmIyNEY1allVWG1zR2ZOMEc0aWhNSU5XNUFnaHB1NkxPWUpNbzVseHVyM29xK0RtMWoxendmTkdCVWlvejR3dHBpekVGb2ttRXVrRlRTMXBBNzV3UXI4VEdHTVdtcjl2d08wNzBKZXFpTTRuanFjQktETzVDb0YyRHNHenBDMXY4Q1A2Ym5mWWpkd3ArbHltY3JCVU1UeEVxQkVSNGJxZEhpbE90VU9ETlAwSVo5MzhZNjlMSUtMWktiYldKenZZczRmWEJtNVJEdWdtOW16UHdNbjRpYnZEZ3VhZlp2dnFjNGRNUkxRNTBRZ0ljNU8vYWRXa2ZVV3dDbUYyNGJnOWh6VmdKRWVKY3ZWYnFZbGcxTEVySWtmSXFrdHpwdEwvM3p1UXBaaHU1QUNieHBnNXo2MFovbzl5RGxQMjhLTjkwNTZzWStTQndjT3N0WHN1RGNpY2NpWVNHQUtSdG9NelRpVUhXSVlOamlkZXlsTU5BSmFpd1Q2MGUydVAzb25ZZU11THNocWc5OVZoK1hidURtWWlPV1FSSnRoT0V4R3Via2MxU1RHU0RIRUtDaktjaTExUlVLc1lOTXdBR2lTa2I3QTY5K1F3L2NOSGp4MXU1bnBGMDRPWEFpZmJ6L082WWF5c2ZSb3RhM041Y09HTlhxMzdWV29OOTJ0czNCeXJ0dy9mSysyQkE3aE5CeXVHTmdWb0FiSHQ4aHk3Z3NFQzd0Q3dkRWIvL3ZkT1JUa3RWSlJvUm1qWU90SXM0aGxrc0c2US9wNEhaeTdOMGZxaHdobEFTbzd3bldaVURwRTV4ZnJCR0xwbk51dGhZNEVjV09KTnRIUjBQQWRtU1RWbmVyOVBXTXBVRndERUt2Ym5oREFzL1pUMXViUVM2MmVRRG1vVUhxd1hIcTdDTFN2U242aURzR0VvamJteFh3bGNaVlFGVnFJNkVDQ3hJRE9UV0hrRkRObEMxY3hRQXQrOEl6amhkQlJYZ1RUWTBtRzduRjRKK25FR29PRzlQMjg4UUdxdlg1VWVBWEV2eVZmUWdjMnpFUnNqaCswS0QyNVBsK1lQTEFGR1NKOXVHT3d3NitCck1ZMHB2V1FLNENvazdRTjdCQXpPb0VEZnVZbXp2Q1lMdUhsZWRQREtoREJNTk9NSWN0RC9zRUMwMlpNdVE1RG1TSUFCWHhyTXhqWnE3cld3dERENHpZUU40YlhSQkNLZkNZQ1dkL0o0OGo2OForUldMRk1lamlET3VRWHlXa0FGTXp0VHhRQTBPWGtRZlpzQm9BSEFoWUlyOUJrVHZyWDl4QkVNZmZoczZWM3IweE4ybXdFWWZWZW5Sam1GMytXamIva00zRnUxTVFaWXk3M2xHUXZQcFdGNVZBcFFIVVRBSFJQMWNicFJIQ0hiMVk4SUdHNzB3TVJ6Z1RFVklqTlNSWG9mazB1cCswMGlyd2tWT1dwL0tqS3NINGhTNkg5ZE9KL2NBMm1Ed1R3YXhnSHVmdFpMd1RxSW9rRjJvL0FqTUR4Y0JNbEtCRU00cWIvaU14Wno5ZERwRWVKZXFXbkJGTjR6UDVLcFlMUTdGMHZBaWtibkcwc0F2Y1BTdFJiOHhFNGRQYXMwZnVPbkhzSEpIcldoZVB1ZFJqMVNxUDBPQXd4NndRQ2V5WU5SQVhORVQ5cFE2Q1BnRVdvV256STVxZG00UXoxR2hneHdQTFdtRzJHaktRR1VlZjNlZXpJQU12WW8yRExTKzJCdmtZYmNMaEc0SFZ0QWlvUXdaOHVRUXpVUTU0K1FhUWYvd0xmd0dOSmNKYVVseC9KRmdRc2RsN21tNXhudVRKVWNuUWRzT3FqWUhqb0RhRmFKeURBSG9ybW1CYlZCVkNoYzY5SGNPSlZLWU9GMmdvYk52a0VvZ2Y2SXNwMEpTRmEra0ovQ1JCRDFWUkE3OGhTUUpEOWpBTGp6ZEh5YVB2RXppWlJHK0xSR3VwdXJuSWxpdG9qa2xzQzVCVU5lWjFVZUFPamYyQWI2Q2dsQzZtREhDbUZDbnNtbGxESVVIRXpibVg0NzVrRnlyRFoxUCtnR2d3NTBYWEM0SjRSQi84N1ZRSHdHaHRPU3JWQVRaeEtVSFk2QUFaaDR6Ykh0ajRrQmd4K0JPNjZWekFXTjk2U1hFb0dQUGowbEdsd25jNmRiUzNOa3pSbnFIb29xR0JrQWVnUzJnU3AzbkFHNERSeVp5OXUzZ1M1a0R0a1loNXB4VXgzTEowbzhKS2dsOGpBRDNHOHpBTlFrS0lGTnMvWVBMbU1Qa1htc2I2RTZ4aSttVUI0YUNCZ0xZMWkyVWo5QW1vTUJ5dW5XSnhpQ2lUOHhxNWhHek9Ga3NRY3dYaFp5ZXBhdFl6QUZCaHFxdzFrRzNkUTBKb1RKMWtzY1F0SHcvWFR0NllHQko4amtHQlBYVlAxUUQya0VTZWpvVTdleTNUc1g2S0dHNFNMeXpmVTVqdkluWkhDazJxanhIRSt2YlRDTEI5RjlBcHBpU3JNemdEelhXMFpPNWcyWVlET2ltUjR3aVIyQmNwTUJxTzZmQjVBNlpPQ01rQmtCUUxNUXJTTHdNRmljZXpvTm9LM0FxWmNvSE1aWjc1TUJjcnBsWHNzZnFnUkVZcjMxT3NFay8wQUZDTEIyNnBYZnNTeklCRURXTHd1T1c1ZGdxR2o5WklCKzlqTEVGRnFZSEZDRUNnMDNOWUlwZjNBelFZWGtjTkJvcjZZUE5aTzdkeGpwaUQvSWwwMEdzTmk4WXZqTG03ZlJUQUZRT2VTSGwvQ3FBUnUzOEp0V1hoeWV5R3RCUkNmY1RRWWdiOHRYcVd6akVsYUFBTEFRTndFQ0dIdHUxNTYyaUc2ZVZlbWZ6RFlEQnBpVjB5MHoyMW9PVzQvRmF5clZRUTRsV1B0ekVUTEZGY05lMzJhVkwxS1E2bVNBSmxveWdKdys5MllNb0s2OVNQdGc2YWwveWdBZTNMelFESENyTTNVckdpY3NOZ1NTUEpYZ2dnRStzWC82UFFiWVo1YUtqQkkrbHZpNkVab2I4Wll0TU1TbWhtd1J2ZkZ6QmdoMWY2RnJPcFhZQW9IVWhRa2dNQ2R1M0pnakZWVkdSSmJZT2owTnRLUVMrSVFFV0dCTFREZkxlODI4WEhHSXFnTVlJTUhhL1FUcWFpOEpnVFVEQW9ERGxCZ05Ob3NaaWV3TzBVdHJTUnhnMHQ3OVR4a2dQMDdJRHQwcW84WXJvakhldlZ3Q0ZtVFgzMklBSDVFS0sxd3h3R1RMQnQyMHpRRGpxMml4WklERjRwSUJNbFhuMmtLQTY3d3l1aW1Semh3TjVuWTlJRFMwN3dJbU1ZNHB1WVFCVkpiRDdLVnptZnFCSGVJMHJ3OGxheVJZT3lLS1Q5OXVRMlZPVWdvQUxEbkpBQllUUWlOeDBybkxOaVFPSkE2UWlqOWxBQnlNWEhHaWVYT01RYlNBT0IvbXhkY25BekJBKy9jWWdDUENMQldFczVRdmw4Z0xOWno4SVFQMHBGMHlBSGhiZDd5cmN3ajZ2SytPc29qVEJQUUZ3eUFYbFVkZ3doL0VZVWhhM21FdU95VEc5QU4zRmR3OEJCVXd3ZHI5ek5uRlRHNU9lR3FwZUZxSjBtSVRXVk5PZE8rRndHOHp3UGZQR1NBa0s4aEx2UXREV2FjV0tiNitvQTMwbE5Idk1NQytrS09aTWFvU1QyeDBIMXhkQWdZM0FNTTBxMTlsQU4xWWRteEVXd3pRNmNFK21Bd0FUaUs4TmpsRzFzbmFGR0RRc0s4Q29xdi9sNjZDSDdjUFFXekVwcUpKYllqZXNpRXBiNEtZRG9wa2dDRWFkbERqU2dLazcraFBHWUNZSks2Q0x3VE11U3NsTldaK2ZZczJQZE1ZZm9NQlRuWEdvSUNtNU12VnlJdExCdkFUOGR2Zks1ZUFwcmxjQXFBRHJsYW0xTlVNb0MrOG02dTlKY1ZLc2MrWURNc3hqSmRQa2YwbE9rQmlMaEowajdUbk53OVJCU1NLOUp4QVhRYm5oWVdDQS90VXAreGJXVFByY3FVRGhPL29qeG5nRXE2ZGVLQ1NhR1ZtaWFRTmxNZEI1OWNNVUFGVXlnLzNsenUwa1JkdEJ1QmF4VDA3WUpsODBkdmJ3UGMzQXZTUjY1TkRrcnNBUzNXYVgxOXVZcXN4TEdkdDVBcjI3Ung2dzFXQU9PbmJoeURwWFpyd3lXNTR4Vk00UnJZSm5kUUp1OVpzOWxidFhRREg2WThaNEhiNmphV3RWcEdPenZmRkJRTndzL29iREZDTUNJYmNWY29MTzhCTkJvRDVrUkRSSi9qU2ZLMGlBMXlWQUlaWnhOMDVKQ25WNEFRSzFHYkZBSVJxdWg1VkFVRUpERG1XcVVLVHBlRkd2WFVJZ3Y0dDlJbnloaFFCOUJHcFVLSTV4aG5nODhEV3J4amdnMjN4ZjhBQW1ZaW1Ta2k1TEdoakVNN2ZZSUFVZkNxVDgxNzVjdDQ2MTVjQTVKdnhmZklRT3ppcVY3Y1pJRkRMNVJJUWxzQTVOb2FkekdMN25vc01MZ3dsMERkMXBjaSsyK3ZpVEQ3aHY1ekxYemNQY1hmZ2llRmQybm9wSFUrV2FnWlJvbWxDQXZTOTFSS2dZZnRmTVVDZGZpTU1xWm5xVUZwK2ZVRWJ5eXN6K0NVRCtJaDhNa3RGZkhpK1hJVzh1R1FBS3FRMFdNaTYzdWg3L2R3WlpETERFb3p1eUFBSjJ1d3JibGNUd2JzdklIUUEwYmJvdWFhdkZsU29QVUxJRHhDcEJFaFJodXJjUGxTcVZUS21aQTVveVJRY21WSmxhSUNUWEFJR2JMdGFCMkNqZSsxdktvSFRtQ3Rvd2NrRmJicll1SzUvelFBY0VZZFpmc1M5OHBJQ2ViRTV0Um1BZmtQYnBjbU1uc3YvY3BCdTZnQ1pzNlBielYzQTJIR1lBZ1dHTnpCUW10T3cwTzZZMWk5QnpSY2VJYzhQZ05PVWFHaytPZDQrVklDMXJYM2tIb0VpQUlzYjVob21RakFBNURBYVlyWUtPc002WU9tbU5xZS91QTEweTAwc001LzgrcEkyeURIVVhETEFzUFlGY0VSeXFmOXdsYkxVdk5nUVlOcG1BSWZlS1lUM3NGQ1U2QndZd1o5TEFFN0RsU0twQzN2ZkZqUWdSamhRbWh4OTdhSGhLRUhORng2aHUySXVheXY0WlgvelVLcUEyZUlwckl5U1g0M0l2SklCdWx0cit0RWxuYlU5STBUeUp4TGd6dzFCRVFyVHNJWGNMbWhqUzliY0dTQTFkUUZaRldsZzIxa3FVcVVzZU1hYkFYYmJES0JHUzVyMnlVSnpZaGQvcFFNczFNbXhXSEN6NXc2ZmhVY0VCVXJUelBIa01MbXFBalZIRmhHSzdMdVl5eHlkek01OXVuMG9XY05idlVlNCtHbzgrUmVHSUtXK1JUWUx5OXhrZ0Q4M0JTY2JzL1U5STFYeGxxYTFIdWlMZ3FaT1Y3c3ZyM2hPN2ljN2FEa3JNZ0dRTitQOWk2R0lXRDZyNnFKcHNCcHplUDlxRjNENEFCaWNrZzBqaDNJbmpoRlcrcmNxVnZTSkhZK0lYU2RxS0Z0M0YzTTVkamF6MjRkS3RRcXRNZ1g4a2dIWVdxWmdhMTA2VWY2UUFiRFZ1K29NQ2pibWd5T3A2RnVWcGgyNVl6NC95UUJVbFJZSXRzbFVaV1dXaW9tMDhPdm0zbXNkRFVTOVpJREVUNDVHcU9LamRRUHdrYit5QTh3YmpYTll1NzhNQTZTQkpvNFI5dktscDJVQkVrL3MrRGREUE1MZ0NGTGVlUTd6T1Z1eHM3bDlpQU1FNVlCVm4xS3YvQ1VEb0xuTnAxQUNkL0tmTkh2RUh6TEFhWFBMSFp4RVEzQWFONmhZc01xM3RCQkdaNENzdkdITEs4UFNNQ0owcDZHY0d6ODgzK2ZqNEsyNXdRQmZBZUZWbk1Kd0pJOWh5b1diVWNFSWhwSWdkT2pJWi9yTDhJNUsrbTVnaEluU1BRYUhzVFNxbDRpamQ0ZVIvS1pzM1huVmpsN001VWlJZmZzUWQ1TUhydWZRaXpMUzZCY01FQTBIcTIxZ1poTDRVd2JZTDI4RmhLUmxmRFRSaXNwRkRFNlpFczlNRjU1dmpRaDVMcTllZTRlQ2oxRXp6RkpSaHFnMS9XdzFBeFJGV2xoWDhBWDFxMUdtYm9BWWo5dTRBTXUxQlZqSXlHZ0haWisxTWFoMEVnRnJjSmZrTUVDSnZDNjAyZkNKQUxBYXlIZU1idWtQTHVieTlQWWhxbFhRZ0I4ZVVzUmlEZmdGQTNqalFRYUVaS3NaNE9PQ0FSWWxBMlRXMitzaFliSFhheHFYMVB5Vm1UWFhTSFp2NjZ3ME1FQ0VWT1R5eXIwZWc5SW9KakpFemZQTVpyUFl2UWc4REFGSi9LUmhGUjgwOVlJbHd2b0pNZ2cxMEFrVkM5cHRGQllFREZ5QktkYTJkeEE4a2RIQUxTUE5BcUs4aUFFaXY5d1YxSk5HdXRLZ2RQTVFyQzRlSkdJUlVsRk1yR0NBcHJsZ2dDcjRLeGhnWGpabVorUUJqL292a29Ta3lDMnkzbVp1Q3F3amtiZ2kxendRcmY3MTRnV0d0bGxzQ090R0p2bmc4Z3E4QkpOUWVNRVZpQW4raWt6VDJWaFppYVFrYW90ZU5rWFZMY2NLaVFVZUVFTDZKOWhBQmFvUVZ4MXd5NW5pTjBsNWJVREFiZ3dKdTA4T1U3N0E0U1h3UHNRMm8wa1hNb1NNQnBUZmIrbWJRTGptenc1dFIxRStERXNGZjRGVWw1ckdrZTVqZEdWelFxN3FYdWdBR3ord3FsUHo1WUR6QncrbmJvWFJqc1FWUm9DUW01bnVneUtkTmRoZkh2TnZLenBicHVBZ0JwUkpLTHpnaW9pSi9LVS9RTEZzVmlzdVNmbDZ6MEFMNGlkUFFNWGNPeDc0TmpvWVVOa3A0ZDhFbzAremJZRGkwNXZaS2FBc09PeWRnR2hIQ0g5OUVkdE1JTFF5QUdNNExXTWxkTHNJNHJ4OXlDTzh3ZVFaQ1o3Sm9uTFVuMEFlMjM4OFNleHQvbWNIQVhxTFJ0S29keVVPYk8ydW1TU0VBeDQvY05oMUswcEtGdCtsU2t6OEtnVENmZjdDMmlvTkFJWDRHd0V4VFBKUnBPRFlLTDJZaEVJNnlDUVAvZ3MvNnZZUytYODhRd0p4RldBQlRFYWRuSjRSQUhJYlRlZHI1Z2NBa2FYSEVrQXMwYWJFaENNWEJyS1BISUZ6enVjZTQvVzRFa1NhSWc0SFM2Wkw3ZUNjWitOcTFqM2VQalI5SkNZWVVTOWcvdmpsRU5wUzA5RG1RT0pzVzA4eFhuY3piYU1mZ0hnTXhIWU1mL1ZEeDVXNmxhMXZURndoL1V4azRjQlhyb0Q4cFFOSktWb09xZ3p6eWNpUktUZzQvQ2xYZ1hWN2oxK1F1WFdiY2lieUFPTGFDSzJ6ZUV1OUhFMnVSd29oWkJieEhzc1FrbS9GQmQ2UjE4R3NLdG1adHc3TWI3Qm9BcmRWUGhsaUd2TEhkT1ZoenJNamFnZjdQS3RuM2Z2dFE4NXNXSXpBZW0vOFpTdE5qcnF0Vm1pWGM0UXB4aW1TMkNpYjluRkFLT2xKQ3FZeFlMS0FlbzZRcVNIV01qY0ZaeEhHSDJ5UnVUaVVhdjRMZFMzdGgwTVhwVG50cEFNVGxNdXJ6OGVsWjV3NEZjdXNaUWZDQ3Z6dTlIckhXcXhUVGo0N1NBZ0JZQkxBbHF5U2g1bmh3SHVRMThCSmpWa0JkRFlDTllVMHVWeXBkdWU1bGR6RXZpUndXOWZJWVJZSklxUTJWOXI5WFNia3NZVW5mNDF2SHlKWGs4bmpsNmZ6S0VkZHBvNG5VYm1ZSTlCTVpqak9sdHJKTnc2UU9wbWtnQXFOai93N3RSdEVzREUzUlRscHdBRkJBMERjQVY3bW9wbTVLcEM1STFuMHhUcE9NeXl2UEVBcGpvd1RKbUk5YlJHVHZTRkZDUDBBTDJCTVJxUUhDVS8ycGtUa0ltTkRybUtHaWVaOHhSc1VwSFpmNjVjajFFTmhSZUlLVDVUb1RyWU44OTRPa0JJN2lnUVJVcHU2OXY2T1dFNG1RYWxtWFhGb1ZrM0lJbUdJN2k2Z2NQQmtiam0vYzV6SGRhS1FIUFFwOGgzbG1YV2VFQjY0VEZJZ0xaWmlMbmVHV2FadWRURnBrZ1lZVmFRdjRLS1oyUzNnNGtwRjdna2QzMGM3ZWVZSG5ndzlmengrTXluVk05T3hQYmdTcDNvanUwQkNZbEpJUWs5NkpqZDJnMjNxc2FBL014eXdFSFdTMnYwejhtemZVUG1XMVZMWDBIWWViblptdm9ZdE9DcGo0cG5tOS9MTUEzZVJrSWRaZW56V2JleDNKT2twWjZvbUg0cDhJWkZXeW5PcGpQR1ZIT2FVSEVhUG1TY0k4UWtoWi9xcDB6cFBpQitZVlVrSzVFQXE0OHgyWWd1cmFkY1hrK2FZTk5oNkZXcHRlOHZjV3VpWnk5aks2Zmp6N1V5NTVJRkF6My9oYXU0Q21YQkMxU3U1WCtSdUJBbUpTZ01KTGJIRmtkT0QrUTF5Sjd0M1RMejJkQUU1SXFrZGFNaE1PNjFLSFZ6YVNzdForb1FYaWcyQUZjd3pnY1B6RFVpbHhRTmtscDZ3RGtTQ0g4K05Sa2s2WTlvZTV2aXlGVWtIblFBaURpVTVRSWVaNXBuY2hURWpSK29nT2grMDhSNTFuaEJ0NVMwWVc1TGJjVGtWaEtKcXJXa3RMaVpOUVFOR0EzL1RJQUlEeGpsM21vWWlOMUFQcDZ1djFVOWJIQWowUFBsc3BKa29tSENDTTNyWHE3TGNKMmlVaVMyRVZzeWhRSlQ0WWs0R2lGVENocW5GazV6VUVOaXV5RlFNNENScU13REx4NGp2b0lrcVAwd1pPejhRenExaTUwNmtFVlgwVE9oejRvUm1ka1JTdzZSV3lzeVo1UXZKS2JJQzNwTXk0SWUwYnpmUUJ0N0RmRGJuMEVHWWNlaUgzNlBNRXdKQ0VieU9XL2cxWVpERFp4V2JhNmdBclVtajMwSWFZS0NaQUlXdkp2MXBhMXE2cFpjNGU2WVgyZERFMlBRVFBjL29kMVJTWXNJSnptaFlqN1BPeFRKSzZ4a05vUGZZOUdKK0E1NHBpZzVZQWxJN1VOcFZ4Wk5JclZVd1FKTG9nZ0dla1BsRUhHTmdVWmkzSExtSlBBeUFMWHhwaHBEU1F6QXhIR2ttTVJwdVNZM3lMT0pyNlYvd0tkS2JHMjZOZVFUc0NCSkNCT0tMNys0NnlNYVNBRG9NRlVCazVBbmgyeFczU0MvQi9ocWhzUDZmVk9GOHJDYk5Fa21wQU54RmVBQkZPQmVBTGdObktBRjAwSkRWZ3RQVmt6OHhnVVdCbmo5dDNNbDhjS3QvNW4yQWs1L1I4TkM2UnBIWXdrUXMxV3ZtTitoMHNSL0dDdElGSEg3ZFoxNk45NUlCTXJWV01vQ1RTRHJiU3dBRTFHcFhlUVFOdVVrenRWSDFUbWFPdzd3Y3JUVkdNb1pSeDRCYWtNaG16QXY3bnBJNTBrakl3SkYyd0lQeEVLaTZMT1VjZ2lRcmxsYVZRMFVpNW1Qa0NhRjhpdWdpakdEZVl1bEJWZHJGeXZ6SVFBWXRYcGVvS2lKMGlxV2FzQmxieEpjbnBUOXZjdWl2bVNjNVNjM3BhbWw1eVJaQ0txRG5UWkE1NlBkdzBFQk55Qm9QMFlNSG1RV2pBUTkvZ2x4SFlndmJwTWNHRzNrc1Zsd2VzVUZYb0xRV01vTVJYUWF5SEs1TXJaVU1jQWFKME5tV0FKQ25nM2tWRTJBU3dGa1dhK2ZkZndxWVY5TVFXMGIvczlycmV6N0dTZ3RDRjR5Wkh4TWl3SEZyR3FWU0lBUk9TSktsQXRDNjI2VThZWTZ4UFIreklGbWVFSytqd0N6S2xLSGtMVS9IQXBvNG9hQXl5cXhrUnR1Q0FRemRMUEVCNnFydk1RV09wZHZHd2dDdklWa2NWakxqWk5hUlFJTENTRVd4YzErdDVYbHlRem1Wd1BBNm53SEhZWWcyWldiSEhDTVVzWkZEUWVlaXUzZkJaMllMNS84b0ErVndGYW0xZ2dGNlNnenhWV0ZnYWdhd1pBb0FsQjRpS3FpT25UWnNZQW56WWtuSWFVU2dmSHhnUG9ZNnpVd1NFRkJjQkdEMzlRSURJRFh6Q0pndDBvOVFCcFVNVUJsc0dlVE1QQ0h1UTZKbWtOVUw5SmtxY2poVis2cmQ0aFpNMU1pYzFza0F0aHZxZVlrRzFnZkRiWldDdWhaMXFOdWY2SFVkMGQ4bmlrN0VSV21YN3FjWjdXM3AxeG1FMm1IVnpFVGVUanA4dFlSN1FieTZpT1ZLak9oSS9TUEQwTXhKUHNTTHRRTGNSN3RJclJVTTBLaHpGY01sdkZJeFFOU3RVVUFwVmlUWURLNHlBS2QyRmtYaUw3bDQzaERiV1NEaklUWXhSem56WXEvU1c1VjVCQ3pqc0VKdW9ScGduYXNZQUI2eXJXWE1Kd05nbUFlUmo0VTdRTnhjSXlkTmZydGFQbG9oUVVqWFVaalk3WTJnTFdacEt5NzBWcVFsNGlNektFdmFpcm85ZDJHbTJJY2FuMFVlc0poYXIyblR3TjU3bXJwcGdVWUN3NkE3NFY2UStFM1RMaUlNUXJZamtZV1Fsd2lIYzgrRFhFSUM5QmVOQmpuVFExY3hRRmF1RWowZ2NqaGNZNEFDNXJYZ1dSN3ZOUitnRUxDajNFS25IN0NXUkpUYVFlOXFCelBVaWxzb2J1czR5anRkZmg4cWhLQjFtelo2SW05MUxFdU1aV1JTSUY0VjIwUkNaYjJNOVJxTUFXR0V0WUlMMTd4WEZRdEZBU2Q1V282RGw3VW9rOG1NYVR1RFl0OFBOZDczWnVoRlpFaUtVaFNYZ3VXbGp1bVZSY2Z6VjJidjlmck12ODBBWjBXdzh2R09zVUdhcVo3SHd0Y000QXNTQ241SHRNWTFCa2lZRnptcEtJM2ZYVlZsQVpGT2NpS2RpS0hnOXVERVpkWURNYzVNR0xXa0dwS2ovRlR1YTNwemRETzltRmNhMFh0azRmWldkQ052VVZiTUVacDRyUk5xNFgyVDljNEFtWkFIZ2FMTWxSQVpGeVIyS05LMFJkVzRCUXN4b1RlVWUvUlNoSkFCRnNBSFhES0EyWjNBcm4rTkFaVCt2ZzFONjBDbnkxajROZ1BrZ3JRTmRORDJLZ01VTUM4Q1A4QUFoaWlyR01EVHlXRnJNUmo0OW1ESlpkYUdjNEZkWEJRMk9yTmJkZTA2UzBBZjNRMjF1SEdSQkNNS3QwOTl5V0V2Q1JYNklzcjdIYmdDTW1EWEZpN053ZGdxNUF0cDJ6U3RqQXZ6OVR5aVJ5UGp6UnF4dWl3K3BXTUQ1UjY5bjRVb0hjUVNFQXhnaFpRMXZ0REJyMytMQVFyNmwzYUFMdTU2Z3dFb0JsOG43TDdCQUFuellyeFhNSUFzMDVsT1ltYVlQNkpVclNJVmpFbWJXR2FiTlNyTHNyYjBlNmdoSE9VeVQ4Z242clkxaDhnZTRXZ1o2YzNpejRTWUxaQWFRM3NSeTR0ZVZGMVVRSXpIcUlRV0RySFlrQUV3cW9RdWJzTUFGZXYxWUtjSTlxcG9McXBLaXJBSTY1dXZqbWZEajJYUWFDaUJLWmFKb1piUkpQajFyekdBRGcwTmtaVWw4RGNZZ04wM0dhQ3RBbTRLQnFEMExITWhvcEQ4d21yU1FmWVNlcXNxdy9rOEVJSXdkcHdRT09rVzlYZnQ0TEZZdm5veTlzd2ZrK0ZuMEZseXhZb2dYSGkwR012THVZWWJqcmpPT2JSU1BobGk4UnlXaGh4VlhieFlxd2JuSXJ5NjA4bng4RnhaUFoyKzBrc0c4TkF6OUxvOG5JcHU2aFBMZk8xRjFyYlJTQzdYcU9DL3lBQUtxV1BXNU5NZk1vQTg3R2NNa0VrZ1BPWTdHWURCdnNTSmVPRlZSYW11NXd0S3pnS203TkMxbEpLUWtkcTlpMVJGOFdaQ0N4OW1pekd6UzZVTjNIbVJPRGJ0emJVdThibXJxSE9kd2g2amVwMEJ0Smw1WlFJbkFGUjdIdzk2R0JnSUdneUEwTE1WZTUwQjFJeFE1ckI2WC9vb291aDVyMkZSeTcvRUFKOGZCNWtxRkxtL3lRQ09sWjM4UWdlSUpCQUI3a29Hc0Zzd01XRlVHZGZKdXhwRS9qbkh1K3NITStzZEtQMlNHMzVkSWloU1M5YTh3cGs5dEV5Z1FyWkE0MnFrSHhvUWpLUkpLZXdMQm5pN3VnVEVoc0hDL21uTUQ5MVN5ekc2RWhFWnQ3U1R5S0VMMk1MVXdWSTZMRllWbEhiTHY4UUFoOFlXMGUzdkxnRVowTm50d283SzBiOWtnRWdDRWZET05nTkVuYmpNYkREc2h1eHRveXQ2Ri9rdVJDbTZEdDB2MDZXUnQ5alk2MEtFclFva2p6d0RIeGZqVnpBQVZUaGtTNm1WUUdLdEZ0SlNBaURob2lFLy9RWlFrQUVSUWU5MUJoakRPSkVGTnNNWjlKY1lRS2hnU1pmTStmVWJEQkR5U05VY0djUGJkb0FFRE5QZ2M2cVhnTVdjSEFBWjU1amJCRlM4MUF5UVExOXVpNjR6UUlIc2NOWFFXemxRMlZzeFFEL2F6eGdnMXFlVjZuRGNCcm9XWVFXRWkvTCt4TzJMRUE4ZGdPaVl3eHk5TnhuQXZSa3FWdzRvQW9DWWdwc013SFZPN0NTOVN4RW1mSGd4WE5CNmFkRDlOUU9RbTduUlNRdllGUVlnekN2eHdxZEtDZFJybVkrN1drK0p2LzlmTWNBMkdjQjdlOTRHNVV5SjNtQUF3RnVqZFc0dUFlOVpaeHZWdEp0YVg5QjBSWU5rQUw2UUFrS1RBWnhZNkwzTkFPN1BsRWxqQ2NtRi9nNU10WHp6bzVwVTlpUVJHVG1PaEJycUp1Uml1TENob3QvcU54aGdYSmc2MGdaK2xRR1k4aUFTUVpZTU1BSjBVVDYrblhxbWhERkN5cHJTWTJMSEZQdlNORHJNQkRhWE9nQ3Q0MXh2VnZ3UFQrUVdscjBzRkJxa1hvMmtkWFlyUUdsS1lWLzRBdHlWQnpzT2w5SDhFcWl0eVFBY1FHd2puQUZpeUVhd0pOMWtBT0lTdEZ5NWVITnhGak5qVVFKQkVqdXAwcE00WHhDUDZOc1lzdXBWVXpEVmdKOHhnS2ZlY1F4NkJaUEtzcnpKQUV4NWtOak9aQUI0b0FCZXhiRWJFcURZQlF3ZFNrK0FMYnZCL0plN2dDRnhsZ2xDd1FjcVRXZ0tESmkrYmhsUSs0VGJOVzRaTzByL2VROGcwNFNIbTdBbi9kSnErQ25hR1N2a3Z2Tytja1BWWnJHOUxQQzl1elFrNUpzaG1UbnM3bGVoaThRbHNJUzlzOGxwSEtab1VKVU00TnZiZ3lvVm9WZmdWTExxNGxKZ2puWlFBOUpIaUxXUHVNTmdBTGMvYkdwM0IwdE4xV1Y1alFFNGNJbnVyaGhBb1lza2FiSDlndlNtMUU4L3FBclV6SDd2Q1RWbDlhbmNFV2tIZ1BqRGM4TU9JT1JERmd5WUFvM1VXS3VKK0o1SFhuME9xbERLZllkSzZSVDJZUW5jdk5OdmdEek9WazE3Yk9vc00yZ3NEcFJDQ0tMU1hwZ1NvUnFtVjBYMEJlMDllRUx1U3diNCtpNUwySU9ra1ZYUVRDY0xuNnUwblpwN3dRZ1o5dWs1T3RmdXN5ZXA1YWxXOHlaTitqdXNmWVk3aEl0SXJ3OEw1TExHU1RFU3BsMldWM01GMTM2ZzViNWtBSTBwaDNqSEVPY3VRQ1ZueURQRFNES0pWWnI4MUxWQ0hjSWNrbXVNcDB1QWhSb1Q0R3NNeUY1aXV4SHA0ZFk5RzMxUWlxemxEMXo0aGlzVFpuQUd5ZFJLa0NuUysxUGlLLzBOM1U0TDgwSk9KWVBYemdRTjRrcDJrKzlpYjhNSmxnSTNHWUNkSm1rd3d2UlEwSm5oM2tEem50REJHSGhnRTlvN2RIclVUcEJhamI2ZEFYc1JaVUFZS1hHSHNFVVdQb2dsQ3lJOUU1WEdncEoxV1Y0a2k2YmdpY3lCSlFPb1kyNlZJRjhNRzZhNkNKWjVadUR3b0NjWUNLdE1OV0pEczI0aTdGTi9rY3Rsa2gwODJxRFVXUkMvZ0xMRjZMWFIxMTdUUlFENERoOS9SdCtGc09lMElnTmdKaVNRR0NXcGVGK1FaZDRMREd2cFRvd1l3ckVGbjFodlN0aE5JWEJaZ01kRDgrRzRaS2tDbXMvcHpzeVFxeUtpbUlTa2o5b0x2enU0TkVpOUJhblpxN0daaEpFNkdPaCtDclF3bzk4M0FKVWd6RjZiWVNRUU1abGxlV2RXTDhEbWFlWU9MUmxnM3N3aFR2dURjcXB6UGtLajlrcmVHRGk2Q0tRMzRuOUg3STRFTm80UlhuUDBHVyswckJ5MGF3Yi9SS0F0SEkzcStkMVNBYk1KTkovN2hvdjVMSElHWmNrOTBDQ0J4RlpOUGIzTXUxVmdXTXVBZ293aU5vODBlMFBDTG11QmUySmVUUzloejFxV3JLem9xUm95NkZJNXdEQUZFeElTck9wNDFNbXpnMHRCYXZ3QWRKaTlHNi9CZk8rNFE3VVBFUzJNS0N1ck96MG1vaFQxZms4T2RJcEt2MkNBOUFQWnFsQXdnQlllbzNNdTROQW8zRVczMzVuZzlVaGcwZXVadnBFSWdFazNYUHdtbVFJanpORm4yZnBUcmJNNE1HTGpvdy9oUjR2VXllUDhBRlZjald6RGRab1ZNNmpJMTM5c29ZcUJrTFE0RTV6YlRRd3J2ZDFvaVNQZ1docWRqQjVwQ1Z6R3dOWWw3SzNtZGFScVFQT3c2Nnp4cmkyd042eUpIc2k1SVBVTG9NUHMxZXZScG83SkFqcWNGQjRUSmp6MUk0aTloVUNROW5oZjRkVHVvR1JreVlkZ2dLWnBzSFJ4OXNaVXovbDR0a2lNQ0tVeXFMeG5xbUdSMk8wUTNhNkdFQ01zalpPQ0VlQXRiRGVoVWEzZTRmTVRBVk9jUUNDSzNCaTkrM0lHWmI3K1l3dFZITFZLOVE1S2xnSXF1OGt5K1pTbER2angzcFN3SVhBekNMcFZ3aDZJMVdOQjY2U2Y5QWEwTWVxRkg0bEgxUmJJdVpyVTdCVnNHb3ZGNHpZSllMVnlyNEh4aURMNGV6Qzl3ZFpRYWhnbE9Fd0hZRDFSVndGOUpVTUE0amxuTHozL2lCYm1mUFRRY25ENW0wb3FqS2VWY2o1NkRYSU84N1Boa3dzNDFvUm5XN1hnV21kaFZoUHRmUS9FOXpQUlZnN2lJK0RvMWF2YVhwbEJZNGkwTnBBWU83YUFkcjhGV1JoV2pOOHVTeFdadHJub1ZjaGdDbHlEUVFBNmt5WHN2Zllpa1pNVlZRMU50M0g0L3FOZkVIaFVucStDMmttOVNkeXBRbXFSWFlEalFBZzdJS3FCOGNBdzZqOFFwWkNESnJLOGVqSkx3T2tTa0lsTmRYQ0lrRUxqN09YcEorSUZZajRxOGFLMi94dkg4NTQ0RXVrRzFMRHNkdFM2dExKN2hoWTZDM28zS0pwdWVHbjJ2aWhvRjUwNlRnNDUxRHNZdVBwME1ZUFFEN0lVUUdMZ2tJSXNMTzJ2Z2hOVjlvblh6OVZTRDR6TFh2ekdJZjdFUFZuUUh3OG1Xb3Rpb1VRUmc5QTRQU1REMjV1TERGVFhQV1Z5RjBMY2xkUUY3alE0M3BjWFQyTEJ1VVRFbThwUnp6R0R1QzBxTGJxREEycUtSWVB1aUZBbDBrTmI0djJGalh6Mllwb1NNUlR6TVVtdFlHRG4yckhLcUtPTnNuWnJQemxmbVlXamhHNFFtb2pmUW1lSlljZUI2R1Vmenc1TTQ0WklVdWtKWXBwOFBDbjk4OVhrZWdEc2owb3VvTG0xOFNpUEI2WjE0eHlHZnZZYTgra1JITExKcUorVnFJVGsxU1VIWVpQclBhYnA1bVI0RXdJY241NFV3MDhrakZaeHBzNkE2dS9raThTZGdsU0VEbFBCTExMRTZkbk16cUliUnYwWDI2bHdWdXJXUnZGQzJLWmF4UkRIcUFPUWpwWjQvM3BTKzFSL3FiOFIyTUFsaHBHTnA4ZVNoaU5nWm1NQS9oYlNqakdjZVpGbXdRZ285M3ZrYTVCZUVMUk8yUkFvNzcydUlJRm1mSUJRc0g1ZkZ4NzRHZU9seU5JWnBpQm1tNHN1TkplaGluck5oZDhablloaWVYMVZGRnJMRCtpY2laeHlkbnc3UlNkS3ZGd0p2d21TMU5CUnJlOU5KQXlyT0dQWElKMFdNNjJrTG5Hbkl3U3NvLzZIYlRFWkhPdXhtTFE5TlQzZFFDTWMzRlBqbjZzaXRwYXg2ZzVMeS8yOWZramtQdUFrZmVmTUlhbEVmbU8yY2dKVHlqSFZCWWJ4NmJXQXkrZVNiQU5jSkM2Sms4QnNYTFloWlVvbzk4dHJadHpsZ2xjbmJZRStjS1JZZ2Y3bWNNWTNSN1JTTTZSMjhwSUtsNjREb2J5MGlQUHRpZllNTE9kTDNiZlNHYTlmd09hSWhBVGxZbm5NOWJHZ0tGZFQ0b3N0WlN1QSs2SldPeEptbjBIb0RMc0VUZEZMM0dudWV4bkZ2RzdVMUVMalU5YWxVeTk1R091aU5vSmFNZ2YwcTVNQk5xNXhLR0V6MzRtMFdMbXlsN1BWcDJZNXlCeEdiWVRMb3hlaWJPczFsSXpnV0hRSUFhYUc3bXBKQ2VYR2FjeTRlK1FNeTdSTjBBaEQyVWl5a0M0MkFkMUYxOFhneXpMM1pzaG15NXViMjVkeW93TG9iMjcrSVZ1SlB5U0VXUXlMUERRYVltUEs0dUZRa0ZORFJuQjhVbFJiWUJCT003cWtaWW9DZGRReDAzRUdvVXViTzZZVFc2Y0wzR2taeGR4bkxLYmFHTUsyR3hDblRLV0x3c3BXeVA2VkRNQ2NKREpwN2pQL0VSVmlUdW9IOXVac0xSTVRFaHM2NURBU0x1K0dHWmhGdWxGRGlXQUJuSVE1RWtodk14K1ZVRzRhV3JBRHBTU2RaT0sySVJkSW01WWt5eGtXQnREbGdRSW1yRU9DcWxLbUluT29kaEFHakJaeGlIVG93TkpFNEFHZXhFcXFnQ1RRQ0VXWUxPanNXMlNndGZCOW0xa0pLeWdUT2krTHd2TDlUeTh3UThzeDB6eDd6UFFtVE9JTEpwZk9RRnBFTVNNNGxoR1RIRUxVUXdhZWljRFhnR2tEb1dRc0JDVlFCWlMycDRjeUE5b3A4MTlrOXZ2WVR6UC9nZzB5c2FFZG11RDhtZjVFSFZtRjhKaGR6a3ZSOWh3Q0hKR1lSR2dtbEZzQlZwRnhGNUtVeEdMcVJrY0VmU096aEpPbGFZd3VJV0RvWVZHa2gwWUxxbHBzRXpxam5PVm9Fb2ZWcEREakVESUVLbUMwUE9qampMa29oM0JQU0NpYVNIQUZnK050OGhKTngya2FGdkhsZFFtd0xQd3E2ZnhndVdIVUcxZmNLUjFvR2RXUXdiRnBQZ1ZiQTNtRHg3bEptb3lMNldaS29QWWJqS1hNZ2JqRW1McFpqZHRFbjYyMTJxbkF3aXR1TERLaURDN2dmdlRORVVmZUJBVFlHS0J2RUVTYW13bmxWbTl5Wk56bERNdmtyWmlZbWRuRksyV0Nsb0ZPOFFJWjRnazJmSFpIbWQ5clBZWmw4NURFZ2NyTWlHYnBhb2lOZTAxc0hBUEVHa0ROREtEK1hxVG9iOWJDaFJFeDY2R2lWdTRsZldMalVnY1k5T1I5b1FPTUdSeHJ2bEpQdjF1VUFGSGNxWWV3WmZYazRhUXNhVUMyTHV2TUlwVWZCQkVZRi80YUdqRHZWTGdZdUdHYmVVK1pLdFZnY3Fnb1hKWDBodDVKS1VlUncxZzYrVCsrWGhScjFiNEZvNzhEV2hZUVlEcDI1Q29NWlJsMVVzYXVlSVg3UHZBRUltZDVmV1IyUVdwbmpMTHd3UUVUa0xuTkxOcGxoNkJIV1RMbmxFWDdVMEJKY05rOEVaU3pqR2dHTnM2QkVWWEovZ0ZpZitsRVEvSmt6dEd6R0s2aldGWUVpeXVoRWRyT0lQYlVEVXJVV3hGRU1ZeHlZdVdnRElzaVVFWDk5SklCbksydFdBQ0hsUkhkZldYcDBCY1FFWEpuSURmZVcvbUpkM25GbU5wOHFqSllML3JLUjRlQUFJM0RZNzR1UTFub1VaQk9VQzJXTFVJTDUxamdFSE5udmtTTy9nMEdBSlBoMlFPTWNLOEowVHp6YWFueEFXZzlhRUJGU1FnZFIveTc2bVY1ZEVobmVqZURPUGpNQXNCWVJvSHRxNUw5b3V1ZlBkZ3lreWV2TlVWdEhSd2ZGSjBNaXdwaGw1QkRlbHNpckRZLy93WURoRURXd3ZlNUJCUnNMY2diaG03alBiaUlXQWdNblppeUJHdzk2WDBVSTgvcXN5aFVkbWdXVmZTZnpuUHBOVFp5U0E2bVN4bk01djdTZ1FtWVRrRVBWVVhoYThEbFhEM0plbTBHeUlodGdQbEQrZ3ptWGtUWnArVmlydmVFS3pjUDhwWEJBQlpaT2VkVjNDOWpsaGx4TWhsNndRQnlBa21HUEV3WmJEMTVabEVjSFBSS1lBcmVlY2J5d1FOWnkwb080TnN6SFRsMUE2NCtydGV0R0hjV3BLNHhTK2NvOTBMUEV6SitDUHN2V2dncFZRS1RFU093UkRDU1ZSeUx1WVBCRWxISlB1L0M4SnJQaWdGTTdTU3NpekFiQm5rTmsyWTBQVjZwZWIvekJna0FWYnhyOFMwM0pRQVZYcVUvZHIyTi91RkJUQ1JrTXhqMExjSmpuZ2REQW96dzd4cCs3ekwybFhVRWtQby9xbStuSkphbGxKQW1NU3pNMkc4OVdoZEw3cGNSc0E3RWVTMUtBSmV6bzl2Tk5OV2Nwd2xFeE90V0NOTjJpRzhxZ2NSd1FrK25BTzhmWEwzTVdNeU9jTXU2WkVUZ3NiWEpMWklCc3B4Q1VWSXYwVmZ0dUZYS09hb29rZG5lV0tlTS83OWE4eDZkWFNZQnA1bDZHWmtSYmpPQW5VSXIxbnl1U3FMTUJHTkFUa3ZwR2ZRWHZaN0pmejlZNndEQ0Y0U2RMazlaYUE0bk1pTFk5U2lHbDgyZE5yYm5uWmJsL3JuWjZubWNPY2NBVnR4dUZBL085WEVnZGdPbVM2dm5hVkdTNWpvRFVBRDIraXFQc3hJR3JOWDRCdXc3Q0IyUEdnaG9nZEpBWU1sS043YU50SklCb3ZqTDJlSEVXQUd5K3V6VkFQQ0ppNHVudDdMcVFrMnp5NXIzU0NFY1pRQ1lkRFJwZnBzQlNPTlZUMmtKWXNxOUsrbUcwb2J5RWl2OHk0UDMxUzZBS3dQOGxVekJGMDk0YTljWlF6cTl4UUlSVHA2UmNGcldJNFJ4am5TR25kV0dhVEtxQ2dkeUwyUXhjRDJrU1ZCMXJ4YWI4ZVFiRE9EQlRvYS9uanRDQ0NZY2JKWUJxTFhRLzZxQ2FlSmJFcldpclZ3Q09ObmxQQytGR3pYUUdHUi9qUUVxOEExN2F3YTRXdk4rbzk3ZC9ETDRmSC9GQUx3WmFDeU1KaXc2a3MyUHZtNFZmeTZmcjZUZldWck0zWndqV3RvQkxQQnBpRVR5cGFZSEdIY1o1OHc5cDZEQkQ0MFN6YWR6MEFjaVdJM0ZaQTJPZ1Y3ZVBWZWxROGYzakQ1YndHN2d0Z1p5RENLbElhUDRMZGNaNEozaGpvdEdTZTMySVVzckN3L0JlUmZsQWJPR01Wc05pTzgzSW1zckNWQUlveERxVGhPQWhaSUIycVRtMkJFWDBGdFZESEMxNXYyNFhRdHF0djh0QnVBazM1aytoNXlOQ3RYTjlWZVpRUmxBeEJ0U3JFa0hhZWxHS21nTktGek5HT21TQVhMa3lUVU9nLzdRM2ViT0JmMjBQaXN6MGhZTUVIVmo3Q1NJdkM0c01IMk5nYVNnL2hXYXBtWUFvcE9BdnhhMkpQNGFyZ0J0d2dTajgwWEp3MmprTElJT0xuU0EySyt2ZlFWZ2RrT2Vkb3NCNnFybkxDVlI5RjZ0ZVQvK2cycHd3d3M0MGR3WWdIN3VUb3NCVmlNcWdVcXpZSUQwQmV5Z0ovYldiZ2VyR2FDU0FCbU1qQjNmd0ZVOXB3L2taSm1SbGhPYURBQzhZZHdLSGdwWTV0YVJwZWlQR0lEU3RNWmZFeUZGRTA2QnlYU2pVWmF2ZzRtVkVnZGdtcG9Cc3JJeU5FYjZFNUltdjE0QzdndDQrQ3BvVnRXOC8yTUdBRURxL0FjU1FBZldsY0Jtb09UajdwMk9xaTVNQUJwSnZHQ21rU3M2d01FdWlyUUVQVmgwRWlkWTZRQlZSbG9TVGw4T1h4eER4dHh2cUdWWW9EUkx4YWtzZFYra0dRSE5FOVRObCtCbGlaRmNxSmllWUJVaDdqR0Q5NUh3YkdWS0NpN2tzR0w0Snl3Zm43WFY1MGJ3Vk14dGgzU1ZBYmJFZ0hGNUlZcFVFVFVIMTl2cW12ZC95QUF5K05qeC9FUUgyTTI1YnJvU09ESWwwSFFBMXhCbmNGVURCaUNrYkVRbHdTNGhDaDh4RlVFQVh4Tm1DQ1pFMHBKZUdqTEIrRWFXbHpJajdZc2ZHRUVxYzhpcTNHL2JDZE1rVU52THNtdmRHamRGVXNjZkphcS90UG41dUVGTEFWdFVKUTloazRUN3I4S2RpUXhzSEtFRUJnanoxZ0tQQTFXV1JGOHhDOUVGQTRnbnBsTlpxakZoa0xQczRBeFExN3ovWXdiNDZCTWc1ZmtqYnV3Q0tMQnhFQXpRNmVtL3NVZWM3U05GZXIrbnZIR1dvV3FCdm5SRndLaGRMRU13aGkwaVRVNllpTEdYTUtsZjZGaVkzcWppUndaSVhvTGxTTitDL1QvTHFvSFJ3YmlUOGZMdXEyTC96YTNISXIyQmc4b1NhQnFqRTRsS29BMXJQRzRtREJBWllqN1ZxbVdRc1RJWGhBNzNSOFVBbUozNVJBeEw1SlZzbkdaVnpmcy8xd0VheFpqTTNiTkVIcjF1QndnalFUSUFmbVppRS9OVnJIZTloVXgzSVU3Y2xDNFdOZXRsUGNuUzhnclhuSnU4dkpJaVBEcERxeW5NYVJkd1Q1aUNxNTF6NGhoSG5UUWRPbW9adGRTWmJJUGZZdDBZOXlwdkg1T1B1Sjhoa2hOSFBNRDVNbmovMEtmQjNuZERXQUxua2ZGMEx3d3c4K0xLcktoTG02ZDhhZURrYWdaUVoxeVRUOXdVbVdYbjYxaFVxNXIzZjg0QThQckN0L3hMUzZBZGJNVFUwalF3WnducjkrczYxMVpqVjRSMHMwc0dDQzVYaVFack9uZkJTVTNUSFQvbERGZ3lOd2xXdEVOaHdNbjZ6Z01FVTd2dHJNQXhEbXpXdVBNQWQwSUtMV1RqWkExeTNnZmRvVEdPMGN2NUs1L1BreDNmUlArb1kyekN5VTFjc0FVbU1DN0NRb29pREh3R0hlQTk2NEFTSE1BVSs0R1RheTBCdXFGQmFVNUg5V2pGTmVhV0RnYW9hOTcvT1FPc3BFVjB5VTk5QVdNWDhXdGtuanp2a05OM1ozSE9KczBNKzZRTGlPcUhaSUJ3NGRLMUIvZDdSbHFrbDFCa0hyMnFrS1R1K0twSzl1TUZqWEwwQjFNMDZMdUYvMWd2TlBkaEp0R1RsaUFiM2dmZGg3N1gvWFpERUVqTlFLSEVUUlV4Z1JmQit4NFpFYWdaQkJXT2lqRHdPMVF1Z2o5Z1FSTXpBVTJKazd2UUFYcnJNcW9nb3NXbHBWcDl0ZWI5SDIwRGg4T0lMMHR2NFB6U0c3aU1QUHN5elREUGxQNnNXMzhrQXpUdzdQVVZwdDNuUk04cTZ5QU84aUNRbXE2L21OTkxoQzVoMlZ4T0tIWVBXYklmNVNOa3ZBaHVURjhwd0dJSVZjQmNDcEROeGlvc0RCREN3dUFHbEN5dzg5SGQyN0h1ZDRiY1lBTEx5UWhiWUltU09qeWpIYnpQMkNnTDBHTllzVWY0TEhVYmFKV0xaQ1prNEFOQ1ZpSFZkMmhVTUpNQnJJQnhseGl3WTlhWHFLMEQ3WnIzZjFnVS9Pa3Bna2RuUDRzSHlQeUZRcFZHdHgzaFhwMVp3Umlyenp0RU1uNDlUTkhCcE9OR0hJVDNFR1hJci9jd3JsN2pzR3kvQkY1Y0FpRWhOQzBrYUhSMjM0ZEZTeGpxVlFuTkdETHB0Z3NZR3hlWVE0SnNvaEROR2QxZTkzdEdpTE5SMm1LYW1FbjVFaGRBY3JUS0o4ckpFVkxya1grQWg5NnBqS3FjakJaS2FYcGRiM2ZtNXJWT0IrV1ZKQndEeEpqc012L0kxWnIzZjFZVi9pVkxzdjBzSXNqbEZVZGZqbVVwL2UrTXYrNXVLZExXbk9nTS9hd0QvQ3plK2pGaUJRR1F6a3JBV1pnZGh3SUlpWGNBNVV6eWNrTGErbWl5VnhmSXFQSE82RmhpRGpQeTJQRjA3R1psRmcrN0hhSk5QS3BSdWkrUVFkSXFoQUt3SlNndU9ZdHFhbG41VU9zRklOVzdoZzVraG9CamVNcjZ0cFdncTdtd0ExUzFaTDRJaXFtcUVUeGVyWG0vOURpUkN3Wmdtb3ZLTlRpV0JwVEo4V2N4Z2NkVGpIN1V4NWlBTGxiZHlVWjY4dXpRWDF4SzBRRVptaWhUWWc5eHZ3emxUbGgycEYzbzhKQURJZmtPY2pQR2hXZkVKQU9XQ1dSOExpNEFXTy9ac1FjMW5nNU5pQnFvdC9jTWliZTQ1cU9CanQ2cjRwWUF4Q2ljTElQM3Zid3N3R2lFMVdnalBCZ01JT3QveGtQSmpiRUxpUFMvNFdvdUxZRnZVVTNxQjJGeHJYb2sxMnZlejFyVjdjQUFMTldFdlUyYXpzQWYwZ0RqdUl3S25rUlU4RmVPL29nVjh6SE1qbHJCU0t2TTArdWw2ZUdjV0FEY3RJUDhnU1o4ZHJ4QXdyS0pHS0hZVmFnQnlSa0U5Wk9kcEFhRVNTUkpvRXowZ0UvVURMRW44dVRsamQxS09KWjhEbEFNa1ExYWZleDRyYmdsU21MT3JOSnNBQmdKS1E2c0RXQXpRQWN6VklUdVpOYjVYVEtGUlpWaWFGeVZCSGY0bTl5RTVicWdPREN6d2EyYTk2ZXF2aVVWVHUvUjU0ZnhISWRSb1ErSWpOdTRBRG5NMFNlaXFrS3RmUkdkcVRLUDBOOEVtUW81QWJtcllEN2FDRUt4OWtaaFNySHJTSy9FVExFdENXNU1rcWJzZlNTV0xCRk5KM2xLWUE2QkdHVFpTd1c0RWVObTNVUVlndFR2RGhxV0crc2h2WWJGTGJOR01YZ1M0TkdFTUF2MzZ1cVNXQnVoczlKZkdNQ2lRZ2NSRXkyemh0aitWa1dGZGtudzArbW9ML2VQTkpVQ3Rnem1aTGxhODM3ZnFuQjcvTTV5alZFNktZb2p6VEFudEFuRzZpb3k2Q2lIeTlFM1pEQW5GRkNnT2tBRTJHTENPY2lVdURMSTBFU1pza1R0aVlCT1lLYktTc0NCOVpRakw0UzNUY2VHbkRKMFlwUi9EdG5MT1FxS0JwNGZMMi8zY3FJZUlhUHhOc3BzaW1KRFhVNnROKzhZWTYrck9kWXBEMVRpdDVWOU8yYVZjaHRvT1VETnljdWpCd2FIV0J2US85ODdxdy9WQWRLQ3RVME51cG9yR2lFenJaTGcrblJ0eGdFVXhHODVXYTdWdkQvVk5hNHhRZGhEMWhXQ0VKTkp1Q3dwcGNLMFhjNzVoQ0VrVUg1V29MQXBuRGh2eHNUdzZ2VlRHL3hFbHVJNi85c2hjVGliUUZUWG1EWU9oQU95MjU5VjR5RkxJY3UvZ0xnS0tRelVaUlplUEZXRGdhdUJlc2RrY2I3SUxBUEsvVGE5OEZZczFJekc0bVlnVndyeVNHTUNLd2JzSHF2RTJpZ0QvUHV2eGdNQUVJSVMrYUJxcGpXSXJRUU90VXVDbytGOG9iL0RjM095SEUrdG12ZnNqU3IzbkNDY2Jlekp5WUt6ZVF3WlRWd01Kc0FQaC9PUkxPeXNPRys4MTdFRXJSSnJqMWJQK2hsNXJGMHNFNldic3o0OGRDYVJkVkhqdVc1dlZQbTlxamYva3Y2aVJIM2dycUhlVTNYeEVhWEluQXl4WElJem92eXhUVWhkSExIQTRxMjhITDAyRkRkanhyQlU1U0tSVVVUMXIyQmdaWkpBWllELzNzbTNSRktMRFZjVzVDOW9weGc2MVNYQlR6RTFBYlVsUUR3eUpzVG1NSnR2U0ttWTRGalczWmJISmVZUU56WnR6QWFDaUhoY0hIa3ZLaUVESmRoRXNaSGZJYU5HS1Z3QjdRdHc3Y3QxbnpwR0Zzc2s1dW01dEpxb3NHUE5TZlJudzRwV0FoM2pyNWVVd2pEZlJ3MVVXbTFEcGtKcFVyc09GR2FsTnpmYVdDYXBBZTlVeFFabUMySVpFaHRMQlAwVWZZYTJjd2ZzZVc1QmMvOVJNOEFwazFxTUlTb3hzN2hqaUxtS0EyVkpjSUx4TWFoRmlvZ3MwZnh0T2dFYnA0WHZ2VEpWQ2JhL0pHd0xjL2o5blZQRThyQmdvVE14aUE0cTY5cWc5OG1IVUdwUy9VL1FLcTV3dU82RjVxOWZUSFF2dTRsNXF0Tm5tTUxybUxKc2JyRU9JU3VUa0gvSmxRNTJaTUFlYkR5Wjdvd2w0dUN6ZjRJRnQ0Y3RzOUE3Y2swUlMzd0c5azNJaDZlUHVKU0RBZEtsbCtZY2x3bzl1dTBZdWg3Yi9TOWpBSm03NHhyR3orVWJUYmlDZjlhbDE4c2E0S2RqNHF5elJMUGhxTkRCQnN1WUlRbWh4MCs4YjBhdW9JSWZlN2k5SWVDWjE5Q0wxbXd6NzBWdU5GU0RnV0NNN0R5RURCSzBTcXc5RU03MzFkN2ZDbExqenExaW1WTnppcGFlRXl4MlhnNnpGNjMwV1VISWlrM2QvdElyRGV4WXBEbVdOaGlsNTFaKytzRXVEQ2N3dk12ZmFzK0NkOVlkR2cxVDIrUHB1MXpLdjdMb3c2ZTc5T1NBT2NMQzJXd2VIMGQrekk1a0FOdlpZaFZ6R1Arc1RLcmppR0RhcE5EYU5jQUxuSFdVYUNaUHJySUY3R3ByU1VwRzZJTndwYXZDamRxMDRoR2tTVENyWldZaWhnQWROaEZoYWtBNU54WEx6MldoVzBKR3RRVktFanhWV1AvQVNuWE5zVFdoaFl3Q1R0K3BNc0EzaGhVdTk2SXBXZHFsNHhqbXdiQmsyRktaZjQxdTNuZUc0bFJwOEE4TDVoWVhlbHZsdWMzSlMzWTY4QTYrcjVUa0VFb2UxaE5oWFZ3NW5rUHN2OUtWRFY1RmVwai9LQU9ZYlF1cm1NUDROMlZhTGY3SkhETGZhTzBhNEltenpycUJOUENzbzNFVTM1bXFaS2RFSUZKeU9TM3J3SjBkdXNvMXpPSHNTQ2FIY2tGOWRHQzg1U0xMV1NZWENRVlp5VXJGeHpKS1BRRGZ4dkthdFBPdncvNXYxZy9qVmdZMWhDZW5EZ0psTGpoOFBIeThuNW5Jbmd3UTBYR0N0TlF6R05vVGNVZTBnN3VjcHRUK0xCaEEyQThTQUVXK1dkVTZHR0RkYTd6SWdEdkRsZGVMeW8rSGVZVDJ6NDdzRGlqTDhNb0s4Ri94Qmw3QytNdkVlZzVBWXlKUkc0TldEZkRFV1NQVFB4bUFRRjgySDhXSVFkVzZPanc1UU56QUhMcWJPZk9XZTBZVFBEZVQxREwyUlZNdXczTXVyNkErR01DNEtCUlo2a0d4OWdOTXVyRjcrcktTSk42QTkwSUFSSUFuTHhrQVkwMDM4cUpNWkc4TGJ3WVpUVERha01mcGFuY0dZT2pGQzZkbkdlS2xsUW9zdWp4UVRMTGZNVXlTaEFTREFmQjBlclEyS042YVJSOTY4OUttRDhIZ3dWc09oQ01salFIKzU0Nitaamc5SE05VXB0WWtJcGdrWUZId3VnWTQxMFRpck1rQW1MNElRR1ZqbUhhWndJUU9vTXdVWElhMmJCeTlsU2x0c3NCc1ZFclVINndtTTFGaFlVSFFVRUVDbVlDUUpKQ2dSbGtOc2d4Y2tRWVgyTjRHZkhISkFOUUFMWHdJNlpTWnlkNm9FZm0wUVVFcmZERmtqNTVBaG1aRm9RY0dmcklRaHRsSU84WUFIVWN4bWJHUit3VmpBQ0VJbUFPK0FpcExKSFF6NkMwOEdJb2xtWlB1aU55TWxMQkNmekFBSXZvR0RaenBES1Vsa1d3eUU1ZVlEUEFQR1NERGdpMWNnemhyN0VPcnVoTmxXWWNwb2Z3cTFUVVRyY1dyZU9CVTQ4RnR2QVhMOXE0TnorWDFSU1B2UmNSRjc5YktBQmI0Nnd3d1MrbTNZaUJzcDhEd0FDVzVtelBFdTBUVWxTRjZiUVlJRFJCNXp1SFRUQTIzcXFvRFl2WGhZaDFGZFoxZ0FJSndTUnVPcm1XL05BYndPZTZaRkcwN1JBWlE1Z0NrYUdLVnNNMTB6N3BNOHJCTSsxcXRBZnhmSHVNSzhQL3U0UGFSU1FaSnlqQ1cwaWViRHFDMkJNaWlERVUxcVE0dFVZbTlRNGxrejRpTXRZTWJJZE80SzB6NHFpZ09SajF5b3FwaHBRUWk1M0k0SER0YS93M2c4aEZXelk0dEFmYnBKSWJLWllxbUt0NDVQeUhDdENrcG9iMWRNa0NoQVg0MGRHcWpWWldSKzBZbCtYU2wxeWhWZ0pnVHJHeGk2MFZrWTlkZEt4bkFRcGpNNFlqZGkxcUN5QUJrRG0wNjFKUjJXeFlrd1RyQTJFNm9nVHdpZmVkWWluSUYrSDkzOU9GcWdKTkh6RjluZ05zU0lKYjFYU2NUdWpMTEF1YUF0S0ZsUkM3V2ppMUs5eFdWQ09aS1BWREhWeEhUSXozTmN5SjZHeDFQWXFOQUlZQkJZdFdrVHorcEY0a1VYaDhMZDdQUCtXU0F5NHBETlFOd2E4R3lHQmJvaGtiL0Y1VlVRS28weEdxTnBja3hHdy9KQU93aEhvTU1nT0EyTW9ET2NhWnA1YTJYd1FCZ2pqTytxTlFSeVdkeTFOTzRJOTFWeHZzVjRGK3pBaGtENEhzU3hqL1VxZmFIRWlEV0gyMGVWcEcxemJpMUJpZVhGdzVYL3VucEE1NWtJVEZZU25NdFNnWWd0RFFrZ0N3UmpYQUFWMDBtT2RyQUJrRHFEZUh0d0xjVjdtWUFnQ256Z2dFUzlaWTRqV0NBMUFCMVFIZXNXNVRoSWlhaGlwbUlPRHRpQU9VT0dRMWpzRHNUT3NFQXMyQUFvSmlRNUdYT1dOK0NBUWFXNnFKaDBXSXVsYXlYTTZySS9FWDFFYzhzVjRCanJBQjM5T0VqL01VRGx2NlVBYmdEV1RkbFZocHVpaGU5SXVwdGVwMEIwZ2VzK28zckFKQjZ3M0pOcUNJS1V3ZFluZlV4TGhnemgxcTNZMmdkRUg4eXdZcVpqeExWTjBja3kwNmk0bEMvL0xKa2dOQUFvVHdXR0Z3dndyUUVxQWlVc0JtaHN6Rmg1L242YzRUOEc5N3JnZ0g2YS90LzFaOGpqenNab0drUUc2dmFiVVJWRmZZZUN6TFB2WDd1RHhZOWNFZ2FBYmdDTUVYTXZPY0Z1bitoQThEOVhqTUFzVmtMb3BjanRKTHkwN2ZXNkwzQkFQUXlJVTQyVEJYTXZMWDJoQ2FYRElBZkduR3RZNEpWYytCSmpvejllb3JqNGk3dEZTNnRjRGMvVTluTDBITGFURHVxNFYxbkFHcUFxSk9MbW5vZkIydGtnQVJVekhlUXhJaTBIQVJMNStzYm0xdm16b0lCSHBteFNaVVprU0Q2WVg0TW1SN1ZmTmxUUVNmY250VktXUGt4S3VsUmphWXBnQWNWRi9WUkd3RjBEMEFHa0dMZXJBeUE4ZmdKQTlBUWVBbXNST1NRQ3VORFBha01XdkRCMmpBM0dBQStZT1FhYXlJTm5sVmYyR1hSNlBIeWtnRXNEVlZmdzNZYmdFY2p5Ukc1OHVNejdUUWFDRFBEbytSWkNPNlZTN0s4Q2VQM3NSR3BHTUN6UkpuTGxVbUNPbEN0MW14a0FOTjhRWEhNMDdOeDVtV2hvUUdXQ1pDa0dOMk4rUmlnektpaW9zdDlNQUNlaloxTE16aXJpQUFEMEtlRW9ZNVdMUFhIRkErc2JQMWFxWUJrQUMzbTNVdXd6MjBHT0MzUktnWUlTdmQyeEttejdqb00zUVl1Q3RERmRRWlF0MjNVRDZlZDE4TDllNTRSQTQ2Sm1nR1l6UTlMcFF3NHh1VnpVVElBUXJkRFJHdDhoWHFJYVExR3REZXRqa1VkSXV5SERoVUQ4Q1ZUQTF5c0lXc0pYMGdYZTZFRUlNb2ExYmk0cDZocXpabXFCcElVb3d1SEJFMEFxcWpJeDZVTkJCWmJNd0VnSXhZWUFDdDJMUFBreGxUMlMxT0FJTnlpT0N6TndNa0FLT2FkcUxQYkRPQUp1ZHNNNEJteTlFbWx5ZVc4RTdzQXl2QlJqdDlnQUI4NWdLaFNoMENXRHF4TFQ0aXlxeG1BR1hSUnFBUW1BQmtYcDViN2NXd0pvQ2ExbkZrTWU5SWZlUjVWeDg0NlJCcTg3eVNyR1NBMHdNK3lsaTJhNXhoZFJ2bEM4QkJLTW1PeXQwS2liYXVBZldmSkFIZ0xtZ0JrdG1NNXArWHVaRVpzQ0RycG53K1VBYnhjMXJOak1OREs3WDVoRHU1YnZvZktDSkJMd0k0V3E1OHpnUGlOR0s3NDZ4UWg4UHFwcTI0U0ZTSW5yemNaWVB5WThNcXQrbm9qYjRHK1d0VDdxSVBLSFJqUk1jTzVnbi83QlBqU2t3dkVMcjIxRmdtOW5GSzFRSWxCZlJiOGg0enJOOXdSN0VxeFlIbE5xYlFCSHRpSTcwOG45bjZXTm5ubElWaG5hWm1wVVRGZ0VoQ3F0UVI0QlNkQWdiQXhoNHpDQ0cyTk9ZVFlGRlM0enRqU3pMM1NTRWZPZFRVSDgvam5wUkVnR1lBRStSVURpQlJpQU12bEVyQ2dhYU5BOUhvT25TTHUveVlESkFRYUpZQU1zVWlabEJWL2FnYnd3aTltQXREQndab0pDYUt4SEc2VVVVK1h4L1hJZktGcUFXaUp4eW5RbndsL1pCalRvc0FSZnFRR3VHYkQ2MCtzV1NCa0tBRm1uRmJGc2g4cVFNa0FlRE5vNVRtNmJybUhnd0lKbGl5RllWR0RFaWFBMVpyeWh3eFFPbnlrcVVrd1YzdDQ3c3hUekZpUk1BTDhPUU5FVU9Da25kYkM2OGVYeUJENjBpM1p4ZTh4UU5PUVNXdU95SnBmTlFNd3FKZXJwZzZPTW9DbG55TURMTUFBbWUrWXRjeFlocldJVTRCSEVxV01UT3hrUWZuZHpqelpoUWE0UWtQR2pRNGErQnhMbWZzNnNPUmhWOC8xNUwzU1lRRU4xakc1WklDNTEyQTlOT2xub3BGSkhHN0lMU3ROeFJSRWVpeWV5RjJteHNTcUlnRFdBTERPcFJIZ1R4a0FPeEVyZm5ldFFyY3VJNnZNYWhEbHFDYmhFUFZlUy9UU1dnS0srdjdVcDNtWld0TVgxd29rYXpoaFlIL2xxNEcvYkRKRFNZZXBNdGc4TXBKbGVIY1pweERpZDZjQk9hMXlsdlBHVEt2dm9RR0NjOHpLMUdQekJMUkxPaHMrNVN5V3gzYUgwNnhrQUJnVDFEeFhNZ0RESFZReUlaTjRlcHBoWkFMOFNSVXQ1cURvbTdycytiWHRLZkdMRE1Cb01XQXhhaVBBNzBnQTVFSElWM1JiQk8yb3pnQmx6cnRCSkx0QUx3UnRweE1NbWxXaUxkVkJNQUE5d2dQaVlkMFYzSUJRdStDZkZnUFFJbUdhTVZLUnlLZ2xOdEd5S25wTC80NTJ0K0lVWml6N09nZEtsQVVjdUxpUm84bHFMbXBCb3I0MytrVkQ1VEtxVS9RT0xnMlpIREdvQ2FVU2lMQ2tFUkx6Tk5iSUFEQkNBa3FHT2o2SU54cU1GTXZvR2ZhWmlySDZoWWpTd0dKMEoyNEcvcDBsQUxrTVJIclNGbGYyYTdLMWJyclN1SVVDWnRvSEtGSWtzbkM3cDdma3lxNG9YVkc1UC8zVGZiZUtaSGYwKzBTZWJhRFQ5RkczR0VEb3RtUGtqNllKeXRSVmZYbEMwR2hkWk9MN1BFU3JNV3VJRXVteElwNnI5Qkcrb1Z4R2Z3Tm1RRFpuQUlweHlsdlB6NXErckMyelpPcGlRdWVIL0M2M2VrK3FUMXdtVkNVMkNvQ3hWMFljaHRFencwNWhGSmpFTHhUR1NDd0c5QlFnZ3N3TzlQOXVNQUM5bWl5YW40a3NJOThGY3IrQmc5dDVidzllRGJaTWtXaTQrRkZaZmRTc043RUV1R2twU011cFpNa1JvL0xzdFBRRk1GVzhZZVE3cGloQ0NVeFA3cUpzQlFQMGkxWXhnSlViV05FRkY0V1dzTTBIemVsVWV1RXVNeHZkMEJCbElXL2R6czVqWEdaQVU1SG0vRi8zaVFKNFpqSGFiNmo3eGY5c1Y4eHc1amVGRk55cndocWJ6Nnl5WTI3RDh0Yyt3WEdCeFRncHZvR0x3QTBHaUVSRFRVK1RDc1g4bTBiK2luVnA4M09iTFhPTGU2WUtncS9SRzhnek1JdWZLb1NvR1VDaDJ5WUJhSGJ2Vk9pMHgvUUdFbHJLR0ZNWkpnU2tkbm8ybXp3OHIyNlpzcU5xdGtDbnA5bngxOHNvdFpiYUE1Mnd2c2RaNVgrTVJLcmxMYkZ5dUp3dWF0T2l0MERkeFA4UzhPOFFRQ0V4N2RXSklkZ2JsQXl3bFRId0IxbkRNcUVuaksvM1g0WXJTeXpHVkJyQkpsd0ViakFBQmdQUlZHV2RpNm5ucklWNmtzV2NxOXozbkQ0SnZrWnZBTGJCTEg3cXdESkVVd21rWjRlS0NxdHoxT2kwb0ZJNE93aWNGbCt6Tktqc1oxZlpKeldGcUtnclc0NjhaWnpDS2FzbEVuL05Hc09RcDl3L0dFQWJUaVh3WGRrWWkxakwyOERLS2FHRWduaFpvK2xEOWI5V1lBaEVSb1cwZDhLN0hVVzBMTm9NQ0NTSFlLQTVESzFDMkd3QVpTSUQ4SUt5YXV6UEdJQWxHQUtNei9sSDg3ejBWOVVvckdJU3BrZFdnMDN3TlpvRHRpMStsS2RxTTh3bzRhaFExZFAxbm1WaldXMHJxVVIxNWp1Z0ltSXF4akhPSnBLcmFrb1NaTlhZVnMwQ3c3TmFJdkhYSk5oRFFCMjgzQmtDc2ZUbDZnYVpJYTJVdDRtVkF3bFJocGJBdDBmK0x5RktMSnFIczNDVDkxdE5aekFvV2plaGQ0bXhBK3JPUVNQRVJ5YzhJMDBCWUFBRzkyV0F4cFFSMVFIR0p6clU4bGRZbWVoZWVQNVI3YzR4MDFrTk5oSllWTUgreEhvVUJYNnh3TEdPb3A2SVc3SVlHYlNlUktlVlZDSjJsUEF2U0Rma3hlQnNTbkpsMDNtTm03WWFaeGlSVU1DTGJaWm9tRGtPZHZLQ2gzcDRQQWE4alA4NVVCUnRFL0oybk1BMWI0S1dhNUUyUVlvMHN3TjBEM2czL2dOZXJXd3Z4QmhlZmtTSnNvWDRKLzA1NUxXb0NuL3dnOVdTZ2huMzdPcUlsZUdxd1Bpcy9Qc1lkZGF5bUhOZEhkUExUSDREZk0xZUFqYWt0UXRuSzhLTjNXOEZEQStrM2RURlpNdWFsZ2J6QVRoMENTQXRzWDArUWt1UTY2VkZvN0dCaExQVjVIRm82RGlwTkNXMEZJV01vNWFwbHlKbHE1Q2l3S2lSRVNwa0hCbkpQNkhBa1JQZFhlRHVDSXFXSVNSWHM1Ry9TZXFXR0tQMkVmRFFIOFN4ME1qWktjMGV1UWE4UklCL3FZNEVxa3FiQTBjekd4QnNuNTVRNFFnNkJJTEl5MHpxZUkzcjNpbitRMmNDcjZjYklqclpPeDJqNXF0ZG5tVmo3YVFvejV1aTBNZ0U0UktFZTNUeXNSWDAwVnI2OXNUeEpZSEFPekhwRXRFUEpEeXFFMHNqQjVOWFo3TkFpcEtwQ1MwTkRGdzJERmdDUk12a0lMYmdGZW9BRWlOUXBjeEdBbUVsdkZCa3lrd2JuT1NFK3B1R1Zwbzk5c0VBSVRmdkMzVkVDZG9DNDI5T1BuOTlWaE95Q1FDK1lmQmpMcUMrQnVqTWlRS2laMHVta0l2aWlyeEFtSTJYVTdMbVNRcmlmQ2xGSWY5bThlMmlkRHBJc1VFQnk1SkFvSEprVDZnYlpHYzE2Wmg3QnlEdHIrOG9yVndrMnFxUm9wd1hkREJlYUNIY05IZHpqemMwTEJQZC9hSENBT0NNVXY2UTBONGdvcFBVMlRKVGZEL1R3Sm9BeUpSWGhka2pHU0JxSkhNc1hRSzF3Zmd6RnZDZGVUMW82OFhjcDVTa0dLZkFqM0ZYbFlRLzJtb1REL0FLL29ubHZrSm1seWNGWGxTSlZmeU42QWV3TzNyd0R4UVhVK1dqU1NjQWpVUUQxbTFDQTBaT3VzaStCWVVha0dNY1Q4am9wa2FLUm1ZMjdpR3JGbGxQblp5WlRhb3dzNzlHK1hFYXhPZEZLMHl5L1d4bHB2aUtBWTZ6U0hyM3FlMlNBZHB5TTZ0ZXV6S2pLcEhTbHJJWVlqZ0JvOVhmcXNpNWE4eWgxVUM0a2dpWGlHb2M0QlYrQWVoV0lyUHhOMC9TQ2d5UmN1WXgvczRnV0c0Rm9odUVTUG9ZNUZabjdoVUMwZGlVazI2MXlrUlFRR0Y2Nm1FM0xXY2NGNXZuWmh5YlNYQmR0Z0xPd2phUEdxT0ZtZjAxU25PSFJ5UmFaYXYvT0hpN3lRQVpEdkQ1LzBtN3dnQzViVW1kQkdYWDBlOEs1dWFkR3hxZnpyNmtWWDlISVRNa01hQTdXRldTZHhMaEVsR3RCK2hNOHd1dzVheVEyZkUzMFRvd25ta3Nsenl2U0VCMVBGbUF2UFlnSDFnQitnbjZERmd2WWhuWkU3S1paYnVjZE92ZWdLbmdpTUtNMU1OaFFpU052RFdvV2lsY3kvNUR0dEtmUlhvbURyR2dYcFlmVDVkWXRIVXdRT25RdU1VQU1pVVlMd2I2WDJNQUY1cXBrMkFKcGtFakZFek5JNkl0cGpPWHRNZjhXODZDL1lqV0hMR2pZOXdSbzU1RXFCSFZQQUJuR2lCcUhyOWZJYk96UGhPelZTcHAxRjhEdXk1VDBFRTBaUWpISUFxMG9TdnA0eGxPYWZ4UCtrVG03NXgwQ0EvaStaQ0xIanJrbGRTU0FRZ1VQVVRlVi9abisreFhIbTB3R0pCd0xURE9TSnFyQnVrVWo5Wk9xSnU2L1NVRFJKYVE1dU1tQTFCb1VpWHB1c1pQL1RNVVRFWC9hdlBxbnVGZnpiOGRkV0dPa0NmNHpqUmFMNzNBVmFQWE52MGxpTk4xcjNXRnpPYmZvRSttTEZlNmxNQU5iTHNJb3g2WVZ5QVpZRUVDZlJ3Yy9VSUd5UFlaREpDVGpsNk1ORHRONytuTWFETUFnYUphSElpVmdKazFqdzJlOGNxZnBkUWNSTWFPb0o3aERMaU9KQU1FaVpRYms5U2xJZklxQS9BelFmK3JERUJIZk9va1ErejVHZG5nQ2lZcytMN0R3T0xtRTUyVGsvREc5SmcvZS96OEt1aE1FcEFVeVFEMEs1dnJoL2JsQ3BWbGYxY0JhRW90NGJLU0FVeXJoN3hyZG5KVHl6WWFrZWdONldPdnhGVTNDY1FRc2FMV285SUhma3pIWmh3TFlGQnp1R0FBeEIwSUhpQklDazhBMjg1UnUrL3AwSXpjeWpwRnFtcGZMRC8rOGxnd1FNcm9hcjBvMHEvOGxBRnVTZ0I3UktHVGRIS0pCS1FPZUdJRFQvY2IzTnM4dDR5cFJoYnZSZU1SUTE1YUZVVk93ZDRqT0ZLY1R5eE1FNjNGQUlqVFpKeld5L1NYRE1BYzdnVURVS3RYU0RwcWltbTF6bTFHb29OQXE2aWJTbTJmOUxHNnY1WkNvSngwa1JMK3liMDVGaFRRTCtST25xOVBYMFhzQXJMbVdWTXB4NkVvNDFvUlFFVUhhS1hYUVRWb3ZVeXhrMXdtcWEvM3BnN0FIQXMvV1FJcVBmT1FlWll4UWFJNmJzNXN2Q3RudC83VXYrekFxNDJwbjRnRFhyczRuV2VnZGdldHhnbUEvbDVVZlB3ckJ2Z3dMaXNad0xYNlFkOWliVFZJTm5uTXhyQ2IyUVhHb2VSc2grVFZUbnZTeVJIUDgySE9mbjc2WVg2VkFaNmZISVlGRG5OUHdLdUQwREFVbFFSWXBRUkl2UTdwNWlrdjR1YXhrNnlnVzlkN3lRQ1d6b0FSZ2I5Z0FDb2xUVmE0ajByWjRGd1BobU4xMG95TndRZ2Q1bllBZTE4bnZETUM1RWs0ejBodFg3YVNBUWdCMmJFa2Vja0FEdytYRExDd0Y1dFVERUN0dnQrSHQ5cjNYWHdFQ0xRdHNJZSt6ZEdQc1kvRE1KWUVWYXhLbEJiVVpaSGdoWDR2R2FDVzBpVURtSk1DMStBNGEyMm5Eb0FhU3dSTWxEVGREUzRpcUtxZFpKRDZlaThaUUcySjJBWjZQcE9mTVFCZmFPQVY3aU50QjBVQWJ1SFZFUklmSVNSQVdvMUkzZStsVUNDRUFieXd6RHp1UElzRkg4dFdXYnh2NXhBUUdzYVNBYmJTTGhuQXd6cVRBVUtyTnptcUtueXZaZ0RRSjBjSWhvNTdzbXpmZFBlYW9KNy8zQW5LdWhVeVJGY1pRRm9CZ2RnZzhTdUVuOHdXMXp6RzlTNUFpd0cyNEhndXA0QW9KM1Z5SjFtUytpTjZyekdBdEQyaDQvRHR3eEwwY1lNQktKSTZSYUdha3BnakZ3QlFoNkVLdTRxSGVXN01qYmkxQjg4VlFJelFNdzdNNEQ4cDRTU1c2aklaUUJjU0JzSFRqa3JhanRBdUdjQmVxTTBBalRRbzhKb0NwbWt4Z0h4Z0FUN1YvSVRPeTc0QWlQWmJNVUFBT2ZTQ1FyNWxVYUJDWXFBbHVGRlRhZHFISkM0MzBVRWZhSjlSLzZPZ1hpbW5uRHBzTmFrWFYzdjV5K3kyU0hZSTN6NFFWQitYRXNDU0VqRFhnUkhjWkJJSEIyU0dQSS9DMi9ncVh3UThodmFOUVcraStYWlJpUjJ4ZFBEM2M2eGJ0VHFSZlRXNmVvM1IzNklHOXNrQUE3WUxCcUFFU2dhZ2pSVTZvTXhRUmF2RHJob01BTFUrd2Flbm8zOEllWWtBakpvQmtoYlVjTENhKzFOZkM1MEJVN3JwTXgyUkJ6VWtjdHNHTHlRQXQ1a09teTJvOTJ5Skl3YkpBSVRlaDZNblRtNzNKZ05FNG5DV3BrQmt6dnFLTDBBWFp6TEFVQ3RocFFTRHhDTVdIaVQxZVk3UGNyVXdkbm9Lbm5Ra2hiNi92b2xiNHpRVDQ2a0ZLZFhndE93U2VTYXlrQWlyWXpKQVAxcWJBU2lCa2dIb3FSWWRjRzA2SUQwcnpnQm9LbWVjUHZLVWl3VmczMmFBSEZJdlAxZXdIZDZYay9URDJxRlB3Qm5UZEZFdEpsT1UyQUMwSzNqTWtGTXNHa3FTc0dHcTVjblhlbUZOenNUaHk4aVh1THJHQUZDZHdRQ3doWGRTNHRHUFpLSFZET3YxRkpUVFFHNWlHbUpsaUNCdFNHQlpueHBwOGJ3TFVQbHlYM1RwQ3NVYnNRZ0lOZjhDOHRwaUFOczFwakRtcms2R3krRHptaXloS0JIckJPbzcrSFIybkFVZjg5SEtsRGVYZ0h1T2hqN1QySTVodWJXMWR0NFQrak9uWGdvQUdvRnFoTHUwekVjVTFLdmxWTDVNbVl1bUlQV3QzdXoyR2hTVDRWVUdNSThGb2FYbmJwbWhJOURRaC9rYzh0em15TGU3eERwcVl1WUNvR1FMZW1yN01GaEQ1bGU2WklEcytoUzVxZk1aNXQzM2FnbUlkbWd6QUNubkgrVjJIYkVBd2U3V28yVGtJMHhFWXkzV2h4RHR6NVdNQ3dCOG1tMGxNSGZxcGhKUjljYXIxWlBVMnNwVHBIaXV3aUJ5cHI2TDlFTDRsTXFRNzNLS0l1T1hocURYVExTZXZaVzRPS20yQ3dUVkxRYlFLTTlQMnNJck5aSlpIYVZIcVFNNkl6OTFZUksxZWZ0S0xIb2FmSngyTEJWMC9BVURIRXlaQ0tXeFVBTFpMaGtBajg4TldWaDJzV3dBUGtuSm5Ub0FZQ3VzMEFicTBOU0I1ekprcDJJQUtuM0ZqdXlUUWdtT2dwb0J3b0VjbFVjMllUZnc1STIvWWdCdEtEVFBOQnV0bTZjWE5BbmxpLzJ5cFJsa1pBZ3c4UzgvWTRDK0laNWJES0F5a3VnTUt4dkUvR0pscnFRUFZ3SEdudFBZQ3RhRi90YjVEUWFBS0ZkVlBGU3hjaHVJZG9VQmh0QlBtcG9CRUs3TWY5b01RTHVMY2ZLeXZRQ2d2YmFzcnpRRXBaZXc3dzNxU1lzQklvUUU5SzhFd0dwb1lOMWZMZ0h6ZVZIQmF0cDJCdEh6V1RFQTFmMzlzcjAzQ0RxcWIvOG1BOEJqMGFOU3NtSlNPMTZZT2d5RXBDMXM5SW5SRmtTcUllN1o2ZWtEcE8zWFN3QzdXS2FYMXJqcWZhVmRaUUNqWHNrQU8rQ04xSllHUU5LZ3hRQ3hxL1VFQkpOSUUxR1lWTXRKUjFOdzdkeEpCbmZKa0RyREEwcGRnUDZXVWRlTmZZVHJ0NVRBSzBrNWRtVUZxOXhpZUx2aStNV0dQNnB2SGFLbFNWQjU4VEx2Y1dRSm85MEIwZGVKNUpjTEtRSllNaDlwZ1cwQktJeEVNQU5RZ3k0WjRPUGpEeG1Bd3BocXdHMVRjRElBQVduYzIxck9NTk1Cc1JVa29yeGdnR2UzQk5NbXl4djBWdEVxZ3RJeTV2YXYwcmxERXdVMHg1SUJFS3lJbUViN1lLb05OQUpKcXVXTGJhRDdtcEttWlI3N2k0Q1FNdlFqS1N3bVAyZUFLZ0FsR0lCNU13dVJIQXdnbHB1MEF6QnpGcE5VSXlxa2xoekFtcVZKVklaNXZVaEQ0Q3lETHdJNSsrc2xnRjJZamFFRy9BNEQyQVQyTUNkbURZUVhFTzRBNXBRb0dRQkdlZTVuSXkxUWU4U0tTZGNVcUpobDRkeUpCSVM2WGxVTWdMaCtGT1NxMDNUYUJqcTljeC9oZk5INGh6b3hWMVN5U05SOHRtU0Frc0tvMlVTVWFEWWppOUVNUUszRXdTUURZQnljQWNvbGI0bFY3R0xwaUtnb21FOTZoUnZsblZpcUxLQWZnWE8vWmdDNmcyMUIrUTEzOENKZFZNNEE3NnFYd2d0b1ltQm9XV1g0Q0YvVFhlZExwYTR0TTI5NHgyWlJFZ242OUlLNm15L1REdU5HUEs4UUJCVEJ1L1pkaEp5eWpNdWNMWk9qbHdVVHZaYk5QbEh6MlJ5bjJDa3AvSU1DNS9reUNIV0pHSHNBdFJqZll5czU4YUdsS1hnVTNrOFMreW9EY0FHZ0V6RGRnbVVBcGwrUzFWWitnd0dlU3pYZ3R4aUF0Z2ljRkttYTVUUWhEKzFvMDBoWUNRS1pXWDVSMmxpcWxnd1F1M3I2eDdGdFpJeTZ3dzdURjhEUUo2WnZSeWsxU2dCQTNnZVJudlBiQWFKc1dVdTB5R0RKL1dnUjR6Z3Evc1AwQUttVHdtaFc5Q1JiRm05QnZMUWpZcUNpSmo2MFlBQnBkZnpEVlFiUWw0Sm1TQ2NnNjI4emJNcmlkM09HWkkzYW9IWkNxVnRkUnM0Rjh6MFQzWnNNd092SzRvV214WVcxaVpOb3ZkS1p4RW9FdEQ4NmdmelAyTmNQdk9XK3FacDBpWW81SHMyNXd4eVVrUlJrNDFJdnBvMThMQ0I1UlNFdkg5QXZBa1NqT1dacVZoZE1ST0VqT2JzVnNPZWh6aVExS1h4QzJ4OGRKWm9OeThneElyY2YwV3A4YURKQUk4MExZcE5mcnpHQXU1ZDg3ZmVObElFOEVTUmN6aENxeE1rQWc0UlN0N3VBTy9URDVVM3dkeDdJNG9VNjlDNFdZeEtkTzlyWHNXY1FRTzRFeWovZkdMRlROL1puakZ5aVlxd0lvVFRDRG9rMXhJNm9LSDhqeUlGdktHWGZaU2svTTZGckkwQ1VMV3FKbmxvRkU0L0FSckd3WERhQ0hVaHFRbzBJUkpydHM0aGFrQnYzVHNabzQwT1RBYmppUlF3azlQMXJEQkQyM2o2Y3QweGR4OGhHRktpdFo0alhxUDBxU0VFb2RidEw1MmNjTG0rQ3YvTkFGaS8wdnpIRFloSU44WTlaTFJ4QVRnSzlGQUJmS25Wc2FUdXRKMTBXZTJVVjB6MWhoOFFhbmhKQkNyc3JHM2dsaTNrQzJDaE5vU3NBaUhyekltbDF3Y1Fab0hVbmh5ZG1vODBIcENhQjg0OWxXYm14ZVBJbWw0WkxmT2pkK0dZVU5FcUlaaDJrSVltV3FyNHNBRGx0M2VtemI4K1EvZEYwb2lCRlFxbGJYYm9oaWNQbFRmQzNIeWlMRitKdkY0c3hpWjZJdkZhNWpmd1lnZXF0QUw0Y0xiYjBuc1NraTExOXdMS3RqaTloaDRvMTNJeUpXd3Fray9VbzRZaUM0encwS1R6MnlvaDFlNVQveHN2c1ZnVnduMmhSbEJjRlp0RTVJREd1TC9uSHRLemQrcGF5SjVYREsvalF1L0Z0SE1RUDM4cVdtRUk2T0R4eEc5THJsZHArZTRaWWJjdHZLQ0lrUlVLcDkxV1h2SDRlTG04eUxhK0w0b1hsMzBDWXpqaUpyRTR2Y0d0ZmVPeTdFMmlaZndxbEtDL3I2V1V0ZmxkbFJqRXpBWkFrTkNyL3lJdllnd2NCaWFoY0VlK1FSVVNYSVFzQzdib3N5eVFXYUZGMDV2OHk1YkhYdEk0L3dsU2hSQ3kwajJwNzJNYUgzaTB2a1ZEM1JlSGxzaFlpWWR1SnRaSlpCdVJwQXVXd2NpV09lcXlDUkxvaTgwR1NZb2wxYTdrc3V4SkpxaWZuVFFwZ3RnRkcwWWhUNDVSaGNlVUNjYjIwUXVDYkFQMXVlQkt4aW81dnl4YTEyREZsUzRRNGNhSllDeElBZDMvL0Zud1owQmxEaU1xUHhFOFdyTTl5b21CWWFnTUoraTNMSkk0THRDZzY4Yjh1N25KWHIyRzUvQ09ObFJhVTdmazNLZ05SR3g5Nk43dUJoV1RaNXFJYWFoUnJENkNmYmJNNUdvNFVSN0htQkZWakRtSWNjN0lZaGg0L09PMGVIVlp0aDR1VEhXaU1LZWF6S3FlWDNEcXJRSFBxcy9Rb2JlQXMwVTZ3RlY0UDYyMFVta2I1V3NvUHJwVXNLT3BLbUkwUDZaWUFPTkVQbmhMajV0QVpQU1NiYlo1aWpxRmM2U2lDZFY4Uis0RkFaV2VaUkJpd0FpM3F1TzNFd1lWZFQ4TnlPMUd4Z0R0YkRYblNTSlorbWZuM0lpMFdHV0IvRFEyTnJTTXpWbVE5NUtYVk9BOXNJRFQ4bEllb2g1MjB0ekswbUlNNjNjZzBiMUJ4dktTLzAwWi9nSVBReUdIV2hadnNBVXYyV2ZYbTFIdmpuR1FDSlpsZXFWZWJHcVh6a3V3ZEZmMzM5STk3cVhtajlXeWNnSGczeE5wc2x6TlpaalRvTm1FQkN0VGREb3piRURNUlBWMG1VZWpTcEIrNnJvcGlndFBDSWhCcG9xb3lpUVZhZE5MSi81V2pSYTRyaHVVeUV4bDJzQXdzbklRSnNvYVNDa0ttWmdBdno0eG1jaEtKRjBCbTZKWlJSQlkwenVMUEtzTHh5L0hnKys5YStnTlRIeldaV1p3UUptTWlySitkTmtvTnpCV2h6OUhYR0hTWjFBRWw1UTVFbnBKNmtZekU2OEVPWTJlZDNWcVFsRHNGWkg3YWUwVlJVb3JQUFhsQ0cyQkVyYURveHNPcHNzeW9FQW5tQnBhZ3NSeW1FYmtCNlF2MWVHVnBWQVlEYytxbExVTDE2U3JqbFJyL2FOYTRqektKNmZIREVmSEc1UCtDZkZERWFkWSt3OFdKYlMrWXh1TFArTDlnaXdTVEk5eTRjZ2ZjeWE0TmVvZlFpRE1xcUs5ZFNDeUc5WTAycENybDJENTBOZnhxNjMvSTh4SnpzT3VUUmJqRUVOWkRwNDFPRDhhQ2ZCZGFwcWM4ZDByS1lxZTlYYmtNaHdHZnN0Q09vaDVzcDlVOVdwVkZhMlpSVVJTVU9qTThCQ21wbUJRbkM0cENRVkxFSWwyMG1Ma0ZERjhJMk1LNHJkZW92TkZqSWlXNjlkM2V0ZGFzUzR0V3pydW04Y3FCeksxcFU1UTUrWmh6MnFBV3hCYzVDTUxpYmdkTllGcmtPUjdHck9VTWVHNmtrNmpDMzA5a0FHWWZmQUtSTUtOWUNEd1Q3aXdKRGNWY0NUZ0Y1akozYXl6TTI5b0JNaytRejhIT2dKUEZGcit6SmhZbGJVWXJuU3M2dXJwVDluMG1KZ0prUFBPUXJWaEhhY1FjOFpxYnphUFJveDZzRUxYZG5VVnJRR29qNnR4cnBIUVRSTTdhbFFnYjB5L3drR3FXR1VXcXV6SWF3d2lZRENEVHk2S2grc2dSdklnQVVSNXRGaXFFMjFrdkYrSjNTZ1pvV01jbzhvNmpBdG1uUGlaalJjY1pyRFhRZnhqU3JFS0ZYSkpRaE1nZFJOK244UXFyaC85N3AyTUV3ZW1heU5qMHBpZWhKSHN3anNKQ2tHWUJxTkluUnJJRU0yQXVLL01ON1Z0UmszazM1MHJGdExETlhMRjNscHB4MEVBdzRSNnNSa0FOQmpxSmx5WnRNS3M0dlRJbG9SejJlckR3cjlYZGN5OWFRMVFESzRvaVppUkNSQ010cGR3M0M0cDZ6WUlzTTdwOS9Sa0RLTVVCU3BFYXZ2Z0R0QmJaN0FEVkJua1hHWmhPQnBCWG9BNFFaUkk3aGJleXNRcGtIeVFxUVNvYjV1RTg5Q3RjQnN1RnkxUHRYM2loSWJUQjN3emhSL1NHV3dJeHNxSlpJQ3MyNk1ZMFFMSkduaTFmQlhTVDNjQ2ttWWZlT1NtUkxBRmNoUjFCWWNDTnhDYytCMEZTUTg2ejhFNWp0T25QOVFmdWFCbnlzazZEYlpDNTVQV0Z2QXQxMmpVSCs0TTBOYis3VW84ZTl1enVvQnVZSjA1R1J6eUJWSjREczZ4ZE9VaHNoUFlpZVhoUlp2VCtwd3pRRE00b1U4bHNxa1FWNWRHeU1tSlUxdXlVcVg4NnlGUEIybTJZelNnVG83SE9xM1ZrSGk4S21CN0tnSXlzNEpZMVpFK004RWVBdDhkY3FRQUFBMkNNR3BFaFFpUUQ0RE84ZWlVUzFaQVZKbGNNOU0yM1pqUVUzZFdPRFlVaWhyZWtxOXhtN29CejhFRFVtZWpFNXNuWE5MS1dudm5nVkp0YWpreG5BQ2FFQTJNTHRWallobjlrckk0ZUJ0a3kwRnJKeCs2bUY5R0FTV3BRYU5mV2xGR3RNV0UvV1FXdXEvejNTd1pBenZ4aGx5VmFwYU45VktZWWI0aG54dldaL0d0ck5wZWk3TnBhbytYbVFEc29VUWxVVFo4OGlJcEpYZFlRaHJCZ3NSRVZGeVgralR0OUxBSEtBQmk2eklyOVlxa0FWV0VwWDVTSm5mbWpaQUEvQkR0VUZTd1RjNUExbVkxVndSYldMVk1MQUxuUFB1VzJKMzB4QnZDVWtKRzlHb1Z0RUVFdTFKdFR5QUZ4N1VWclZDeFM3aHJqZ3JXNmlmQkNyOEZjaG9IYXZnL1ZIb1c1RmlVRDZQMEc4anlMTWZzcEErQTZ2ZVRYUjJzR01FRUhsZHE5Q3BqTlhvRU1SYUVIT3JWWkNLS0l5a29CNEFFOFJhV2lONmF4S2hRQXV6OURBc2dBY3ZNTVhrZTVhTTFkb1dRcGlqVDNyekpBbG5PL2h5Q09jRGx1UUdJT3JoY2hXVDFVQ2hRVGxqSEZKN0lSNzdTaEZLQW5oYVdqVndTTmdjU3NRR0FyWGxkN1dRMHdnWlZSdkxqRTJqajRRUVdFWjlaWHRrY3V0YmswWndEcHhmMUVUVlBlc0gzSi93a0RtSlVLeG1GNjY1am0zMm9MTlFoMDcvVWR0WFh5cUN5VW5jaXczRndEbEdGTVdJQlZRZ0VJcTY1dkE5VjBBTDBqc21KajNkUGtLTEZXUVdlREY3MWRza0VQVVQwZ0hhcUEyVWVIVnAyUkN0N1Zrcktpc1FBMkF5VDlpaVBNbEw5WTRIOXdINCtXOElCalpoaTRyRUx4RE9yVzNRMWJvdTJjZGVqbWNDQytESVFwSlJGa3BMMVFMaEdwM2N0ZHdOOW5BRlEwTThjaXpSdExMbGFpOHFBb3RLTHRmRm1QRlVEM0hjVWFFRm4yKzQxWENDSTgwVlNaanJYU0VQU21BbitsSTh1czJJeTRXUGRDV1lrYUJKY1orM1gzRE85RGh0TmVDNWtmYUFXOWVZUWJZbUpCUmdrUjRFK01SNEVCakFqQTh0aDlXT05lZ1BNR0VndXJGaCtUWVVYbDJ6bm9oTzJTQWNMTjhSS3lDcGpTeGlXQWJYSlVHY0pUcllyNS94RUQ3R0ZqVjdPajVabWJHZUZVbkZ2Q2cwTXpaMzUybU5JQzFEWXZ0TUNNUTF5d1FNUFNnMFV0UjhxNnQ4N1lKVEFBbkQxTTB3UDdGK3BBcW9Va3FBSk85QkRFaTdKTk1CRkVRUDNBUVRQMTFGUUIwSXZMeWxMTmx2U1FkYnJJQUhOcHlyRGFYQUtnaUJLQjN4OExiejluQUhaSGF6TUE3Yk5SaWg2RkxBQXVTc0N4bVdPWkxBYno3LytLQVJnc0JITVp6Q2hqRitjTEZLT09XWjJaQ2tEN1hyRVB6QnBoVVRtT0RLQ2FFMXRUTVlDcTBEbDhRa2J1NVF1SUNCZUZhMVY3WU9pREg5MXRLU1ZzTGlrakFnQkZkR3NHR0RBZldLdFN3Ym5VQVZ6c1dHM0tPVkZaMFhhWFMwQjdaV2lLMmh0YnM1ZTdEakFNZTFQb0M2SmxaTFhZKzBpbDNkRXBhTDBKVDRWdStkY1k0TFRKdFJiQnZyNFJCRzA2QXpVdGNWYlBNaXgzRUxzN1RQZW9FUllyZ0ROQVAxck5BSzBxb09PdzA3Y1o0T01hQTVpTndaeHF6STFhQUdmejFvT0dOa3RjVnQwUVNtY3d3T1V1Z0lzTHkxczZTS3pEaGxVNTlicmhKRk42UkRmdUkrcXA1ZStMcmQxS09tTnZsNHVWZ2tHY0FiSlhDN29HQXp4eEh5bHNPai84UFFaZzhYbGY2R2UrRWZ5a09kaVVjcTh3NmFobXFuY1VEYjRHcUxnakJ0cWRGOW5PSlFOY3hPclNVL2Q3REpBWnluMDlHQmJRK1FUWnFBRElxZmxPbWx2MUhabVJ2RHZqdEdvN1FJWFdHbUdiQ1pycWpuT0hERFNRMU54VXdNN0NpY0lKcER2K2pwb1JiZTBMNjhCZ1Y5Z0I3bG1sY0cwSnc1Z3hUdjNyQXk0TVBRZHhaZDBVemZEeEZ4bUFueG51T3FyMHR2U0FzYjJLTmdQT3BZbXdFT0p5cWFRcG9DeWNNU084YTFTbjZLUVNlSlVCek1IMzhIc01NSzBNdzZnVFZDYlBlSFJvbkFxQWM4L2xVcHE1bGNUeXVwNjJnMHlVREdDUlgxbEM3bnhXcTRGUVJLbTM2MVVXSDFTdEtzQldVOWF6c3dwVmMrYytHMVZGaEtFYVZWRXYrN3ltTGJIdk1zU3huWWZLUUd6SmQybGc3aDkrbndFV1BGcmFWMElpRXdSZ0ZyY3NNNmNLT1VzUU5nMDNnWnptOUExUEVNUHNsVmFZRVNUTDBCd1p3SkNOUHRuakRRYUFULy94TnhrZ01wVGo4ZTBRMGl6L0ttT0hGY0NtWm1BbVlRZWc3WWJtV3daSm1DL0E0ejNOencxRHU2YlZVVHZ1WFAxdXRQallIbTdOMHMrSGhpcVJMWlJLdjRWMW44TVQ0ZFdvRGg0RXphMVNIMTRmVWJ1VFdlUU9UZTBpZ3RaRTg3WXF2VWxpUVBjQzRHSE8zbllWVFVqanRENTZMSWZPdk1ld3VadXhwd0FMeURRcHFpck9pb3pKcjBadVZsb0J2WXZDR2VLVGp4Q21iUENMbzRMMEZRWkFVTmZ2TWdEMUMvNnFHZUF4QzBDcmFWSU4rSE9ibWtHQy9ocHlXTXN4ciszakFqYWhJME13TE1zajY5US9vRXI5b0FIMWxGU3dCSklrSUZSVWZWUEFQQ3ZjQUN3ZTNkeFQxdFdvM04yMGh0OVhUWUprY0hNSHIwc25zYnhrT3BtOWRManlJTk1XRHdud2tLZDRmSHJXMGFVMFZxNW9sZlBiejlMcmh2ZzZkTERJRk1tTWQ0MjZLNTdtLzZrc0xiV3ZDMmV3eWtPZHJMOE1DNzlrZ0svdlAyV0FqMnNNOFBvV0plQ0JGTTBxVTdveWdQN2FOWWVQSEp2c01EUE1zNFZCQmtzZGFhYlVneSszeHlsUjFrVElzbFZSNGFZbkxicXhoZkpxVkRzUGdqYlg4UWkxM0ZLN1pJVVVpK1BwZEJrbWd0Rm5LRU9VRGdlcjFKVTNHUERGU3NaMGsrdVZSQzIyeXZrSm9kTHZEbXhBQVJaNGVmTjRRRXh6cjVxUWFmNnp0SlFIUjVhbE5MTDJBZ3R2R1Aydk04Q1BQMktBN1hVR0lNS0ZtU1A3TmdjaDI3aWt3NVBKbWR5M0RDUnBaMnFCWWFPR0VkQTduUkdwSjdZS1RvbXFLb3BYZmR2dmczN2F1dDQ5SzZ0UjBmRnlRc2hKeEJRNWRHQUc2Y2x5TzdwMElsQk1IaGVCWml3ejhZNUhWWlUzQk9GSDRzRlJINEV5R1VKWng5WXc3aVVpYnhSWlVPeXloY3dlL3V3Qlc2d3d4RCtNNUkrSWhrWGhqQWp4d2Z2eW9jUVI3Vms4OHZjWTRQRW1Bd2pCdy9SYTZRQm4yM043Z2drejNiTEsxTVp0MCt1ZHkrRUJhbjlHSnQwbUc3VUpqK0tTSnZRQjlmQW42eU9WZFpHaTZ0dTNWN2paZWpXcmw2cWFsVTArQmtFemZOQm9HTkFCQzBYMGdsc3kvRk1sVEJscXluREpUVm04SkFxRDJSK0k4VWJBTVNZaGhURW1ZNVNYWXBrY2h4OU9vMElIcVV0TUFNRG5SQUJGcExyaC9wVGFDT3Z5d2tUT2hndzJucGpZQWY5OEszNlI1V04vaXdIeVI4MEExSkk5OW13SkdBbTJLMnV6dW5taHh4NUZxQ1hQTVl2WFN1WnlWQVhzREpnaXJLNm5FVm5HR01mSk9tTk92V2ZTTktOM3RiSHFtelNqRkJVZ0dLdThtbFVVYm5yaGVzZ0FZcU9oVXhVTkViRFdJOU5ON2duS1JMQzVOaWRSWGE5SXorSGZYdXdJSEVDRVNDN0xHVk5yT3pBK0s4NkhZQzhrL1N4L1FIUkFwQ1VpaG5GYnVSV1FIeGE5eWh3dmlsNTErdjh2R1NDRFZzcU5xeWhyWmZKSzFHK0FVR1dzcmI2d1JyTkxKMmV5aUdsR1hMS2lUdjRIR1U4L21ZUGpvcGFZMVdjU2dZZEk5S3h3c3dHTk5scU1heE1qclRUYU1GbzhRWFNza0lMcWlrNUxOQkNVTGFmYkh2RnlJRDNvSWo4VDBWVVVCQU9oTExvbFhMMHBobWNVeW16c1prVTFTaHRJSGg3WVUra2plWFY2eC95ZUdid0sxSjVBNTNCLzY1a2hQaFpPMCt0aEUyTUdJSkFmQmNUL0FnUE1HV2FHZUVzWW5lYWVWeHgyQW1wRVQxNWxTbWVnb1NhZllrN3JENDI1aGgzeUVneUx2V21pV3dQU003V3A1YzMrRXNyek9FakdFemlmZ0JkaGJEc21HNEdTV0M3Y0ZUdlRCckhhQm1WYU1TMytwRG9Rc2pZTGdwRlFpRzVoVEl0dnhxM1VIb1J5Mlo0dE1oVW5VZDhvSXFObm1NUysyd3VGazFydCtONU5QNk1xcHJ6WE1BRStDMmw3WVc2QUFwRWNRT2ovK3d4d0tPTUI2TzFqdlhzbTJUdnRHWEM1WTVMT0hKS25CNHkrSVVYQkFaZ2FMb2Z4USttUE9YQTU3a0l3MW5nTDZZelVTSWw4emJWNHhnVTZpWFRLQW9ic3dpS2dYZERnR0VvQkJDVi9HNGoza2hOWlRzL2RYN1Bja09zSXZJZjRzb3JQVGpVYUdxSXlLa0tjSUpTam1lRUNncnZESGNmek1BNXNvRXlIdlFmVEd6K1FuNDN4akdMbk9QY1lXMG42MGFCcG1sbVUzSVlCNEwvL0JmMkRBZWJ6RmdPRU9TT2hSY2tBN3UyTGV2ZEVSbU1DbTRZRzdneWhxQUEvM1gydy90NHN3QWhFNURta2VVdzBiQTJHOVdVT2pWbzNJYmhFdm1hL2x6Wk1Jcm5TVnlCMTBDTW5RVE95T3ZRc3U4N2Y5TGUzRXpPQW9iZjRQcFcwVkh1NTdhYzVzYWo1em1OcGFsUVFMVmtEa0lKb0E1bzcxS3puMEFFVjJ6ekFHR0MzK0RyRkdFUmpNMXdOeFlPbVREckhyUldoOWcwMjJpWUJXRHhlNlg4SEMvUW9yVXhnZ0RwZlJTWWtvVGU4NDdYck1iSmJtQmF0cEFyVmJtbm9td0YyUW1Gc3VYTjAvcHQycE5UbVdsM1dJVnVpaFVabTZsRVU0Y3VxNllZNkl2STErNzI0S1F2dkVKakZJc2JjeWk4QjNFZmc0eW9DTFBDUitSdEM5RUliVFFsbmhNUnBPVk9vOHE0Yk0rOHl1b1ZwSnJFZlhnK0txSXBzZElVaU9xZFJheGFpMjNwK0lGRUE5SEpsZWpQZDJrWUNqWjE2a21DR0x3dmZteFZGTjlCNnhKeEFzdjRMK2NFQW04S0VjYyswQUhXK0NneXlSMDd3QjBlYjBNQTMxcVczbFpSeW5TQVR0MDRrL2NkcHFmSnFsSWsyUkUyL1lxZHRlKzhvd21jMFFtcGl5dTFuMEMwc2NtNzhnY1VBSmpVNXljdVlPOTNRQTVnQjh5RjVUdGUxcC9QaEl0amVqNGFPdzRTem15czJra1Z2ZlNnWW9JcU4wZlEweFpsc2pLbDBMNVA1SFFZcmNhSFIvY2UwckN4ZjlPNHhsWWp4ZGlWUHFDMEJrNHdwNXdldUFMWXdzZXlKU29vRVlXaEM3RFJoQ0VXUXpLUE9WeEVKU2ZRSDYyMnlkajJzak56YmpGVldoNVpzR0VOQVRLbUhqUUV0TktSc1BnOWtmSXg2MHRMcHRqWnlJSVMyQjV2MGhFYXczcjlCdGpQeVgvdmNKaitOQXVmTm5GbWJFZFp1UUpBNTVvd0Z2U2dvZ1lXb2N2L2lZUlJrZ0xaRnlndEdpRWFGRThkWEdLQi9sUUdzdXVDNm41cFVMQUZ6QW9NaW9uZWdkU1NhQWtEQWlqMXJKdS9BSkdUZThpNGphVUZ0MEJ4a3B1blJCTjZVUGx1bjhEOGxBM3lmWWxlSnlZZThBTkM1Y25mamlwYit3Qkg4ZU1kR0t5c0VRODdIUG5rRGFMQmhnM0VKeXRFeGFlazI3TnBMa3RId0pGYXlDcGFMc010Qzc0WDFtTUdSdXBaWmF2OE5qUDJZS05xZGF5MXdPWjdDa3Q3aWhaQU4yWEFqSUVIT2NOVjNhWkhsVmxFS3lvdFJJMXNaQ3REMEtKd2p1MXViQWVZRkExZ1luT1ZSZDZGdVNRMVgrTTlUWG5FRjBlSkdaNndEa1lEUDN3VitDMERSTWNFSHJyakpUOHlmN2RaTm1DaHZ6KzFrd3ZtSzFEREpBTFlCZm1jYjR3VERkRWFuSmptWW9tMW10RlhSbEFIVENPYXI3Vmpmd1FKN0ZxdEFWZ2psbm51OGpNeHRZeC80ZStBMmdVNXVPWnNCcW5UWERNWUhuaG11bVI0Q3Q1aXorTWJXK0lTSnBkYURodkNvZERTdXFRTzU5RlZ6SkNPRFBlNXgzbmNHZ0l0WEtlRlpmVjBMcWxLMDhqb3hkT28vdWRaaXBnSXpsQXlRMm5jNmhOVmJSUkVEa3FGMWF3WUFVUlc1Qm9paGlYaStDd1luQUZmbWFnSVh1aVlNaTZYSlVKK24wS0JjRXlONVF3Q2dpY0RIcXB4RjJYVVJVRkc5ckF6SzBrU044eXcwOTZyL2thZHNCZ09VcXpLQ2RZKy92NEw4cWhaU2FkaEEvT003a1FTV1Zpc0E4TlJmUUNxNngvMXc4S3pab0RYbXVzbnBZVGgybGZZRDVZck1DNm9zQWZkems5WUtWQTFkMDBDRmdCcjU3UXdROFpjSnAwRlAyYm9SSGFscGFKdEZMN1R0Z09HU0FlUXhhNGptQ3diQXNxUy9zdUk0YzU1eENTQlJYV1ZaV1FVbDE4aThuQUpOYWFtNGJjeUdvUlpMU3RyRTZaLzJSb2lOV2NHK1FnQWtBK1NlRjBzcnlpVHI3QzBNeW5CT0hPbUdoTHVLcHB3SE9uMU5mTU1NYThvQW5qcDI4bmM3cHFMWnB3eEhxT3JBZXFNR2FVV21kSWQwTUdDa2tWbk1ucUplRStRQWRTT3VoT3VGQjhZYUF5ZzdZR2xPYTRVNUVNa0FqSHNNQmtoQVRaKzB0SjdlT3Y0ckFac2FYbEFvYzNNb0JISTBHSUFaY20wWGdFZDRVanE2bERFeHRKVTV6M0p0ZkxKTnk0ZzRaOWZJTUxsaHQyNHBVaWRTTzJuK2ZWUWZRV2plUjBobHBHc1MrcHNBWUl2TW4yNnhzRlNIa1I2RzNacnAyclh1N2tnK3dveTVlRUViSy9qbTFGQnZMRUR5UHlnMmVLVGlQRUpzT3JzVmNybDJPdGhZK3FUdDkzUWJXOGhPNlRsN1R4WWtRMkw1ZmcyZ1h2YzlLbkp6alFFWUFyUklCckM0eDFFd0FOUnNQQXQyN2F6aHM0aUdKekxFUkQxWW1lRlhWRzhpcnJtN2w4bWJzV011cGdHYmlxMnBrNnpLZVpaRTlmd1ZoR3REbm9lVzlzV3RWSFRCUFFocWsrWmU2MTduTFBKVzZrOXA2UU1xR0VDdWpUMHZhK21vdFVhN2RWaGdVQWJUeW8wZHBhdWJLWFBuZ0FPNFkxckRVenV4eEdvYjd1MEFNbFdsUERBOE1tTlUrQzQwV1FLb0Zqbm1wVGNYVHhYYXUxWFBlNnk2QzM1anppY0Q2T0xlUk5rS1IrSlhERUR4M29zbFlLenZ0azBHZUdkZGp4NytnUnJZRHFYbE50RFZGWUxOTFpCN3hXbE4rNTdFRmFNajdMZGJCanNXeGlrbG1iUmxtZk5zR1VUMUREWkU4WVZHaHNrdEJLVXhKYnRJYmZ4cjAxeE9RcE0vcFNrUC9NRGZiZm9qUXdncGFDdW1aZVZCdHc1d3IyRjhxWFRUN3JYV1RiRFNuMHBLNUttZkszYWY1WWU1dHdQSVZDT3RZbU9FSkRZU0JDSzlGTytXWFdYWHFJcGt6Mks1Y0dER3JDZHJ0bG9WM3BFRFZxQVVlbGVVaXRhUTNaNGg2VElnVHhHaVpBQVo2NUlCd0pmZ0luUVIvbEdIMHVJMUlCUXBuV0hoWi9Gc1hSTTNidUdueVYrWmxudHB3TjVMSHdJU1NVcWp3NThLZWhLVmVWZTRsNlpHaHJ4SGNPUXJCMVJkcEhiUUhFUkhBOG4vOHc5YitvQ2lZUXRYeFBYQUdqYzdiYkxiNWlDeXZ2aWNVdzdJVkFhc0dRMnNyMHdON3VXWVhHVUE4c3VSM0JpSkpKWW0vN0RUSnNwTzZJK0NTOWluSys5b0hWNmljY3lVYnNSdUhPTk03SEdEVmNHeEVRNDdiT1o2TWNMdG1EYWozM2hCVGhGbk5RTkVrR3JtNEdpRjBuSk9rNjFET2lOZlg2UnNWU0tuZHkrOWdSaFJ1dm94djBneW04aTUvMHFpTWhoZ0V6UCt1TmQyaEJBWGNzclZ4NktMMVA0blNLNU56c05mUW5MN2liOUovMnptZnd3R3dNZVk3WWNxcXFtNDZGWXlNS1B6UUxVdkNGN3Nqb21mUXJuMXdUbUQ1QVk5NjF3UE1zczEwa0ljUHFWemJmR1FCSU1nYk5CWWdxWHVsTU4ybHRyRnQ0RnJlU0ZpbkxFTjVPWncwTVNtbnlBaUJBOHlFN3Z0S1JiU3NURGxQUmlnSHd4QW1HZ25rbUxXb2JTYzAxellRanJ2cVlBcmlhdmdPMjYvcHR4R3kwRVFkYlB4V1N3MEt5ZXlkaWRScWJSUmJSTzY1dXcybXJhN1NHMzhDMWNmaUI0azE1L1M4YTgwK29DeU1kRXRHV0FZbWptN1Z6QW9lOVlYc3lxREExampoOEJLMWZPRjJoQUR6YnJjK0VJc1dQQ1crOGM2U2pPWnNtZkxMRUk0bU5vKzUxd3B1REU4S0tyWWtsU3dZTFZCcGMrVzE0Y1IwT2pxTmNSRzZNc3dxMC9icWlCZjRqbStaeHNxYkN3WUhqRFJiaVJTakZEYW5OT3hwWFlLTTdSZ3ltbU5qR2pXMEpHU0d6N1EwTVFSanVjVGVXK3RGdVJjSWI1cmVZNi9iVWF6aDExVit4ZFMvbDl2LzBYN0YvK1pDNUQwWi9Pc24yQUFsM1dQR0ROclVYeGdRcm1PS004RkszM0RKUGYrd3EyZWlvRkZLMlhHV25IVm9SamN2M0lwYnl4NjIzMFptakZjYko5Wk1aY2J3eWoveWIwOE1QeXNMa2ZuWTJmSGZsektrRS9zcDBlbFhWRS9KSE44VTJIano4eUdtVWt4bDlkaWRuUnFwblRtQmt2OUhKaldYejV4WnlRMEpiZWFSRk1SNXl5T2laemRTVlFvN2g2NWsyczQvZmlVNlZWWDJaVE9SbmVTL0gvKzUzL1E4ejlCL213Y1dLdjBxdnZkdEZWekI0ekdtV01lU3dYVWZKRCtqSU1BL2JrTUZBd2d2eWdBTUtxQWluQXA3M3VRZUNBMUZMZllndzVBMngwYXJheGtWS1ZaSkRreFA4WXcrNW1DN05VeSt5RWhJejBMcEd6a3I0cVFESVRrUmpiTXQweUtxU2JzcW1HU2Y1WFMrZjhuNzJ4YjRnaUNJQndTQVNFU0NMN2xJQndZRHdJbjkvLy9YcWI3cWJxYTJmc1VSQkN0alh0dWFRQ3M3ZGwrbTk0U3FCM3dQV1pOOExYdnJ5SktSTlJGMDhVVFB5NkdESTJrK1NicnVTR1RoZ2tWUkhQaE5DUS9EZlIzeUw4Z2YycnRIazFXRW5xSmc4bEIxdlAvbVRlOTFsKzRhNlI1QXR4TmcvTUcxUzVBaFFlMTJudW1UTCtMVkE0WkNiM2ErMzNyRitsaTd3SzNTYXVLaERUeTlxcUt0dUZUNi9kb3o5UVdCU2JZeloyeURLbnQrZ1lmS21RT1M4NFJ4US9MNnV4MWU0NjJEZ2k5cUx1MTRnS0dIRDZxeW9kRDM2em5lb2EzZVMvVUNuUStiUVhQOXhjM1FPUDV2czVMMzArUWlRbmUwL0hrTzRCd3NZMy9DWGN2b3pQN0ZpQThjSUt0bnRCMy9kcEg3WUpsUkI5N2d2SDRkdGo3STBjNkR3WTg5cHVhQmFuSm9zTFQ3ZU5LRmhWSUJDNkZielRCT0E0YjVRd1hPL3BNOE1WejJIQXJyVlpuVkczOStKWUxmTHM2RFVUY2FGb2ZrVEdHREcwVUw3Y3Q2L2xSeG8wNVgxREJsLzlDMldrZUFSaWMrMzRDdWNhVTMvSC9mQWM0RVhSZnI4MVZQcENhcFpPQWQvVXo3WURUeUlYSFVlOFlwMWJiUXpvTHVKcDZCd05nRTBWYVJtNnlzWVU3WVBBMzRlMlhNVTY2cmc4NFowanJDY1p3ck94TVJ1M1dVajVJcHNtY2MxaHhaTWFVSFc0bDJ0S0JnaHQxaXh1UVppV2krYWFCUHBzNVRzOXdZT05lcVZlZ0ZOMDRnVTdaUGk1STZxWDExL3ZlMDRDV0pNQzF4bWU3REZEdC81NUtJSC9oYWd6ejBhQlB0MnlSRUtQUEc4S2dZellEOTF2WHRzWm9DNC9oVHZGMHUxODRaNjJzSmhpTEs5aGIyL05LQ0Q0VHFPWElLbzNDOGNmV2FNdUhFSEhyNThockdiRmpzK2lwYzJHY28zZ2hVaS9VNjFEeDNvRENRUGVodXUrSGpPeFhYR1BYMFhzU1gzbUN5MXRQa3dhazExNDkrZGRFaUw5MEE2akIvL3ZJTVhndzZkU24zN3NvdklvSFA1TTc1ZlNib2haaDFJYkhMM05vaFpET2pEY2c0ZXl0SlFCTE1zMUsreFIzRy9QR1pHRml2c0tnV2JsUnQzVkZValMxaUJZZHFTZTAyYVB2MjBJWkh5ZUNjSXZjOTlOeVZ6NU5yakd2d2JxdG1XNGRDMUNDWVl0d0NnRzhXV0h2Vm9BdWJZMnRRdlJlNmRVb1k5UytSeE1mV0xTZEVFdDBiVGpkRFJEdC9BRFdrOXA4L0xJSVdVd29ZaXR4ZjdlSjB6bmMxdUdUWmNiV2JiT3I1LzBpbGZzNjJpSnVIUEdnV0w2Z0E2N2ZIclZ4WWs0RkUvRFNUekNuZ3RzMVZwYWw5TzgyTkFiOGFraEFTb0dkK0VnelVOY0VyanpHaU1LRzJrTHg1VmkwazlxR09FUCs5NFdCT296YThtdmVwQkNCNjREMG85eVhqU1c0Qmk4NW9TcVdiWnZGaGpGcnJteTdJbEEzcXI0M0REdmRiUExlUGFpZlFLMW8ybDFRYWpuTFVrWEFicUx0RWQ4YUV6STFBeEFFdXdHY25YZ2FCNi8wR0hxelNWRzU3cXphVFV6d1N1NURDblVZTmRQd2M5NGtVVFRhMWtlNFhGN20wbzQyWlovcXdJSWxzVlc5dEdxKzNqMVNEbmJsUzYrTTdXYXVlb2FUdWEvWk9wU0QxWWxDSlA2TmdXYlo1WnAySUV5UmtGbTNRQy80WFFaRGJBU1hzN1VreEV4c0RUNkhkSFUrSkx5MGhRWDhHa3c0UW11a3R2c1d4TnF4WlowV1EvNDRPQnd5Uk9aSGRjdyt1UDZrL1VqYTQ3RWJ4cXRPRlB5QnVRcm0va0N0MXBnb01xb3pxRi9ha3pJWUtiTExOZHYvZGJYM1pFbGlvWW1rUXlkUFp0aUFROVEvY2JCY3JrQjkyektuandxVXB2SlZoczN1MFhLdHRDUFJlend3V3B5RDhnZGNCU014VHNjWlh2aThFck84LzhtQ1gxeEFiV1BKaHlXNlhnMGI4ZWJITVdGVWFQUGJKQWx4RlRBSlZ6U1d2Z0w1UHdlNmQweVZML2JLbHhIamhNM3R4T09hQnpmVkw0d2VZUDFaKzlITHVzN1ZiTXBnUVg0MWNEd2RBdlVGYkZvS2xYQmJQbjdaUzVLaWk3Uk5KdERpRWpoLytvbXd2cEJMUWRjNURFc1R3MjRPeTNSckJMUVRXLzZzeExvRnN1Qmozb0dVVGNva0JJWnRiclZTYVlTT0syOFcvR3Z2REZZYmlHRWdhZ2h0b2Fla2wzYWhwMXdLWWZ2L3YxZGtXWDZhUUMrRndKcnFPUmY3YWx2eFdxTnhDNkp2RGVqK1cweDhwRnhDRUlTakVKZnBJMVhpQjMvQWQyek1xWWZZQ0FNUzhBTmlOamNta2RqUWYrVzVsK09YWWZRdlUxbllvVTdhS1FSQjN2Y1VpMW1QNVpkbi9kTWZ6bFFkM3NoWXNBUlN3R2V5cDBDQkN6SHVUSVRIUmVYQ2E4aGczZ1NmODBPenBvWjlaWUNYeUJ5dE80NUl6QklJU0YweXRiOWNpTEhaSHpyM2hldHYxYW9BUVpBUk10MmNGVkxSdERnUDNQYTlCU052S1FHZnkrNGpiT3lpSy9BL2FLUGdoZUpWNUQwcEw2eGxFM2ZXRTN1RGIxSmV4dUUrcjRxdTNBTXBkRGZFQ2RkZ0FUeE5NSi94Q0FCOGd5RklPeHExQUo0aEw0Qk9GdmdabEwwaDJYbDNXMDJzSjRCL2VLTWRqc0lmNlFRclUzekJ3a1pmeGpXaTVwNVRZZGhxZm1JOXNRWUZzbkF3a1ZjMnNVTGdOK2l1RzBqeHNOWEVlMlFGQ2dwREJOdk0yTmpKNi9pT2xicTVqblkyeXdQNi9LKzJBQXF2ZE5MTnZHM1p5RElFZnFmQThycklMSk5vaHlQQUNoUVVoNEp2Wm5HWUQ0SGY1TEs1UkE4OEQ3aFdBQ2hRQkFsZDA1RkhYZUQzRmlPYkYwWGRpZWF4bnRqYlNoUzJsYVZkaDduWE5mcEQ0R2NqV2hTVitVcldFd3RSL0FCdHd6WW0rSXhTbHdBQUFBQkpSVTVFcmtKZ2dnPT1gO1xyXG4gIHJldHVybiBpbWFnZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZudCgpe1xyXG4gIHJldHVybiBgaW5mbyBmYWNlPVwiUm9ib3RvXCIgc2l6ZT0xOTIgYm9sZD0wIGl0YWxpYz0wIGNoYXJzZXQ9XCJcIiB1bmljb2RlPTEgc3RyZXRjaEg9MTAwIHNtb290aD0xIGFhPTEgcGFkZGluZz0yNCwyNCwyNCwyNCBzcGFjaW5nPTEyLDEyIG91dGxpbmU9MFxyXG5jb21tb24gbGluZUhlaWdodD0xOTIgYmFzZT0xNTIgc2NhbGVXPTMwNzIgc2NhbGVIPTE1MzYgcGFnZXM9MSBwYWNrZWQ9MCBhbHBoYUNobmw9MCByZWRDaG5sPTQgZ3JlZW5DaG5sPTQgYmx1ZUNobmw9NFxyXG5wYWdlIGlkPTAgZmlsZT1cInJvYm90b18wLnBuZ1wiXHJcbmNoYXJzIGNvdW50PTE5NFxyXG5jaGFyIGlkPTAgICAgeD02MzYgICB5PTE0MzggIHdpZHRoPTQ4ICAgIGhlaWdodD00OSAgICB4b2Zmc2V0PS0yNCAgIHlvZmZzZXQ9MTY3ICAgeGFkdmFuY2U9MCAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MiAgICB4PTU3NiAgIHk9MTQzOCAgd2lkdGg9NDggICAgaGVpZ2h0PTQ5ICAgIHhvZmZzZXQ9LTI0ICAgeW9mZnNldD0xNjcgICB4YWR2YW5jZT0wICAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMyAgIHg9NDUwICAgeT0xNDM5ICB3aWR0aD01MSAgICBoZWlnaHQ9NDkgICAgeG9mZnNldD0tMjUgICB5b2Zmc2V0PTE2NyAgIHhhZHZhbmNlPTQwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTMyICAgeD0yOTg3ICB5PTEyNDIgIHdpZHRoPTUxICAgIGhlaWdodD00OSAgICB4b2Zmc2V0PS0yNSAgIHlvZmZzZXQ9MTY3ICAgeGFkdmFuY2U9NDAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MzMgICB4PTE3MTQgIHk9NzY5ICAgd2lkdGg9NjYgICAgaGVpZ2h0PTE2MyAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT00MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0zNCAgIHg9MTk5OSAgeT0xMjYzICB3aWR0aD04MSAgICBoZWlnaHQ9ODcgICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTggICAgIHhhZHZhbmNlPTUxICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTM1ICAgeD0xMjE0ICB5PTk1MSAgIHdpZHRoPTEzNiAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0xNSAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9OTkgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MzYgICB4PTE2MTAgIHk9MCAgICAgd2lkdGg9MTIyICAgaGVpZ2h0PTE5NiAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0tNCAgICB4YWR2YW5jZT05MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0zNyAgIHg9MTM0MSAgeT01OTUgICB3aWR0aD0xNTIgICBoZWlnaHQ9MTY1ICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTExNyAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTM4ICAgeD0xNjU4ICB5PTU5MiAgIHdpZHRoPTE0MSAgIGhlaWdodD0xNjUgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9OTkgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MzkgICB4PTIwOTIgIHk9MTI2MyAgd2lkdGg9NjIgICAgaGVpZ2h0PTg1ICAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT0yOCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD00MCAgIHg9MTAzICAgeT0wICAgICB3aWR0aD05MCAgICBoZWlnaHQ9MjEzICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTAgICAgIHhhZHZhbmNlPTU1ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTQxICAgeD0wICAgICB5PTAgICAgIHdpZHRoPTkxICAgIGhlaWdodD0yMTMgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9MCAgICAgeGFkdmFuY2U9NTYgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NDIgICB4PTY2NCAgIHk9MTI5NCAgd2lkdGg9MTE0ICAgaGVpZ2h0PTExNCAgIHhvZmZzZXQ9LTIzICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT02OSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD00MyAgIHg9MCAgICAgeT0xMzE3ICB3aWR0aD0xMjggICBoZWlnaHQ9MTI5ICAgeG9mZnNldD0tMTkgICB5b2Zmc2V0PTM0ICAgIHhhZHZhbmNlPTkxICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTQ0ICAgeD0xOTE2ICB5PTEyNjQgIHdpZHRoPTcxICAgIGhlaWdodD04OCAgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9MTExICAgeGFkdmFuY2U9MzEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NDUgICB4PTIzMyAgIHk9MTQ1NyAgd2lkdGg9ODggICAgaGVpZ2h0PTYwICAgIHhvZmZzZXQ9LTIyICAgeW9mZnNldD03NCAgICB4YWR2YW5jZT00NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD00NiAgIHg9MjgyOCAgeT0xMjQ1ICB3aWR0aD02OCAgICBoZWlnaHQ9NjUgICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTExMiAgIHhhZHZhbmNlPTQyICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTQ3ICAgeD0wICAgICB5PTQyOSAgIHdpZHRoPTEwOSAgIGhlaWdodD0xNzIgICB4b2Zmc2V0PS0yMyAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9NjYgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NDggICB4PTIzOTIgIHk9NTgzICAgd2lkdGg9MTIyICAgaGVpZ2h0PTE2NSAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT05MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD00OSAgIHg9MTEyICAgeT0xMTQzICB3aWR0aD05MyAgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMTEgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTkwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTUwICAgeD0xNDQzICB5PTc3MiAgIHdpZHRoPTEyNiAgIGhlaWdodD0xNjMgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9OTAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NTEgICB4PTI2NjAgIHk9NTc1ICAgd2lkdGg9MTIxICAgaGVpZ2h0PTE2NSAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT05MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD01MiAgIHg9MTc5NCAgeT05NDMgICB3aWR0aD0xMzIgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMjEgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTkwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTUzICAgeD01MzkgICB5PTc3OSAgIHdpZHRoPTEyMSAgIGhlaWdodD0xNjQgICB4b2Zmc2V0PS0xMyAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9OTAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NTQgICB4PTQwNiAgIHk9Nzc5ICAgd2lkdGg9MTIxICAgaGVpZ2h0PTE2NCAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT05MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD01NSAgIHg9MjA4MiAgeT05NDEgICB3aWR0aD0xMjcgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMTkgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTkwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTU2ICAgeD0yNTI2ICB5PTU4MSAgIHdpZHRoPTEyMiAgIGhlaWdodD0xNjUgICB4b2Zmc2V0PS0xNiAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9OTAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NTcgICB4PTE1ODEgIHk9NzcxICAgd2lkdGg9MTIxICAgaGVpZ2h0PTE2MyAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT05MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD01OCAgIHg9MjM4MyAgeT0xMTEzICB3aWR0aD02NyAgICBoZWlnaHQ9MTM0ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTQzICAgIHhhZHZhbmNlPTM5ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTU5ICAgeD0zNzIgICB5PTExNDAgIHdpZHRoPTczICAgIGhlaWdodD0xNTYgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9NDMgICAgeGFkdmFuY2U9MzQgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NjAgICB4PTUzOSAgIHk9MTMwNyAgd2lkdGg9MTEzICAgaGVpZ2h0PTExOSAgIHhvZmZzZXQ9LTE5ICAgeW9mZnNldD00MiAgICB4YWR2YW5jZT04MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD02MSAgIHg9MTY4OCAgeT0xMjY5ICB3aWR0aD0xMTUgICBoZWlnaHQ9OTMgICAgeG9mZnNldD0tMTMgICB5b2Zmc2V0PTUxICAgIHhhZHZhbmNlPTg4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTYyICAgeD00MTEgICB5PTEzMDggIHdpZHRoPTExNiAgIGhlaWdodD0xMTkgICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9ODQgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NjMgICB4PTgwMCAgIHk9Nzc5ICAgd2lkdGg9MTEzICAgaGVpZ2h0PTE2NCAgIHhvZmZzZXQ9LTE5ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT03NiAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD02NCAgIHg9MTQyMSAgeT0wICAgICB3aWR0aD0xNzcgICBoZWlnaHQ9MTk2ICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PTE2ICAgIHhhZHZhbmNlPTE0NCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTY1ICAgeD0yNzA4ICB5PTc1MiAgIHdpZHRoPTE1MCAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0yMyAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9MTA0ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NjYgICB4PTIyMjEgIHk9OTM5ICAgd2lkdGg9MTI3ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xMDAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD02NyAgIHg9MTgxMSAgeT01OTIgICB3aWR0aD0xMzcgICBoZWlnaHQ9MTY1ICAgeG9mZnNldD0tMTUgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTY4ICAgeD0xNjUwICB5PTk0NiAgIHdpZHRoPTEzMiAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0xMiAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9MTA1ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NjkgICB4PTI0OTYgIHk9OTM0ICAgd2lkdGg9MTIyICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT05MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD03MCAgIHg9MjYzMCAgeT05MzIgICB3aWR0aD0xMjAgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMTIgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTg4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTcxICAgeD0xOTYwICB5PTU5MCAgIHdpZHRoPTEzNyAgIGhlaWdodD0xNjUgICB4b2Zmc2V0PS0xNSAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9MTA5ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NzIgICB4PTkxNiAgIHk9OTU1ICAgd2lkdGg9MTM3ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xMTQgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD03MyAgIHg9Mjk2ICAgeT0xMTQyICB3aWR0aD02NCAgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMTAgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTQ0ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTc0ICAgeD0yNzIgICB5PTc5MCAgIHdpZHRoPTEyMiAgIGhlaWdodD0xNjQgICB4b2Zmc2V0PS0yMSAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9ODggICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NzUgICB4PTc2NyAgIHk9OTU1ICAgd2lkdGg9MTM3ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xMDAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD03NiAgIHg9Mjc2MiAgeT05MjYgICB3aWR0aD0xMTkgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMTIgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTg2ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTc3ICAgeD0yMTk3ICB5PTc2NSAgIHdpZHRoPTE2MyAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0xMiAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9MTQwICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9NzggICB4PTEwNjUgIHk9OTUyICAgd2lkdGg9MTM3ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xMTQgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD03OSAgIHg9MTUwNSAgeT01OTQgICB3aWR0aD0xNDEgICBoZWlnaHQ9MTY1ICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTExMCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTgwICAgeD0xOTM4ICB5PTk0MyAgIHdpZHRoPTEzMiAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0xMiAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9MTAxICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9ODEgICB4PTIyMjIgIHk9MjA3ICAgd2lkdGg9MTQxICAgaGVpZ2h0PTE4MyAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT0xMTAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD04MiAgIHg9MTM2MiAgeT05NDkgICB3aWR0aD0xMzIgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMTEgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTk5ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTgzICAgeD0yMTA5ICB5PTU4OCAgIHdpZHRoPTEzMiAgIGhlaWdodD0xNjUgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9OTUgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9ODQgICB4PTYxNyAgIHk9OTU1ICAgd2lkdGg9MTM4ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTIxICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT05NSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD04NSAgIHg9MTI4ICAgeT03OTIgICB3aWR0aD0xMzIgICBoZWlnaHQ9MTY0ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTg2ICAgeD0yODcwICB5PTc0OSAgIHdpZHRoPTE0NyAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9MTAyICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9ODcgICB4PTIwMDIgIHk9NzY3ICAgd2lkdGg9MTgzICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTIwICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xNDIgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD04OCAgIHg9MzEyICAgeT05NjYgICB3aWR0aD0xNDEgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMjAgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTEwMCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTg5ICAgeD0xNTcgICB5PTk2OCAgIHdpZHRoPTE0MyAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0yNCAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9OTYgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9OTAgICB4PTE1MDYgIHk9OTQ3ICAgd2lkdGg9MTMyICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTE4ICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT05NiAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD05MSAgIHg9NjU4ICAgeT0wICAgICB3aWR0aD03OSAgICBoZWlnaHQ9MjAyICAgeG9mZnNldD0tMTMgICB5b2Zmc2V0PS0yICAgIHhhZHZhbmNlPTQyICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTkyICAgeD0yOTQ1ICB5PTIwNCAgIHdpZHRoPTExMSAgIGhlaWdodD0xNzIgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9NjYgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9OTMgICB4PTU2NyAgIHk9MCAgICAgd2lkdGg9NzkgICAgaGVpZ2h0PTIwMiAgIHhvZmZzZXQ9LTI0ICAgeW9mZnNldD0tMiAgICB4YWR2YW5jZT00MiAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD05NCAgIHg9MTU3MCAgeT0xMjcxICB3aWR0aD0xMDYgICBoZWlnaHQ9MTA1ICAgeG9mZnNldD0tMjAgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTY3ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTk1ICAgeD0wICAgICB5PTE0NTggIHdpZHRoPTEyMSAgIGhlaWdodD02MCAgICB4b2Zmc2V0PS0yNCAgIHlvZmZzZXQ9MTI4ICAgeGFkdmFuY2U9NzIgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9OTYgICB4PTI2MjIgIHk9MTI1OCAgd2lkdGg9ODIgICAgaGVpZ2h0PTcxICAgIHhvZmZzZXQ9LTIwICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT00OSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD05NyAgIHg9MTU4NSAgeT0xMTIxICB3aWR0aD0xMTkgICBoZWlnaHQ9MTM2ICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PTQyICAgIHhhZHZhbmNlPTg3ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTk4ICAgeD02NzcgICB5PTQxOCAgIHdpZHRoPTEyMSAgIGhlaWdodD0xNzAgICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9OTAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9OTkgICB4PTE0NTMgIHk9MTEyMyAgd2lkdGg9MTIwICAgaGVpZ2h0PTEzNiAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD00MiAgICB4YWR2YW5jZT04NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMDAgIHg9MTIwOSAgeT00MTMgICB3aWR0aD0xMjAgICBoZWlnaHQ9MTcwICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTggICAgIHhhZHZhbmNlPTkwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTEwMSAgeD0xMzIwICB5PTExMjUgIHdpZHRoPTEyMSAgIGhlaWdodD0xMzYgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9ODUgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTAyICB4PTE4NjYgIHk9NDA4ICAgd2lkdGg9MTAxICAgaGVpZ2h0PTE3MCAgIHhvZmZzZXQ9LTIwICAgeW9mZnNldD02ICAgICB4YWR2YW5jZT01NiAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMDMgIHg9MTM0ICAgeT02MTIgICB3aWR0aD0xMjEgICBoZWlnaHQ9MTY3ICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTQyICAgIHhhZHZhbmNlPTkwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTEwNCAgeD0yNjI3ICB5PTM5NSAgIHdpZHRoPTExNiAgIGhlaWdodD0xNjggICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9ODggICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTA1ICB4PTEwNTAgIHk9Nzc2ICAgd2lkdGg9NjcgICAgaGVpZ2h0PTE2NCAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD0xMiAgICB4YWR2YW5jZT0zOSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMDYgIHg9MTMyNyAgeT0wICAgICB3aWR0aD04MiAgICBoZWlnaHQ9MTk4ICAgeG9mZnNldD0tMzAgICB5b2Zmc2V0PTEyICAgIHhhZHZhbmNlPTM4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTEwNyAgeD0yNDk1ICB5PTQwMSAgIHdpZHRoPTEyMCAgIGhlaWdodD0xNjggICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9ODEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTA4ICB4PTI3NTUgIHk9MzkyICAgd2lkdGg9NjQgICAgaGVpZ2h0PTE2OCAgIHhvZmZzZXQ9LTEzICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT0zOSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMDkgIHg9MTk3MyAgeT0xMTE3ICB3aWR0aD0xNjggICBoZWlnaHQ9MTM0ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTQyICAgIHhhZHZhbmNlPTE0MCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTExMCAgeD0yMTUzICB5PTExMTUgIHdpZHRoPTExNiAgIGhlaWdodD0xMzQgICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9ODggICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTExICB4PTExODEgIHk9MTEyNiAgd2lkdGg9MTI3ICAgaGVpZ2h0PTEzNiAgIHhvZmZzZXQ9LTE4ICAgeW9mZnNldD00MiAgICB4YWR2YW5jZT05MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMTIgIHg9MjY3ICAgeT02MTEgICB3aWR0aD0xMjEgICBoZWlnaHQ9MTY3ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTQyICAgIHhhZHZhbmNlPTkwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTExMyAgeD00MDAgICB5PTYwMCAgIHdpZHRoPTEyMCAgIGhlaWdodD0xNjcgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9OTEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTE0ICB4PTIyODEgIHk9MTExMyAgd2lkdGg9OTAgICAgaGVpZ2h0PTEzNCAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD00MiAgICB4YWR2YW5jZT01NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMTUgIHg9MTcxNiAgeT0xMTIwICB3aWR0aD0xMTcgICBoZWlnaHQ9MTM2ICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTQyICAgIHhhZHZhbmNlPTgzICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTExNiAgeD00NTcgICB5PTExNDAgIHdpZHRoPTk1ICAgIGhlaWdodD0xNTUgICB4b2Zmc2V0PS0yNCAgIHlvZmZzZXQ9MjMgICAgeGFkdmFuY2U9NTIgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTE3ICB4PTE4NDUgIHk9MTExNyAgd2lkdGg9MTE2ICAgaGVpZ2h0PTEzNSAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD00MyAgICB4YWR2YW5jZT04OCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMTggIHg9Mjc3MiAgeT0xMTAwICB3aWR0aD0xMjIgICBoZWlnaHQ9MTMzICAgeG9mZnNldD0tMjIgICB5b2Zmc2V0PTQzICAgIHhhZHZhbmNlPTc4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTExOSAgeD0yNDYyICB5PTExMTMgIHdpZHRoPTE2MyAgIGhlaWdodD0xMzMgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9NDMgICAgeGFkdmFuY2U9MTIwICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTIwICB4PTI2MzcgIHk9MTEwNiAgd2lkdGg9MTIzICAgaGVpZ2h0PTEzMyAgIHhvZmZzZXQ9LTIyICAgeW9mZnNldD00MyAgICB4YWR2YW5jZT03OSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMjEgIHg9MCAgICAgeT02MTMgICB3aWR0aD0xMjIgICBoZWlnaHQ9MTY3ICAgeG9mZnNldD0tMjMgICB5b2Zmc2V0PTQzICAgIHhhZHZhbmNlPTc2ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTEyMiAgeD0yOTA2ICB5PTEwOTcgIHdpZHRoPTExNyAgIGhlaWdodD0xMzMgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9NDMgICAgeGFkdmFuY2U9NzkgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTIzICB4PTQ1OCAgIHk9MCAgICAgd2lkdGg9OTcgICAgaGVpZ2h0PTIwMiAgIHhvZmZzZXQ9LTIwICAgeW9mZnNldD0zICAgICB4YWR2YW5jZT01NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xMjQgIHg9MjQ1MSAgeT0yMDYgICB3aWR0aD02MSAgICBoZWlnaHQ9MTgzICAgeG9mZnNldD0tMTEgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTM5ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTEyNSAgeD0zNDkgICB5PTAgICAgIHdpZHRoPTk3ICAgIGhlaWdodD0yMDIgICB4b2Zmc2V0PS0yMyAgIHlvZmZzZXQ9MyAgICAgeGFkdmFuY2U9NTQgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTI2ICB4PTIzNzggIHk9MTI1OSAgd2lkdGg9MTM4ICAgaGVpZ2h0PTc5ICAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD02NSAgICB4YWR2YW5jZT0xMDkgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNjAgIHg9NTEzICAgeT0xNDM5ICB3aWR0aD01MSAgICBoZWlnaHQ9NDkgICAgeG9mZnNldD0tMjUgICB5b2Zmc2V0PTE2NyAgIHhhZHZhbmNlPTQwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE2MSAgeD0yMTcgICB5PTExNDIgIHdpZHRoPTY3ICAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9MzkgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTYyICB4PTEzNDEgIHk9NDEzICAgd2lkdGg9MTIwICAgaGVpZ2h0PTE3MCAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0yNSAgICB4YWR2YW5jZT04OCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNjMgIHg9MTMwMCAgeT03NzQgICB3aWR0aD0xMzEgICBoZWlnaHQ9MTYzICAgeG9mZnNldD0tMTggICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTkzICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE2NCAgeD03MDIgICB5PTExMjkgIHdpZHRoPTE0OSAgIGhlaWdodD0xNDkgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9MzAgICAgeGFkdmFuY2U9MTE0ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTY1ICB4PTQ2NSAgIHk9OTU1ICAgd2lkdGg9MTQwICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTIyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT05NyAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNjYgIHg9MjM3NSAgeT0yMDYgICB3aWR0aD02NCAgICBoZWlnaHQ9MTgzICAgeG9mZnNldD0tMTMgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTM4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE2NyAgeD0yMDUgICB5PTAgICAgIHdpZHRoPTEzMiAgIGhlaWdodD0yMDIgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9OTggICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTY4ICB4PTI3MTYgIHk9MTI1MSAgd2lkdGg9MTAwICAgaGVpZ2h0PTY1ICAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD0xMiAgICB4YWR2YW5jZT02NyAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNjkgIHg9OTk1ICAgeT01OTkgICB3aWR0aD0xNjEgICBoZWlnaHQ9MTY1ICAgeG9mZnNldD0tMTggICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTEyNiAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE3MCAgeD0xMzY4ICB5PTEyNzMgIHdpZHRoPTk5ICAgIGhlaWdodD0xMDkgICB4b2Zmc2V0PS0xMyAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9NzEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTcxICB4PTExMzEgIHk9MTI3NyAgd2lkdGg9MTEwICAgaGVpZ2h0PTExMCAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD01NCAgICB4YWR2YW5jZT03NSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNzIgIHg9MjI1MSAgeT0xMjYxICB3aWR0aD0xMTUgICBoZWlnaHQ9ODEgICAgeG9mZnNldD0tMTUgICB5b2Zmc2V0PTY1ICAgIHhhZHZhbmNlPTg5ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE3MyAgeD0xMzMgICB5PTE0NTggIHdpZHRoPTg4ICAgIGhlaWdodD02MCAgICB4b2Zmc2V0PS0yMiAgIHlvZmZzZXQ9NzQgICAgeGFkdmFuY2U9NDQgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTc0ICB4PTExNjggIHk9NTk3ICAgd2lkdGg9MTYxICAgaGVpZ2h0PTE2NSAgIHhvZmZzZXQ9LTE4ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT0xMjYgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNzUgIHg9MzMzICAgeT0xNDQ4ICB3aWR0aD0xMDUgICBoZWlnaHQ9NTkgICAgeG9mZnNldD0tMTUgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTczICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE3NiAgeD0xODE1ICB5PTEyNjggIHdpZHRoPTg5ICAgIGhlaWdodD04OCAgICB4b2Zmc2V0PS0xNSAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9NjAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTc3ICB4PTg2MyAgIHk9MTEyOSAgd2lkdGg9MTIxICAgaGVpZ2h0PTE0NyAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD0yOSAgICB4YWR2YW5jZT04NSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xNzggIHg9ODk5ICAgeT0xMjg4ICB3aWR0aD05NyAgICBoZWlnaHQ9MTExICAgeG9mZnNldD0tMTkgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTU5ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE3OSAgeD03OTAgICB5PTEyOTAgIHdpZHRoPTk3ICAgIGhlaWdodD0xMTIgICB4b2Zmc2V0PS0yMCAgIHlvZmZzZXQ9MTMgICAgeGFkdmFuY2U9NTkgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTgwICB4PTI1MjggIHk9MTI1OCAgd2lkdGg9ODIgICAgaGVpZ2h0PTcxICAgIHhvZmZzZXQ9LTE1ICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT01MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xODEgIHg9ODY2ICAgeT01OTkgICB3aWR0aD0xMTcgICBoZWlnaHQ9MTY2ICAgeG9mZnNldD0tMTMgICB5b2Zmc2V0PTQzICAgIHhhZHZhbmNlPTkxICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE4MiAgeD0yODkzICB5PTkyMyAgIHdpZHRoPTExMCAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0yMCAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9NzggICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTgzICB4PTI5MDggIHk9MTI0MiAgd2lkdGg9NjcgICAgaGVpZ2h0PTY1ICAgIHhvZmZzZXQ9LTEzICAgeW9mZnNldD02MiAgICB4YWR2YW5jZT00MiAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xODQgIHg9MjE2NiAgeT0xMjYxICB3aWR0aD03MyAgICBoZWlnaHQ9ODIgICAgeG9mZnNldD0tMTUgICB5b2Zmc2V0PTEyOCAgIHhhZHZhbmNlPTQwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE4NSAgeD0xNDc5ICB5PTEyNzEgIHdpZHRoPTc5ICAgIGhlaWdodD0xMDkgICB4b2Zmc2V0PS0xNSAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9NTkgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTg2ICB4PTEyNTMgIHk9MTI3NCAgd2lkdGg9MTAzICAgaGVpZ2h0PTEwOSAgIHhvZmZzZXQ9LTE1ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT03MyAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xODcgIHg9MTAwOCAgeT0xMjc3ICB3aWR0aD0xMTEgICBoZWlnaHQ9MTEwICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTU0ICAgIHhhZHZhbmNlPTc1ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE4OCAgeD0yNTQyICB5PTc1OCAgIHdpZHRoPTE1NCAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9MTE3ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTg5ICB4PTIzNzIgIHk9NzYwICAgd2lkdGg9MTU4ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTE4ICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xMjQgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xOTAgIHg9MTEyOSAgeT03NzYgICB3aWR0aD0xNTkgICBoZWlnaHQ9MTYzICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTEyNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE5MSAgeD05MjUgICB5PTc3NyAgIHdpZHRoPTExMyAgIGhlaWdodD0xNjQgICB4b2Zmc2V0PS0xOSAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9NzYgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTkyICB4PTE2MiAgIHk9MjI1ICAgd2lkdGg9MTUwICAgaGVpZ2h0PTE5MiAgIHhvZmZzZXQ9LTIzICAgeW9mZnNldD0tMTYgICB4YWR2YW5jZT0xMDQgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xOTMgIHg9MzI0ICAgeT0yMTQgICB3aWR0aD0xNTAgICBoZWlnaHQ9MTkyICAgeG9mZnNldD0tMjMgICB5b2Zmc2V0PS0xNiAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE5NCAgeD0wICAgICB5PTIyNSAgIHdpZHRoPTE1MCAgIGhlaWdodD0xOTIgICB4b2Zmc2V0PS0yMyAgIHlvZmZzZXQ9LTE2ICAgeGFkdmFuY2U9MTA0ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTk1ICB4PTEzNTkgIHk9MjEwICAgd2lkdGg9MTUwICAgaGVpZ2h0PTE5MCAgIHhvZmZzZXQ9LTIzICAgeW9mZnNldD0tMTQgICB4YWR2YW5jZT0xMDQgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xOTYgIHg9MTgxNCAgeT0yMDggICB3aWR0aD0xNTAgICBoZWlnaHQ9MTg4ICAgeG9mZnNldD0tMjMgICB5b2Zmc2V0PS0xMiAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTE5NyAgeD0xMDE2ICB5PTAgICAgIHdpZHRoPTE1MCAgIGhlaWdodD0xOTkgICB4b2Zmc2V0PS0yMyAgIHlvZmZzZXQ9LTIzICAgeGFkdmFuY2U9MTA0ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MTk4ICB4PTE3OTIgIHk9NzY5ICAgd2lkdGg9MTk4ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTI2ICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT0xNTAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0xOTkgIHg9MTE3OCAgeT0wICAgICB3aWR0aD0xMzcgICBoZWlnaHQ9MTk4ICAgeG9mZnNldD0tMTUgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIwMCAgeD0yOTIyICB5PTAgICAgIHdpZHRoPTEyMiAgIGhlaWdodD0xOTIgICB4b2Zmc2V0PS0xMiAgIHlvZmZzZXQ9LTE2ICAgeGFkdmFuY2U9OTEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjAxICB4PTY0MSAgIHk9MjE0ICAgd2lkdGg9MTIyICAgaGVpZ2h0PTE5MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0tMTYgICB4YWR2YW5jZT05MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMDIgIHg9Nzc1ICAgeT0yMTMgICB3aWR0aD0xMjIgICBoZWlnaHQ9MTkyICAgeG9mZnNldD0tMTIgICB5b2Zmc2V0PS0xNiAgIHhhZHZhbmNlPTkxICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIwMyAgeD0xOTc2ICB5PTIwNyAgIHdpZHRoPTEyMiAgIGhlaWdodD0xODggICB4b2Zmc2V0PS0xMiAgIHlvZmZzZXQ9LTEyICAgeGFkdmFuY2U9OTEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjA0ICB4PTEwMTggIHk9MjExICAgd2lkdGg9ODIgICAgaGVpZ2h0PTE5MiAgIHhvZmZzZXQ9LTI3ICAgeW9mZnNldD0tMTYgICB4YWR2YW5jZT00NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMDUgIHg9MTExMiAgeT0yMTEgICB3aWR0aD04MiAgICBoZWlnaHQ9MTkyICAgeG9mZnNldD0tMTEgICB5b2Zmc2V0PS0xNiAgIHhhZHZhbmNlPTQ0ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIwNiAgeD05MDkgICB5PTIxMyAgIHdpZHRoPTk3ICAgIGhlaWdodD0xOTIgICB4b2Zmc2V0PS0yNyAgIHlvZmZzZXQ9LTE2ICAgeGFkdmFuY2U9NDQgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjA3ICB4PTIxMTAgIHk9MjA3ICAgd2lkdGg9MTAwICAgaGVpZ2h0PTE4OCAgIHhvZmZzZXQ9LTI4ICAgeW9mZnNldD0tMTIgICB4YWR2YW5jZT00NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMDggIHg9MCAgICAgeT05NjkgICB3aWR0aD0xNDUgICBoZWlnaHQ9MTYyICAgeG9mZnNldD0tMjIgICB5b2Zmc2V0PTE0ICAgIHhhZHZhbmNlPTEwNyAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIwOSAgeD0xNTIxICB5PTIwOCAgIHdpZHRoPTEzNyAgIGhlaWdodD0xOTAgICB4b2Zmc2V0PS0xMiAgIHlvZmZzZXQ9LTE0ICAgeGFkdmFuY2U9MTE0ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjEwICB4PTIxODQgIHk9MCAgICAgd2lkdGg9MTQxICAgaGVpZ2h0PTE5NSAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0tMTcgICB4YWR2YW5jZT0xMTAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMTEgIHg9MjAzMSAgeT0wICAgICB3aWR0aD0xNDEgICBoZWlnaHQ9MTk1ICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PS0xNyAgIHhhZHZhbmNlPTExMCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIxMiAgeD0xODc4ICB5PTAgICAgIHdpZHRoPTE0MSAgIGhlaWdodD0xOTUgICB4b2Zmc2V0PS0xNiAgIHlvZmZzZXQ9LTE3ICAgeGFkdmFuY2U9MTEwICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjEzICB4PTI3NjkgIHk9MCAgICAgd2lkdGg9MTQxICAgaGVpZ2h0PTE5MyAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0tMTUgICB4YWR2YW5jZT0xMTAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMTQgIHg9MTIwNiAgeT0yMTAgICB3aWR0aD0xNDEgICBoZWlnaHQ9MTkxICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PS0xMyAgIHhhZHZhbmNlPTExMCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIxNSAgeD0yNzkgICB5PTEzMTYgIHdpZHRoPTEyMCAgIGhlaWdodD0xMjAgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9NDAgICAgeGFkdmFuY2U9ODUgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjE2ICB4PTI2NTUgIHk9MjA2ICAgd2lkdGg9MTQzICAgaGVpZ2h0PTE3NCAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0xMCAgICB4YWR2YW5jZT0xMTAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMTcgIHg9MjYyNSAgeT0wICAgICB3aWR0aD0xMzIgICBoZWlnaHQ9MTk0ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PS0xNiAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIxOCAgeD0yNDgxICB5PTAgICAgIHdpZHRoPTEzMiAgIGhlaWdodD0xOTQgICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9LTE2ICAgeGFkdmFuY2U9MTA0ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjE5ICB4PTIzMzcgIHk9MCAgICAgd2lkdGg9MTMyICAgaGVpZ2h0PTE5NCAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD0tMTYgICB4YWR2YW5jZT0xMDQgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMjAgIHg9MTY3MCAgeT0yMDggICB3aWR0aD0xMzIgICBoZWlnaHQ9MTkwICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PS0xMiAgIHhhZHZhbmNlPTEwNCAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIyMSAgeD00ODYgICB5PTIxNCAgIHdpZHRoPTE0MyAgIGhlaWdodD0xOTIgICB4b2Zmc2V0PS0yNCAgIHlvZmZzZXQ9LTE2ICAgeGFkdmFuY2U9OTYgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjIyICB4PTIzNjAgIHk9OTM5ICAgd2lkdGg9MTI0ICAgaGVpZ2h0PTE2MiAgIHhvZmZzZXQ9LTEyICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT05NSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMjMgIHg9MTIxICAgeT00MjkgICB3aWR0aD0xMjcgICBoZWlnaHQ9MTcxICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTcgICAgIHhhZHZhbmNlPTk1ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIyNCAgeD0xNjA0ICB5PTQxMCAgIHdpZHRoPTExOSAgIGhlaWdodD0xNzAgICB4b2Zmc2V0PS0xNiAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9ODcgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjI1ICB4PTE0NzMgIHk9NDEyICAgd2lkdGg9MTE5ICAgaGVpZ2h0PTE3MCAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT04NyAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMjYgIHg9MTczNSAgeT00MTAgICB3aWR0aD0xMTkgICBoZWlnaHQ9MTcwICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PTggICAgIHhhZHZhbmNlPTg3ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIyNyAgeD01MzIgICB5PTYwMCAgIHdpZHRoPTExOSAgIGhlaWdodD0xNjcgICB4b2Zmc2V0PS0xNiAgIHlvZmZzZXQ9MTEgICAgeGFkdmFuY2U9ODcgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjI4ICB4PTI5MjYgIHk9NTY5ICAgd2lkdGg9MTE5ICAgaGVpZ2h0PTE2NSAgIHhvZmZzZXQ9LTE2ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT04NyAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMjkgIHg9MjUyNCAgeT0yMDYgICB3aWR0aD0xMTkgICBoZWlnaHQ9MTc3ICAgeG9mZnNldD0tMTYgICB5b2Zmc2V0PTEgICAgIHhhZHZhbmNlPTg3ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIzMCAgeD05OTYgICB5PTExMjkgIHdpZHRoPTE3MyAgIGhlaWdodD0xMzYgICB4b2Zmc2V0PS0xOSAgIHlvZmZzZXQ9NDIgICAgeGFkdmFuY2U9MTM1ICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjMxICB4PTE5NzkgIHk9NDA3ICAgd2lkdGg9MTIwICAgaGVpZ2h0PTE2OSAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD00MiAgICB4YWR2YW5jZT04NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMzIgIHg9MTA3NiAgeT00MTUgICB3aWR0aD0xMjEgICBoZWlnaHQ9MTcwICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTggICAgIHhhZHZhbmNlPTg1ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIzMyAgeD05NDMgICB5PTQxNyAgIHdpZHRoPTEyMSAgIGhlaWdodD0xNzAgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9ODUgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjM0ICB4PTgxMCAgIHk9NDE3ICAgd2lkdGg9MTIxICAgaGVpZ2h0PTE3MCAgIHhvZmZzZXQ9LTE3ICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT04NSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMzUgIHg9Mjc5MyAgeT01NzIgICB3aWR0aD0xMjEgICBoZWlnaHQ9MTY1ICAgeG9mZnNldD0tMTcgICB5b2Zmc2V0PTEzICAgIHhhZHZhbmNlPTg1ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIzNiAgeD03NzIgICB5PTYwMCAgIHdpZHRoPTgyICAgIGhlaWdodD0xNjcgICB4b2Zmc2V0PS0yOSAgIHlvZmZzZXQ9OSAgICAgeGFkdmFuY2U9NDAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjM3ICB4PTI5NzAgIHk9Mzg4ICAgd2lkdGg9ODIgICAgaGVpZ2h0PTE2NyAgIHhvZmZzZXQ9LTEzICAgeW9mZnNldD05ICAgICB4YWR2YW5jZT00MCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yMzggIHg9NjYzICAgeT02MDAgICB3aWR0aD05NyAgICBoZWlnaHQ9MTY3ICAgeG9mZnNldD0tMjkgICB5b2Zmc2V0PTkgICAgIHhhZHZhbmNlPTQwICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTIzOSAgeD0wICAgICB5PTExNDMgIHdpZHRoPTEwMCAgIGhlaWdodD0xNjIgICB4b2Zmc2V0PS0zMCAgIHlvZmZzZXQ9MTQgICAgeGFkdmFuY2U9NDAgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjQwICB4PTI4MTAgIHk9MjA1ICAgd2lkdGg9MTIzICAgaGVpZ2h0PTE3MyAgIHhvZmZzZXQ9LTE1ICAgeW9mZnNldD01ICAgICB4YWR2YW5jZT05NCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yNDEgIHg9MCAgICAgeT03OTIgICB3aWR0aD0xMTYgICBoZWlnaHQ9MTY1ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTExICAgIHhhZHZhbmNlPTg4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTI0MiAgeD0yNjAgICB5PTQyOSAgIHdpZHRoPTEyNyAgIGhlaWdodD0xNzAgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9OTEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjQzICB4PTUzOCAgIHk9NDE4ICAgd2lkdGg9MTI3ICAgaGVpZ2h0PTE3MCAgIHhvZmZzZXQ9LTE4ICAgeW9mZnNldD04ICAgICB4YWR2YW5jZT05MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yNDQgIHg9Mzk5ICAgeT00MTggICB3aWR0aD0xMjcgICBoZWlnaHQ9MTcwICAgeG9mZnNldD0tMTggICB5b2Zmc2V0PTggICAgIHhhZHZhbmNlPTkxICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTI0NSAgeD0yODMxICB5PTM5MCAgIHdpZHRoPTEyNyAgIGhlaWdodD0xNjcgICB4b2Zmc2V0PS0xOCAgIHlvZmZzZXQ9MTEgICAgeGFkdmFuY2U9OTEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjQ2ICB4PTIyNTMgIHk9NTgzICAgd2lkdGg9MTI3ICAgaGVpZ2h0PTE2NSAgIHhvZmZzZXQ9LTE4ICAgeW9mZnNldD0xMyAgICB4YWR2YW5jZT05MSAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yNDcgIHg9MTQwICAgeT0xMzE3ICB3aWR0aD0xMjcgICBoZWlnaHQ9MTI4ICAgeG9mZnNldD0tMTkgICB5b2Zmc2V0PTM0ICAgIHhhZHZhbmNlPTkxICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTI0OCAgeD01NjQgICB5PTExMjkgIHdpZHRoPTEyNiAgIGhlaWdodD0xNTMgICB4b2Zmc2V0PS0xNyAgIHlvZmZzZXQ9MzQgICAgeGFkdmFuY2U9OTEgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjQ5ICB4PTIxMTEgIHk9NDA3ICAgd2lkdGg9MTE2ICAgaGVpZ2h0PTE2OSAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD05ICAgICB4YWR2YW5jZT04OCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yNTAgIHg9MjIzOSAgeT00MDIgICB3aWR0aD0xMTYgICBoZWlnaHQ9MTY5ICAgeG9mZnNldD0tMTQgICB5b2Zmc2V0PTkgICAgIHhhZHZhbmNlPTg4ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTI1MSAgeD0yMzY3ICB5PTQwMiAgIHdpZHRoPTExNiAgIGhlaWdodD0xNjkgICB4b2Zmc2V0PS0xNCAgIHlvZmZzZXQ9OSAgICAgeGFkdmFuY2U9ODggICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjUyICB4PTY3MiAgIHk9Nzc5ICAgd2lkdGg9MTE2ICAgaGVpZ2h0PTE2NCAgIHhvZmZzZXQ9LTE0ICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT04OCAgICBwYWdlPTAgIGNobmw9MTVcclxuY2hhciBpZD0yNTMgIHg9NzQ5ICAgeT0wICAgICB3aWR0aD0xMjIgICBoZWlnaHQ9MjAxICAgeG9mZnNldD0tMjMgICB5b2Zmc2V0PTkgICAgIHhhZHZhbmNlPTc2ICAgIHBhZ2U9MCAgY2hubD0xNVxyXG5jaGFyIGlkPTI1NCAgeD04ODMgICB5PTAgICAgIHdpZHRoPTEyMSAgIGhlaWdodD0yMDEgICB4b2Zmc2V0PS0xMyAgIHlvZmZzZXQ9OCAgICAgeGFkdmFuY2U9OTIgICAgcGFnZT0wICBjaG5sPTE1XHJcbmNoYXIgaWQ9MjU1ICB4PTE3NDQgIHk9MCAgICAgd2lkdGg9MTIyICAgaGVpZ2h0PTE5NiAgIHhvZmZzZXQ9LTIzICAgeW9mZnNldD0xNCAgICB4YWR2YW5jZT03NiAgICBwYWdlPTAgIGNobmw9MTVcclxua2VybmluZ3MgY291bnQ9MTY4NlxyXG5rZXJuaW5nIGZpcnN0PTMyICBzZWNvbmQ9ODQgIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTQwICBzZWNvbmQ9ODYgIGFtb3VudD0yXHJcbmtlcm5pbmcgZmlyc3Q9NDAgIHNlY29uZD04NyAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD00MCAgc2Vjb25kPTg5ICBhbW91bnQ9MlxyXG5rZXJuaW5nIGZpcnN0PTQwICBzZWNvbmQ9MjIxIGFtb3VudD0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD00NCAgYW1vdW50PS0xOFxyXG5rZXJuaW5nIGZpcnN0PTcwICBzZWNvbmQ9NDYgIGFtb3VudD0tMThcclxua2VybmluZyBmaXJzdD03MCAgc2Vjb25kPTY1ICBhbW91bnQ9LTEzXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD03NCAgYW1vdW50PS0yMVxyXG5rZXJuaW5nIGZpcnN0PTcwICBzZWNvbmQ9ODQgIGFtb3VudD0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD05NyAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD05OSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMDAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMDEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMDMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMTEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMTggYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xOTIgYW1vdW50PS0xM1xyXG5rZXJuaW5nIGZpcnN0PTcwICBzZWNvbmQ9MTkzIGFtb3VudD0tMTNcclxua2VybmluZyBmaXJzdD03MCAgc2Vjb25kPTE5NCBhbW91bnQ9LTEzXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0xOTUgYW1vdW50PS0xM1xyXG5rZXJuaW5nIGZpcnN0PTcwICBzZWNvbmQ9MTk2IGFtb3VudD0tMTNcclxua2VybmluZyBmaXJzdD03MCAgc2Vjb25kPTE5NyBhbW91bnQ9LTEzXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMjQgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMjUgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMjYgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMjcgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMjggYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMjkgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMzEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMzIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMzMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMzQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yMzUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNDIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNDMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNDQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNDUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNDYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNDkgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNTAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNTEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzAgIHNlY29uZD0yNTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9ODEgIHNlY29uZD04NCAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODEgIHNlY29uZD04NiAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9ODEgIHNlY29uZD04NyAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9ODEgIHNlY29uZD04OSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODEgIHNlY29uZD0yMjEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODIgIHNlY29uZD04NCAgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODIgIHNlY29uZD04NiAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODIgIHNlY29uZD04OSAgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9ODIgIHNlY29uZD0yMjEgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9OTEgIHNlY29uZD03NCAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTEgIHNlY29uZD04NSAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTEgIHNlY29uZD0yMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTEgIHNlY29uZD0yMTggYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTEgIHNlY29uZD0yMTkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTEgIHNlY29uZD0yMjAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTAyIHNlY29uZD0zNCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xMDIgc2Vjb25kPTM5ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9OTkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MTAwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MTAxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MTAzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MTEzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MjMxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MjMyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MjMzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MjM0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwMiBzZWNvbmQ9MjM1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9OTkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MTAwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MTAxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MTAzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MTEzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MjMxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MjMyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MjMzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MjM0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEwNyBzZWNvbmQ9MjM1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNiBzZWNvbmQ9MTExIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNiBzZWNvbmQ9MjQyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNiBzZWNvbmQ9MjQzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNiBzZWNvbmQ9MjQ0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNiBzZWNvbmQ9MjQ1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNiBzZWNvbmQ9MjQ2IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExOSBzZWNvbmQ9NDQgIGFtb3VudD0tMTBcclxua2VybmluZyBmaXJzdD0xMTkgc2Vjb25kPTQ2ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTIzIHNlY29uZD03NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MTIzIHNlY29uZD04NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MTIzIHNlY29uZD0yMTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MTIzIHNlY29uZD0yMTggYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MTIzIHNlY29uZD0yMTkgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MTIzIHNlY29uZD0yMjAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0zNCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0zOSAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMTEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yNDIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yNDMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yNDQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yNDUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yNDYgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD02NSAgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xOTIgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xOTMgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xOTQgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xOTUgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xOTYgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xOTcgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD05OSAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMDAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMDEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMDMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMTMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMzEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMzIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMzMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMzQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMzUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMDkgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMTAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yNDEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD05NyAgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMjQgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMjUgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMjYgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMjcgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMjggYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0yMjkgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzQgIHNlY29uZD0xMTUgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0zNCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0zOSAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMTEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yNDIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yNDMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yNDQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yNDUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yNDYgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD02NSAgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xOTIgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xOTMgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xOTQgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xOTUgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xOTYgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xOTcgYW1vdW50PS05XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD05OSAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMDAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMDEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMDMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMTMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMzEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMzIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMzMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMzQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMzUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMDkgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMTAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yNDEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD05NyAgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMjQgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMjUgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMjYgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMjcgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMjggYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0yMjkgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9MzkgIHNlY29uZD0xMTUgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9NDQgIHNlY29uZD0zNCAgYW1vdW50PS0xM1xyXG5rZXJuaW5nIGZpcnN0PTQ0ICBzZWNvbmQ9MzkgIGFtb3VudD0tMTNcclxua2VybmluZyBmaXJzdD00NiAgc2Vjb25kPTM0ICBhbW91bnQ9LTEzXHJcbmtlcm5pbmcgZmlyc3Q9NDYgIHNlY29uZD0zOSAgYW1vdW50PS0xM1xyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MTE4IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MTIxIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjUzIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjU1IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9NjcgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9NzEgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9NzkgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9ODEgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjE2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MTk5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjEwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjEyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjEzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjE0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9ODUgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjE3IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjE4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjE5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjIwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MzQgIGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MzkgIGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MTExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjQyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjQzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjQ0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjQ1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjQ2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9ODcgIGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9ODQgIGFtb3VudD0tMTBcclxua2VybmluZyBmaXJzdD02NSAgc2Vjb25kPTExNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD02NSAgc2Vjb25kPTI0OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD02NSAgc2Vjb25kPTI1MCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD02NSAgc2Vjb25kPTI1MSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD02NSAgc2Vjb25kPTI1MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD02NSAgc2Vjb25kPTEyMiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9ODYgIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9ODkgIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTY1ICBzZWNvbmQ9MjIxIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTY2ICBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY2ICBzZWNvbmQ9ODYgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY2ICBzZWNvbmQ9ODkgIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTY2ICBzZWNvbmQ9MjIxIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTY3ICBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9ODYgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9ODkgIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MjIxIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9NjUgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MTkyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MTkzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MTk0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MTk1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MTk2IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9MTk3IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9ODggIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9NDQgIGFtb3VudD0tOFxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9NDYgIGFtb3VudD0tOFxyXG5rZXJuaW5nIGZpcnN0PTY4ICBzZWNvbmQ9OTAgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MTE4IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MTIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjUzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjU1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MTExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjQyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjQzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjQ0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjQ1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9MjQ2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTY5ICBzZWNvbmQ9ODQgIGFtb3VudD0yXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD05OSAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0xMDAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0xMDEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0xMDMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0xMTMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yMzEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yMzIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yMzMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yMzQgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NjkgIHNlY29uZD0yMzUgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9NzIgIHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzIgIHNlY29uZD04OSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzIgIHNlY29uZD0yMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzIgIHNlY29uZD02NSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03MiAgc2Vjb25kPTE5MiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTcyICBzZWNvbmQ9MTkzIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzIgIHNlY29uZD0xOTQgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03MiAgc2Vjb25kPTE5NSBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTcyICBzZWNvbmQ9MTk2IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzIgIHNlY29uZD0xOTcgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03MiAgc2Vjb25kPTg4ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTczICBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTczICBzZWNvbmQ9ODkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTczICBzZWNvbmQ9MjIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTczICBzZWNvbmQ9NjUgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzMgIHNlY29uZD0xOTIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03MyAgc2Vjb25kPTE5MyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTczICBzZWNvbmQ9MTk0IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzMgIHNlY29uZD0xOTUgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03MyAgc2Vjb25kPTE5NiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTczICBzZWNvbmQ9MTk3IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzMgIHNlY29uZD04OCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTY1ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTE5MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTE5MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTE5NCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTE5NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTE5NiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NCAgc2Vjb25kPTE5NyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTExOCBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTEyMSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI1MyBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI1NSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTY3ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTcxICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTc5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTgxICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIxNiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTE5OSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIxMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIxMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIxMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIxMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIxNCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTExMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0NCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0NiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTExNyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0OSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI1MCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI1MSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI1MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTk5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTEwMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTEwMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTEwMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTExMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIzMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIzMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIzMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIzNCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTIzNSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTQ1ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTE3MyBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTEwOSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTExMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTExMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NSAgc2Vjb25kPTI0MSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03NiAgc2Vjb25kPTExOCBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0xMjEgYW1vdW50PS0xMFxyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MjUzIGFtb3VudD0tMTBcclxua2VybmluZyBmaXJzdD03NiAgc2Vjb25kPTI1NSBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD02NyAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD03MSAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD03OSAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD04MSAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTYgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0xOTkgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD04NSAgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTcgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTggYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMTkgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMjAgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0zNCAgYW1vdW50PS0yNlxyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MzkgIGFtb3VudD0tMjZcclxua2VybmluZyBmaXJzdD03NiAgc2Vjb25kPTg3ICBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD04NCAgYW1vdW50PS0yMVxyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MTE3IGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MjQ5IGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MjUwIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MjUxIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MjUyIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9ODYgIGFtb3VudD0tMTRcclxua2VybmluZyBmaXJzdD03NiAgc2Vjb25kPTg5ICBhbW91bnQ9LTE5XHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0yMjEgYW1vdW50PS0xOVxyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9NjUgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0xOTIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03NiAgc2Vjb25kPTE5MyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MTk0IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzYgIHNlY29uZD0xOTUgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03NiAgc2Vjb25kPTE5NiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc2ICBzZWNvbmQ9MTk3IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzcgIHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzcgIHNlY29uZD04OSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzcgIHNlY29uZD0yMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9NzcgIHNlY29uZD02NSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03NyAgc2Vjb25kPTE5MiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc3ICBzZWNvbmQ9MTkzIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzcgIHNlY29uZD0xOTQgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03NyAgc2Vjb25kPTE5NSBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc3ICBzZWNvbmQ9MTk2IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzcgIHNlY29uZD0xOTcgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03NyAgc2Vjb25kPTg4ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc4ICBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTc4ICBzZWNvbmQ9ODkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTc4ICBzZWNvbmQ9MjIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTc4ICBzZWNvbmQ9NjUgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzggIHNlY29uZD0xOTIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03OCAgc2Vjb25kPTE5MyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc4ICBzZWNvbmQ9MTk0IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzggIHNlY29uZD0xOTUgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03OCAgc2Vjb25kPTE5NiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTc4ICBzZWNvbmQ9MTk3IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9NzggIHNlY29uZD04OCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTg0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTg2ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTg5ICBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTIyMSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTY1ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTE5MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTE5MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTE5NCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTE5NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTE5NiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTE5NyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTg4ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTQ0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTQ2ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD03OSAgc2Vjb25kPTkwICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04MCAgc2Vjb25kPTExOCBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTIxIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9ODAgIHNlY29uZD0yNTMgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD04MCAgc2Vjb25kPTI1NSBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjQyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjQzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjQ0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjQ1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjQ2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9NjUgIGFtb3VudD0tMTFcclxua2VybmluZyBmaXJzdD04MCAgc2Vjb25kPTE5MiBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9ODAgIHNlY29uZD0xOTMgYW1vdW50PS0xMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTk0IGFtb3VudD0tMTFcclxua2VybmluZyBmaXJzdD04MCAgc2Vjb25kPTE5NSBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9ODAgIHNlY29uZD0xOTYgYW1vdW50PS0xMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTk3IGFtb3VudD0tMTFcclxua2VybmluZyBmaXJzdD04MCAgc2Vjb25kPTg4ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04MCAgc2Vjb25kPTQ0ICBhbW91bnQ9LTI1XHJcbmtlcm5pbmcgZmlyc3Q9ODAgIHNlY29uZD00NiAgYW1vdW50PS0yNVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9OTAgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9OTkgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTAwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTAxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTAzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MTEzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjMxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjMyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjMzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjM0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjM1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9OTcgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjI0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjI1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjI2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjI3IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjI4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9MjI5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTgwICBzZWNvbmQ9NzQgIGFtb3VudD0tMTZcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTExOCBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTEyMSBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI1MyBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI1NSBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTY3ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTcxICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTc5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTgxICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIxNiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTE5OSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIxMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIxMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIxMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIxMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIxNCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTExMSBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI0MiBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI0MyBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI0NCBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI0NSBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTI0NiBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTg3ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9ODQgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xMTcgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0yNDkgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0yNTAgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0yNTEgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0yNTIgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xMjIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD04NiAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTg5ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjIxIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD02NSAgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xOTIgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xOTMgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xOTQgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xOTUgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xOTYgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xOTcgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD00NCAgYW1vdW50PS0xN1xyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9NDYgIGFtb3VudD0tMTdcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTk5ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTEwMCBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTEwMSBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTEwMyBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTExMyBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIzMSBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIzMiBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIzMyBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIzNCBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTIzNSBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTEyMCBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NCAgc2Vjb25kPTQ1ICBhbW91bnQ9LTE4XHJcbmtlcm5pbmcgZmlyc3Q9ODQgIHNlY29uZD0xNzMgYW1vdW50PS0xOFxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MTA5IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MTEwIGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MTEyIGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjQxIGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9ODMgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9OTcgIGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjI0IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjI1IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjI2IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjI3IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjI4IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MjI5IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9MTE1IGFtb3VudD0tOVxyXG5rZXJuaW5nIGZpcnN0PTg0ICBzZWNvbmQ9NzQgIGFtb3VudD0tMTlcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTY1ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTE5MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTE5MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTE5NCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTE5NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTE5NiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NSAgc2Vjb25kPTE5NyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTExMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI0MiBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI0MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI0NCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI0NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI0NiBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTExNyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI0OSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI1MCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI1MSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTI1MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTY1ICBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5MiBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5MyBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5NCBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5NSBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5NiBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTE5NyBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD04NiAgc2Vjb25kPTQ0ICBhbW91bnQ9LTE4XHJcbmtlcm5pbmcgZmlyc3Q9ODYgIHNlY29uZD00NiAgYW1vdW50PS0xOFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9OTkgIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MTAwIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MTAxIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MTAzIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MTEzIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjMxIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjMyIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjMzIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjM0IGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjM1IGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9NDUgIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MTczIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9OTcgIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjI0IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjI1IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjI2IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjI3IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjI4IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg2ICBzZWNvbmQ9MjI5IGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9MTExIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9MjQyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9MjQzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9MjQ0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9MjQ1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9MjQ2IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9ODQgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD02NSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xOTIgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xOTMgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xOTQgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xOTUgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xOTYgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD0xOTcgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODcgIHNlY29uZD00NCAgYW1vdW50PS0xMFxyXG5rZXJuaW5nIGZpcnN0PTg3ICBzZWNvbmQ9NDYgIGFtb3VudD0tMTBcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTk5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTEwMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTEwMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTEwMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTExMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIzMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIzMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIzMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIzNCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIzNSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTQ1ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTE3MyBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTk3ICBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIyNCBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIyNSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIyNiBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIyNyBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIyOCBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04NyAgc2Vjb25kPTIyOSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTExOCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTEyMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI1MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI1NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTY3ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTcxICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTc5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTgxICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTIxNiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTE5OSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTIxMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTIxMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTIxMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTIxMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTIxNCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTExMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI0MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI0MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI0NCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI0NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI0NiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTExNyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI0OSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI1MCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI1MSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTI1MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OCAgc2Vjb25kPTg2ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9OTkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MTAwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MTAxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MTAzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MTEzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MjMxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MjMyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MjMzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MjM0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MjM1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9NDUgIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg4ICBzZWNvbmQ9MTczIGFtb3VudD0tNFxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MTE4IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MTIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjUzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjU1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9NjcgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9NzEgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9NzkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9ODEgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjE2IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MTk5IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjEwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjExIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjEyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjEzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjE0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9ODUgIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjE3IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjE4IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjE5IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjIwIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MTExIGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjQyIGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjQzIGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjQ0IGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjQ1IGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9MjQ2IGFtb3VudD0tNVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9ODcgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD04NCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTExNyBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTI0OSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTI1MCBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTI1MSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTI1MiBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTEyMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTg2ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9ODkgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjEgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTY1ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTE5MiBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTE5MyBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTE5NCBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTE5NSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTE5NiBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTE5NyBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTg4ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTg5ICBzZWNvbmQ9NDQgIGFtb3VudD0tMTZcclxua2VybmluZyBmaXJzdD04OSAgc2Vjb25kPTQ2ICBhbW91bnQ9LTE2XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD05OSAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMDAgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMDEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMDMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMTMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMzEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMzIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMzMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMzQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMzUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMjAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD00NSAgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xNzMgYW1vdW50PS00XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMDkgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMTAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMTIgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yNDEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD04MyAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD05NyAgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjQgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjUgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjYgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjcgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjggYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0yMjkgYW1vdW50PS02XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD0xMTUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9ODkgIHNlY29uZD03NCAgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xMTggYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD02NyAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD03MSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD03OSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD04MSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yMTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xOTkgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yMTAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yMTEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yMTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yMTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yMTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xMTEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNDIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNDMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNDQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNDUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNDYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD02NSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTE5MiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTkwICBzZWNvbmQ9MTkzIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xOTQgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTE5NSBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTkwICBzZWNvbmQ9MTk2IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9OTAgIHNlY29uZD0xOTcgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTk5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTEwMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTEwMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTEwMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTExMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTIzMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTIzMiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTIzMyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTIzNCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05MCAgc2Vjb25kPTIzNSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05NyAgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05NyAgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05NyAgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05NyAgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05NyAgc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD05NyAgc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTM0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTM5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTEyMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OCAgc2Vjb25kPTEyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OSAgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD05OSAgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDEgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDEgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDEgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDEgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDEgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDEgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMDQgc2Vjb25kPTM0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMDQgc2Vjb25kPTM5ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMDkgc2Vjb25kPTM0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMDkgc2Vjb25kPTM5ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMTAgc2Vjb25kPTM0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMTAgc2Vjb25kPTM5ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMTEgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMTEgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMTEgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMTEgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMTEgc2Vjb25kPTM0ICBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9MTExIHNlY29uZD0zOSAgYW1vdW50PS0xMVxyXG5rZXJuaW5nIGZpcnN0PTExMSBzZWNvbmQ9MTIyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExMSBzZWNvbmQ9MTIwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MTE4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MTIxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MjUzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MjU1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MzQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MzkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MTIyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExMiBzZWNvbmQ9MTIwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MTE4IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0xMjEgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xMTQgc2Vjb25kPTI1MyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MjU1IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0zNCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xMTQgc2Vjb25kPTM5ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MTExIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MjQyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MjQzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MjQ0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MjQ1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9MjQ2IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTExNCBzZWNvbmQ9NDQgIGFtb3VudD0tMTBcclxua2VybmluZyBmaXJzdD0xMTQgc2Vjb25kPTQ2ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD05OSAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0xMDAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0xMDEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0xMDMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0xMTMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMzEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMzIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMzMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMzQgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMzUgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD05NyAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMjQgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMjUgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMjYgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMjcgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMjggYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE0IHNlY29uZD0yMjkgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MTE4IHNlY29uZD0zNCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xMTggc2Vjb25kPTM5ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MTExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjQyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjQzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjQ0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjQ1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjQ2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9NDQgIGFtb3VudD0tOFxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9NDYgIGFtb3VudD0tOFxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9OTkgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MTAwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MTAxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MTAzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MTEzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjMxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjMyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjMzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjM0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjM1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9OTcgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjI0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjI1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjI2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjI3IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjI4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTExOCBzZWNvbmQ9MjI5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MTExIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjQyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjQzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjQ0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjQ1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjQ2IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9OTkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MTAwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MTAxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MTAzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MTEzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjMxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjMyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjMzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjM0IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMCBzZWNvbmQ9MjM1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTEyMSBzZWNvbmQ9MzQgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MTIxIHNlY29uZD0zOSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTQ0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTQ2ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTk5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTEwMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTEwMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTEwMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTExMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIzMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIzMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIzMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIzNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIzNSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTk3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIyNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIyNSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIyNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIyNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIyOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjEgc2Vjb25kPTIyOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTk5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTEwMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTEwMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTEwMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTExMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTIzMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTIzMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTIzMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTIzNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xMjIgc2Vjb25kPTIzNSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTM0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTM5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTEyMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTQgc2Vjb25kPTEyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTg0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTg2ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTg5ICBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTIyMSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTY1ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTE5MiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTE5MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTE5NCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTE5NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTE5NiBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTE5NyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTg4ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTQ0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTQ2ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0yMDggc2Vjb25kPTkwICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTExOCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTEyMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI1MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI1NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTg1ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIxOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTM0ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTM5ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTg3ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTg0ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTkyIHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkyIHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkyIHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkyIHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkyIHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkyIHNlY29uZD0xMjIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTg2ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTg5ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTIgc2Vjb25kPTIyMSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTExOCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTEyMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI1MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI1NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTg1ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIxOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTM0ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTM5ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTg3ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTg0ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTkzIHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkzIHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkzIHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkzIHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkzIHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTkzIHNlY29uZD0xMjIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTg2ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTg5ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTMgc2Vjb25kPTIyMSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTExOCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTEyMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI1MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI1NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTg1ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIxOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTM0ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTM5ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTg3ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTg0ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTk0IHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk0IHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk0IHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk0IHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk0IHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk0IHNlY29uZD0xMjIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTg2ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTg5ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTQgc2Vjb25kPTIyMSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTExOCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTEyMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI1MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI1NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTg1ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIxOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTM0ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTM5ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTg3ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTg0ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTk1IHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk1IHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk1IHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk1IHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk1IHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk1IHNlY29uZD0xMjIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTg2ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTg5ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTUgc2Vjb25kPTIyMSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTExOCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTEyMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI1MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI1NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTg1ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIxOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTM0ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTM5ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTg3ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTg0ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTk2IHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk2IHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk2IHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk2IHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk2IHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk2IHNlY29uZD0xMjIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTg2ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTg5ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTYgc2Vjb25kPTIyMSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTExOCBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTEyMSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI1MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI1NSBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTY3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTcxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTc5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTgxICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTE5OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTg1ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIxOSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIyMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTM0ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTM5ICBhbW91bnQ9LTlcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTg3ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTg0ICBhbW91bnQ9LTEwXHJcbmtlcm5pbmcgZmlyc3Q9MTk3IHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk3IHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk3IHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk3IHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk3IHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MTk3IHNlY29uZD0xMjIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTg2ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTg5ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTcgc2Vjb25kPTIyMSBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0xOTkgc2Vjb25kPTg0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTExOCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTEyMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI1MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI1NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDAgc2Vjb25kPTg0ICBhbW91bnQ9MlxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MTE3IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjQ5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjUwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjUxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjUyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9OTkgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MTAwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MTAxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MTAzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MTEzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjMxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjMyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjMzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjM0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMCBzZWNvbmQ9MjM1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MTE4IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MTIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjUzIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjU1IGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MTExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjQyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjQzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjQ0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjQ1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9MjQ2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMSBzZWNvbmQ9ODQgIGFtb3VudD0yXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0xMTcgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yNDkgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yNTAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yNTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yNTIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD05OSAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0xMDAgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0xMDEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0xMDMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0xMTMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yMzEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yMzIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yMzMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yMzQgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAxIHNlY29uZD0yMzUgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0xMTggYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0xMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0xMTEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNDIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNDMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNDQgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNDUgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD0yNDYgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjAyIHNlY29uZD04NCAgYW1vdW50PTJcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTExNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTI0OSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTI1MCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTI1MSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTI1MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTk5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTEwMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTEwMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTEwMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTExMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTIzMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTIzMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTIzMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTIzNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDIgc2Vjb25kPTIzNSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTExOCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTEyMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI1MyBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI1NSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMDMgc2Vjb25kPTg0ICBhbW91bnQ9MlxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MTE3IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjQ5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjUwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjUxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjUyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9OTkgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MTAwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MTAxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MTAzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MTEzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjMxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjMyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjMzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjM0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwMyBzZWNvbmQ9MjM1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTIwNCBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwNCBzZWNvbmQ9ODkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwNCBzZWNvbmQ9MjIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwNCBzZWNvbmQ9NjUgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA0IHNlY29uZD0xOTIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDQgc2Vjb25kPTE5MyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNCBzZWNvbmQ9MTk0IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA0IHNlY29uZD0xOTUgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDQgc2Vjb25kPTE5NiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNCBzZWNvbmQ9MTk3IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA0IHNlY29uZD04OCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDUgc2Vjb25kPTg0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDUgc2Vjb25kPTg5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDUgc2Vjb25kPTIyMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDUgc2Vjb25kPTY1ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNSBzZWNvbmQ9MTkyIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA1IHNlY29uZD0xOTMgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDUgc2Vjb25kPTE5NCBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNSBzZWNvbmQ9MTk1IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA1IHNlY29uZD0xOTYgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDUgc2Vjb25kPTE5NyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNSBzZWNvbmQ9ODggIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA2IHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjA2IHNlY29uZD04OSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjA2IHNlY29uZD0yMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjA2IHNlY29uZD02NSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDYgc2Vjb25kPTE5MiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNiBzZWNvbmQ9MTkzIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA2IHNlY29uZD0xOTQgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDYgc2Vjb25kPTE5NSBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNiBzZWNvbmQ9MTk2IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA2IHNlY29uZD0xOTcgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDYgc2Vjb25kPTg4ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNyBzZWNvbmQ9ODQgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwNyBzZWNvbmQ9ODkgIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwNyBzZWNvbmQ9MjIxIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIwNyBzZWNvbmQ9NjUgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA3IHNlY29uZD0xOTIgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDcgc2Vjb25kPTE5MyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNyBzZWNvbmQ9MTk0IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA3IHNlY29uZD0xOTUgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDcgc2Vjb25kPTE5NiBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwNyBzZWNvbmQ9MTk3IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA3IHNlY29uZD04OCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDkgc2Vjb25kPTg0ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDkgc2Vjb25kPTg5ICBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDkgc2Vjb25kPTIyMSBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMDkgc2Vjb25kPTY1ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwOSBzZWNvbmQ9MTkyIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA5IHNlY29uZD0xOTMgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDkgc2Vjb25kPTE5NCBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwOSBzZWNvbmQ9MTk1IGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjA5IHNlY29uZD0xOTYgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMDkgc2Vjb25kPTE5NyBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIwOSBzZWNvbmQ9ODggIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD04NiAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD04OSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0yMjEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD04OCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD00NCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD00NiAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjEwIHNlY29uZD05MCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD04NiAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD04OSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0yMjEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD04OCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD00NCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD00NiAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjExIHNlY29uZD05MCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD04NiAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD04OSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0yMjEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD04OCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD00NCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD00NiAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjEyIHNlY29uZD05MCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD04NiAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD04OSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0yMjEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD04OCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD00NCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD00NiAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjEzIHNlY29uZD05MCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD04NCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD04NiAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD04OSAgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0yMjEgYW1vdW50PS0zXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD04OCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD00NCAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD00NiAgYW1vdW50PS04XHJcbmtlcm5pbmcgZmlyc3Q9MjE0IHNlY29uZD05MCAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE3IHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE4IHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjE5IHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD02NSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD0xOTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD0xOTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD0xOTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD0xOTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD0xOTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIwIHNlY29uZD0xOTcgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0xMTggYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0xMjEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNTUgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD02NyAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD03MSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD03OSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD04MSAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTYgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0xOTkgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTEgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTIgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTMgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTQgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD04NSAgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTcgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTggYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMTkgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yMjAgYW1vdW50PS03XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0xMTEgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNDIgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNDMgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNDQgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNDUgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD0yNDYgYW1vdW50PS01XHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD04NyAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTg0ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTE3IGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MjQ5IGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MjUwIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MjUxIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MjUyIGFtb3VudD0tM1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTIyIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9ODYgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD04OSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyMSBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9NjUgIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTkyIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTkzIGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTk0IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTk1IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTk2IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9MTk3IGFtb3VudD0tN1xyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9ODggIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjIxIHNlY29uZD00NCAgYW1vdW50PS0xNlxyXG5rZXJuaW5nIGZpcnN0PTIyMSBzZWNvbmQ9NDYgIGFtb3VudD0tMTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTk5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTEwMCBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTEwMSBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTEwMyBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTExMyBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIzMSBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIzMiBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIzMyBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIzNCBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIzNSBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTEyMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTQ1ICBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTE3MyBhbW91bnQ9LTRcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTEwOSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTExMCBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTExMiBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTI0MSBhbW91bnQ9LTNcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTgzICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTk3ICBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyNCBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyNSBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyNiBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyNyBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyOCBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTIyOSBhbW91bnQ9LTZcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTExNSBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjEgc2Vjb25kPTc0ICBhbW91bnQ9LTdcclxua2VybmluZyBmaXJzdD0yMjQgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjQgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjQgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjQgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjQgc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjQgc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjUgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjUgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjUgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjUgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjUgc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjUgc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjYgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjYgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjYgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjYgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjYgc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjYgc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjcgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjcgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjcgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjcgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjcgc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjcgc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjggc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjggc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjggc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjggc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjggc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjggc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjkgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjkgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjkgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjkgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMjkgc2Vjb25kPTM0ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMjkgc2Vjb25kPTM5ICBhbW91bnQ9LTVcclxua2VybmluZyBmaXJzdD0yMzEgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzEgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzIgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzIgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzIgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzIgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzIgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzIgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzMgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzMgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzMgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzMgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzMgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzMgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzQgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzQgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzQgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzQgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzQgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzQgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzUgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzUgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzUgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzUgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzUgc2Vjb25kPTM0ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yMzUgc2Vjb25kPTM5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDEgc2Vjb25kPTM0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0yNDEgc2Vjb25kPTM5ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0yNDIgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDIgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDIgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDIgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDIgc2Vjb25kPTM0ICBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9MjQyIHNlY29uZD0zOSAgYW1vdW50PS0xMVxyXG5rZXJuaW5nIGZpcnN0PTI0MiBzZWNvbmQ9MTIyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0MiBzZWNvbmQ9MTIwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTI0MyBzZWNvbmQ9MTE4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0MyBzZWNvbmQ9MTIxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0MyBzZWNvbmQ9MjUzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0MyBzZWNvbmQ9MjU1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0MyBzZWNvbmQ9MzQgIGFtb3VudD0tMTFcclxua2VybmluZyBmaXJzdD0yNDMgc2Vjb25kPTM5ICBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9MjQzIHNlY29uZD0xMjIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjQzIHNlY29uZD0xMjAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjQ0IHNlY29uZD0xMTggYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjQ0IHNlY29uZD0xMjEgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjQ0IHNlY29uZD0yNTMgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjQ0IHNlY29uZD0yNTUgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjQ0IHNlY29uZD0zNCAgYW1vdW50PS0xMVxyXG5rZXJuaW5nIGZpcnN0PTI0NCBzZWNvbmQ9MzkgIGFtb3VudD0tMTFcclxua2VybmluZyBmaXJzdD0yNDQgc2Vjb25kPTEyMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDQgc2Vjb25kPTEyMCBhbW91bnQ9LTJcclxua2VybmluZyBmaXJzdD0yNDUgc2Vjb25kPTExOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDUgc2Vjb25kPTEyMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDUgc2Vjb25kPTI1MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDUgc2Vjb25kPTI1NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNDUgc2Vjb25kPTM0ICBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9MjQ1IHNlY29uZD0zOSAgYW1vdW50PS0xMVxyXG5rZXJuaW5nIGZpcnN0PTI0NSBzZWNvbmQ9MTIyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0NSBzZWNvbmQ9MTIwIGFtb3VudD0tMlxyXG5rZXJuaW5nIGZpcnN0PTI0NiBzZWNvbmQ9MTE4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0NiBzZWNvbmQ9MTIxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0NiBzZWNvbmQ9MjUzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0NiBzZWNvbmQ9MjU1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI0NiBzZWNvbmQ9MzQgIGFtb3VudD0tMTFcclxua2VybmluZyBmaXJzdD0yNDYgc2Vjb25kPTM5ICBhbW91bnQ9LTExXHJcbmtlcm5pbmcgZmlyc3Q9MjQ2IHNlY29uZD0xMjIgYW1vdW50PS0xXHJcbmtlcm5pbmcgZmlyc3Q9MjQ2IHNlY29uZD0xMjAgYW1vdW50PS0yXHJcbmtlcm5pbmcgZmlyc3Q9MjUzIHNlY29uZD0zNCAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yNTMgc2Vjb25kPTM5ICBhbW91bnQ9MVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MTExIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjQyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjQzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjQ0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjQ1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjQ2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9NDQgIGFtb3VudD0tOFxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9NDYgIGFtb3VudD0tOFxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9OTkgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MTAwIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MTAxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MTAzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MTEzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjMxIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjMyIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjMzIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjM0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjM1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9OTcgIGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjI0IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjI1IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjI2IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjI3IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjI4IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1MyBzZWNvbmQ9MjI5IGFtb3VudD0tMVxyXG5rZXJuaW5nIGZpcnN0PTI1NSBzZWNvbmQ9MzQgIGFtb3VudD0xXHJcbmtlcm5pbmcgZmlyc3Q9MjU1IHNlY29uZD0zOSAgYW1vdW50PTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTExMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTI0MiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTI0MyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTI0NCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTI0NSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTI0NiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTQ0ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTQ2ICBhbW91bnQ9LThcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTk5ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTEwMCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTEwMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTEwMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTExMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIzMSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIzMiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIzMyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIzNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIzNSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTk3ICBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIyNCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIyNSBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIyNiBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIyNyBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIyOCBhbW91bnQ9LTFcclxua2VybmluZyBmaXJzdD0yNTUgc2Vjb25kPTIyOSBhbW91bnQ9LTFcclxuYDtcclxufSIsIi8qKlxyXG4qIGRhdC1ndWlWUiBKYXZhc2NyaXB0IENvbnRyb2xsZXIgTGlicmFyeSBmb3IgVlJcclxuKiBodHRwczovL2dpdGh1Yi5jb20vZGF0YWFydHMvZGF0Lmd1aVZSXHJcbipcclxuKiBDb3B5cmlnaHQgMjAxNiBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIEluYy5cclxuKlxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4qXHJcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4qXHJcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgY3JlYXRlSW50ZXJhY3Rpb24gZnJvbSAnLi9pbnRlcmFjdGlvbic7XHJcbmltcG9ydCB7Z2V0VG9wTGV2ZWxGb2xkZXJ9IGZyb20gJy4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSggeyBncm91cCwgcGFuZWwgfSA9IHt9ICl7XHJcblxyXG4gIGNvbnN0IGludGVyYWN0aW9uID0gY3JlYXRlSW50ZXJhY3Rpb24oIHBhbmVsICk7XHJcblxyXG4gIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUHJlc3NlZCcsIGhhbmRsZU9uUHJlc3MgKTtcclxuICBpbnRlcmFjdGlvbi5ldmVudHMub24oICd0aWNrJywgaGFuZGxlVGljayApO1xyXG4gIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUmVsZWFzZWQnLCBoYW5kbGVPblJlbGVhc2UgKTtcclxuXHJcbiAgY29uc3QgdGVtcE1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XHJcbiAgY29uc3QgdFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuXHJcbiAgLy9sZXQgb2xkUGFyZW50O1xyXG4gIFxyXG4gIGZ1bmN0aW9uIGhhbmRsZVRpY2soIHsgaW5wdXQgfSA9IHt9ICl7XHJcbiAgICBjb25zdCBmb2xkZXIgPSBnZXRUb3BMZXZlbEZvbGRlcihncm91cCk7XHJcbiAgICBpZiggZm9sZGVyID09PSB1bmRlZmluZWQgIHx8IGZvbGRlci5ncmFiRGlzYWJsZWQgKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBpbnB1dC5tb3VzZSApe1xyXG4gICAgICBpZiggaW5wdXQucHJlc3NlZCAmJiBpbnB1dC5zZWxlY3RlZCAmJiBpbnB1dC5yYXljYXN0LnJheS5pbnRlcnNlY3RQbGFuZSggaW5wdXQubW91c2VQbGFuZSwgaW5wdXQubW91c2VJbnRlcnNlY3Rpb24gKSApe1xyXG4gICAgICAgIGlmKCBpbnB1dC5pbnRlcmFjdGlvbi5wcmVzcyA9PT0gaW50ZXJhY3Rpb24gKXtcclxuICAgICAgICAgIGlucHV0Lm1vdXNlSW50ZXJzZWN0aW9uLnN1YiggaW5wdXQubW91c2VPZmZzZXQgKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIGlucHV0LnNlbGVjdGVkLnBhcmVudC51cGRhdGVNYXRyaXhXb3JsZCgpOyAgICAgICAgICBcclxuICAgICAgICAgIGlucHV0LnNlbGVjdGVkLnBhcmVudC53b3JsZFRvTG9jYWwoaW5wdXQubW91c2VJbnRlcnNlY3Rpb24pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvL05PVEU6OiBpbiBvcnRob2dyYXBoaWMgbW9kZSwgd2UndmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBwb3NpdGlvbiBvZiBmb2xkZXJzLFxyXG4gICAgICAgICAgLy9tZWFuaW5nIHRoZXJlIGNvdWxkIGJlIHNvbWUgaW5jb25zaXN0ZW5jeSB3aXRoIHRoZSBtb3VzZUludGVyc2VjdGlvbiBwb2ludCBubyBsb25nZXIgYmVpbmcgcmlnaHQuLi5cclxuICAgICAgICAgIC8vSSB0aG91Z2h0IHRoaXMgd2FzIHBsYXlpbmcgYSByb2xlIGluIGEgYnVnIHdpdGggb3J0aG9ncmFwaGljIGZvbGRlciBsYXlvdXQsIGFwcGVhcnMgb2sgZm9yIG5vdy5cclxuICAgICAgICAgIGZvbGRlci5wb3NpdGlvbi5jb3B5KGlucHV0Lm1vdXNlSW50ZXJzZWN0aW9uKTtcclxuXHJcbiAgICAgICAgICBmb2xkZXIudXBkYXRlTWF0cml4KCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoIGlucHV0LmludGVyc2VjdGlvbnMubGVuZ3RoID4gMCApe1xyXG4gICAgICAgIGNvbnN0IGhpdE9iamVjdCA9IGlucHV0LmludGVyc2VjdGlvbnNbIDAgXS5vYmplY3Q7XHJcbiAgICAgICAgaWYoIGhpdE9iamVjdCA9PT0gcGFuZWwgKXtcclxuICAgICAgICAgIGhpdE9iamVjdC51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG4gICAgICAgICAgLy9mYWlsaW5nIHRvIGFjY291bnQgZm9yIHRoZSBwb3NpdGlvbiBub3QgbmVjZXNzYXJpbHkgYmVpbmcgdGhlIHdvcmxkIHBvc2l0aW9uP1xyXG4gICAgICAgICAgdFBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggaGl0T2JqZWN0Lm1hdHJpeFdvcmxkICk7XHJcblxyXG4gICAgICAgICAgaW5wdXQubW91c2VQbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCggaW5wdXQubW91c2VDYW1lcmEuZ2V0V29ybGREaXJlY3Rpb24oIGlucHV0Lm1vdXNlUGxhbmUubm9ybWFsICksIHRQb3NpdGlvbiApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coIGlucHV0Lm1vdXNlUGxhbmUgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhbmRsZU9uUHJlc3MoIHAgKXtcclxuXHJcbiAgICBsZXQgeyBpbnB1dE9iamVjdCwgaW5wdXQgfSA9IHA7XHJcblxyXG4gICAgY29uc3QgZm9sZGVyID0gZ2V0VG9wTGV2ZWxGb2xkZXIoZ3JvdXApO1xyXG4gICAgaWYoIGZvbGRlciA9PT0gdW5kZWZpbmVkICl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiggZm9sZGVyLmJlaW5nTW92ZWQgPT09IHRydWUgKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBpbnB1dC5tb3VzZSApe1xyXG4gICAgICBpZiggaW5wdXQuaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICl7XHJcbiAgICAgICAgaWYoIGlucHV0LnJheWNhc3QucmF5LmludGVyc2VjdFBsYW5lKCBpbnB1dC5tb3VzZVBsYW5lLCBpbnB1dC5tb3VzZUludGVyc2VjdGlvbiApICl7XHJcbiAgICAgICAgICBjb25zdCBoaXRPYmplY3QgPSBpbnB1dC5pbnRlcnNlY3Rpb25zWyAwIF0ub2JqZWN0O1xyXG4gICAgICAgICAgaWYoIGhpdE9iamVjdCAhPT0gcGFuZWwgKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlucHV0LnNlbGVjdGVkID0gZm9sZGVyO1xyXG5cclxuICAgICAgICAgIGlmIChmb2xkZXIuZ3JhYkRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaW5wdXQuc2VsZWN0ZWQudXBkYXRlTWF0cml4V29ybGQoKTtcclxuICAgICAgICAgIHRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGlucHV0LnNlbGVjdGVkLm1hdHJpeFdvcmxkICk7XHJcblxyXG4gICAgICAgICAgaW5wdXQubW91c2VPZmZzZXQuY29weSggaW5wdXQubW91c2VJbnRlcnNlY3Rpb24gKS5zdWIoIHRQb3NpdGlvbiApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coIGlucHV0Lm1vdXNlT2Zmc2V0ICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2V7XHJcbiAgICAgIGlmIChmb2xkZXIuZ3JhYkRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgIFxyXG4gICAgICB0ZW1wTWF0cml4LmdldEludmVyc2UoIGlucHV0T2JqZWN0Lm1hdHJpeFdvcmxkICk7XHJcblxyXG4gICAgICBmb2xkZXIubWF0cml4LnByZW11bHRpcGx5KCB0ZW1wTWF0cml4ICk7XHJcbiAgICAgIGZvbGRlci5tYXRyaXguZGVjb21wb3NlKCBmb2xkZXIucG9zaXRpb24sIGZvbGRlci5xdWF0ZXJuaW9uLCBmb2xkZXIuc2NhbGUgKTtcclxuXHJcbiAgICAgIGZvbGRlci5vbGRQYXJlbnQgPSBmb2xkZXIucGFyZW50O1xyXG4gICAgICAvL2ZhaWxpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHBvc2l0aW9uIG5vdCBuZWNlc3NhcmlseSBiZWluZyB0aGUgd29ybGQgcG9zaXRpb24/XHJcbiAgICAgIGlucHV0T2JqZWN0LmFkZCggZm9sZGVyICk7IFxyXG4gICAgfVxyXG5cclxuICAgIHAubG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBmb2xkZXIuYmVpbmdNb3ZlZCA9IHRydWU7XHJcblxyXG4gICAgaW5wdXQuZXZlbnRzLmVtaXQoICdncmFiYmVkJywgaW5wdXQgKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhbmRsZU9uUmVsZWFzZSggcCApe1xyXG5cclxuICAgIGxldCB7IGlucHV0T2JqZWN0LCBpbnB1dCB9ID0gcDtcclxuXHJcbiAgICBjb25zdCBmb2xkZXIgPSBnZXRUb3BMZXZlbEZvbGRlcihncm91cCk7XHJcbiAgICBpZiggZm9sZGVyID09PSB1bmRlZmluZWQgKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBmb2xkZXIuYmVpbmdNb3ZlZCA9PT0gZmFsc2UgKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBpbnB1dC5tb3VzZSApe1xyXG4gICAgICBpbnB1dC5zZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcblxyXG4gICAgICBpZiggZm9sZGVyLm9sZFBhcmVudCA9PT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb2xkZXIubWF0cml4LnByZW11bHRpcGx5KCBpbnB1dE9iamVjdC5tYXRyaXhXb3JsZCApO1xyXG4gICAgICBmb2xkZXIubWF0cml4LmRlY29tcG9zZSggZm9sZGVyLnBvc2l0aW9uLCBmb2xkZXIucXVhdGVybmlvbiwgZm9sZGVyLnNjYWxlICk7XHJcbiAgICAgIGZvbGRlci5vbGRQYXJlbnQuYWRkKCBmb2xkZXIgKTtcclxuICAgICAgZm9sZGVyLm9sZFBhcmVudCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBmb2xkZXIuYmVpbmdNb3ZlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlucHV0LmV2ZW50cy5lbWl0KCAnZ3JhYlJlbGVhc2VkJywgZm9sZGVyICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaW50ZXJhY3Rpb247XHJcbn0iLCJleHBvcnQgY29uc3QgZ3JhYkJhciA9IChmdW5jdGlvbigpe1xyXG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgaW1hZ2Uuc3JjID0gYGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFBZ0NBWUFBQUNpblg2RUFBQUFDWEJJV1hNQUFDNGpBQUF1SXdGNHBUOTJBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFEc2thVlJZZEZoTlREcGpiMjB1WVdSdlltVXVlRzF3QUFBQUFBQThQM2h3WVdOclpYUWdZbVZuYVc0OUl1Kzd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJL1BnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSkJaRzlpWlNCWVRWQWdRMjl5WlNBMUxqWXRZekV6TWlBM09TNHhOVGt5T0RRc0lESXdNVFl2TURRdk1Ua3RNVE02TVRNNk5EQWdJQ0FnSUNBZ0lDSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uaHRjRDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cHdhRzkwYjNOb2IzQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2Y0dodmRHOXphRzl3THpFdU1DOGlDaUFnSUNBZ0lDQWdJQ0FnSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwemRFVjJkRDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDNOVWVYQmxMMUpsYzI5MWNtTmxSWFpsYm5Raklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDBhV1ptUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzUnBabVl2TVM0d0x5SUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaWGhwWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOWxlR2xtTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZUcxd09rTnlaV0YwYjNKVWIyOXNQa0ZrYjJKbElGQm9iM1J2YzJodmNDQkRReUF5TURFMUxqVWdLRmRwYm1SdmQzTXBQQzk0YlhBNlEzSmxZWFJ2Y2xSdmIydytDaUFnSUNBZ0lDQWdJRHg0YlhBNlEzSmxZWFJsUkdGMFpUNHlNREUyTFRBNUxUSTRWREUyT2pJMU9qTXlMVEEzT2pBd1BDOTRiWEE2UTNKbFlYUmxSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaHRjRHBOYjJScFpubEVZWFJsUGpJd01UWXRNRGt0TWpoVU1UWTZNemM2TWpNdE1EYzZNREE4TDNodGNEcE5iMlJwWm5sRVlYUmxQZ29nSUNBZ0lDQWdJQ0E4ZUcxd09rMWxkR0ZrWVhSaFJHRjBaVDR5TURFMkxUQTVMVEk0VkRFMk9qTTNPakl6TFRBM09qQXdQQzk0YlhBNlRXVjBZV1JoZEdGRVlYUmxQZ29nSUNBZ0lDQWdJQ0E4WkdNNlptOXliV0YwUG1sdFlXZGxMM0J1Wnp3dlpHTTZabTl5YldGMFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDR6UEM5d2FHOTBiM05vYjNBNlEyOXNiM0pOYjJSbFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa2xEUTFCeWIyWnBiR1UrYzFKSFFpQkpSVU0yTVRrMk5pMHlMakU4TDNCb2IzUnZjMmh2Y0RwSlEwTlFjbTltYVd4bFBnb2dJQ0FnSUNBZ0lDQThlRzF3VFUwNlNXNXpkR0Z1WTJWSlJENTRiWEF1YVdsa09tRmhZVEZqTVRRekxUVXdabVV0T1RRME15MWhOVGhtTFdFeU0yVmtOVE0zTURkbU1Ed3ZlRzF3VFUwNlNXNXpkR0Z1WTJWSlJENEtJQ0FnSUNBZ0lDQWdQSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUStZV1J2WW1VNlpHOWphV1E2Y0dodmRHOXphRzl3T2pkbE56ZG1ZbVpqTFRnMVpEUXRNVEZsTmkxaFl6aG1MV0ZqTnpVMFpXUTFPRE0zWmp3dmVHMXdUVTA2Ukc5amRXMWxiblJKUkQ0S0lDQWdJQ0FnSUNBZ1BIaHRjRTFOT2s5eWFXZHBibUZzUkc5amRXMWxiblJKUkQ1NGJYQXVaR2xrT21NMVptTTBaR1l5TFRreFkyTXRaVEkwTVMwNFkyVmpMVE16T0RJeVkyUTFaV0ZsT1R3dmVHMXdUVTA2VDNKcFoybHVZV3hFYjJOMWJXVnVkRWxFUGdvZ0lDQWdJQ0FnSUNBOGVHMXdUVTA2U0dsemRHOXllVDRLSUNBZ0lDQWdJQ0FnSUNBZ1BISmtaanBUWlhFK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4eVpHWTZiR2tnY21SbU9uQmhjbk5sVkhsd1pUMGlVbVZ6YjNWeVkyVWlQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNSRmRuUTZZV04wYVc5dVBtTnlaV0YwWldROEwzTjBSWFowT21GamRHbHZiajRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhOMFJYWjBPbWx1YzNSaGJtTmxTVVErZUcxd0xtbHBaRHBqTldaak5HUm1NaTA1TVdOakxXVXlOREV0T0dObFl5MHpNemd5TW1Oa05XVmhaVGs4TDNOMFJYWjBPbWx1YzNSaGJtTmxTVVErQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4emRFVjJkRHAzYUdWdVBqSXdNVFl0TURrdE1qaFVNVFk2TWpVNk16SXRNRGM2TURBOEwzTjBSWFowT25kb1pXNCtDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh6ZEVWMmREcHpiMlowZDJGeVpVRm5aVzUwUGtGa2IySmxJRkJvYjNSdmMyaHZjQ0JEUXlBeU1ERTFMalVnS0ZkcGJtUnZkM01wUEM5emRFVjJkRHB6YjJaMGQyRnlaVUZuWlc1MFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBOEwzSmtaanBzYVQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhKa1pqcHNhU0J5WkdZNmNHRnljMlZVZVhCbFBTSlNaWE52ZFhKalpTSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh6ZEVWMmREcGhZM1JwYjI0K1kyOXVkbVZ5ZEdWa1BDOXpkRVYyZERwaFkzUnBiMjQrQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4emRFVjJkRHB3WVhKaGJXVjBaWEp6UG1aeWIyMGdZWEJ3YkdsallYUnBiMjR2ZG01a0xtRmtiMkpsTG5Cb2IzUnZjMmh2Y0NCMGJ5QnBiV0ZuWlM5d2JtYzhMM04wUlhaME9uQmhjbUZ0WlhSbGNuTStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZjbVJtT214cFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBOGNtUm1PbXhwSUhKa1pqcHdZWEp6WlZSNWNHVTlJbEpsYzI5MWNtTmxJajRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhOMFJYWjBPbUZqZEdsdmJqNXpZWFpsWkR3dmMzUkZkblE2WVdOMGFXOXVQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDU0YlhBdWFXbGtPbUZoWVRGak1UUXpMVFV3Wm1VdE9UUTBNeTFoTlRobUxXRXlNMlZrTlRNM01EZG1NRHd2YzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhOMFJYWjBPbmRvWlc0K01qQXhOaTB3T1MweU9GUXhOam96TnpveU15MHdOem93TUR3dmMzUkZkblE2ZDJobGJqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSE4wUlhaME9uTnZablIzWVhKbFFXZGxiblErUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVXVOU0FvVjJsdVpHOTNjeWs4TDNOMFJYWjBPbk52Wm5SM1lYSmxRV2RsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeHpkRVYyZERwamFHRnVaMlZrUGk4OEwzTjBSWFowT21Ob1lXNW5aV1ErQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHd2Y21SbU9teHBQZ29nSUNBZ0lDQWdJQ0FnSUNBOEwzSmtaanBUWlhFK0NpQWdJQ0FnSUNBZ0lEd3ZlRzF3VFUwNlNHbHpkRzl5ZVQ0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2VDNKcFpXNTBZWFJwYjI0K01Ud3ZkR2xtWmpwUGNtbGxiblJoZEdsdmJqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNekF3TURBd01DOHhNREF3TUR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K016QXdNREF3TUM4eE1EQXdNRHd2ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajRLSUNBZ0lDQWdJQ0FnUEhScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK01qd3ZkR2xtWmpwU1pYTnZiSFYwYVc5dVZXNXBkRDRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZRMjlzYjNKVGNHRmpaVDR4UEM5bGVHbG1Pa052Ykc5eVUzQmhZMlUrQ2lBZ0lDQWdJQ0FnSUR4bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNDJORHd2WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR6TWp3dlpYaHBaanBRYVhobGJGbEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvOFAzaHdZV05yWlhRZ1pXNWtQU0ozSWo4K09oRjdSd0FBQUNCalNGSk5BQUI2SlFBQWdJTUFBUG4vQUFDQTZRQUFkVEFBQU9wZ0FBQTZtQUFBRjIrU1g4VkdBQUFBbEVsRVFWUjQydXpac1EzQUlBeEVVVHVUWkpSc2t0NUxSRm1DZFRMYXBVS0NCaWpvL0YwaG4yU2tKeElLWEpKbHJzT1NGd0FBQUFCQTZ2S0k2TzdCVW9yWGRadTEvVkVXRVplWmZiTjVtL1phbWpmSytBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQmZ1YVNuYTdpL2RkMW1iWCtVU1RyTjdKN04yN1RYMHJ4UnhnbmdaWWlmSUFBQUFKQzRmZ0FBQVAvL0F3QXVNVlB3MjBoeEN3QUFBQUJKUlU1RXJrSmdnZz09YDtcclxuXHJcbiAgY29uc3QgdGV4dHVyZSA9IG5ldyBUSFJFRS5UZXh0dXJlKCk7IHRleHR1cmUubmFtZSA9ICd0dHR0MSdcclxuICB0ZXh0dXJlLmltYWdlID0gaW1hZ2U7XHJcbiAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgLy8gdGV4dHVyZS5taW5GaWx0ZXIgPSBUSFJFRS5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI7XHJcbiAgLy8gdGV4dHVyZS5tYWdGaWx0ZXIgPSBUSFJFRS5MaW5lYXJGaWx0ZXI7XHJcbiAgLy8gdGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gICAgLy8gY29sb3I6IDB4ZmYwMDAwLFxyXG4gICAgc2lkZTogVEhSRUUuRG91YmxlU2lkZSxcclxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgbWFwOiB0ZXh0dXJlXHJcbiAgfSk7XHJcbiAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gMC41O1xyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoIGltYWdlLndpZHRoIC8gMTAwMCwgaW1hZ2UuaGVpZ2h0IC8gMTAwMCwgMSwgMSApO1xyXG5cclxuICAgIGNvbnN0IG1lc2ggPSBuZXcgVEhSRUUuTWVzaCggZ2VvbWV0cnksIG1hdGVyaWFsICk7XHJcbiAgICByZXR1cm4gbWVzaDtcclxuICB9XHJcblxyXG59KCkpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRvd25BcnJvdyA9IChmdW5jdGlvbigpe1xyXG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgaW1hZ2Uuc3JjID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSUFBQUFCQUNBWUFBQURTMW45L0FBQUFDWEJJV1hNQUFDeExBQUFzU3dHbFBaYXBBQUE0SzJsVVdIUllUVXc2WTI5dExtRmtiMkpsTG5odGNBQUFBQUFBUEQ5NGNHRmphMlYwSUdKbFoybHVQU0x2dTc4aUlHbGtQU0pYTlUwd1RYQkRaV2hwU0hweVpWTjZUbFJqZW10ak9XUWlQejRLUEhnNmVHMXdiV1YwWVNCNGJXeHVjenA0UFNKaFpHOWlaVHB1Y3pwdFpYUmhMeUlnZURwNGJYQjBhejBpUVdSdlltVWdXRTFRSUVOdmNtVWdOUzQyTFdNeE16SWdOemt1TVRVNU1qZzBMQ0F5TURFMkx6QTBMekU1TFRFek9qRXpPalF3SUNBZ0lDQWdJQ0FpUGdvZ0lDQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlDaUFnSUNBZ0lDQWdJQ0FnSUhodGJHNXpPbVJqUFNKb2RIUndPaTh2Y0hWeWJDNXZjbWN2WkdNdlpXeGxiV1Z1ZEhNdk1TNHhMeUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02Y0dodmRHOXphRzl3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzQm9iM1J2YzJodmNDOHhMakF2SWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZjM1JGZG5ROUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlVWMlpXNTBJeUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIaHRjRHBEY21WaGRHOXlWRzl2YkQ1QlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOUzQxSUNoWGFXNWtiM2R6S1R3dmVHMXdPa055WldGMGIzSlViMjlzUGdvZ0lDQWdJQ0FnSUNBOGVHMXdPa055WldGMFpVUmhkR1UrTWpBeE5pMHhNQzB4T0ZReE56b3pNem93Tmkwd056b3dNRHd2ZUcxd09rTnlaV0YwWlVSaGRHVStDaUFnSUNBZ0lDQWdJRHg0YlhBNlRXOWthV1o1UkdGMFpUNHlNREUyTFRFd0xUSXdWREl4T2pFNE9qSTFMVEEzT2pBd1BDOTRiWEE2VFc5a2FXWjVSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaHRjRHBOWlhSaFpHRjBZVVJoZEdVK01qQXhOaTB4TUMweU1GUXlNVG94T0RveU5TMHdOem93TUR3dmVHMXdPazFsZEdGa1lYUmhSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BHUmpPbVp2Y20xaGRENXBiV0ZuWlM5d2JtYzhMMlJqT21admNtMWhkRDRLSUNBZ0lDQWdJQ0FnUEhCb2IzUnZjMmh2Y0RwRGIyeHZjazF2WkdVK016d3ZjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDRLSUNBZ0lDQWdJQ0FnUEhodGNFMU5Pa2x1YzNSaGJtTmxTVVErZUcxd0xtbHBaRG96TURReVlqSTBaUzFpTXpjMkxXSTBOR0l0T0dJNFl5MWxaVEZqWTJJellXVTFNRFU4TDNodGNFMU5Pa2x1YzNSaGJtTmxTVVErQ2lBZ0lDQWdJQ0FnSUR4NGJYQk5UVHBFYjJOMWJXVnVkRWxFUG5odGNDNWthV1E2TXpBME1tSXlOR1V0WWpNM05pMWlORFJpTFRoaU9HTXRaV1V4WTJOaU0yRmxOVEExUEM5NGJYQk5UVHBFYjJOMWJXVnVkRWxFUGdvZ0lDQWdJQ0FnSUNBOGVHMXdUVTA2VDNKcFoybHVZV3hFYjJOMWJXVnVkRWxFUG5odGNDNWthV1E2TXpBME1tSXlOR1V0WWpNM05pMWlORFJpTFRoaU9HTXRaV1V4WTJOaU0yRmxOVEExUEM5NGJYQk5UVHBQY21sbmFXNWhiRVJ2WTNWdFpXNTBTVVErQ2lBZ0lDQWdJQ0FnSUR4NGJYQk5UVHBJYVhOMGIzSjVQZ29nSUNBZ0lDQWdJQ0FnSUNBOGNtUm1PbE5sY1Q0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhKa1pqcHNhU0J5WkdZNmNHRnljMlZVZVhCbFBTSlNaWE52ZFhKalpTSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh6ZEVWMmREcGhZM1JwYjI0K1kzSmxZWFJsWkR3dmMzUkZkblE2WVdOMGFXOXVQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDU0YlhBdWFXbGtPak13TkRKaU1qUmxMV0l6TnpZdFlqUTBZaTA0WWpoakxXVmxNV05qWWpOaFpUVXdOVHd2YzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhOMFJYWjBPbmRvWlc0K01qQXhOaTB4TUMweE9GUXhOem96TXpvd05pMHdOem93TUR3dmMzUkZkblE2ZDJobGJqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSE4wUlhaME9uTnZablIzWVhKbFFXZGxiblErUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVXVOU0FvVjJsdVpHOTNjeWs4TDNOMFJYWjBPbk52Wm5SM1lYSmxRV2RsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dmNtUm1PbXhwUGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0prWmpwVFpYRStDaUFnSUNBZ0lDQWdJRHd2ZUcxd1RVMDZTR2x6ZEc5eWVUNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNlQzSnBaVzUwWVhScGIyNCtNVHd2ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajRLSUNBZ0lDQWdJQ0FnUEhScFptWTZXRkpsYzI5c2RYUnBiMjQrTWpnNE1EQXdNQzh4TURBd01Ed3ZkR2xtWmpwWVVtVnpiMngxZEdsdmJqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldWSmxjMjlzZFhScGIyNCtNamc0TURBd01DOHhNREF3TUR3dmRHbG1aanBaVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStNand2ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0Mk5UVXpOVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01USTRQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQalkwUEM5bGVHbG1PbEJwZUdWc1dVUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ1BDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0NpQWdJRHd2Y21SbU9sSkVSajRLUEM5NE9uaHRjRzFsZEdFK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2p3L2VIQmhZMnRsZENCbGJtUTlJbmNpUHo1VWlsejBBQUFBSUdOSVVrMEFBSG9sQUFDQWd3QUErZjhBQUlEcEFBQjFNQUFBNm1BQUFEcVlBQUFYYjVKZnhVWUFBQUpkU1VSQlZIamE3TjNMY2NKQUVJVGhSdVc3bmNVZVRRaGtRQWlJRE1nSWhVSUljRlFXSmdKODhGS2xvdndBck4yZDZaNDVjWkdBL1Q5dmlZZnR4ZVZ5UVl6dWRMRUVBU0FtQU1RRWdCakplV2wxeHltbE53QUhBTWR4SEh2RnhVOHBEUUNXQUZiak9IN0k3QUNUK084QU5ua2hGT052OGhvYzhwcndBN2lKZngwcEJKUDQxMm1Hb0RNUVh3ckJOL0diSXVpTXhKZEE4RXY4WmdnNlEvR3BFZHdSdndtQ3psaDhTZ1FQeEsrT29NWU9NRHdZbndyQkUvR25DQWJYQVBLVFgvL2pGSnVVVXU4NGZ2OWsvT3VzUy84UWRBYmwzODdlSTRMOG1QY3puS3JvVGxoeUIxak9lQzVYQ0dhTVgySXRxd0ZZQVRpcElTZ1EvNVRYMGhlQS9ONjJGSUpTOFV0K1RsRDBJbEFKZ2NmNFZWNEdLaUR3R3IvVyt3RFVDRHpIcndhQUZZSDMrRlVCc0NGZ2lGOGRBQXNDbHZoTkFIaEh3QlMvR1FDdkNOamlOd1hnRFFGai9PWUF2Q0Jnalc4Q2dIVUV6UEhOQUxDS2dEMitLUURXRUNqRU53ZkFDZ0tWK0NZQlRCRDBBTTYxRVJTSWZ3YlFXNHh2RmtCR2NNdzdRVFVFaGVLdjhuTkJBRENNUURHK2VRQzFFS2pHQjRDRmw3OFJsRkphNHVzWFRGN25qSlJ2ejM1ZUQvRmRBU2lJQUtyeDNRRW9oQUNxOFYxY0ExUzZKcENNN3hLQVFRUnU0N3NGWUFpQjYvaXVBUmhBNEQ2K2V3QU5FVkRFcHdEUUFBRk5mQm9BRlJGUXhhY0NVQUVCWFh3NkFBVVJVTWFuQkZBQUFXMThXZ0F6SXFDT1R3MWdCZ1QwOGVrQlRCRHNuamgweHg1ZkFrQkdNQURZUG5ESU5oK0RBS0NIUUNhK0ZJQTdFVWpGbHdQd0J3SzUrSklBZmtBZ0dSOXcrSld3T2VmNnpXRFYrUElBWXVMZnhnV0FXSUlBRUJNQVlnSkFqT1I4RGdEKzZPemd2NHV5OWdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xyXG5cclxuICBjb25zdCB0ZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoKTsgdGV4dHVyZS5uYW1lID0gJ3R0dHQzJ1xyXG4gIHRleHR1cmUuaW1hZ2UgPSBpbWFnZTtcclxuICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICB0ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhck1pcE1hcExpbmVhckZpbHRlcjtcclxuICB0ZXh0dXJlLm1hZ0ZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICAvLyB0ZXh0dXJlLmFuaXNvdHJvcGljXHJcbiAgLy8gdGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gICAgLy8gY29sb3I6IDB4ZmYwMDAwLFxyXG4gICAgc2lkZTogVEhSRUUuRG91YmxlU2lkZSxcclxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgbWFwOiB0ZXh0dXJlXHJcbiAgfSk7XHJcbiAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gMC4yO1xyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgIGNvbnN0IGggPSAwLjM7XHJcbiAgICBjb25zdCBnZW8gPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeSggaW1hZ2Uud2lkdGggLyAxMDAwICogaCwgaW1hZ2UuaGVpZ2h0IC8gMTAwMCAqIGgsIDEsIDEgKTtcclxuICAgIGdlby50cmFuc2xhdGUoIC0wLjAwNSwgLTAuMDA0LCAwICk7XHJcbiAgICByZXR1cm4gbmV3IFRIUkVFLk1lc2goIGdlbywgbWF0ZXJpYWwgKTtcclxuICB9XHJcbn0oKSk7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGNoZWNrbWFyayA9IChmdW5jdGlvbigpe1xyXG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgaW1hZ2Uuc3JjID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSUFBQUFCQUNBWUFBQURTMW45L0FBQUFDWEJJV1hNQUFDeExBQUFzU3dHbFBaYXBBQUE0SzJsVVdIUllUVXc2WTI5dExtRmtiMkpsTG5odGNBQUFBQUFBUEQ5NGNHRmphMlYwSUdKbFoybHVQU0x2dTc4aUlHbGtQU0pYTlUwd1RYQkRaV2hwU0hweVpWTjZUbFJqZW10ak9XUWlQejRLUEhnNmVHMXdiV1YwWVNCNGJXeHVjenA0UFNKaFpHOWlaVHB1Y3pwdFpYUmhMeUlnZURwNGJYQjBhejBpUVdSdlltVWdXRTFRSUVOdmNtVWdOUzQyTFdNeE16SWdOemt1TVRVNU1qZzBMQ0F5TURFMkx6QTBMekU1TFRFek9qRXpPalF3SUNBZ0lDQWdJQ0FpUGdvZ0lDQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlDaUFnSUNBZ0lDQWdJQ0FnSUhodGJHNXpPbVJqUFNKb2RIUndPaTh2Y0hWeWJDNXZjbWN2WkdNdlpXeGxiV1Z1ZEhNdk1TNHhMeUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02Y0dodmRHOXphRzl3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzQm9iM1J2YzJodmNDOHhMakF2SWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZjM1JGZG5ROUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlVWMlpXNTBJeUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIaHRjRHBEY21WaGRHOXlWRzl2YkQ1QlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhOUzQxSUNoWGFXNWtiM2R6S1R3dmVHMXdPa055WldGMGIzSlViMjlzUGdvZ0lDQWdJQ0FnSUNBOGVHMXdPa055WldGMFpVUmhkR1UrTWpBeE5pMHhNQzB4T0ZReE56b3pNem93Tmkwd056b3dNRHd2ZUcxd09rTnlaV0YwWlVSaGRHVStDaUFnSUNBZ0lDQWdJRHg0YlhBNlRXOWthV1o1UkdGMFpUNHlNREUyTFRFd0xUSXdWREl4T2pNek9qVXpMVEEzT2pBd1BDOTRiWEE2VFc5a2FXWjVSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaHRjRHBOWlhSaFpHRjBZVVJoZEdVK01qQXhOaTB4TUMweU1GUXlNVG96TXpvMU15MHdOem93TUR3dmVHMXdPazFsZEdGa1lYUmhSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BHUmpPbVp2Y20xaGRENXBiV0ZuWlM5d2JtYzhMMlJqT21admNtMWhkRDRLSUNBZ0lDQWdJQ0FnUEhCb2IzUnZjMmh2Y0RwRGIyeHZjazF2WkdVK016d3ZjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDRLSUNBZ0lDQWdJQ0FnUEhodGNFMU5Pa2x1YzNSaGJtTmxTVVErZUcxd0xtbHBaRG8yT0RjeFlUazVZeTB6TmpFNUxUbGtOR0V0T0Rka05pMHdZV0U1WVRSaU5XVTRNamM4TDNodGNFMU5Pa2x1YzNSaGJtTmxTVVErQ2lBZ0lDQWdJQ0FnSUR4NGJYQk5UVHBFYjJOMWJXVnVkRWxFUG5odGNDNWthV1E2TmpnM01XRTVPV010TXpZeE9TMDVaRFJoTFRnM1pEWXRNR0ZoT1dFMFlqVmxPREkzUEM5NGJYQk5UVHBFYjJOMWJXVnVkRWxFUGdvZ0lDQWdJQ0FnSUNBOGVHMXdUVTA2VDNKcFoybHVZV3hFYjJOMWJXVnVkRWxFUG5odGNDNWthV1E2TmpnM01XRTVPV010TXpZeE9TMDVaRFJoTFRnM1pEWXRNR0ZoT1dFMFlqVmxPREkzUEM5NGJYQk5UVHBQY21sbmFXNWhiRVJ2WTNWdFpXNTBTVVErQ2lBZ0lDQWdJQ0FnSUR4NGJYQk5UVHBJYVhOMGIzSjVQZ29nSUNBZ0lDQWdJQ0FnSUNBOGNtUm1PbE5sY1Q0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhKa1pqcHNhU0J5WkdZNmNHRnljMlZVZVhCbFBTSlNaWE52ZFhKalpTSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh6ZEVWMmREcGhZM1JwYjI0K1kzSmxZWFJsWkR3dmMzUkZkblE2WVdOMGFXOXVQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDU0YlhBdWFXbGtPalk0TnpGaE9UbGpMVE0yTVRrdE9XUTBZUzA0TjJRMkxUQmhZVGxoTkdJMVpUZ3lOend2YzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEhOMFJYWjBPbmRvWlc0K01qQXhOaTB4TUMweE9GUXhOem96TXpvd05pMHdOem93TUR3dmMzUkZkblE2ZDJobGJqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSE4wUlhaME9uTnZablIzWVhKbFFXZGxiblErUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UVXVOU0FvVjJsdVpHOTNjeWs4TDNOMFJYWjBPbk52Wm5SM1lYSmxRV2RsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dmNtUm1PbXhwUGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0prWmpwVFpYRStDaUFnSUNBZ0lDQWdJRHd2ZUcxd1RVMDZTR2x6ZEc5eWVUNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNlQzSnBaVzUwWVhScGIyNCtNVHd2ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajRLSUNBZ0lDQWdJQ0FnUEhScFptWTZXRkpsYzI5c2RYUnBiMjQrTWpnNE1EQXdNQzh4TURBd01Ed3ZkR2xtWmpwWVVtVnpiMngxZEdsdmJqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldWSmxjMjlzZFhScGIyNCtNamc0TURBd01DOHhNREF3TUR3dmRHbG1aanBaVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStNand2ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0Mk5UVXpOVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01USTRQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQalkwUEM5bGVHbG1PbEJwZUdWc1dVUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ1BDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0NpQWdJRHd2Y21SbU9sSkVSajRLUEM5NE9uaHRjRzFsZEdFK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2p3L2VIQmhZMnRsZENCbGJtUTlJbmNpUHo1ejlSVDNBQUFBSUdOSVVrMEFBSG9sQUFDQWd3QUErZjhBQUlEcEFBQjFNQUFBNm1BQUFEcVlBQUFYYjVKZnhVWUFBQVR0U1VSQlZIamE3SnpiYjVSRkdNWi8yeGJDdlZoQVNFeFVpSTE0NHcwaFF0SEVHckhnSVNxZ042S2d0TllXQWIwdzBXbzFYcXJiUGJTbG9rWVN4Zk1oZW1YL0FhN3dHQVZxOFhUcDMwRFhpNW1KbTBhMnU5djMvYjZaMlhsdWRyT0hkdy9QTXpQUCs3NHpYNkZXcXlHRmdZRUJFbHBHRC9BZWNDdHdCL0RiY20rWW01c1QrL0N1OVAvbmltNmdDRHdDWEF0OERWeVg1UmRJQXNnUEJhQUVqTlE5ZGlQd0ZiQTVDU0IrVEFGUC9jL2pXNEhQZ0w0a2dIZ3hDd3cxZVA1bTRHTjdtd1FRRWJvcytVODA4ZHF0d0VmMk5na2dFcmMvMHlUNURuMTJPZGlTQkJBKythVVd5WGZZQW53RFhKOEVFRzZxTndrTXJ5REdacHNpM3BBRUVCNnFWM0Q3cmFJUCtOS21pa2tBZ2VBdDRJaGd2SnZzVEpBRTREa0t3Q25nc0VMc3Mwa0EvcS81czhBaGhkalR3RUZwZDVvZ1MzNVZhZVRQQWs4RGkwa0EvcEpmRWw3ekhVN1N1SEtZbGdBUDF2eXlrTnRmaWhrdDhwTUFaRWthVm9oYlZZcWJCQ0NJVThDVENuRkx3SmoybDA4Q1dObWEvN2FTMjY4Q3g2UU5YeEtBckhtZUJoNVhXazdHc2lBL1R3R01ZZmEvaFVwK21mWWFPODI0L2VHc3lNOUxBQzlnbWlQdkF6c0RJNy9McnMxRFNpTi9LSThmbENYR2dWZnQvVjdnRExBcklBRk1oK3IyZlJEQVM4REVrc2MyQWg4Qy9SM3M5c3ZBYUo1VFdsYmt2M3lGNTlaamRyMXM5M2phMTNMN0ZldjJhekVMWUx3QitRNXJNYjN1YlI0YXZwTktibjhhZUFhNG5MZTZ0UTNmUkpPdjdRVys4R2dtNkxFalZLT3hNNE01RDNBNTd4K3BLWUFYNnd4ZnM5Z0FmQUxzOElCOHJjYU9LeHZYZkZDNWxnREdnVmZhZks4emhydHkvRSswWEhrbEw3ZWZwUUFtV3BqMmx4UEJiVG44SjdQbzFmWkg4UXpTQW5qTmpuNEpyTWVjanNtcVdGUUEzbFZ5K3lYcjlvbGRBSGNLeDdzYStEd0RZOWhqOC95RGlxbmVZaWNJNEZIZ1IrR1lhNVd6QTgzR3poUncxRmZ5TlFUd0MzQ1B2WlhFT3VCVHpFVVVKTEVxZzFUUFcvSzFUT0Nmd0NCd1VUanVOY2lXamJzeFpWaU5WQyszMnI0dmFlQWZ3RjNBZ25EY1RWWUV0d3VOVUEzeXk1amR1M1N5QUFCK0IzWXJMQWNiQk9vRTd5aE4rNU4yelNjSndHQWVlQUQ0VGpodUw2YUIxS29uNkxia1A2WTA4by9qU1lYUEZ3RUFuQWNlVmhEQlZTMW1CNjZ4bzBIK0ZLYXhzMGhneUtvZGZBRjRFUGhKcVU2dzNFeXd5aHF6UTBya2o0UklmcFlDQUxnRTdMRXpnaVJjeGJDL3djaXZvRlBlZGVRSGk2eTNoUDFsamVHOFVvcTRORHNvWUlvOFdqdDVnaVkvRHdIVXA0aS9LbVFIWitwRVVNRHM1TkZ3KzBVeU9MUVJxd0RjY25BdjhMMXczSFhBYVpzaXZxNWsrSXJBQ1NKQm5xZUQ1NEVEd0FmQUxZSnhOd0hmS3BteXNpVi9NUllCNUgweTZBS3dIL2hCT081cVlJMkM0VHNhRS9rK0NBRE0xYkgzSWw4eGxFVFZHcjRha2NHWHM0Ri9BM2ZiR2NFM1ZBaW90aCtxQU1CMEVYZDdKb0pKUE56R0Zhc0F3RFNRQnBIZlZOS3UyejlHNVBEeGVQZ0M4QkJ3THVlUmZ5TEdOVDhFQVlEWlRISUErUVpTczJ2KzhkamNmbWdDY0hXQys1RnZJQzNuOWtjN2hYemZCZUNNNFI3a3k4WWQ1L1pERlFEODEwQzZxUGdaMGJ2OWtBVlFueUpxRkl2ZXhHem1JQW5BYjF3QzdoTTJoa1hnV1RvWW9WMGx6RFdRSkZMRTZCbzduU0FBbHlMdVkyVU5wQW9aWG9vdENVQWVDNWdHMHM5dGtqOUtRdEFDQU5OQUdxUzFQWWFsUkg0OEFuQXBZclBieTRvRWRtZ2pDYUQ1RkhFdmpiZVh2WUVwN3laRUtBRG5DZlpiRWZ3RFBJODVMK0RJZjQ0T2FPeTBnMzhIQU0vZTdndUlSeDk0QUFBQUFFbEZUa1N1UW1DQyc7XHJcblxyXG4gIGNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpOyB0ZXh0dXJlLm5hbWUgPSAndHR0dDMnXHJcbiAgdGV4dHVyZS5pbWFnZSA9IGltYWdlO1xyXG4gIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIHRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyO1xyXG4gIHRleHR1cmUubWFnRmlsdGVyID0gVEhSRUUuTGluZWFyRmlsdGVyO1xyXG4gIC8vIHRleHR1cmUuYW5pc290cm9waWNcclxuICAvLyB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xyXG5cclxuICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAvLyBjb2xvcjogMHhmZjAwMDAsXHJcbiAgICBzaWRlOiBUSFJFRS5Eb3VibGVTaWRlLFxyXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICBtYXA6IHRleHR1cmVcclxuICB9KTtcclxuICBtYXRlcmlhbC5hbHBoYVRlc3QgPSAwLjI7XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbihoID0gMC40KXtcclxuICAgIC8vY29uc3QgaCA9IDAuNDtcclxuICAgIGNvbnN0IGdlbyA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KCBpbWFnZS53aWR0aCAvIDEwMDAgKiBoLCBpbWFnZS5oZWlnaHQgLyAxMDAwICogaCwgMSwgMSApO1xyXG4gICAgZ2VvLnRyYW5zbGF0ZSggMC4wMjUgKiBoLzAuNCwgMCwgMCApO1xyXG4gICAgcmV0dXJuIG5ldyBUSFJFRS5NZXNoKCBnZW8sIG1hdGVyaWFsICk7XHJcbiAgfVxyXG59KCkpO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBkb2NrID0gKGZ1bmN0aW9uKCl7XHJcbiAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICBpbWFnZS5zcmMgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJQUFBQUNBQkFNQUFBQXhFSHo0QUFBQkcybFVXSFJZVFV3NlkyOXRMbUZrYjJKbExuaHRjQUFBQUFBQVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0S1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVdFMVFJRU52Y21VZ05TNDFMakFpUGdvZ1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNEtJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWk4K0NpQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdvOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K0drcXI2Z0FBQVlGcFEwTlFjMUpIUWlCSlJVTTJNVGsyTmkweUxqRUFBQ2lSZFpIUEswUlJGTWMvWm9nTURiR3dzSmcwMkJneGFtS2pqSVNhTkkxUmZtMW1udm1oNW8zWGUwK2FiSld0b3NUR3J3Vi9BVnRsclJTUmtvV1ZOYkZCejNtZW1rbm0zTTQ5bi91OTk1enVQUmRjOFp5aUdwVTlvT1pOUFRZYTlrM1B6UHFxbjZpbENnK05kQ1lVUXh1S1JpT1V0ZmRiS3V4NEhiQnJsVC8zcjNrV1VvWUNGVFhDZzRxbW04Smp3cEVWVTdONVM3aFp5U1lXaEUrRXUzUzVvUENOclNjZGZyWTU0L0NuelhvOE5neXVCbUZmcG9TVEpheGtkVlZZWG81ZnpTMHJ2L2V4WDFLWHlrOU5TbXdUYjhVZ3hpaGhmSXd6d2pBaGVobVFPVVNBSU4yeW9reCt6MC8rQkV1U3E4aXNVVUJua1F4WlRMcEVYWmJxS1lscDBWTXljaFRzL3YvdHE1SHVDenJWNjhKUTlXaFpyKzFRdlFsZkc1YjFjV0JaWDRmZ2ZvRHpmREYvYVIvNjMwVGZLR3IrUGZDdXdlbEZVVXR1dzlrNnROeHJDVDN4STduRlhlazB2QnhEL1F3MFhVSHRuTk96MzMyTzdpQytLbDkxQ1R1NzBDSG52ZlBmSXlobng5aEFVVTBBQUFBU1VFeFVSZno4L0ZWVlZWMWRYZi8vLzM5L2Z5WkZ5Yitoak1jQUFBQUdkRkpPVS8vLy8vLy9BTE8vcEw4QUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUVFU1VSQlZHaUI3ZGhCRG9Nd0RFUlI3alRpSkNQdWY1V3VtcGhWeFh5a1ZKR3pJcEo1Y2dza2RvNExqcU9CclFBOUhBMDAwTUQrd1BWanZBV2NGQmp6RUJnSnBNQ2NaOEJNSUFUS1BBSktBaGxRNXdud1RjQXBNQzVEWUNTUUF2ZXI1OEJNSUFUS0RSRlFFc2lBR2s4QVUwQVFNQVVFQVZOQUVEQUZCQUZUUUJBd0JRUUJVMEFRTUFVRUFWTkFFREFGQkFGVFFCRHdjZ0QvQlA0bjRzZklYeVQ4S3ZPUENYL09mRUhCU3hwZlZQR3l6amNXdkxYeHpSVnY3N3pBd0NVT0w3SndtY2NMVFZ6cThtSTdML2ZQa2tJRTRKYUhOMTI0N2VPTkoyNTllZk45aTFsekFGR0RGaDNDbEtoVkIxRXpiTmxoM0lqN3d4UE5CaHBvWURXUWpnYTJBRDVTL0N5SXZibXE3Z0FBQUFCSlJVNUVya0pnZ2c9PSc7XHJcblxyXG4gIGNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpOyB0ZXh0dXJlLm5hbWUgPSAndHR0dDQnXHJcbiAgdGV4dHVyZS5pbWFnZSA9IGltYWdlO1xyXG4gIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIHRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyO1xyXG4gIHRleHR1cmUubWFnRmlsdGVyID0gVEhSRUUuTGluZWFyRmlsdGVyO1xyXG4gIC8vIHRleHR1cmUuYW5pc290cm9waWNcclxuICAvLyB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xyXG5cclxuICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAvLyBjb2xvcjogMHhmZjAwMDAsXHJcbiAgICBzaWRlOiBUSFJFRS5Eb3VibGVTaWRlLFxyXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICBtYXA6IHRleHR1cmVcclxuICB9KTtcclxuICBtYXRlcmlhbC5hbHBoYVRlc3QgPSAwLjI7XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbihoID0gMC40KXtcclxuICAgIC8vY29uc3QgaCA9IDAuNDtcclxuICAgIGNvbnN0IGdlbyA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KCBpbWFnZS53aWR0aCAvIDEwMDAgKiBoLCBpbWFnZS5oZWlnaHQgLyAxMDAwICogaCwgMSwgMSApO1xyXG4gICAgZ2VvLnRyYW5zbGF0ZSggMC4wMjUgKiBoLzAuNCwgMCwgMCApO1xyXG4gICAgcmV0dXJuIG5ldyBUSFJFRS5NZXNoKCBnZW8sIG1hdGVyaWFsICk7XHJcbiAgfVxyXG59KCkpO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bmRvY2sgPSAoZnVuY3Rpb24oKXtcclxuICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gIGltYWdlLnNyYyA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUlBQUFBQ0FCQU1BQUFBeEVIejRBQUFCRzJsVVdIUllUVXc2WTI5dExtRmtiMkpsTG5odGNBQUFBQUFBUEQ5NGNHRmphMlYwSUdKbFoybHVQU0x2dTc4aUlHbGtQU0pYTlUwd1RYQkRaV2hwU0hweVpWTjZUbFJqZW10ak9XUWlQejRLUEhnNmVHMXdiV1YwWVNCNGJXeHVjenA0UFNKaFpHOWlaVHB1Y3pwdFpYUmhMeUlnZURwNGJYQjBhejBpV0UxUUlFTnZjbVVnTlM0MUxqQWlQZ29nUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJaTgrQ2lBOEwzSmtaanBTUkVZK0Nqd3ZlRHA0YlhCdFpYUmhQZ284UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrR2txcjZnQUFBWUZwUTBOUWMxSkhRaUJKUlVNMk1UazJOaTB5TGpFQUFDaVJkWkhQSzBSUkZNYy9ab2dNRGJHd3NKZzAyQmd4YW1LampJU2FOSTFSZm0xbW52bWg1bzNYZTArYWJKV3Rvc1RHcndWL0FWdGxyUlNSa29XVk5iRkJ6M21lbWtubTNNNDluL3U5OTV6dVBSZGM4WnlpR3BVOW9PWk5QVFlhOWszUHpQcXFuNmlsQ2crTmRDWVVReHVLUmlPVXRmZGJLdXg0SGJCcmxULzNyM2tXVW9ZQ0ZUWENnNHFtbThKandwRVZVN041UzdoWnlTWVdoRStFdTNTNW9QQ05yU2NkZnJZNTQvQ256WG84Tmd5dUJtRmZwb1NUSmF4a2RWVllYbzVmelMwcnYvZXhYMUtYeWs5TlNtd1RiOFVneGloaGZJd3p3akFoZWhtUU9VU0FJTjJ5b2t4K3owLytCRXVTcThpc1VVQm5rUXhaVExwRVhaYnFLWWxwMFZNeWNoVHMvdi90cTVIdUN6clY2OEpROVdoWnIrMVF2UWxmRzViMWNXQlpYNGZnZm9EemZERi9hUi82MzBUZktHcitQZkN1d2VsRlVVdHV3OWs2dE54ckNUM3hJN25GWGVrMHZCeEQvUXcwWFVIdG5OT3ozMzJPN2lDK0tsOTFDVHU3MENIbnZmUGZJeWhueDloQVVVMEFBQUFTVUV4VVJmejgvRlZWVlYxZFhmLy8vMzkvZnlaRnliK2hqTWNBQUFBR2RGSk9VLy8vLy8vL0FMTy9wTDhBQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBRVBTVVJCVkdpQjdkZ3hDc1F3REFUQS9Fbm9KVUwvLzhwVnNXV2xPTHdMVVRCeUZmYkVzTmM0ZGk0bjE5WEFVWUJzcmdZYWFPQjh3UDhzR2pBV2NCb3dGbkFhTUJad0dqQVdjQmpRVUFFQ0pBeGpRS2lBQWZKODJnUm1CUkNZRlZCZ1ZFQ0J4Ky9iZ0tac0c4Z0QrMENxc0Era0NRQllLd0RBT29JQVN3VUVXR1lnSUZhQWdEaUVBYUVDQm9RcEVKZ1ZRR0NPb2NDb2dBTHdqdlNvQUFQM0lBNG9Dd2dOS0FzSURXZzV3UDRGWlFFbkFXVUJKd0ZsZ1RzcjIxQkdWcldwenF6b3hSS3ltcGRyekVvT0dFdFdjY2hhczRLRFpzcmVQMnpuN1BVTHgzZ0VnVkdnNnRvM0N4UmRmVU9Cb3V0L0tGRDZDY1JZUUVqQVdFQkl3RmdnejMzd2kyWUREVFJRRGFDcmdTT0FIOEg4S3FnZ1lwQVVBQUFBQUVsRlRrU3VRbUNDJztcclxuXHJcbiAgY29uc3QgdGV4dHVyZSA9IG5ldyBUSFJFRS5UZXh0dXJlKCk7IHRleHR1cmUubmFtZSA9ICd0dHR0NSdcclxuICB0ZXh0dXJlLmltYWdlID0gaW1hZ2U7XHJcbiAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgdGV4dHVyZS5taW5GaWx0ZXIgPSBUSFJFRS5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI7XHJcbiAgdGV4dHVyZS5tYWdGaWx0ZXIgPSBUSFJFRS5MaW5lYXJGaWx0ZXI7XHJcbiAgLy8gdGV4dHVyZS5hbmlzb3Ryb3BpY1xyXG4gIC8vIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgIC8vIGNvbG9yOiAweGZmMDAwMCxcclxuICAgIHNpZGU6IFRIUkVFLkRvdWJsZVNpZGUsXHJcbiAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgIG1hcDogdGV4dHVyZVxyXG4gIH0pO1xyXG4gIG1hdGVyaWFsLmFscGhhVGVzdCA9IDAuMjtcclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKGggPSAwLjQpe1xyXG4gICAgLy9jb25zdCBoID0gMC40O1xyXG4gICAgY29uc3QgZ2VvID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoIGltYWdlLndpZHRoIC8gMTAwMCAqIGgsIGltYWdlLmhlaWdodCAvIDEwMDAgKiBoLCAxLCAxICk7XHJcbiAgICBnZW8udHJhbnNsYXRlKCAwLjAyNSAqIGgvMC40LCAwLCAwICk7XHJcbiAgICByZXR1cm4gbmV3IFRIUkVFLk1lc2goIGdlbywgbWF0ZXJpYWwgKTtcclxuICB9XHJcbn0oKSk7XHJcblxyXG4iLCIvKiogXHJcbiAqIEJpZyBidXR0b24gd2l0aCBhbiBpbWFnZSBvbiAod2hpY2ggbWlnaHQgY29tZSBmcm9tIGEgZmlsZSBvciBleGlzdGluZyB0ZXh0dXJlLFxyXG4gKiB0aGUgdGV4dHVyZSBtaWdodCBiZSBmcm9tIGEgUmVuZGVyVGFyZ2V0Li4uKS5cclxuICogXHJcbiAqIEFsc28gdXNhYmxlIGFzIGFuICd4eSBjb250cm9sbGVyJyB2aWEgYWRkWFlDb250cm9sbGVyIG1ldGhvZC5cclxuICogXHJcbiAqIEFQSSBzdWJqZWN0IHRvIGNoYW5nZS5cclxuICogXHJcbiAqIEknZCBwdXQgdGhpcyBtb3JlIHNlcGFyYXRlIGZyb20gdGhlIGRhdGd1aSBtb2R1bGVzIGJ1dCBuZWVkIHRvIHRoaW5rIGEgbGl0dGxlXHJcbiAqIGJpdCBhYm91dCBob3cgdG8gc3RydWN0dXJlIHRoYXQgZXRjLiAgVmVyeSB1bi1EUlksIGJ1dCBJJ20gc3RhcnRpbmcgYnkganVzdFxyXG4gKiBjb3B5aW5nIGV4aXN0aW5nIGJ1dHRvbi5qcyBpbiBpdHMgZW50aXJldHkuXHJcbiAqIFxyXG4gKiBUT0RPOiBub3QganVzdCBzaW1wbGUgJ2JhbmcnIGZ1bmN0aW9uIGJ1dCBjYWxsYmFja3MgZm9yIGhvdmVyIC8gZXRjLlxyXG4gKiBcclxuICogXHJcbiAqIENvcHlyaWdodCAgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBpbmMuIDIwMTYgLyBQZXRlciBUb2RkLCAyMDE3XHJcbiAqIFxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4qXHJcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4qXHJcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUludGVyYWN0aW9uIGZyb20gJy4vaW50ZXJhY3Rpb24nO1xyXG5pbXBvcnQgKiBhcyBDb2xvcnMgZnJvbSAnLi9jb2xvcnMnO1xyXG5pbXBvcnQgKiBhcyBMYXlvdXQgZnJvbSAnLi9sYXlvdXQnO1xyXG5pbXBvcnQgKiBhcyBHcmFiIGZyb20gJy4vZ3JhYic7XHJcbmltcG9ydCB7aXNDb250cm9sbGVyVmlzaWJsZX0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVJbWFnZUJ1dHRvbigge1xyXG4gIHRleHRDcmVhdG9yLFxyXG4gIG9iamVjdCxcclxuICBwcm9wZXJ0eU5hbWUgPSAndW5kZWZpbmVkJyxcclxuICBmdW5jID0gdW5kZWZpbmVkLFxyXG4gIHByZXNzaW5nID0gdW5kZWZpbmVkLFxyXG4gIGltYWdlID0gXCJ0ZXh0dXJlcy9zcG90bGlnaHQuanBnXCIsIC8vVE9ETyBiZXR0ZXIgZGVmYXVsdFxyXG4gIHdpZGUgPSBmYWxzZSxcclxuICB3aWR0aCA9IExheW91dC5QQU5FTF9XSURUSCxcclxuICBoZWlnaHQsXHJcbiAgZGVwdGggPSBMYXlvdXQuUEFORUxfREVQVEgsXHJcbiAgY2hhbmdlQ29sb3JPbkhvdmVyID0gdHJ1ZSwgLy9xdWljayBoYWNrOiBjb2xvciBwaWNrZXIgd2FudHMgdGhpcyB0byBiZSBmYWxzZVxyXG4gIGJ1dHRvbkRlcHRoID0gTGF5b3V0LkJVVFRPTl9ERVBUSFxyXG59ID0ge30gKXtcclxuXHJcbiAgZnVuY3Rpb24gYXBwbHlJbWFnZVRvTWF0ZXJpYWwoaW1hZ2UsIHRhcmdldE1hdGVyaWFsKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgaW1hZ2UgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAvL1RPRE8gY2FjaGUuICBEb2VzIFRleHR1cmVMb2FkZXIgYWxyZWFkeSBjYWNoZT9cclxuICAgICAgICBuZXcgVEhSRUUuVGV4dHVyZUxvYWRlcigpLmxvYWQoaW1hZ2UsICh0ZXh0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIHRleHR1cmUud3JhcFMgPSB0ZXh0dXJlLndyYXBUID0gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZztcclxuICAgICAgICAgICAgdGFyZ2V0TWF0ZXJpYWwubWFwID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgdGFyZ2V0TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGltYWdlLmlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgdGFyZ2V0TWF0ZXJpYWwubWFwID0gaW1hZ2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoaW1hZ2UuaXNXZWJHTFJlbmRlclRhcmdldCkge1xyXG4gICAgICAgICAgdGFyZ2V0TWF0ZXJpYWwubWFwID0gaW1hZ2UudGV4dHVyZTtcclxuICAgICAgfSBlbHNlIHRocm93IFwibm90IHN1cmUgaG93IHRvIGludGVycHJldCBpbWFnZSBcIiArIGltYWdlO1xyXG4gICAgICB0YXJnZXRNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAgLy9YWFggbWFnaWMgbnVtYmVycy4uLlxyXG4gIGlmICghaGVpZ2h0KSBoZWlnaHQgPSBMYXlvdXQuUEFORUxfV0lEVEggICogKHdpZGUgPyAwLjk0IDogMC4yNSk7XHJcbiAgXHJcbiAgY29uc3QgQlVUVE9OX1dJRFRIID0gd2lkdGggKiAod2lkZSA/IDAuOTQgOiAwLjI1KSAtIExheW91dC5QQU5FTF9NQVJHSU47XHJcbiAgY29uc3QgQlVUVE9OX0hFSUdIVCA9IGhlaWdodCAtIExheW91dC5QQU5FTF9NQVJHSU47XHJcbiAgY29uc3QgQlVUVE9OX0RFUFRIID0gYnV0dG9uRGVwdGg7XHJcblxyXG4gIGNvbnN0IGdyb3VwID0gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgZ3JvdXAuZ3VpVHlwZSA9IFwiaW1hZ2VidXR0b25cIjtcclxuICBncm91cC50b1N0cmluZyA9ICgpID0+IGBbJHtncm91cC5ndWlUeXBlfTogJHtwcm9wZXJ0eU5hbWV9XWA7XHJcbiAgZ3JvdXAuc3BhY2luZyA9IGhlaWdodDtcclxuXHJcbiAgY29uc3QgcGFuZWwgPSBMYXlvdXQuY3JlYXRlUGFuZWwoIHdpZHRoLCBoZWlnaHQsIGRlcHRoICk7XHJcbiAgZ3JvdXAuYWRkKCBwYW5lbCApO1xyXG5cclxuICAvLyAgYmFzZSBjaGVja2JveFxyXG4gIGNvbnN0IHJlY3QgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeSggQlVUVE9OX1dJRFRILCBCVVRUT05fSEVJR0hULCAxLCAxICk7XHJcbiAgcmVjdC50cmFuc2xhdGUoIEJVVFRPTl9XSURUSCAqIDAuNSwgMCwgQlVUVE9OX0RFUFRIICk7XHJcblxyXG4gIC8vICBoaXRzY2FuIHZvbHVtZVxyXG4gIGNvbnN0IGhpdHNjYW5NYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCgpO1xyXG4gIGhpdHNjYW5NYXRlcmlhbC52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGhpdHNjYW5Wb2x1bWUgPSBuZXcgVEhSRUUuTWVzaCggcmVjdC5jbG9uZSgpLCBoaXRzY2FuTWF0ZXJpYWwgKTtcclxuICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEg7XHJcbiAgaWYgKCF3aWRlKSBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnggPSB3aWR0aCAqIDAuNTtcclxuICBlbHNlIHtcclxuICAgIGhpdHNjYW5Wb2x1bWUucG9zaXRpb24ueCA9IExheW91dC5QQU5FTF9MQUJFTF9URVhUX01BUkdJTiAqIDAuNzU7XHJcbiAgICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnkgPSAwLjAxOyAvL1hYWCBtYWdpYyBudW1iZXJcclxuICB9XHJcblxyXG4gIHZhciBtYXRlcmlhbDtcclxuICBpZiAoaW1hZ2UuaXNNYXRlcmlhbCkge1xyXG4gICAgbWF0ZXJpYWwgPSBpbWFnZTtcclxuICB9IGVsc2Uge1xyXG4gICAgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoKTtcclxuICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgIGFwcGx5SW1hZ2VUb01hdGVyaWFsKGltYWdlLCBtYXRlcmlhbCk7XHJcbiAgfVxyXG4gIGNvbnN0IGZpbGxlZFZvbHVtZSA9IG5ldyBUSFJFRS5NZXNoKCByZWN0LmNsb25lKCksIG1hdGVyaWFsICk7XHJcbiAgaGl0c2NhblZvbHVtZS5hZGQoIGZpbGxlZFZvbHVtZSApO1xyXG5cclxuICAvL2J1dHRvbiBsYWJlbCByZW1vdmVkOyBtaWdodCB3YW50IG9wdGlvbnMgbGlrZSBhIGhvdmVyIGxhYmVsIGluIGZ1dHVyZS5cclxuXHJcbiAgY29uc3QgZGVzY3JpcHRvckxhYmVsID0gdGV4dENyZWF0b3IuY3JlYXRlKCBwcm9wZXJ0eU5hbWUgKTtcclxuICBkZXNjcmlwdG9yTGFiZWwucG9zaXRpb24ueCA9IExheW91dC5QQU5FTF9MQUJFTF9URVhUX01BUkdJTjtcclxuICBkZXNjcmlwdG9yTGFiZWwucG9zaXRpb24ueiA9IGRlcHRoO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi55ID0gLTAuMDM7XHJcbiAgaWYgKHdpZGUpIGRlc2NyaXB0b3JMYWJlbC52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGNvbnRyb2xsZXJJRCA9IExheW91dC5jcmVhdGVDb250cm9sbGVySURCb3goIGhlaWdodCwgQ29sb3JzLkNPTlRST0xMRVJfSURfQlVUVE9OICk7XHJcbiAgY29udHJvbGxlcklELnBvc2l0aW9uLnogPSBkZXB0aDtcclxuXHJcbiAgcGFuZWwuYWRkKCBkZXNjcmlwdG9yTGFiZWwsIGhpdHNjYW5Wb2x1bWUsIGNvbnRyb2xsZXJJRCApO1xyXG5cclxuICBjb25zdCBpbnRlcmFjdGlvbiA9IGNyZWF0ZUludGVyYWN0aW9uKCBoaXRzY2FuVm9sdW1lICk7XHJcbiAgLy9UT0RPOiBkcmFnIGFuZCBob3ZlclxyXG4gIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ2hvdmVyaW5nJywgaGFuZGxlSG92ZXIgKTtcclxuICBpbnRlcmFjdGlvbi5ldmVudHMub24oICdvblByZXNzZWQnLCBoYW5kbGVPblByZXNzICk7XHJcbiAgaW50ZXJhY3Rpb24uZXZlbnRzLm9uKCAncHJlc3NpbmcnLCBoYW5kbGVQcmVzc2luZyApO1xyXG4gIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUmVsZWFzZWQnLCBoYW5kbGVPblJlbGVhc2UgKTtcclxuXHJcbiAgdXBkYXRlVmlldygpO1xyXG5cclxuICBsZXQgaG92ZXJGdW5jID0gdW5kZWZpbmVkO1xyXG4gIC8vIEkgbWlnaHQgeWV0IGRlY2lkZSB0byBjaGFuZ2UgdGhpcyBpbnRlcmZhY2UuXHJcbiAgLy8gbWlnaHQgdXNlIGEgZGlmZmVyZW50IG5hbWUsIG1pZ2h0IHdhbnQgdG8gYWRkIGxpc3RlbmVycyB0byBldmVudFxyXG4gIC8vIHJhdGhlciB0aGFuIGp1c3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gIGdyb3VwLm9uSG92ZXIgPSBmID0+IHtcclxuICAgIGhvdmVyRnVuYyA9IGY7XHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG4gIGdyb3VwLm9uUHJlc3NpbmcgPSBmID0+IHtcclxuICAgIHByZXNzaW5nID0gZjtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcbiAgZnVuY3Rpb24gaGFuZGxlSG92ZXIoIHAgKXtcclxuICAgIGlmKCAhaXNDb250cm9sbGVyVmlzaWJsZShncm91cCkgKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHAubG9jYWxQb2ludCA9IGdldE5vcm1hbGlzZWRMb2NhbENvb3JkaW5hdGVzKHAucG9pbnQpO1xyXG4gICAgaWYgKGhvdmVyRnVuYykgaG92ZXJGdW5jKHApO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBoYW5kbGVPblByZXNzKCBwICl7XHJcbiAgICAvL2l0IHNob3VsZCBiZSB0aGF0IHRoZSBjaGVja3MgaW4gaW5kZXguanMgbWVhbiB0aGF0IG1ldGhvZHMgZG9uJ3QgZ2V0IGNhbGxlZCBvbiBpbnZpc2libGVcclxuICAgIC8vb2JqZWN0cywgcmVuZGVyaW5nIHRoZXNlIHRlc3RzIHJlZHVuZGFudC4uLiBob3dldmVyLCB0aGF0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHRoZSBjYXNlLlxyXG4gICAgLy9leHBlcmllbmNlZCBzb21lIGJ1Z3MgcGFydGljdWxhcmx5IHdpdGggJ21vZGFsIGVkaXRvcicgdHlwZSBwYW5lbHMuXHJcbiAgICAvL1RPRE86IGVpdGhlciBtYWtlIHN1cmUgaW52aXNpYmxlIG9iamVjdHMgYXJlbid0IGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UsXHJcbiAgICAvL29yIG1ha2Ugc3VyZSBhbGwgdHlwZXMgb2Ygb2JqZWN0IGRvIHRoaXMgbW9yZSB0aG9yb3VnaCB2aXNpYmlsaXR5IGNoZWNrLi4uXHJcbiAgICBpZiggIWlzQ29udHJvbGxlclZpc2libGUoZ3JvdXApICl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBwLmxvY2FsUG9pbnQgPSBnZXROb3JtYWxpc2VkTG9jYWxDb29yZGluYXRlcyhwLnBvaW50KTtcclxuICAgIGlmIChvYmplY3QpIG9iamVjdFsgcHJvcGVydHlOYW1lIF0ocCk7XHJcbiAgICBpZiAoZnVuYykgZnVuYyhwKTtcclxuXHJcbiAgICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEggKiAwLjE7XHJcblxyXG4gICAgcC5sb2NrZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9jb21wdXRlIHggJiB5IGFzIG5vcm1hbGlzZWQgY29vcmRpbmF0ZXMgZnJvbSBwLnBvaW50XHJcbiAgLy9jb3VsZCBjb25zaWRlciBtb3ZpbmcgdGhpcyBjb21wdXRhdGlvbiBpbnRvIGludGVyYWN0aW9uLmpzIHBlcmZvcm1TdGF0ZUV2ZW50cygpXHJcbiAgZnVuY3Rpb24gZ2V0Tm9ybWFsaXNlZExvY2FsQ29vcmRpbmF0ZXMocG9pbnQpIHtcclxuICAgIGNvbnN0IHAgPSBoaXRzY2FuVm9sdW1lLndvcmxkVG9Mb2NhbChwb2ludCk7XHJcbiAgICBwLnggLz0gQlVUVE9OX1dJRFRIO1xyXG4gICAgcC55IC89IEJVVFRPTl9IRUlHSFQ7XHJcbiAgICBwLnkgKz0gMC41O1xyXG4gICAgcC54ID0gTWF0aC5tYXgoTWF0aC5taW4ocC54LCAxKSwgMCk7XHJcbiAgICBwLnkgPSBNYXRoLm1heChNYXRoLm1pbihwLnksIDEpLCAwKTtcclxuICAgIHJldHVybiBwO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFuZGxlUHJlc3NpbmcoIHAgKSB7XHJcbiAgICBpZiggIWlzQ29udHJvbGxlclZpc2libGUoZ3JvdXApICl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcC5sb2NhbFBvaW50ID0gZ2V0Tm9ybWFsaXNlZExvY2FsQ29vcmRpbmF0ZXMocC5wb2ludCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKGBwcmVzc2luZyBhdCAoJHtwb2ludC54fSwgJHtwb2ludC55fSlgKTsgLy9maXJzdCBpbnN0YW5jZSBvZiAncHJlc3NpbmcnIGlzIGFsd2F5cyBhdCAoMSwgMSlcclxuICAgIC8vbmIsIGxpa2VseSB0byBuZWVkIGEgZGlmZmVyZW50IHN0cmF0ZWd5IGZvciBkdWFsIHdpZWxkaW5nXHJcbiAgICBpZiAocHJlc3NpbmcpIHByZXNzaW5nKHApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFuZGxlT25SZWxlYXNlKCl7XHJcbiAgICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEggKiAwLjU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVWaWV3KCl7XHJcbiAgICBpZiAoIW1hdGVyaWFsLmNvbG9yKSByZXR1cm47XHJcbiAgICBpZiggaW50ZXJhY3Rpb24uaG92ZXJpbmcoKSApe1xyXG4gICAgICBpZiAoY2hhbmdlQ29sb3JPbkhvdmVyKSBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIDB4RkZGRkZGICk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBpZiAoY2hhbmdlQ29sb3JPbkhvdmVyKSBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIDB4Q0NDQ0NDICk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ3JvdXAuaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvbjtcclxuICBncm91cC5oaXRzY2FuID0gWyBoaXRzY2FuVm9sdW1lLCBwYW5lbCBdO1xyXG5cclxuICBjb25zdCBncmFiSW50ZXJhY3Rpb24gPSBHcmFiLmNyZWF0ZSggeyBncm91cCwgcGFuZWwgfSApO1xyXG5cclxuICBncm91cC51cGRhdGVDb250cm9sID0gZnVuY3Rpb24oIGlucHV0T2JqZWN0cyApe1xyXG4gICAgaW50ZXJhY3Rpb24udXBkYXRlKCBpbnB1dE9iamVjdHMgKTtcclxuICAgIGdyYWJJbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG4gICAgdXBkYXRlVmlldygpO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLm5hbWUgPSBmdW5jdGlvbiggc3RyICl7XHJcbiAgICBkZXNjcmlwdG9yTGFiZWwudXBkYXRlTGFiZWwoIHN0ciApO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH07XHJcblxyXG5cclxuICByZXR1cm4gZ3JvdXA7XHJcbn0iLCIvKiogXHJcbiAqIEdyaWQgb2YgYnV0dG9ucyB3aXRoIGltYWdlcyBvbiAod2hpY2ggbWlnaHQgY29tZSBmcm9tIGEgZmlsZSBvciBleGlzdGluZyB0ZXh0dXJlLFxyXG4gKiB0aGUgdGV4dHVyZSBtaWdodCBiZSBmcm9tIGEgUmVuZGVyVGFyZ2V0Li4uKS5cclxuICogXHJcbiAqIEknZCBwdXQgdGhpcyBtb3JlIHNlcGFyYXRlIGZyb20gdGhlIGRhdGd1aSBtb2R1bGVzIGJ1dCBuZWVkIHRvIHRoaW5rIGEgbGl0dGxlXHJcbiAqIGJpdCBhYm91dCBob3cgdG8gc3RydWN0dXJlIHRoYXQgZXRjLiAgVmVyeSB1bi1EUlksIGJ1dCBJJ20gc3RhcnRpbmcgYnkganVzdFxyXG4gKiBjb3B5aW5nIGV4aXN0aW5nIGltYWdlYnV0dG9uLmpzIGluIGl0cyBlbnRpcmV0eS5cclxuICogXHJcbiAqIFRPRE86IG5vdCBqdXN0IHNpbXBsZSAnYmFuZycgZnVuY3Rpb24gYnV0IGNhbGxiYWNrcyBmb3IgaG92ZXIgLyBldGMuXHJcbiAqIFxyXG4gKiBcclxuICogQ29weXJpZ2h0ICBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIGluYy4gMjAxNiAvIFBldGVyIFRvZGQsIDIwMTdcclxuICogXHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbipcclxuKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbipcclxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICovXHJcblxyXG5pbXBvcnQge2NyZWF0ZVRleHRMYWJlbCwgY3JlYXRlVG9vbFRpcH0gZnJvbSAnLi90ZXh0bGFiZWwnO1xyXG5pbXBvcnQgY3JlYXRlSW50ZXJhY3Rpb24gZnJvbSAnLi9pbnRlcmFjdGlvbic7XHJcbmltcG9ydCAqIGFzIENvbG9ycyBmcm9tICcuL2NvbG9ycyc7XHJcbmltcG9ydCAqIGFzIExheW91dCBmcm9tICcuL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIFNoYXJlZE1hdGVyaWFscyBmcm9tICcuL3NoYXJlZG1hdGVyaWFscyc7XHJcbmltcG9ydCAqIGFzIEdyYWIgZnJvbSAnLi9ncmFiJztcclxuaW1wb3J0IHtzZXRWaXNpYmlsaXR5fSBmcm9tICcuL3V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUltYWdlQnV0dG9uR3JpZCgge1xyXG4gIHRleHRDcmVhdG9yLFxyXG4gIG9iamVjdHMsIC8vIGFycmF5IG9mIHtmdW5jLCBpbWFnZSB8IHRleHQsIHRpcChvcHRpb25hbCksIHJlbGVhc2Uob3B0aW9uYWwpfVxyXG4gIHdpZHRoID0gTGF5b3V0LlBBTkVMX1dJRFRILFxyXG4gIHJvd0hlaWdodCxcclxuICBkZXB0aCA9IExheW91dC5QQU5FTF9ERVBUSCxcclxuICBjb2x1bW5zID0gNFxyXG59ID0ge30gKXtcclxuICBcclxuICBmdW5jdGlvbiBhcHBseUltYWdlVG9NYXRlcmlhbChpbWFnZSwgdGFyZ2V0TWF0ZXJpYWwpIHtcclxuICAgICAgaWYgKHR5cGVvZiBpbWFnZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIC8vVE9ETyBjYWNoZS4gIERvZXMgVGV4dHVyZUxvYWRlciBhbHJlYWR5IGNhY2hlP1xyXG4gICAgICAgIG5ldyBUSFJFRS5UZXh0dXJlTG9hZGVyKCkubG9hZChpbWFnZSwgKHRleHR1cmUpID0+IHtcclxuICAgICAgICAgICAgdGV4dHVyZS53cmFwUyA9IHRleHR1cmUud3JhcFQgPSBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nO1xyXG4gICAgICAgICAgICB0YXJnZXRNYXRlcmlhbC5tYXAgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0YXJnZXRNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaW1hZ2UuaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICB0YXJnZXRNYXRlcmlhbC5tYXAgPSBpbWFnZTtcclxuICAgICAgfSBlbHNlIGlmIChpbWFnZS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSB7XHJcbiAgICAgICAgICB0YXJnZXRNYXRlcmlhbC5tYXAgPSBpbWFnZS50ZXh0dXJlO1xyXG4gICAgICB9IGVsc2UgdGhyb3cgXCJub3Qgc3VyZSBob3cgdG8gaW50ZXJwcmV0IGltYWdlIFwiICsgaW1hZ2U7XHJcbiAgICAgIHRhcmdldE1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IG1hcmdpbiA9IExheW91dC5QQU5FTF9NQVJHSU4gKiAzO1xyXG4gIGNvbnN0IEJVVFRPTl9XSURUSCA9ICh3aWR0aCAtIG1hcmdpbikgKiAoMS9jb2x1bW5zKTtcclxuICAvL1RPRE86IGFkZCBzZXRSb3dIZWlnaHQgbWV0aG9kXHJcbiAgbGV0IEJVVFRPTl9IRUlHSFQgPSByb3dIZWlnaHQgPiAwID8gcm93SGVpZ2h0IDogQlVUVE9OX1dJRFRIO1xyXG4gIGNvbnN0IEJVVFRPTl9ERVBUSCA9IExheW91dC5CVVRUT05fREVQVEg7XHJcblxyXG4gIGNvbnN0IGdyb3VwID0gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgZ3JvdXAuZ3VpVHlwZSA9IFwiaW1hZ2VidXR0b25ncmlkXCI7XHJcbiAgZ3JvdXAudG9TdHJpbmcgPSAoKSA9PiBgWyR7Z3JvdXAuZ3VpVHlwZX06ICR7b2JqZWN0c31dYDtcclxuICBcclxuICBjb25zdCByb3dzID0gTWF0aC5jZWlsKG9iamVjdHMubGVuZ3RoIC8gY29sdW1ucyk7XHJcbiAgbGV0IGhlaWdodCA9IExheW91dC5QQU5FTF9NQVJHSU4gKyBCVVRUT05fSEVJR0hUICogcm93cztcclxuICBncm91cC5zcGFjaW5nID0gaGVpZ2h0O1xyXG5cclxuICBncm91cC5zZXRSb3dIZWlnaHQgPSBoID0+IHtcclxuICAgIHJvd0hlaWdodCA9IEJVVFRPTl9IRUlHSFQgPSBoO1xyXG4gICAgaGVpZ2h0ID0gTGF5b3V0LlBBTkVMX01BUkdJTiArIEJVVFRPTl9IRUlHSFQgKiByb3dzO1xyXG4gICAgZ3JvdXAuc3BhY2luZyA9IGhlaWdodDtcclxuICAgIGxheW91dEJ1dHRvbnMoKTtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9O1xyXG5cclxuICBsZXQgaGlnaGxpZ2h0TGFzdFByZXNzZWQgPSBmYWxzZTtcclxuICBsZXQgbGFzdFByZXNzZWQgPSBudWxsO1xyXG4gIGxldCBsYXN0UHJlc3NlZENvbDtcclxuICBncm91cC5oaWdobGlnaHRMYXN0UHJlc3NlZCA9IChjb2wgPSAweDMzNTVFRSkgPT4ge1xyXG4gICAgICBoaWdobGlnaHRMYXN0UHJlc3NlZCA9IGNvbCAhPT0gZmFsc2U7XHJcbiAgICAgIGxhc3RQcmVzc2VkQ29sID0gY29sO1xyXG4gICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG4gIFxyXG4gIGxldCBwYW5lbCwgZ3JhYkludGVyYWN0aW9uLCBidXR0b25zID0gW107XHJcblxyXG4gIGxheW91dEJ1dHRvbnMoKTtcclxuICBcclxuICBmdW5jdGlvbiBpbml0UGFuZWwoKSB7XHJcbiAgICBpZiAocGFuZWwpIGdyb3VwLnJlbW92ZShwYW5lbCk7XHJcbiAgICBwYW5lbCA9IExheW91dC5jcmVhdGVQYW5lbCggd2lkdGgsIGhlaWdodCwgZGVwdGggKTtcclxuICAgIGdyb3VwLmFkZCggcGFuZWwgKTtcclxuICAgIFxyXG4gICAgY29uc3QgY29udHJvbGxlcklEID0gTGF5b3V0LmNyZWF0ZUNvbnRyb2xsZXJJREJveCggaGVpZ2h0LCBDb2xvcnMuQ09OVFJPTExFUl9JRF9CVVRUT04gKTtcclxuICAgIGNvbnRyb2xsZXJJRC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgICBwYW5lbC5hZGQoY29udHJvbGxlcklEKTtcclxuICAgIFxyXG4gICAgZ3JhYkludGVyYWN0aW9uID0gR3JhYi5jcmVhdGUoIHsgZ3JvdXAsIHBhbmVsIH0gKTtcclxuICAgIFxyXG4gICAgYnV0dG9ucy5mb3JFYWNoKGI9Pmdyb3VwLnJlbW92ZShiKSk7XHJcbiAgICBidXR0b25zID0gW107XHJcbiAgICBncm91cC5ndWlDaGlsZHJlbiA9IGJ1dHRvbnM7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGxheW91dEJ1dHRvbnMoKSB7XHJcbiAgICBpbml0UGFuZWwoKTtcclxuICAgIC8vVE9ETzogcGFkZGluZ1xyXG4gICAgY29uc3QgYnV0dG9uV1BhZGRlZCA9IEJVVFRPTl9XSURUSCAqIDAuOTksIGJ1dHRvbkhQYWRkZWQgPSBCVVRUT05fSEVJR0hUICogMC45OTtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeSggYnV0dG9uV1BhZGRlZCwgYnV0dG9uSFBhZGRlZCwgMSwgMSApO1xyXG4gICAgcmVjdC50cmFuc2xhdGUoIGJ1dHRvbldQYWRkZWQgLyAyLCAtYnV0dG9uSFBhZGRlZCAvIDIsIEJVVFRPTl9ERVBUSCApO1xyXG5cclxuICAgIHZhciBpID0gMDtcclxuICAgIFxyXG4gICAgLy9UT0RPOiB0b2dnbGVzIHJhdGhlciB0aGFuIHRyaWdnZXJzLi4uXHJcbiAgICBvYmplY3RzLmZvckVhY2goKG9iaiwgaSkgPT4ge1xyXG4gICAgICAgIGlmICghb2JqLmltYWdlICYmICFvYmoudGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdWJncm91cCA9IG5ldyBUSFJFRS5Hcm91cCgpOyAvL25vdGU6IHJlZHVjaW5nIG5lc3RpbmcgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZS5cclxuICAgICAgICBzdWJncm91cC5ndWlUeXBlID0gXCJpbWFnZUJ1dHRvbkdyaWRFbGVtZW50XCI7XHJcbiAgICAgICAgZ3JvdXAuYWRkKHN1Ymdyb3VwKTtcclxuICAgICAgICBidXR0b25zLnB1c2goc3ViZ3JvdXApO1xyXG5cclxuICAgICAgICBjb25zdCBjb2wgPSBpICUgY29sdW1ucztcclxuICAgICAgICBjb25zdCByb3cgPSBNYXRoLmZsb29yKGkgLyBjb2x1bW5zKTtcclxuXHJcbiAgICAgICAgc3ViZ3JvdXAucG9zaXRpb24ueCA9ICgyKkxheW91dC5QQU5FTF9NQVJHSU4pICsgQlVUVE9OX1dJRFRIICogY29sO1xyXG4gICAgICAgIHN1Ymdyb3VwLnBvc2l0aW9uLnkgPSAoaGVpZ2h0LzIpIC1CVVRUT05fSEVJR0hUICogcm93O1xyXG4gICAgICAgIHN1Ymdyb3VwLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEg7XHJcblxyXG4gICAgICAgIC8vICBoaXRzY2FuIHZvbHVtZS5cclxuICAgICAgICAvLyBUaGlzIG1hdGVyaWFsIGNvdWxkIHByb2JhYmx5IGJlIHJldXNlZC5cclxuICAgICAgICBjb25zdCBoaXRzY2FuTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoKTtcclxuICAgICAgICBoaXRzY2FuTWF0ZXJpYWwudmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBoaXRzY2FuVm9sdW1lID0gbmV3IFRIUkVFLk1lc2goIHJlY3QuY2xvbmUoKSwgaGl0c2Nhbk1hdGVyaWFsICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7XHJcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChvYmouaW1hZ2UpIGFwcGx5SW1hZ2VUb01hdGVyaWFsKG9iai5pbWFnZSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgIGlmIChvYmoudGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gdGV4dENyZWF0b3IuY3JlYXRlKG9iai50ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gMipMYXlvdXQuR1JJRF9CVVRUT05fTUFSR0lOO1xyXG4gICAgICAgICAgICBsZXQgaCA9IExheW91dC5URVhUX1NDQUxFICogdGV4dC5sYXlvdXQuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgdyA9IHRleHQuY29tcHV0ZVdpZHRoKCk7XHJcbiAgICAgICAgICAgIGlmICh3ID4gQlVUVE9OX1dJRFRIIC0gbWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LmNvbnN0cmFpbkJvdW5kcyhCVVRUT05fV0lEVEggLSBtYXJnaW4sIEJVVFRPTl9IRUlHSFQgLSBtYXJnaW4pOyAvLzwtLVxyXG4gICAgICAgICAgICAgICAgaCA9IExheW91dC5URVhUX1NDQUxFICogdGV4dC5sYXlvdXQuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdyA9IHRleHQuY29tcHV0ZVdpZHRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViZ3JvdXAuYWRkKHRleHQpO1xyXG4gICAgICAgICAgICBzdWJncm91cC50ZXh0ID0gdGV4dDtcclxuICAgICAgICAgICAgdGV4dC5wb3NpdGlvbi54ID0gb2JqLnRleHRYIHx8IDAuNSAqIChCVVRUT05fV0lEVEggLSB3KTtcclxuICAgICAgICAgICAgdGV4dC5wb3NpdGlvbi55ID0gb2JqLnRleHRZIHx8IC0wLjUgKiBCVVRUT05fSEVJR0hUIC0gaDtcclxuICAgICAgICAgICAgdGV4dC5wb3NpdGlvbi56ID0gQlVUVE9OX0RFUFRIICogMS4yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaWxsZWRWb2x1bWUgPSBuZXcgVEhSRUUuTWVzaCggcmVjdC5jbG9uZSgpLCBtYXRlcmlhbCApO1xyXG4gICAgICAgIGhpdHNjYW5Wb2x1bWUuYWRkKCBmaWxsZWRWb2x1bWUgKTtcclxuXHJcbiAgICAgICAgLy9idXR0b24gbGFiZWwgJiBkZXNjcmlwdG9yIGxhYmVsIHJlbW92ZWQuXHJcbiAgICAgICAgLy9Ub29sdGlwIHRleHQgb3B0aW9uIGFkZGVkLiAgTWlnaHQgd2FudCB0byBiZSBhYmxlIHRvIHBhc3MgaW4gcmljaGVyIHRoaW5ncy4uLlxyXG4gICAgICAgIC8vbWF5YmUgYW4gYXJiaXRyYXJ5IFRIUkVFIG9iamVjdCB3b3VsZCB3b3JrIHdlbGwuLi5cclxuICAgICAgICBpZiAob2JqLnRpcCkge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBUZXh0ID0gY3JlYXRlVG9vbFRpcCh0ZXh0Q3JlYXRvciwgb2JqLnRpcCwgQlVUVE9OX1dJRFRILCBCVVRUT05fSEVJR0hULCBCVVRUT05fREVQVEgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy9zdWJncm91cC5hZGQodGlwVGV4dCk7XHJcbiAgICAgICAgICAgIHN1Ymdyb3VwLnRpcFRleHQgPSB0aXBUZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL3BhbmVsLmFkZCggZGVzY3JpcHRvckxhYmVsLCBoaXRzY2FuVm9sdW1lLCBjb250cm9sbGVySUQgKTtcclxuICAgICAgICBzdWJncm91cC5hZGQoIGhpdHNjYW5Wb2x1bWUgKTtcclxuICAgICAgICBwYW5lbC5hZGQoc3ViZ3JvdXApO1xyXG5cclxuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IGNyZWF0ZUludGVyYWN0aW9uKCBoaXRzY2FuVm9sdW1lICk7XHJcbiAgICAgICAgaW50ZXJhY3Rpb24uZXZlbnRzLm9uKCAnb25QcmVzc2VkJywgaGFuZGxlT25QcmVzcyApO1xyXG4gICAgICAgIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUmVsZWFzZWQnLCBoYW5kbGVPblJlbGVhc2UgKTtcclxuXHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU9uUHJlc3MoIHAgKXtcclxuICAgICAgICAgICAgaWYoIHN1Ymdyb3VwLnZpc2libGUgPT09IGZhbHNlICl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHAubG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy9UT0RPOiBzdGFuZGFyZGlzZSBoYW5kbGluZyBvZiBleGNlcHRpb25zIGluIGNhbGxiYWNrc1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgb2JqLmZ1bmMoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgb2JqLmVycm9yID0gZSB8fCAndW5kZWZpbmVkIGV4Y2VwdGlvbic7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdFByZXNzZWQgPSBvYmo7XHJcbiAgICAgICAgICAgIHN1Ymdyb3VwLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEggKiAwLjQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVPblJlbGVhc2UoKXtcclxuICAgICAgICAgICAgc3ViZ3JvdXAucG9zaXRpb24ueiA9IEJVVFRPTl9ERVBUSDtcclxuICAgICAgICAgICAgaWYgKG9iai5yZWxlYXNlKSBvYmoucmVsZWFzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3F1aWNrIGNvbG9yIGhhY2suLi5cclxuICAgICAgICBvYmouaG92ZXJDb2wgPSBvYmoudGV4dCA/IDB4ODg4IDogMHhGRkZGRkY7XHJcbiAgICAgICAgb2JqLm5vSG92ZXJDb2wgPSBvYmoudGV4dCA/IDB4MTExIDogMHhDQ0NDQ0M7XHJcbiAgICAgICAgc3ViZ3JvdXAudXBkYXRlVmlldyA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodExhc3RQcmVzc2VkICYmIGxhc3RQcmVzc2VkID09PSBvYmopIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNvbG9yLnNldEhleCggbGFzdFByZXNzZWRDb2wgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIG1hdGVyaWFsLmNvbG9yLnNldEhleCggaW50ZXJhY3Rpb24uaG92ZXJpbmcoKSA/IG9iai5ob3ZlckNvbCA6IG9iai5ub0hvdmVyQ29sICk7XHJcbiAgICAgICAgICAgIGlmIChzdWJncm91cC50aXBUZXh0KSBzZXRWaXNpYmlsaXR5KHN1Ymdyb3VwLCBzdWJncm91cC50aXBUZXh0LCBpbnRlcmFjdGlvbi5ob3ZlcmluZygpKTtcclxuICAgICAgICAgICAgaWYgKG9iai5lcnJvcikgbWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCAweEFBMzMzMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHN1Ymdyb3VwLnVwZGF0ZVZpZXcoKTtcclxuXHJcbiAgICAgICAgc3ViZ3JvdXAuaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvbjtcclxuICAgICAgICBzdWJncm91cC5oaXRzY2FuID0gaGl0c2NhblZvbHVtZTsgLy9YWFg6IG1ha2luZyB0aGlzIHNpbmdsZSBlbGVtZW50IHJhdGhlciB0aGFuIGFycmF5LFxyXG4gICAgICAgIC8vdGhhdCBtZWFucyB0aGVzZSAnc3ViZ3JvdXAnIGJ1dHRvbnMgYXJlbid0IGFjdGluZyBleGFjdGx5IGFzIG5vcm1hbCBkYXQuR1VJVlIgY29udHJvbGxlcnNcclxuICAgIH0pO1xyXG5cclxuICAgIGdyb3VwLmhpdHNjYW4gPSBidXR0b25zLm1hcChiPT5iLmhpdHNjYW4pOy8vLnB1c2gocGFuZWwpO1xyXG4gICAgZ3JvdXAuaGl0c2Nhbi5wdXNoKHBhbmVsKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVWaWV3KCkge1xyXG4gICAgICBidXR0b25zLmZvckVhY2goYj0+Yi51cGRhdGVWaWV3KCkpO1xyXG4gIH1cclxuICBcclxuICBncm91cC51cGRhdGVDb250cm9sID0gZnVuY3Rpb24oIGlucHV0T2JqZWN0cyApe1xyXG4gICAgYnV0dG9ucy5mb3JFYWNoKGI9PntcclxuICAgICAgICBiLmludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcbiAgICB9KTtcclxuICAgIC8vaW50ZXJhY3Rpb24udXBkYXRlKCBpbnB1dE9iamVjdHMgKTtcclxuICAgIGdyYWJJbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG4gICAgdXBkYXRlVmlldygpO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLm5hbWUgPSBmdW5jdGlvbiggc3RyICl7XHJcbiAgICBkZXNjcmlwdG9yTGFiZWwudXBkYXRlTGFiZWwoIHN0ciApO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH07XHJcblxyXG5cclxuICByZXR1cm4gZ3JvdXA7XHJcbn0iLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IGNyZWF0ZVNsaWRlciBmcm9tICcuL3NsaWRlcic7XHJcbmltcG9ydCBjcmVhdGVDaGVja2JveCBmcm9tICcuL2NoZWNrYm94JztcclxuaW1wb3J0IGNyZWF0ZUJ1dHRvbiBmcm9tICcuL2J1dHRvbic7XHJcbmltcG9ydCBjcmVhdGVGb2xkZXIgZnJvbSAnLi9mb2xkZXInO1xyXG5pbXBvcnQgY3JlYXRlRHJvcGRvd24gZnJvbSAnLi9kcm9wZG93bic7XHJcbi8vUEpUOiBJJ2QgcmF0aGVyIGluamVjdCBjdXN0b20gZXh0ZW5zaW9ucyBsaWtlIHRoaXMsIGJ1dCB3aWxsIHdvcmsgdGhhdCBvdXQgbGF0ZXIuXHJcbmltcG9ydCBjcmVhdGVJbWFnZUJ1dHRvbiBmcm9tICcuL2ltYWdlYnV0dG9uJztcclxuaW1wb3J0IGNyZWF0ZUltYWdlQnV0dG9uR3JpZCBmcm9tICcuL2ltYWdlYnV0dG9uZ3JpZCc7XHJcbmltcG9ydCBjcmVhdGVLZXlib2FyZCBmcm9tICcuL2tleWJvYXJkJztcclxuaW1wb3J0IGNyZWF0ZVRleHRib3ggZnJvbSAnLi90ZXh0Ym94JztcclxuaW1wb3J0IGNyZWF0ZUNvbG9yUGlja2VyIGZyb20gJy4vY29sb3JwaWNrZXInO1xyXG5pbXBvcnQgKiBhcyBTREZUZXh0IGZyb20gJy4vc2RmdGV4dCc7XHJcbmltcG9ydCB7IGlzQ29udHJvbGxlclZpc2libGUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgZ2xvYmFsRXZlbnRzIH0gZnJvbSAnLi9pbnRlcmFjdGlvbic7XHJcblxyXG5jb25zdCBHVUlWUiA9IChmdW5jdGlvbiBEQVRHVUlWUigpe1xyXG5cclxuICAvKlxyXG4gICAgU0RGIGZvbnRcclxuICAqL1xyXG4gIGNvbnN0IHRleHRDcmVhdG9yID0gU0RGVGV4dC5jcmVhdG9yKCk7XHJcblxyXG5cclxuICAvKlxyXG4gICAgTGlzdHMuXHJcbiAgICBJbnB1dE9iamVjdHMgYXJlIHRoaW5ncyBsaWtlIFZJVkUgY29udHJvbGxlcnMsIGNhcmRib2FyZCBoZWFkc2V0cywgZXRjLlxyXG4gICAgQ29udHJvbGxlcnMgYXJlIHRoZSBEQVQgR1VJIHNsaWRlcnMsIGNoZWNrYm94ZXMsIGV0Yy5cclxuICAqL1xyXG4gIGNvbnN0IGlucHV0T2JqZWN0cyA9IFtdO1xyXG4gIGNvbnN0IGNvbnRyb2xsZXJzID0gW107XHJcblxyXG4gIC8qXHJcbiAgICBGdW5jdGlvbnMgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBnaXZlbiBjb250cm9sbGVyIGlzIHZpc2libGUgKGJ5IHdoaWNoIHdlXHJcbiAgICBtZWFuIG5vdCBoaWRkZW4sIG5vdCAndmlzaWJsZScgaW4gdGVybXMgb2YgdGhlIGNhbWVyYSBvcmllbnRhdGlvbiBldGMpLCBhbmRcclxuICAgIGZvciByZXRyaWV2aW5nIHRoZSBsaXN0IG9mIHZpc2libGUgaGl0c2Nhbk9iamVjdHMgZHluYW1pY2FsbHkuXHJcbiAgICBUaGlzIG1pZ2h0IGJlbmVmaXQgZnJvbSBzb21lIGNhY2hpbmcgZXNwZWNpYWxseSBpbiBjYXNlcyB3aXRoIGxhcmdlIGNvbXBsZXggR1VJcy5cclxuICAgIEkgaGF2ZW4ndCBtZWFzdXJlZCB0aGUgaW1wYWN0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBldGMuXHJcbiAgKi9cclxuICBmdW5jdGlvbiBnZXRWaXNpYmxlQ29udHJvbGxlcnMoKSB7XHJcbiAgICAvLyBub3QgdGVycmlibHkgZWZmaWNpZW50XHJcbiAgICByZXR1cm4gY29udHJvbGxlcnMuZmlsdGVyKCBpc0NvbnRyb2xsZXJWaXNpYmxlICk7XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGdldFZpc2libGVIaXRzY2FuT2JqZWN0cygpIHtcclxuICAgIC8vWFhYIFdBUk5JTkc6OjpcclxuICAgIC8vdGhlcmUgY291bGQgZXhpc3Qgc2l0dWF0aW9ucyBpbiB3aGljaCBtZW1iZXJzIG9mIGhpdHNjYW4gZm9yIGEgdmlzaWJsZSBjb250cm9sbGVyIGFyZSBub3QgdGhlbXNlbHZlcyB2aXNpYmxlLlxyXG4gICAgLy90aGlzIGNhbiBoYXBwZW4gZm9yIGVnIGlmIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIHBhcnRpY3VsYXIgaGl0c2NhbiBpcyBpbiBhbiBpbnZpc2libGUgbW9kYWwgZWRpdG9yLlxyXG4gICAgLy93ZSBjb3VsZCBjaGVjayB0aGF0LCBhZGRpbmcgYSBtb3JlIHJvYnVzdCBmaWx0ZXIgdG8gZWFjaCBoaXRzY2FuIGFycmF5Li4uIGZvciBub3csIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxyXG4gICAgLy9jb250cm9sbGVycyB0byBlaXRoZXIgb25seSByZXR1cm4gaGl0c2NhbiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUsIG9yIHRvIHNldCAndmlzaWJsZScgZXhwbGljaXRseS5cclxuICAgIGNvbnN0IHRtcCA9IGdldFZpc2libGVDb250cm9sbGVycygpLm1hcCggbyA9PiB7IHJldHVybiBvLmhpdHNjYW4uZmlsdGVyKGggPT4gaC52aXNpYmxlKTsgfSApXHJcbiAgICByZXR1cm4gdG1wLnJlZHVjZSgoYSwgYikgPT4geyByZXR1cm4gYS5jb25jYXQoYil9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBsZXQgbW91c2VFbmFibGVkID0gZmFsc2U7XHJcbiAgbGV0IG1vdXNlUmVuZGVyZXIgPSB1bmRlZmluZWQ7XHJcbiAgbGV0IG9uT3J0aG9Nb3VzZVJlbGVhc2UgPSB1bmRlZmluZWQ7IC8va2VlcCB0cmFjayBzbyB0aGF0IHdlIGRvbid0IGF0dGFjaCBtdWx0aXBsZSBldmVudHMgKHBhcnRpY3VsYXJseSB3aGVuIHJlc2l6aW5nIHdpbmRvdylcclxuICBcclxuICBsZXQgYXV0b1VwZGF0ZSA9IHRydWU7XHJcblxyXG4gIGZ1bmN0aW9uIGVuYWJsZU1vdXNlKCBjYW1lcmEsIHJlbmRlcmVyICl7XHJcbiAgICBtb3VzZUVuYWJsZWQgPSB0cnVlO1xyXG4gICAgbW91c2VSZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgbW91c2VJbnB1dC5tb3VzZUNhbWVyYSA9IGNhbWVyYTtcclxuICAgIGlmIChjYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgaWYgKCFvbk9ydGhvTW91c2VSZWxlYXNlKSB7XHJcbiAgICAgICAgb25PcnRob01vdXNlUmVsZWFzZSA9IGY9PmYuZml4Rm9sZGVyUG9zaXRpb24oKTtcclxuICAgICAgICBtb3VzZUlucHV0LmV2ZW50cy5vbignZ3JhYlJlbGVhc2VkJywgb25PcnRob01vdXNlUmVsZWFzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChvbk9ydGhvTW91c2VSZWxlYXNlKSB7XHJcbiAgICAgICAgbW91c2VJbnB1dC5ldmVudHMucmVtb3ZlTGlzdGVuZXIoJ2dyYWJSZWxlYXNlZCcsIG9uT3J0aG9Nb3VzZVJlbGVhc2UpO1xyXG4gICAgICAgIG9uT3J0aG9Nb3VzZVJlbGVhc2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb3VzZUlucHV0Lmxhc2VyO1xyXG4gIH1cclxuICBcclxuICBmdW5jdGlvbiBkaXNhYmxlTW91c2UoKXtcclxuICAgIG1vdXNlRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgaWYgKG9uT3J0aG9Nb3VzZVJlbGVhc2UpIHtcclxuICAgICAgbW91c2VJbnB1dC5ldmVudHMucmVtb3ZlTGlzdGVuZXIoJ2dyYWJSZWxlYXNlZCcsIG9uT3J0aG9Nb3VzZVJlbGVhc2UpO1xyXG4gICAgICBvbk9ydGhvTW91c2VSZWxlYXNlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICBUaGUgZGVmYXVsdCBsYXNlciBwb2ludGVyIGNvbWluZyBvdXQgb2YgZWFjaCBJbnB1dE9iamVjdC5cclxuICAqL1xyXG4gIGNvbnN0IGxhc2VyTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTGluZUJhc2ljTWF0ZXJpYWwoe2NvbG9yOjB4NTVhYWZmLCB0cmFuc3BhcmVudDogdHJ1ZSwgYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcgfSk7XHJcbiAgZnVuY3Rpb24gY3JlYXRlTGFzZXIoKXtcclxuICAgIGNvbnN0IGcgPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKTtcclxuICAgIGcuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUobmV3IEZsb2F0MzJBcnJheShbMCwwLDAsMCwwLDBdKSkpO1xyXG4gICAgcmV0dXJuIG5ldyBUSFJFRS5MaW5lKCBnLCBsYXNlck1hdGVyaWFsICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLypcclxuICAgIEEgXCJjdXJzb3JcIiwgZWcgdGhlIGJhbGwgdGhhdCBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgeW91ciBsYXNlci5cclxuICAqL1xyXG4gIGNvbnN0IGN1cnNvck1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjoweDQ0NDQ0NCwgdHJhbnNwYXJlbnQ6IHRydWUsIGJsZW5kaW5nOiBUSFJFRS5BZGRpdGl2ZUJsZW5kaW5nIH0gKTtcclxuICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoKXtcclxuICAgIHJldHVybiBuZXcgVEhSRUUuTWVzaCggbmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KDAuMDA2LCA0LCA0ICksIGN1cnNvck1hdGVyaWFsICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICAvKlxyXG4gICAgQ3JlYXRlcyBhIGdlbmVyaWMgSW5wdXQgdHlwZS5cclxuICAgIFRha2VzIGFueSBUSFJFRS5PYmplY3QzRCB0eXBlIG9iamVjdCBhbmQgdXNlcyBpdHMgcG9zaXRpb25cclxuICAgIGFuZCBvcmllbnRhdGlvbiBhcyBhbiBpbnB1dCBkZXZpY2UuXHJcblxyXG4gICAgQSBsYXNlciBwb2ludGVyIGlzIGluY2x1ZGVkIGFuZCB3aWxsIGJlIHVwZGF0ZWQuXHJcbiAgICBDb250YWlucyBzdGF0ZSBhYm91dCB3aGljaCBJbnRlcmFjdGlvbiBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCBvciBob3Zlci5cclxuICAqL1xyXG4gIGZ1bmN0aW9uIGNyZWF0ZUlucHV0KCBpbnB1dE9iamVjdCA9IG5ldyBUSFJFRS5Hcm91cCgpICl7XHJcbiAgICBjb25zdCBpbnB1dCA9IHtcclxuICAgICAgcmF5Y2FzdDogbmV3IFRIUkVFLlJheWNhc3RlciggbmV3IFRIUkVFLlZlY3RvcjMoKSwgbmV3IFRIUkVFLlZlY3RvcjMoKSApLFxyXG4gICAgICBsYXNlcjogY3JlYXRlTGFzZXIoKSxcclxuICAgICAgY3Vyc29yOiBjcmVhdGVDdXJzb3IoKSxcclxuICAgICAgb2JqZWN0OiBpbnB1dE9iamVjdCxcclxuICAgICAgcHJlc3NlZDogZmFsc2UsXHJcbiAgICAgIGdyaXBwZWQ6IGZhbHNlLFxyXG4gICAgICBldmVudHM6IG5ldyBFbWl0dGVyKCksXHJcbiAgICAgIGludGVyYWN0aW9uOiB7XHJcbiAgICAgICAgZ3JpcDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHByZXNzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaG92ZXI6IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlucHV0Lmxhc2VyLmFkZCggaW5wdXQuY3Vyc29yICk7XHJcblxyXG4gICAgcmV0dXJuIGlucHV0O1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qXHJcbiAgICBNb3VzZUlucHV0LlxyXG4gICAgQWxsb3dzIHlvdSB0byBjbGljayBvbiB0aGUgc2NyZWVuIHdoZW4gbm90IGluIFZSIGZvciBkZWJ1Z2dpbmcuXHJcbiAgKi9cclxuICBjb25zdCBtb3VzZUlucHV0ID0gY3JlYXRlTW91c2VJbnB1dCgpO1xyXG5cclxuICBmdW5jdGlvbiBjcmVhdGVNb3VzZUlucHV0KCl7XHJcbiAgICBjb25zdCBtb3VzZSA9IG5ldyBUSFJFRS5WZWN0b3IyKC0xLC0xKTtcclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZUlucHV0KCk7XHJcbiAgICBpbnB1dC5tb3VzZSA9IG1vdXNlO1xyXG4gICAgaW5wdXQubW91c2VJbnRlcnNlY3Rpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgaW5wdXQubW91c2VPZmZzZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgaW5wdXQubW91c2VQbGFuZSA9IG5ldyBUSFJFRS5QbGFuZSgpO1xyXG4gICAgaW5wdXQuaW50ZXJzZWN0aW9ucyA9IFtdO1xyXG5cclxuICAgIC8vICBzZXQgbXkgZW5hYmxlTW91c2VcclxuICAgIGlucHV0Lm1vdXNlQ2FtZXJhID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnbW91c2Vtb3ZlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcbiAgICAgIGlmICghZXZlbnQuYnV0dG9ucykgaW5wdXQucHJlc3NlZCA9IGZhbHNlOyAgLy8gcmVkdWNlIGludGVyYWN0aW9uIGJldHdlZW4gbWFrZURyYWdnYWJsZSBkcmFnIGFuZCB0aGlzIGRyYWdcclxuXHJcbiAgICAgIC8vIGlmIGEgc3BlY2lmaWMgcmVuZGVyZXIgaGFzIGJlZW4gZGVmaW5lZFxyXG4gICAgICBpZiAobW91c2VSZW5kZXJlcikge1xyXG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBtb3VzZVJlbmRlcmVyLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgbW91c2UueCA9ICggKGV2ZW50LmNsaWVudFggLSBjbGllbnRSZWN0LmxlZnQpIC8gY2xpZW50UmVjdC53aWR0aCkgKiAyIC0gMTtcclxuICAgICAgICBtb3VzZS55ID0gLSAoIChldmVudC5jbGllbnRZIC0gY2xpZW50UmVjdC50b3ApIC8gY2xpZW50UmVjdC5oZWlnaHQpICogMiArIDE7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZGVmYXVsdCB0byBmdWxsc2NyZWVuXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG1vdXNlLnggPSAoIGV2ZW50LmNsaWVudFggLyB3aW5kb3cuaW5uZXJXaWR0aCApICogMiAtIDE7XHJcbiAgICAgICAgbW91c2UueSA9IC0gKCBldmVudC5jbGllbnRZIC8gd2luZG93LmlubmVySGVpZ2h0ICkgKiAyICsgMTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIGZhbHNlICk7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWRvd24nLCBmdW5jdGlvbiggZXZlbnQgKXtcclxuICAgICAgaWYgKGlucHV0LmludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIHByZXZlbnQgbW91c2UgZG93biBmcm9tIHRyaWdnZXJpbmcgb3RoZXIgbGlzdGVuZXJzIChwb2x5ZmlsbCwgZXRjKVxyXG4gICAgICAgIC8vIGNvbW1lbnRlZCBvdXQgMjggQXByaWwgMjAyMiwgZ2VuZXJhbGx5IHByZXR0eSBiYWQgcHJhY3RpY2VcclxuICAgICAgICAvLyBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpbnB1dC5wcmVzc2VkID0gdHJ1ZTsgLy9zb21ldGltZXMgd2UgY2FyZSBhYm91dCB0aGUgbW91c2UgYmVpbmcgcHJlc3NlZCwgZXZlbiBvbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAvL3dpbGwgYmUgc2V0IGZhbHNlIGF0IGVuZCBvZiBmaXJzdCB1cGRhdGUuIFNob3VsZG4ndCBiZSBuZWNlc3NhcnkgdG8gYWRkIGEgbmV3IHByb3BlcnR5Li4uIFxyXG4gICAgICAgLy9vblByZXNzZWQgc2hvdWxkIGJlIGFkZXF1YXRlLlxyXG4gICAgICBpbnB1dC5jbGlja2VkID0gdHJ1ZTtcclxuICAgIH0sIHRydWUgKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNldXAnLCBmdW5jdGlvbiggZXZlbnQgKXtcclxuICAgICAgaW5wdXQucHJlc3NlZCA9IGZhbHNlO1xyXG4gICAgfSwgZmFsc2UgKTtcclxuXHJcblxyXG4gICAgcmV0dXJuIGlucHV0O1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qXHJcbiAgICBQdWJsaWMgZnVuY3Rpb24gdXNlcnMgcnVuIHRvIGdpdmUgREFUIEdVSSBhbiBpbnB1dCBkZXZpY2UuXHJcbiAgICBBdXRvbWF0aWNhbGx5IGRldGVjdHMgZm9yIFZpdmVDb250cm9sbGVyIGFuZCBiaW5kcyBidXR0b25zICsgaGFwdGljIGZlZWRiYWNrLlxyXG5cclxuICAgIFJldHVybnMgYSBsYXNlciBwb2ludGVyIHNvIGl0IGNhbiBiZSBkaXJlY3RseSBhZGRlZCB0byBzY2VuZS5cclxuXHJcbiAgICBUaGUgbGFzZXIgd2lsbCB0aGVuIGhhdmUgdHdvIG1ldGhvZHM6XHJcbiAgICBsYXNlci5wcmVzc2VkKCksIGxhc2VyLmdyaXBwZWQoKVxyXG5cclxuICAgIFRoZXNlIGNhbiB0aGVuIGJlIGJvdW5kIHRvIGFueSBidXR0b24gdGhlIHVzZXIgd2FudHMuIFVzZWZ1bCBmb3IgYmluZGluZyB0b1xyXG4gICAgY2FyZGJvYXJkIG9yIGFsdGVybmF0ZSBpbnB1dCBkZXZpY2VzLlxyXG5cclxuICAgIEZvciBleGFtcGxlLi4uXHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWRvd24nLCBmdW5jdGlvbigpeyBsYXNlci5wcmVzc2VkKCB0cnVlICk7IH0gKTtcclxuICAqL1xyXG4gIGZ1bmN0aW9uIGFkZElucHV0T2JqZWN0KCBvYmplY3QgKXtcclxuICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlSW5wdXQoIG9iamVjdCApO1xyXG5cclxuICAgIGlucHV0Lmxhc2VyLnByZXNzZWQgPSBmdW5jdGlvbiggZmxhZyApe1xyXG4gICAgICBjb25zdCBoaXRzID0gaW5wdXQuaW50ZXJzZWN0aW9ucztcclxuICAgICAgLy8gb25seSBwYXkgYXR0ZW50aW9uIHRvIHByZXNzZXMgb3ZlciB0aGUgR1VJXHJcbiAgICAgIGlmIChmbGFnICYmIGhpdHMgJiYgKGhpdHMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICBpbnB1dC5wcmVzc2VkID0gdHJ1ZTtcclxuICAgICAgICBpbnB1dC5jbGlja2VkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnB1dC5wcmVzc2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaW5wdXQubGFzZXIuZ3JpcHBlZCA9IGZ1bmN0aW9uKCBmbGFnICl7XHJcbiAgICAgIGlucHV0LmdyaXBwZWQgPSBmbGFnO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbnB1dC5sYXNlci5jdXJzb3IgPSBpbnB1dC5jdXJzb3I7XHJcblxyXG4gICAgaWYoIFRIUkVFLlZpdmVDb250cm9sbGVyICYmIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLlZpdmVDb250cm9sbGVyICl7XHJcbiAgICAgIGJpbmRWaXZlQ29udHJvbGxlciggaW5wdXQsIG9iamVjdCwgaW5wdXQubGFzZXIucHJlc3NlZCwgaW5wdXQubGFzZXIuZ3JpcHBlZCApO1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0T2JqZWN0cy5wdXNoKCBpbnB1dCApO1xyXG5cclxuICAgIHJldHVybiBpbnB1dC5sYXNlcjtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIC8qXHJcbiAgICBIZXJlIGFyZSB0aGUgbWFpbiBkYXQgZ3VpIGNvbnRyb2xsZXIgdHlwZXMuXHJcbiAgKi9cclxuXHJcbiAgZnVuY3Rpb24gYWRkU2xpZGVyKCBvYmplY3QsIHByb3BlcnR5TmFtZSwgbWluID0gMC4wLCBtYXggPSAxMDAuMCApe1xyXG4gICAgY29uc3Qgc2xpZGVyID0gY3JlYXRlU2xpZGVyKCB7XHJcbiAgICAgIHRleHRDcmVhdG9yLCBwcm9wZXJ0eU5hbWUsIG9iamVjdCwgbWluLCBtYXgsXHJcbiAgICAgIGluaXRpYWxWYWx1ZTogb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29udHJvbGxlcnMucHVzaCggc2xpZGVyICk7XHJcblxyXG4gICAgcmV0dXJuIHNsaWRlcjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZENoZWNrYm94KCBvYmplY3QsIHByb3BlcnR5TmFtZSApe1xyXG4gICAgY29uc3QgY2hlY2tib3ggPSBjcmVhdGVDaGVja2JveCh7XHJcbiAgICAgIHRleHRDcmVhdG9yLCBwcm9wZXJ0eU5hbWUsIG9iamVjdCxcclxuICAgICAgaW5pdGlhbFZhbHVlOiBvYmplY3RbIHByb3BlcnR5TmFtZSBdXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb250cm9sbGVycy5wdXNoKCBjaGVja2JveCApO1xyXG5cclxuICAgIHJldHVybiBjaGVja2JveDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZEJ1dHRvbiggb2JqZWN0LCBwcm9wZXJ0eU5hbWUgKXtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbih7XHJcbiAgICAgIHRleHRDcmVhdG9yLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29udHJvbGxlcnMucHVzaCggYnV0dG9uICk7XHJcbiAgICByZXR1cm4gYnV0dG9uO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIHRvIGNhbGwgYmFjayB3aGVuIGJ1dHRvbiBwcmVzc2VkXHJcbiAgICogQHBhcmFtIHsqfSBpbWFnZSBjYW4gYmUgZmlsZW5hbWUsIFdlYkdMUmVuZGVyVGFyZ2V0IG9yIE1hdGVyaWFsXHJcbiAgICogQHBhcmFtIHtCb29sZWFufSB3aWRlIHdoZXRoZXIgdG8gbWFrZSBidXR0b24gZmlsbCBlbnRpcmUgd2lkdGggb2YgcGFuZWwgKGFwaSBzdWJqZWN0IHRvIGNoYW5nZSlcclxuICAgKi9cclxuICBmdW5jdGlvbiBhZGRJbWFnZUJ1dHRvbihmdW5jLCBpbWFnZSwgd2lkZSwgaGVpZ2h0KSB7XHJcbiAgICBjb25zdCBvYmplY3QgPSB7IGY6IGZ1bmMgfTtcclxuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9ICdmJztcclxuXHJcblxyXG4gICAgLy9zZWUgYWxzbyBmb2xkZXIuanMgd2hlcmUgdGhpcyBpcyBhZGRlZCB0byBncm91cCBvYmplY3QuLi5cclxuICAgIC8vYXMgc3VjaCB0aGlzIGZ1bmN0aW9uIGFsc28gbmVlZHMgdG8gYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNyZWF0ZUZvbGRlci5cclxuICAgIC8vcGVyaGFwcyBhbGwgb2YgdGhlc2UgJ2FkZFgnIGZ1bmN0aW9ucyBjb3VsZCBiZSBpbml0aWFsbHkgcHV0IG9udG8gYW4gb2JqZWN0IHNvIHRoYXRcclxuICAgIC8vbmV3IGFkZGl0aW9ucyBjb3VsZCBiZSBhZGRlZCBzbGlnaHRseSBtb3JlIGVhc2lseS5cclxuICAgIGNvbnN0IGJ1dHRvbiA9IGNyZWF0ZUltYWdlQnV0dG9uKHtcclxuICAgICAgdGV4dENyZWF0b3IsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBpbWFnZSwgd2lkZSwgaGVpZ2h0XHJcbiAgICB9KTtcclxuICAgIGNvbnRyb2xsZXJzLnB1c2goIGJ1dHRvbiApO1xyXG4gICAgcmV0dXJuIGJ1dHRvbjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZFhZQ29udHJvbGxlcihwcmVzc2luZywgaW1hZ2UsIHdpZGUsIGhlaWdodCkge1xyXG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gJyc7XHJcbiAgICBjb25zdCBidXR0b24gPSBjcmVhdGVJbWFnZUJ1dHRvbih7XHJcbiAgICAgIHRleHRDcmVhdG9yLCBwcmVzc2luZywgcHJvcGVydHlOYW1lLCBpbWFnZSwgd2lkZSwgaGVpZ2h0XHJcbiAgICB9KTtcclxuICAgIGNvbnRyb2xsZXJzLnB1c2goYnV0dG9uKTtcclxuICAgIHJldHVybiBidXR0b247XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIFRoaXMgaW50ZXJmYWNlIG1heSBiZSBzdWJqZWN0IHRvIGNoYW5nZS4gIEFyZ3VtZW50cyBhcmUgb2JqZWN0cyBkZXNjcmliaW5nIGJ1dHRvbnNcclxuICBGaXJzdCBvYmplY3QgbWF5IGJlIGFuIGludGVnZXIgZm9yIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0byB1c2UuXHJcbiAgKi9cclxuICBmdW5jdGlvbiBhZGRJbWFnZUJ1dHRvblBhbmVsKGNvbHMsIC4uLmFyZ3MpIHtcclxuICAgIGxldCBjb2x1bW5zID0gTnVtYmVyLmlzSW50ZWdlcihjb2xzKSA/IGNvbHMgOiA0O1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IGFyZ3M7XHJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29scykpIG9iamVjdHMudW5zaGlmdChjb2xzKVxyXG4gICAgY29uc3QgZ3JpZCA9IGNyZWF0ZUltYWdlQnV0dG9uR3JpZCh7dGV4dENyZWF0b3IsIG9iamVjdHMsIGNvbHVtbnM6IGNvbHVtbnN9KTtcclxuICAgIGNvbnRyb2xsZXJzLnB1c2goZ3JpZCk7XHJcbiAgICByZXR1cm4gZ3JpZDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZEtleWJvYXJkKCBrZXlMaXN0ZW5lciApIHtcclxuICAgIGlmICgha2V5TGlzdGVuZXIpIGtleUxpc3RlbmVyID0gKGspID0+IGNvbnNvbGUubG9nKGBrZXlEb3duICR7a31gKTtcclxuICAgIGNvbnN0IGtiID0gY3JlYXRlS2V5Ym9hcmQoe2tleUxpc3RlbmVyLCB0ZXh0Q3JlYXRvcn0pO1xyXG4gICAgY29udHJvbGxlcnMucHVzaChrYik7XHJcbiAgICByZXR1cm4ga2I7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRUZXh0Ym94KCBvYmplY3QsIHByb3BlcnR5TmFtZSApIHtcclxuICAgIGNvbnN0IGJveCA9IGNyZWF0ZVRleHRib3goe3RleHRDcmVhdG9yLCBvYmplY3QsIHByb3BlcnR5TmFtZX0pO1xyXG4gICAgY29udHJvbGxlcnMucHVzaChib3gpO1xyXG4gICAgcmV0dXJuIGJveDtcclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gYWRkQ29sb3JQaWNrZXIoIG9iamVjdCwgcHJvcGVydHlOYW1lICkge1xyXG4gICAgY29uc3QgYm94ID0gY3JlYXRlQ29sb3JQaWNrZXIoe3RleHRDcmVhdG9yLCBvYmplY3QsIHByb3BlcnR5TmFtZX0pO1xyXG4gICAgY29udHJvbGxlcnMucHVzaChib3gpO1xyXG4gICAgcmV0dXJuIGJveDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZERyb3Bkb3duKCBvYmplY3QsIHByb3BlcnR5TmFtZSwgb3B0aW9ucyApe1xyXG4gICAgY29uc3QgZHJvcGRvd24gPSBjcmVhdGVEcm9wZG93bih7XHJcbiAgICAgIHRleHRDcmVhdG9yLCBwcm9wZXJ0eU5hbWUsIG9iamVjdCwgb3B0aW9uc1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29udHJvbGxlcnMucHVzaCggZHJvcGRvd24gKTtcclxuICAgIHJldHVybiBkcm9wZG93bjtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvKlxyXG4gICAgQW4gaW1wbGljaXQgQWRkIGZ1bmN0aW9uIHdoaWNoIGRldGVjdHMgZm9yIHByb3BlcnR5IHR5cGVcclxuICAgIGFuZCBnaXZlcyB5b3UgdGhlIGNvcnJlY3QgY29udHJvbGxlci5cclxuXHJcbiAgICBEcm9wZG93bjpcclxuICAgICAgYWRkKCBvYmplY3QsIHByb3BlcnR5TmFtZSwgb2JqZWN0VHlwZSApXHJcblxyXG4gICAgU2xpZGVyOlxyXG4gICAgICBhZGQoIG9iamVjdCwgcHJvcGVydHlPZk51bWJlclR5cGUsIG1pbiwgbWF4IClcclxuXHJcbiAgICBDaGVja2JveDpcclxuICAgICAgYWRkKCBvYmplY3QsIHByb3BlcnR5T2ZCb29sZWFuVHlwZSApXHJcblxyXG4gICAgQnV0dG9uOlxyXG4gICAgICBhZGQoIG9iamVjdCwgcHJvcGVydHlPZkZ1bmN0aW9uVHlwZSApXHJcblxyXG4gICAgTm90IHVzZWQgZGlyZWN0bHkuIFVzZWQgYnkgZm9sZGVycy5cclxuICAqL1xyXG5cclxuICBmdW5jdGlvbiBhZGQoIG9iamVjdCwgcHJvcGVydHlOYW1lLCBhcmczLCBhcmc0ICl7XHJcblxyXG4gICAgaWYoIG9iamVjdCA9PT0gdW5kZWZpbmVkICl7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcblxyXG4gICAgaWYgKG9iamVjdC5pc0ZvbGRlcikgcmV0dXJuIG9iamVjdDtcclxuXHJcbiAgICBpZiggb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXSA9PT0gdW5kZWZpbmVkICl7XHJcbiAgICAgIGNvbnNvbGUud2FybiggJ25vIHByb3BlcnR5IG5hbWVkJywgcHJvcGVydHlOYW1lLCAnb24gb2JqZWN0Jywgb2JqZWN0ICk7XHJcbiAgICAgIHJldHVybiBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggaXNPYmplY3QoIGFyZzMgKSB8fCBpc0FycmF5KCBhcmczICkgKXtcclxuICAgICAgcmV0dXJuIGFkZERyb3Bkb3duKCBvYmplY3QsIHByb3BlcnR5TmFtZSwgYXJnMyApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBpc051bWJlciggb2JqZWN0WyBwcm9wZXJ0eU5hbWVdICkgKXtcclxuICAgICAgcmV0dXJuIGFkZFNsaWRlciggb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGFyZzMsIGFyZzQgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggaXNCb29sZWFuKCBvYmplY3RbIHByb3BlcnR5TmFtZV0gKSApe1xyXG4gICAgICByZXR1cm4gYWRkQ2hlY2tib3goIG9iamVjdCwgcHJvcGVydHlOYW1lICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGlzRnVuY3Rpb24oIG9iamVjdFsgcHJvcGVydHlOYW1lIF0gKSApe1xyXG4gICAgICByZXR1cm4gYWRkQnV0dG9uKCBvYmplY3QsIHByb3BlcnR5TmFtZSApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICggaXNTdHJpbmcoIG9iamVjdFsgcHJvcGVydHlOYW1lIF0gKSApe1xyXG4gICAgICByZXR1cm4gYWRkVGV4dGJveCggb2JqZWN0LCBwcm9wZXJ0eU5hbWUgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIGlzQ29sb3IoIG9iamVjdFsgcHJvcGVydHlOYW1lIF0gKSApe1xyXG4gICAgICByZXR1cm4gYWRkQ29sb3JQaWNrZXIoIG9iamVjdCwgcHJvcGVydHlOYW1lICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIGFkZCBjb3VsZG4ndCBmaWd1cmUgaXQgb3V0LCBwYXNzIGl0IGJhY2sgdG8gZm9sZGVyXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gYWRkU2ltcGxlU2xpZGVyKCBtaW4gPSAwLCBtYXggPSAxICl7XHJcbiAgICBjb25zdCBwcm94eSA9IHtcclxuICAgICAgbnVtYmVyOiBtaW5cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGFkZFNsaWRlciggcHJveHksICdudW1iZXInLCBtaW4sIG1heCApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRkU2ltcGxlRHJvcGRvd24oIG9wdGlvbnMgPSBbXSApe1xyXG4gICAgY29uc3QgcHJveHkgPSB7XHJcbiAgICAgIG9wdGlvbjogJydcclxuICAgIH07XHJcblxyXG4gICAgaWYoIG9wdGlvbnMgIT09IHVuZGVmaW5lZCApe1xyXG4gICAgICBwcm94eS5vcHRpb24gPSBpc0FycmF5KCBvcHRpb25zICkgPyBvcHRpb25zWyAwIF0gOiBvcHRpb25zWyBPYmplY3Qua2V5cyhvcHRpb25zKVswXSBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhZGREcm9wZG93biggcHJveHksICdvcHRpb24nLCBvcHRpb25zICk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRTaW1wbGVDaGVja2JveCggZGVmYXVsdE9wdGlvbiA9IGZhbHNlICl7XHJcbiAgICBjb25zdCBwcm94eSA9IHtcclxuICAgICAgY2hlY2tlZDogZGVmYXVsdE9wdGlvblxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gYWRkQ2hlY2tib3goIHByb3h5LCAnY2hlY2tlZCcgKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZFNpbXBsZUJ1dHRvbiggZm4gKXtcclxuICAgIGNvbnN0IHByb3h5ID0ge1xyXG4gICAgICBidXR0b246IChmbiE9PXVuZGVmaW5lZCkgPyBmbiA6IGZ1bmN0aW9uKCl7fVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gYWRkQnV0dG9uKCBwcm94eSwgJ2J1dHRvbicgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgTm90IHVzZWQgZGlyZWN0bHk7IHVzZWQgYnkgZm9sZGVycy5cclxuICBSZW1vdmUgY29udHJvbGxlcnMgZnJvbSB0aGUgZ2xvYmFsIGxpc3Qgb2YgYWxsIGNvbnRyb2xsZXJzIGtub3duIHRvIGRhdC5HVUlWUi5cclxuICBDYWxscyByZW1vdmVUZXN0IGZpcnN0IHRvIGNoZWNrIGlucHV0IGFyZ3VtZW50cy4gIHJldHVybnMgZmFsc2UgaWYgdGhpcyB0ZXN0IGZhaWxzLlxyXG4gIHJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLlxyXG5cclxuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZWN1cnNpdmVseSByZW1vdmUgZWxlbWVudHMgZnJvbSBmb2xkZXJzOyB0aGF0IGlzIGRlYWx0IHdpdGggaW4gdGhlIGZvbGRlciBjb2RlIHdoaWNoIGNhbGxzIHRoaXMuXHJcbiAgXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcmVtb3ZlKCAuLi5hcmdzICl7XHJcbiAgICBsZXQgYXJnU2V0ID0gWyAuLi5uZXcgU2V0KGFyZ3MpIF07IC8vanVzdCBpbiBjYXNlIHRoZXJlIHdlcmUgcmVwZWF0ZWQgZWxlbWVudHMgaW4gYXJncywgdHVybiBpbnRvIFNldCB0aGVuIGJhY2sgdG8gYXJyYXkuXHJcbiAgICBpZiAoICFyZW1vdmVUZXN0KC4uLmFyZ1NldCkgKSByZXR1cm4gZmFsc2U7XHJcbiAgICBhcmdTZXQuZm9yRWFjaCggZnVuY3Rpb24oIG9iaiApe1xyXG4gICAgICB2YXIgaSA9IGNvbnRyb2xsZXJzLmluZGV4T2YoIG9iaiApO1xyXG4gICAgICBpZiAoIGkgPiAtMSkgY29udHJvbGxlcnMuc3BsaWNlKCBpLCAxICk7XHJcbiAgICAgIGVsc2UgeyAvLyBJIGNhbid0IHNlZSBob3cgdGhpcydkIGhhcHBlbiBub3cgd2UgZ3VhcmQgYWdhaW5zdCByZXBlYXRlZCBlbGVtZW50cy5cclxuICAgICAgICBjb25zb2xlLmxvZyhcIkludGVybmFsIGVycm9yIGluIHJlbW92ZSwgbm90IGFudGljaXBhdGVkIGJ5IHJlbW92ZVRlc3QuIEludGVybmFsIGRhdC5HVUlWUiBzdGF0ZSBtYXkgYmUgaW5jb25zaXN0ZW50LlwiKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIFZlcmlmeSB0aGF0IGFsbCBvZiB0aGUgaXRlbXMgaW4gcHJvdmlkZWQgYXJndW1lbnRzIGFyZSBleGlzdGluZyBjb250cm9sbGVycyB0aGF0IHNob3VsZCBiZSBvayB0byByZW1vdmUuXHJcblxyXG4gIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgYXJlIGFueSBtaXNtYXRjaGVzLCB0cnVlIGlmIGJlbGlldmVkIG9rIHRvIGNvbnRpbnVlIHdpdGggYWN0dWFsIHJlbW92ZSgpXHJcblxyXG4gIElmIGFueSBvZiB0aGUgcHJvdmlkZWQgYXJncyBhcmUgZm9sZGVycyAoaGF2ZSBpc0ZvbGRlciBwcm9wZXJ0eSkgdGhpcyBpcyBjYWxsZWQgcmVjdXJzaXZlbHkuXHJcbiAgVGhpcyB3aWxsIHJlc3VsdCBpbiByZWR1bmRhbnQgd29yayBhcyBlYWNoIGZvbGRlciB3aWxsIGFsc28gY2FsbCBpdCBhZ2FpbiBhcyBpdCdzIHJlbW92ZWQsIGJ1dCB0aGlzIGlzIGNoZWFwXHJcbiAgYW5kIGl0IG1lYW5zIHRoYXQgYW55IGVycm9yIHNob3VsZCBiZSBjYXVnaHQgYXMgZWFybHkgYXMgcG9zc2libGUgYW5kIHRoZSB3aG9sZSBwcm9jZXNzIGFib3J0ZWQuXHJcbiAgKi9cclxuICBmdW5jdGlvbiByZW1vdmVUZXN0KCAuLi5hcmdzICkge1xyXG4gICAgZm9yICh2YXIgaT0wOyBpPGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIG9iaiA9IGFyZ3NbaV07XHJcbiAgICAgIGlmIChjb250cm9sbGVycy5pbmRleE9mKG9iaikgPT09IC0xIHx8ICFvYmouZm9sZGVyLmhhc0NoaWxkKG9iaikpIHtcclxuICAgICAgICAvL1RPRE86IHRvU3RyaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgY29udHJvbGxlcnNcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNhbid0IHJlbW92ZSBjb250cm9sbGVyIFwiICsgb2JqKTsgLy9ub3Qgc3VyZSB0aGUgcHJlZmVycmVkIHdheSBvZiByZXBvcnRpbmcgcHJvYmxlbSB0byB1c2VyLlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLmlzRm9sZGVyKSB7XHJcbiAgICAgICAgaWYgKCFyZW1vdmVUZXN0KCAuLi5vYmouZ3VpQ2hpbGRyZW4gKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBsZXRlbHkgcmVtb3ZlIGFsbCBHVUkgZWxlbWVudHMgZnJvbSB0aGUgc3lzdGVtIGdsb2JhbGx5LCBcclxuICAgKiBpbmNsdWRpbmcgcmVtb3ZpbmcgYW55IG9iamVjdHMgZnJvbSB0aGUgc2NlbmUgaGllcmFyY2h5LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsZWFyQWxsKCkge1xyXG4gICAgY29udHJvbGxlcnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgYy52aXNpYmxlID0gZmFsc2U7IGlmIChjLnBhcmVudCAmJiAhYy5wYXJlbnQuZ3VpQ2hpbGRyZW4pIGMucGFyZW50LnJlbW92ZShjKTtcclxuICAgIH0pO1xyXG4gICAgY29udHJvbGxlcnMuc3BsaWNlKDAsIGNvbnRyb2xsZXJzLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgIENyZWF0ZXMgYSBmb2xkZXIgd2l0aCB0aGUgbmFtZS5cclxuXHJcbiAgICBGb2xkZXJzIGFyZSBUSFJFRS5Hcm91cCB0eXBlIG9iamVjdHMgYW5kIGNhbiBkbyBncm91cC5hZGQoKSBmb3Igc2libGluZ3MuXHJcbiAgICBGb2xkZXJzIHdpbGwgYXV0b21hdGljYWxseSBhdHRlbXB0IHRvIGxheSBpdHMgY2hpbGRyZW4gb3V0IGluIHNlcXVlbmNlLlxyXG5cclxuICAgIEZvbGRlcnMgYXJlIGdpdmVuIHRoZSBhZGQoKSBmdW5jdGlvbmFsaXR5IHNvIHRoYXQgdGhleSBjYW4gZG9cclxuICAgIGZvbGRlci5hZGQoIC4uLiApIHRvIGNyZWF0ZSBjb250cm9sbGVycy5cclxuICAqL1xyXG5cclxuICBmdW5jdGlvbiBjcmVhdGUoIG5hbWUgKXtcclxuICAgIGNvbnN0IGZvbGRlciA9IGNyZWF0ZUZvbGRlcih7XHJcbiAgICAgIHRleHRDcmVhdG9yLFxyXG4gICAgICBuYW1lLFxyXG4gICAgICBndWlBZGQ6IGFkZCxcclxuICAgICAgZ3VpUmVtb3ZlOiByZW1vdmUsXHJcbiAgICAgIGFkZENvbnRyb2xsZXJGdW5jczoge1xyXG4gICAgICAgIGFkZFNsaWRlcjogYWRkU2ltcGxlU2xpZGVyLFxyXG4gICAgICAgIGFkZERyb3Bkb3duOiBhZGRTaW1wbGVEcm9wZG93bixcclxuICAgICAgICBhZGRDaGVja2JveDogYWRkU2ltcGxlQ2hlY2tib3gsXHJcbiAgICAgICAgYWRkQnV0dG9uOiBhZGRTaW1wbGVCdXR0b24sXHJcbiAgICAgICAgYWRkSW1hZ2VCdXR0b246IGFkZEltYWdlQnV0dG9uLFxyXG4gICAgICAgIGFkZFhZQ29udHJvbGxlcjogYWRkWFlDb250cm9sbGVyLFxyXG4gICAgICAgIGFkZEltYWdlQnV0dG9uUGFuZWw6IGFkZEltYWdlQnV0dG9uUGFuZWwsXHJcbiAgICAgICAgYWRkS2V5Ym9hcmQ6IGFkZEtleWJvYXJkLFxyXG4gICAgICAgIGFkZFRleHRib3g6IGFkZFRleHRib3hcclxuICAgICAgfSxcclxuICAgICAgZ2xvYmFsQ29udHJvbGxlcnM6IGNvbnRyb2xsZXJzLFxyXG4gICAgICAvLz8/P1xyXG4gICAgICBhZGRIZWFkZXJGdW5jczoge1xyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb250cm9sbGVycy5wdXNoKCBmb2xkZXIgKTtcclxuXHJcbiAgICByZXR1cm4gZm9sZGVyO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qXHJcbiAgICBQZXJmb3JtIHRoZSBuZWNlc3NhcnkgdXBkYXRlcywgcmF5Y2FzdHMgb24gaXRzIG93biBSQUYuXHJcbiAgKi9cclxuXHJcbiAgY29uc3QgdFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBjb25zdCB0RGlyZWN0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoIDAsIDAsIC0xICk7XHJcbiAgY29uc3QgdE1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGlzT3J0aG9ncmFwaGljID0gbW91c2VFbmFibGVkICYmIG1vdXNlSW5wdXQubW91c2VDYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmE7XHJcbiAgICBpZiAoYXV0b1VwZGF0ZSkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCB1cGRhdGUgKTtcclxuICAgIFxyXG4gICAgdmFyIGhpdHNjYW5PYmplY3RzID0gZ2V0VmlzaWJsZUhpdHNjYW5PYmplY3RzKCk7XHJcbiAgICBjb25zdCBjb250cm9sbGVycyA9IGdldFZpc2libGVDb250cm9sbGVycygpO1xyXG4gICAgY29uc3QgZm9sZGVycyA9IGNvbnRyb2xsZXJzLmZpbHRlcihjID0+IGMuZm9sZGVyID09PSBjKTsgLy9hbGwgdG9wLWxldmVsIGZvbGRlcnNcclxuICAgIGZvbGRlcnMuZm9yRWFjaChmID0+IHtcclxuICAgICAgZi51c2VyRGF0YS5pc09ydGhvZ3JhcGhpYyA9IGlzT3J0aG9ncmFwaGljID8gbW91c2VJbnB1dC5tb3VzZUNhbWVyYSA6IGZhbHNlO1xyXG4gICAgICBpZiAoZi5tb2RhbFdhc1NldEluQ3VycmVudEZyYW1lKSB7XHJcbiAgICAgICAgZi5yZXF1ZXN0TGF5b3V0KCk7XHJcbiAgICAgICAgZi5tb2RhbFdhc1NldEluQ3VycmVudEZyYW1lID0gZmFsc2U7IC8vIHByb3RlY3QgYW55IG5ld2x5LWRpc3BsYXllZCBtb2RhbEVkaXRvciBmcm9tIGJlaW5nIGNsZWFyZWRcclxuICAgICAgfVxyXG4gICAgICBpZiAoZi51c2VyRGF0YS5sYXlvdXRQZW5kaW5nKSBmLnBlcmZvcm1MYXlvdXQoKTtcclxuICAgIH0pOyBcclxuXHJcbiAgICBpZiggbW91c2VFbmFibGVkICl7XHJcbiAgICAgIC8vVE9ETzogbG9jayBtb3VzZSBvbiBob3Zlcj8/XHJcbiAgICAgIG1vdXNlSW5wdXQuaW50ZXJzZWN0aW9ucyA9IHBlcmZvcm1Nb3VzZUlucHV0KCBoaXRzY2FuT2JqZWN0cywgbW91c2VJbnB1dCApO1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0T2JqZWN0cy5mb3JFYWNoKCBmdW5jdGlvbigge2JveCxvYmplY3QscmF5Y2FzdCxsYXNlcixjdXJzb3IsaW50ZXJhY3Rpb259ID0ge30sIGluZGV4ICl7XHJcbiAgICAgIGNoZWNrQ2FuY2VsbGVkSW50ZXJhY3Rpb25zKCBpbnRlcmFjdGlvbiwgaGl0c2Nhbk9iamVjdHMgKTtcclxuICAgICAgb2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcbiAgICAgIFxyXG4gICAgICB0UG9zaXRpb24uc2V0KDAsMCwwKS5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG9iamVjdC5tYXRyaXhXb3JsZCApO1xyXG4gICAgICB0TWF0cml4LmlkZW50aXR5KCkuZXh0cmFjdFJvdGF0aW9uKCBvYmplY3QubWF0cml4V29ybGQgKTtcclxuICAgICAgXHJcbiAgICAgIHREaXJlY3Rpb24uc2V0KDAsMCwtMSk7XHJcbiAgICAgIC8vYWx0ZXJpbmcgZGlyZWN0aW9uIGUuZy4gdG8gcG9pbnQgaW4gZGlyZWN0aW9uIG9mIGV4dGVuZGVkIHRyaWdnZXIgZmluZ2VyLCByYXRoZXIgdGhhbiAnbWFpbiBheGlzJyBvZiBWaXZlIGNvbnRyb2xsZXIuLi5cclxuICAgICAgLy9tYXliZSB0aGlzIHNob3VsZCBiZSBpbiB1c2VyRGF0YS5cclxuICAgICAgaWYgKG9iamVjdC5sYXNlclJvdGF0ZU1vZGlmaWVyKSB0RGlyZWN0aW9uLmFwcGx5UXVhdGVybmlvbihvYmplY3QubGFzZXJSb3RhdGVNb2RpZmllcik7XHJcbiAgICAgIHREaXJlY3Rpb24uYXBwbHlNYXRyaXg0KCB0TWF0cml4ICkubm9ybWFsaXplKCk7XHJcbiAgICAgIFxyXG4gICAgICByYXljYXN0LnNldCggdFBvc2l0aW9uLCB0RGlyZWN0aW9uICk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBsYXNlci5nZW9tZXRyeS52ZXJ0IGljZXNbIDAgXS5jb3B5KCB0UG9zaXRpb24gKTtcclxuICAgICAgY29uc3QgYSA9IGxhc2VyLmdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5hcnJheTtcclxuICAgICAgYVswXSA9IHRQb3NpdGlvbi54OyBhWzFdID0gdFBvc2l0aW9uLnk7IGFbMl0gPSB0UG9zaXRpb24uejtcclxuICAgICAgXHJcbiAgICAgIC8vICBkZWJ1Zy4uLlxyXG4gICAgICAvLyBsYXNlci5nZW9tZXRyeS52ZXJ0IGljZXNbIDEgXS5jb3B5KCB0UG9zaXRpb24gKS5hZGQoIHREaXJlY3Rpb24ubXVsdGlwbHlTY2FsYXIoIDEgKSApO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IHJheWNhc3QuaW50ZXJzZWN0T2JqZWN0cyggaGl0c2Nhbk9iamVjdHMsIGZhbHNlICk7XHJcbiAgICAgIHBhcnNlSW50ZXJzZWN0aW9ucyggaW50ZXJzZWN0aW9ucywgbGFzZXIsIGN1cnNvciApO1xyXG4gICAgICBcclxuICAgICAgaW5wdXRPYmplY3RzWyBpbmRleCBdLmludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3Rpb25zO1xyXG4gICAgICAvL3dhbnQgdG8gYWRkIGluZm8gKGhpdCBkaXNjdGFuY2UpIHRvIG9iamVjdCBmb3IgdXNlIG91dHNpZGUuLi4ganVzdCBhZGRpbmcgZW50aXJldHkgb2YgaW50ZXJzZWN0aW9ucyBpbiBjYXNlIHVzZWZ1bFxyXG4gICAgICBpZiAob2JqZWN0LnVzZXJEYXRhKSBvYmplY3QudXNlckRhdGEuZ3VpSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdGlvbnM7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgY29uc3QgaW5wdXRzID0gaW5wdXRPYmplY3RzLnNsaWNlKCk7XHJcbiAgICBcclxuICAgIGlmKCBtb3VzZUVuYWJsZWQgKXtcclxuICAgICAgaW5wdXRzLnB1c2goIG1vdXNlSW5wdXQgKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29udHJvbGxlcnMuZm9yRWFjaCggYyA9PiBjLnVwZGF0ZUNvbnRyb2woIGlucHV0cyApKTtcclxuICAgIC8vbm93IGNoZWNrIGlmIGFueSBwcmVzcyBvbiBhbnkgaW5wdXQgaGl0IGFueSBub24nbW9kYWwgZWRpdG9yJy4uLiBpZiBzbywgd2UnbGwgcmVtb3ZlIG1vZGFscyBmcm9tIGFsbCBmb2xkZXJzXHJcbiAgICAvLyh0aGlzIGlzbid0IHBlcmZlY3Q7IGlmIHlvdSBhcmUgYWN0aXZlbHkgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgYW5kIHByZXNzIG90aGVyIGJ1dHRvbiBzb21ld2hlcmUgZWxzZSwgaXQnbGwgcmVtb3ZlIHlvdXIgb2JqZWN0KVxyXG4gICAgbGV0IGhpdE5vbk1vZGFscyA9IGlucHV0cy5maWx0ZXIoaW5wdXQgPT4gaW5wdXQuaGl0Tm9uTW9kYWwpO1xyXG4gICAgaWYgKGhpdE5vbk1vZGFscy5sZW5ndGggIT0gMCkge1xyXG4gICAgICBoaXROb25Nb2RhbHMuZm9yRWFjaChoID0+IGguaGl0Tm9uTW9kYWwgPSBmYWxzZSk7IC8vcmVtb3ZlIGZsYWdzIHNvIHRoZXkgZG9uJ3QgcGVyc2lzdCB0byBzdWJzZXF1ZW50IHVwZGF0ZXNcclxuICAgICAgZm9sZGVycy5mb3JFYWNoKGYgPT4gZi5jbGVhck1vZGFsRWRpdG9yKCkpOyAvL3RoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gbm90IGhpZGUgaXRlbXMgbmV3bHkgZGlzcGxheWVkIGluIHRoaXMgZnJhbWVcclxuICAgIH1cclxuICAgIG1vdXNlSW5wdXQuY2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgaW5wdXRPYmplY3RzLmZvckVhY2gobz0+by5jbGlja2VkID0gZmFsc2UpO1xyXG4gICAgcmV0dXJuIG1vdXNlSW5wdXQuaW50ZXJzZWN0aW9uczsgLy9zanB0IHdhbnRlZCB0aGlzXHJcbiAgfVxyXG5cclxuICAvL2lmIGFueSBpbnB1dC5pbnRlcmFjdGlvbnMgaGF2ZSBoaXRWb2x1bWUgdGhhdCBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgbm90IGN1cnJlbnRseSBpbiBoaXRzY2FuT2JqZWN0cyxcclxuICAvL3RoYXQgaW50ZXJhY3Rpb24gc2hvdWxkIGJlIGNhbmNlbGxlZC4gRXNwZWNpYWxseSBwcm9ibGVtYXRpYyB3aXRoIGUuZy4gcHJlc3NpbmcgJ3JlYXR0YWNoJyB3aGVuIHRoZSBwYXJlbnQgaXMgY2xvc2VkLlxyXG4gIGZ1bmN0aW9uIGNoZWNrQ2FuY2VsbGVkSW50ZXJhY3Rpb25zKCBpbnRlcmFjdGlvbnMsIGhpdHNjYW5PYmplY3RzICkge1xyXG4gICAgWydwcmVzcycsICdncmlwJywgJ2hvdmVyJ10uZm9yRWFjaCggaW50ZXJhY3Rpb25OYW1lID0+IHtcclxuICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvbnNbaW50ZXJhY3Rpb25OYW1lXTtcclxuICAgICAgaWYgKGludGVyYWN0aW9uICYmIGhpdHNjYW5PYmplY3RzLmluZGV4T2YoaW50ZXJhY3Rpb24uaGl0Vm9sdW1lKSA8IDApIHtcclxuICAgICAgICBpbnRlcmFjdGlvbnNbaW50ZXJhY3Rpb25OYW1lXSA9IHVuZGVmaW5lZDsgXHJcbiAgICAgICAgLy9vbmx5IGJlIHBvbGl0ZSB0byBpbmZvcm0gdGhlIGludGVyYWN0aW9uIGFzIHdlbGw7IHVwZGF0ZSB3aXRoIGVtcHR5IGlucHV0T2JqZWN0cyBhcmcgc2hvdWxkIGRvIHRoZSB0cmljay5cclxuICAgICAgICBpbnRlcmFjdGlvbi51cGRhdGUoIFtdICk7XHJcbiAgICAgIH0gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZUxhc2VyKCBsYXNlciwgcG9pbnQgKXtcclxuICAgIGNvbnN0IHBwID0gbGFzZXIuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmFycmF5O1xyXG4gICAgcHBbM10gPSBwb2ludC54O1xyXG4gICAgcHBbNF0gPSBwb2ludC55O1xyXG4gICAgcHBbNV0gPSBwb2ludC56O1xyXG4gICAgcHAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgLy9sYXNlci5nZW9tZXRyeS52ZXJ0IGljZXNbIDEgXS5jb3B5KCBwb2ludCApO1xyXG4gICAgbGFzZXIudmlzaWJsZSA9IHRydWU7XHJcbiAgICBsYXNlci5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcclxuICAgIGxhc2VyLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgLy9sYXNlci5nZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VJbnRlcnNlY3Rpb25zKCBpbnRlcnNlY3Rpb25zLCBsYXNlciwgY3Vyc29yICl7XHJcbiAgICBpZiggaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICl7XHJcbiAgICAgIGNvbnN0IGZpcnN0SGl0ID0gaW50ZXJzZWN0aW9uc1sgMCBdO1xyXG4gICAgICB1cGRhdGVMYXNlciggbGFzZXIsIGZpcnN0SGl0LnBvaW50ICk7XHJcbiAgICAgIGN1cnNvci5wb3NpdGlvbi5jb3B5KCBmaXJzdEhpdC5wb2ludCApO1xyXG4gICAgICBjdXJzb3IudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIGN1cnNvci51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgbGFzZXIudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICBjdXJzb3IudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VNb3VzZUludGVyc2VjdGlvbiggaW50ZXJzZWN0aW9uLCBsYXNlciwgY3Vyc29yICl7XHJcbiAgICBjdXJzb3IucG9zaXRpb24uY29weSggaW50ZXJzZWN0aW9uICk7XHJcbiAgICB1cGRhdGVMYXNlciggbGFzZXIsIGN1cnNvci5wb3NpdGlvbiApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGVyZm9ybU1vdXNlSW50ZXJzZWN0aW9uKCByYXljYXN0LCBtb3VzZSwgY2FtZXJhICl7XHJcbiAgICByYXljYXN0LnNldEZyb21DYW1lcmEoIG1vdXNlLCBjYW1lcmEgKTtcclxuICAgIGNvbnN0IGhpdHNjYW5PYmplY3RzID0gZ2V0VmlzaWJsZUhpdHNjYW5PYmplY3RzKCk7XHJcbiAgICByZXR1cm4gcmF5Y2FzdC5pbnRlcnNlY3RPYmplY3RzKCBoaXRzY2FuT2JqZWN0cywgZmFsc2UgKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1vdXNlSW50ZXJzZWN0c1BsYW5lKCByYXljYXN0LCB2LCBwbGFuZSApe1xyXG4gICAgcmV0dXJuIHJheWNhc3QucmF5LmludGVyc2VjdFBsYW5lKCBwbGFuZSwgdiApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGVyZm9ybU1vdXNlSW5wdXQoIGhpdHNjYW5PYmplY3RzLCB7Ym94LG9iamVjdCxyYXljYXN0LGxhc2VyLGN1cnNvcixtb3VzZSxtb3VzZUNhbWVyYSwgaW50ZXJhY3Rpb259ID0ge30gKXtcclxuICAgIGNoZWNrQ2FuY2VsbGVkSW50ZXJhY3Rpb25zKCBpbnRlcmFjdGlvbiwgaGl0c2Nhbk9iamVjdHMgKTtcclxuICAgIGxldCBpbnRlcnNlY3Rpb25zID0gW107XHJcblxyXG4gICAgaWYgKG1vdXNlQ2FtZXJhKSB7XHJcbiAgICAgIGludGVyc2VjdGlvbnMgPSBwZXJmb3JtTW91c2VJbnRlcnNlY3Rpb24oIHJheWNhc3QsIG1vdXNlLCBtb3VzZUNhbWVyYSApO1xyXG4gICAgICBwYXJzZUludGVyc2VjdGlvbnMoIGludGVyc2VjdGlvbnMsIGxhc2VyLCBjdXJzb3IgKTtcclxuICAgICAgY3Vyc29yLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICBsYXNlci52aXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW50ZXJzZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpO1xyXG5cclxuXHJcblxyXG5cclxuICAvKlxyXG4gICAgUHVibGljIG1ldGhvZHMuXHJcbiAgKi9cclxuXHJcbiAgY29uc3QgcHVibGljSW50ZXJmYWNlID0ge1xyXG4gICAgY3JlYXRlLFxyXG4gICAgYWRkSW5wdXRPYmplY3QsXHJcbiAgICBlbmFibGVNb3VzZSxcclxuICAgIGRpc2FibGVNb3VzZSxcclxuICAgIHRleHRDcmVhdG9yLCAvL2NoZWFwIHdheSBvZiBleHBvc2luZyB0aGlzIHNvIGl0IGNhbiBiZSB1c2VkIGJ5IGhvc3QgYXBwbGljYXRpb24uXHJcbiAgICBnbG9iYWxFdmVudHMsXHJcbiAgICBjbGVhckFsbCxcclxuICAgIHVwZGF0ZVxyXG4gIH07XHJcbiAgLy8gYWxsb3cgdXNlciB0byBjYWxsIFwiZGF0LkdVSVZSLmF1dG9VcGRhdGUgPSBmYWxzZVwiIGFuZCB0aGVuIHVwZGF0ZSBtYW51YWxseSB3aXRoXHJcbiAgLy8gXCJkYXQuR1VJVlIudXBkYXRlKClcIlxyXG4gIC8vIGV4cG9zZSBhdXRvVXBkYXRlIGFzIHByb3BlcnR5IHNvIHRoYXQgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIHByb3Blcmx5IGVmZmVjdGVkXHJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBwdWJsaWNJbnRlcmZhY2UsICdhdXRvVXBkYXRlJywgeyBnZXQ6ICgpPT4gYXV0b1VwZGF0ZSwgc2V0OiB2ID0+IGF1dG9VcGRhdGUgPSB2IH0gKTtcclxuICByZXR1cm4gcHVibGljSW50ZXJmYWNlO1xyXG5cclxufSgpKTtcclxuXHJcbmlmKCB3aW5kb3cgKXtcclxuICBpZiggd2luZG93LmRhdCA9PT0gdW5kZWZpbmVkICl7XHJcbiAgICB3aW5kb3cuZGF0ID0ge307XHJcbiAgfVxyXG5cclxuICB3aW5kb3cuZGF0LkdVSVZSID0gR1VJVlI7XHJcbn1cclxuXHJcbmlmKCBtb2R1bGUgKXtcclxuICBtb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGRhdDogR1VJVlJcclxuICB9O1xyXG59XHJcblxyXG5pZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICBkZWZpbmUoW10sIEdVSVZSKTtcclxufVxyXG5cclxuLypcclxuICBCdW5jaCBvZiBzdGF0ZS1sZXNzIHV0aWxpdHkgZnVuY3Rpb25zLlxyXG4qL1xyXG5cclxuZnVuY3Rpb24gaXNOdW1iZXIobikge1xyXG4gIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQm9vbGVhbihuKXtcclxuICByZXR1cm4gdHlwZW9mIG4gPT09ICdib29sZWFuJztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcclxuICBjb25zdCBnZXRUeXBlID0ge307XHJcbiAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiBnZXRUeXBlLnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcclxufVxyXG5cclxuLy8gIG9ubHkge30gb2JqZWN0cyBub3QgYXJyYXlzXHJcbi8vICAgICAgICAgICAgICAgICAgICB3aGljaCBhcmUgdGVjaG5pY2FsbHkgb2JqZWN0cyBidXQgeW91J3JlIGp1c3QgYmVpbmcgcGVkYW50aWNcclxuZnVuY3Rpb24gaXNPYmplY3QgKGl0ZW0pIHtcclxuICByZXR1cm4gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtKSAmJiBpdGVtICE9PSBudWxsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBcnJheSggbyApe1xyXG4gIHJldHVybiBBcnJheS5pc0FycmF5KCBvICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKCBvICl7XHJcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnc3RyaW5nJztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb2xvciggbyApe1xyXG4gIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcclxuICByZXR1cm4gby5pc0NvbG9yID8gdHJ1ZSA6IGZhbHNlO1xyXG59XHJcblxyXG5cclxuXHJcbi8qXHJcbiAgQ29udHJvbGxlci1zcGVjaWZpYyBzdXBwb3J0LlxyXG4qL1xyXG5cclxuZnVuY3Rpb24gYmluZFZpdmVDb250cm9sbGVyKCBpbnB1dCwgY29udHJvbGxlciwgcHJlc3NlZCwgZ3JpcHBlZCApe1xyXG4gIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lciggJ3RyaWdnZXJkb3duJywgKCk9PnByZXNzZWQoIHRydWUgKSApO1xyXG4gIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lciggJ3RyaWdnZXJ1cCcsICgpPT5wcmVzc2VkKCBmYWxzZSApICk7XHJcbiAgY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKCAnZ3JpcHNkb3duJywgKCk9PmdyaXBwZWQoIHRydWUgKSApO1xyXG4gIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2dyaXBzdXAnLCAoKT0+Z3JpcHBlZCggZmFsc2UgKSApO1xyXG5cclxuICBjb25zdCBnYW1lcGFkID0gY29udHJvbGxlci5nZXRHYW1lcGFkKCk7XHJcbiAgZnVuY3Rpb24gdmlicmF0ZSggdCwgYSApe1xyXG4gICAgaWYoIGdhbWVwYWQgJiYgZ2FtZXBhZC5oYXB0aWNBY3R1YXRvcnMgJiYgZ2FtZXBhZC5oYXB0aWNBY3R1YXRvcnMubGVuZ3RoID4gMCApe1xyXG4gICAgICBnYW1lcGFkLmhhcHRpY0FjdHVhdG9yc1sgMCBdLnB1bHNlKCB0LCBhICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoYXB0aWNzVGFwKCl7XHJcbiAgICBzZXRJbnRlcnZhbFRpbWVzKCAoeCx0LGEpPT52aWJyYXRlKDEtYSwgMC41KSwgMTAsIDIwICk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoYXB0aWNzRWNobygpe1xyXG4gICAgc2V0SW50ZXJ2YWxUaW1lcyggKHgsdCxhKT0+dmlicmF0ZSg0LCAxLjAgKiAoMS1hKSksIDEwMCwgNCApO1xyXG4gIH1cclxuXHJcbiAgaW5wdXQuZXZlbnRzLm9uKCAnb25Db250cm9sbGVySGVsZCcsIGZ1bmN0aW9uKCBpbnB1dCApe1xyXG4gICAgdmlicmF0ZSggMC4zLCAwLjMgKTtcclxuICB9KTtcclxuXHJcbiAgaW5wdXQuZXZlbnRzLm9uKCAnZ3JhYmJlZCcsIGZ1bmN0aW9uKCl7XHJcbiAgICBoYXB0aWNzVGFwKCk7XHJcbiAgfSk7XHJcblxyXG4gIGlucHV0LmV2ZW50cy5vbiggJ2dyYWJSZWxlYXNlZCcsIGZ1bmN0aW9uKCl7XHJcbiAgICBoYXB0aWNzRWNobygpO1xyXG4gIH0pO1xyXG5cclxuICBpbnB1dC5ldmVudHMub24oICdwaW5uZWQnLCBmdW5jdGlvbigpe1xyXG4gICAgaGFwdGljc1RhcCgpO1xyXG4gIH0pO1xyXG5cclxuICBpbnB1dC5ldmVudHMub24oICdwaW5SZWxlYXNlZCcsIGZ1bmN0aW9uKCl7XHJcbiAgICBoYXB0aWNzRWNobygpO1xyXG4gIH0pO1xyXG5cclxuXHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRJbnRlcnZhbFRpbWVzKCBjYiwgZGVsYXksIHRpbWVzICl7XHJcbiAgbGV0IHggPSAwO1xyXG4gIGxldCBpZCA9IHNldEludGVydmFsKCBmdW5jdGlvbigpe1xyXG4gICAgY2IoIHgsIHRpbWVzLCB4L3RpbWVzICk7XHJcbiAgICB4Kys7XHJcbiAgICBpZiggeD49dGltZXMgKXtcclxuICAgICAgY2xlYXJJbnRlcnZhbCggaWQgKTtcclxuICAgIH1cclxuICB9LCBkZWxheSApO1xyXG4gIHJldHVybiBpZDtcclxufSIsIi8qKlxyXG4qIGRhdC1ndWlWUiBKYXZhc2NyaXB0IENvbnRyb2xsZXIgTGlicmFyeSBmb3IgVlJcclxuKiBodHRwczovL2dpdGh1Yi5jb20vZGF0YWFydHMvZGF0Lmd1aVZSXHJcbipcclxuKiBDb3B5cmlnaHQgMjAxNiBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIEluYy5cclxuKlxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4qXHJcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4qXHJcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcbmltcG9ydCBFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCB7IGdldFRvcExldmVsRm9sZGVyIH0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5leHBvcnQgY29uc3QgZ2xvYmFsRXZlbnRzID0gbmV3IEVtaXR0ZXIoKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUludGVyYWN0aW9uKCBoaXRWb2x1bWUgKXtcclxuICBjb25zdCBldmVudHMgPSBuZXcgRW1pdHRlcigpO1xyXG5cclxuICBsZXQgYW55SG92ZXIgPSBmYWxzZTtcclxuICBsZXQgYW55UHJlc3NpbmcgPSBmYWxzZTtcclxuICBsZXQgYW55QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IHRWZWN0b3IgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIGNvbnN0IGF2YWlsYWJsZUlucHV0cyA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiB1cGRhdGUoIGlucHV0T2JqZWN0cyApe1xyXG5cclxuICAgIGFueUhvdmVyID0gZmFsc2U7XHJcbiAgICBhbnlQcmVzc2luZyA9IGZhbHNlO1xyXG4gICAgYW55QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgaW5wdXRPYmplY3RzLmZvckVhY2goIGZ1bmN0aW9uKCBpbnB1dCApe1xyXG5cclxuICAgICAgaWYoIGF2YWlsYWJsZUlucHV0cy5pbmRleE9mKCBpbnB1dCApIDwgMCApe1xyXG4gICAgICAgIGF2YWlsYWJsZUlucHV0cy5wdXNoKCBpbnB1dCApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB7IGhpdE9iamVjdCwgaGl0UG9pbnQgfSA9IGV4dHJhY3RIaXQoIGlucHV0ICk7XHJcblxyXG4gICAgICB2YXIgaG92ZXIgPSBoaXRWb2x1bWUgPT09IGhpdE9iamVjdDtcclxuICAgICAgYW55SG92ZXIgPSBhbnlIb3ZlciB8fCBob3ZlcjtcclxuXHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgICAgcGVyZm9ybVN0YXRlRXZlbnRzKHtcclxuICAgICAgICBpbnB1dCxcclxuICAgICAgICBob3ZlcixcclxuICAgICAgICBoaXRPYmplY3QsIGhpdFBvaW50LFxyXG4gICAgICAgIGJ1dHRvbk5hbWU6ICdwcmVzc2VkJyxcclxuICAgICAgICBidXR0b25DbGlja05hbWU6ICdjbGlja2VkJywgLy9tYXliZSBub3Qgc3RhYmxlIHBhcnQgb2YgQVBJLi4uXHJcbiAgICAgICAgaW50ZXJhY3Rpb25OYW1lOiAncHJlc3MnLFxyXG4gICAgICAgIGRvd25OYW1lOiAnb25QcmVzc2VkJyxcclxuICAgICAgICBob2xkTmFtZTogJ3ByZXNzaW5nJyxcclxuICAgICAgICB1cE5hbWU6ICdvblJlbGVhc2VkJyxcclxuICAgICAgICAgLy9pbnZlbnRpbmcgYSAnaG92ZXJpbmcnIGV2ZW50IHRoYXQgb25seSBhcHBsaWVzIHRvICdwcmVzc2VkJyBidXR0b24uLi5cclxuICAgICAgICAgLy90aGlzIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhIHN0YWJsZSBpbnRlcmZhY2UsIGJ1dCBJIHdhbnRzIGl0IG1vcmUgdGhhbiBJXHJcbiAgICAgICAgIC8vd2FudCB0byBtYWtlIHNvbWV0aGluZyB0b3RhbGx5IGNvaGVyZW50IGFuZCByb2J1c3QganVzdCBub3cuXHJcbiAgICAgICAgaG92ZXJOYW1lOiAnaG92ZXJpbmcnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcGVyZm9ybVN0YXRlRXZlbnRzKHtcclxuICAgICAgICBpbnB1dCxcclxuICAgICAgICBob3ZlcixcclxuICAgICAgICBoaXRPYmplY3QsIGhpdFBvaW50LFxyXG4gICAgICAgIGJ1dHRvbk5hbWU6ICdncmlwcGVkJyxcclxuICAgICAgICBpbnRlcmFjdGlvbk5hbWU6ICdncmlwJyxcclxuICAgICAgICBkb3duTmFtZTogJ29uR3JpcHBlZCcsXHJcbiAgICAgICAgaG9sZE5hbWU6ICdncmlwcGluZycsXHJcbiAgICAgICAgdXBOYW1lOiAnb25SZWxlYXNlR3JpcCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBldmVudHMuZW1pdCggJ3RpY2snLCB7XHJcbiAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgaGl0T2JqZWN0LFxyXG4gICAgICAgIGlucHV0T2JqZWN0OiBpbnB1dC5vYmplY3RcclxuICAgICAgfSApO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGV4dHJhY3RIaXQoIGlucHV0ICl7XHJcbiAgICBpZiggaW5wdXQuaW50ZXJzZWN0aW9ucy5sZW5ndGggPD0gMCApe1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhpdFBvaW50OiB0VmVjdG9yLnNldEZyb21NYXRyaXhQb3NpdGlvbiggaW5wdXQuY3Vyc29yLm1hdHJpeFdvcmxkICkuY2xvbmUoKSwgLy94eHg6IGdhcmJhZ2U/XHJcbiAgICAgICAgaGl0T2JqZWN0OiB1bmRlZmluZWQsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhpdFBvaW50OiBpbnB1dC5pbnRlcnNlY3Rpb25zWyAwIF0ucG9pbnQsXHJcbiAgICAgICAgaGl0T2JqZWN0OiBpbnB1dC5pbnRlcnNlY3Rpb25zWyAwIF0ub2JqZWN0XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwZXJmb3JtU3RhdGVFdmVudHMoe1xyXG4gICAgaW5wdXQsIGhvdmVyLFxyXG4gICAgaGl0T2JqZWN0LCBoaXRQb2ludCxcclxuICAgIGJ1dHRvbk5hbWUsIGJ1dHRvbkNsaWNrTmFtZSwgaW50ZXJhY3Rpb25OYW1lLCBkb3duTmFtZSwgaG9sZE5hbWUsIHVwTmFtZSwgaG92ZXJOYW1lXHJcbiAgfSA9IHt9ICl7XHJcblxyXG4gICAgaWYoIGlucHV0WyBidXR0b25OYW1lIF0gPT09IHRydWUgJiYgaGl0T2JqZWN0ID09PSB1bmRlZmluZWQgKXtcclxuICAgICAgLy9jbGlja2VkIGFuZCBkaWRuJ3QgaGl0IGFueSBHVUkgb2JqZWN0LlxyXG4gICAgICAvL2ZsYWcgdGhhdCB3aGF0IHdlJ3ZlIGNsaWNrZWQgKmlzbid0KiBwYXJ0IG9mIGEgbW9kYWwgZWRpdG9yXHJcbiAgICAgIGlucHV0LmhpdE5vbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhvdmVyaW5nIGFuZCBidXR0b24gTk9UIGRvd25cclxuICAgIGlmKCBob3Zlck5hbWUgJiYgaG92ZXIgJiYgaW5wdXRbIGJ1dHRvbk5hbWUgXSA9PT0gZmFsc2UgKSB7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgaGl0T2JqZWN0LFxyXG4gICAgICAgIHBvaW50OiBoaXRQb2ludCxcclxuICAgICAgICBpbnB1dE9iamVjdDogaW5wdXQub2JqZWN0LFxyXG4gICAgICAgIGxvY2tlZDogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgZXZlbnRzLmVtaXQoIGhvdmVyTmFtZSwgcGF5bG9hZCApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBob3ZlcmluZyBhbmQgYnV0dG9uIGRvd24gYnV0IG5vIGludGVyYWN0aW9ucyBhY3RpdmUgeWV0XHJcbiAgICAvLy0tLT4gc2hvdWxkIGJlIF4gYnV0dG9uICdjbGlja2VkJy4uLiBpZSBvbmx5IGlmIGl0IGNhbWUgZG93biBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICAvL3NvLCBzaG91bGQgd2UgcGFzcyAnYnV0dG9uQ2xpY2tOYW1lJyBhcyBhbiBhcmd1bWVudCAoYW5kIHVzZSBidXR0b25OYW1lIGlmIG5vdCBwcm92aWRlZCk/XHJcbiAgICAvLy0tLT4+Pj4gWFhYOiBpcyB0aGlzIFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwvLy8vLy8vLy8vLy8gd29ya2luZyB3aXRoIFZpdmUgY29udHJvbGxlcnM/IFxyXG4gICAgaWYoIGhvdmVyICYmIGlucHV0WyBidXR0b25DbGlja05hbWUgfHwgYnV0dG9uTmFtZSBdID09PSB0cnVlICYmIGlucHV0LmludGVyYWN0aW9uWyBpbnRlcmFjdGlvbk5hbWUgXSA9PT0gdW5kZWZpbmVkICl7XHJcblxyXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIGlucHV0LFxyXG4gICAgICAgIGhpdE9iamVjdCxcclxuICAgICAgICBwb2ludDogaGl0UG9pbnQsXHJcbiAgICAgICAgaW5wdXRPYmplY3Q6IGlucHV0Lm9iamVjdCxcclxuICAgICAgICBsb2NrZWQ6IGZhbHNlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvL2ZsYWcgdGhhdCB3aGF0IHdlJ3ZlIGNsaWNrZWQgKmlzbid0KiBwYXJ0IG9mIGEgbW9kYWwgZWRpdG9yXHJcbiAgICAgIGlmICghaGl0T2JqZWN0LnVzZXJEYXRhLnBhcnRPZk1vZGFsKSBpbnB1dC5oaXROb25Nb2RhbCA9IHRydWU7XHJcblxyXG4gICAgICBwcm9tb3RlWk9yZGVyKGhpdE9iamVjdCk7XHJcbiAgICAgIFxyXG4gICAgICAvL2VtaXQgZ2xvYmFsIGNsaWNrIGV2ZW50IGFzIHdlbGwuLi5cclxuICAgICAgZ2xvYmFsRXZlbnRzLmVtaXQoIGRvd25OYW1lLCBwYXlsb2FkICk7XHJcbiAgICAgIGV2ZW50cy5lbWl0KCBkb3duTmFtZSwgcGF5bG9hZCApO1xyXG5cclxuICAgICAgaWYoIHBheWxvYWQubG9ja2VkICl7XHJcbiAgICAgICAgaW5wdXQuaW50ZXJhY3Rpb25bIGludGVyYWN0aW9uTmFtZSBdID0gaW50ZXJhY3Rpb247XHJcbiAgICAgICAgaW5wdXQuaW50ZXJhY3Rpb24uaG92ZXIgPSBpbnRlcmFjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgYW55UHJlc3NpbmcgPSB0cnVlO1xyXG4gICAgICBhbnlBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBidXR0b24gc3RpbGwgZG93biBhbmQgdGhpcyBpcyB0aGUgYWN0aXZlIGludGVyYWN0aW9uXHJcbiAgICBpZiggaW5wdXRbIGJ1dHRvbk5hbWUgXSAmJiBpbnB1dC5pbnRlcmFjdGlvblsgaW50ZXJhY3Rpb25OYW1lIF0gPT09IGludGVyYWN0aW9uICl7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgaW5wdXQsXHJcbiAgICAgICAgaGl0T2JqZWN0LFxyXG4gICAgICAgIHBvaW50OiBoaXRQb2ludCxcclxuICAgICAgICBpbnB1dE9iamVjdDogaW5wdXQub2JqZWN0LFxyXG4gICAgICAgIGxvY2tlZDogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGV2ZW50cy5lbWl0KCBob2xkTmFtZSwgcGF5bG9hZCApO1xyXG5cclxuICAgICAgYW55UHJlc3NpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgaW5wdXQuZXZlbnRzLmVtaXQoICdvbkNvbnRyb2xsZXJIZWxkJyApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBidXR0b24gbm90IGRvd24gYW5kIHRoaXMgaXMgdGhlIGFjdGl2ZSBpbnRlcmFjdGlvblxyXG4gICAgaWYoIGlucHV0WyBidXR0b25OYW1lIF0gPT09IGZhbHNlICYmIGlucHV0LmludGVyYWN0aW9uWyBpbnRlcmFjdGlvbk5hbWUgXSA9PT0gaW50ZXJhY3Rpb24gKXtcclxuICAgICAgaW5wdXQuaW50ZXJhY3Rpb25bIGludGVyYWN0aW9uTmFtZSBdID0gdW5kZWZpbmVkO1xyXG4gICAgICBpbnB1dC5pbnRlcmFjdGlvbi5ob3ZlciA9IHVuZGVmaW5lZDtcclxuICAgICAgZXZlbnRzLmVtaXQoIHVwTmFtZSwge1xyXG4gICAgICAgIGlucHV0LFxyXG4gICAgICAgIGhpdE9iamVjdCxcclxuICAgICAgICBwb2ludDogaGl0UG9pbnQsXHJcbiAgICAgICAgaW5wdXRPYmplY3Q6IGlucHV0Lm9iamVjdFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9tb3RlWk9yZGVyKGhpdE9iamVjdCkge1xyXG4gICAgY29uc3QgdG9wRm9sZGVyID0gZ2V0VG9wTGV2ZWxGb2xkZXIoaGl0T2JqZWN0KTtcclxuICAgIHRvcEZvbGRlci5wcm9tb3RlWk9yZGVyKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpc01haW5Ib3Zlcigpe1xyXG5cclxuICAgIGxldCBub01haW5Ib3ZlciA9IHRydWU7XHJcbiAgICBmb3IoIGxldCBpPTA7IGk8YXZhaWxhYmxlSW5wdXRzLmxlbmd0aDsgaSsrICl7XHJcbiAgICAgIGlmKCBhdmFpbGFibGVJbnB1dHNbIGkgXS5pbnRlcmFjdGlvbi5ob3ZlciAhPT0gdW5kZWZpbmVkICl7XHJcbiAgICAgICAgbm9NYWluSG92ZXIgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCBub01haW5Ib3ZlciApe1xyXG4gICAgICByZXR1cm4gYW55SG92ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGF2YWlsYWJsZUlucHV0cy5maWx0ZXIoIGZ1bmN0aW9uKCBpbnB1dCApe1xyXG4gICAgICByZXR1cm4gaW5wdXQuaW50ZXJhY3Rpb24uaG92ZXIgPT09IGludGVyYWN0aW9uO1xyXG4gICAgfSkubGVuZ3RoID4gMCApe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSB7XHJcbiAgICBob3ZlcmluZzogaXNNYWluSG92ZXIsXHJcbiAgICBwcmVzc2luZzogKCk9PmFueVByZXNzaW5nLFxyXG4gICAgdXBkYXRlLFxyXG4gICAgZXZlbnRzLFxyXG4gICAgaGl0Vm9sdW1lXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGludGVyYWN0aW9uO1xyXG59XHJcblxyXG4iLCIvKipcclxuICogXHJcbiAqIFRPRE86IGN1cnNvcnMuLi5cclxuICogTWF5YmUgc29tZXRoaW5nIGxpa2UgbW9iaWxlIGlucHV0IHdoZXJlIHlvdSBzd2l0Y2ggYmV0d2VlbiBsZXR0ZXJzICYgbnVtYmVycyAvIHN5bWJvbHNcclxuICogXHJcbiAqIFNvbWV0aGluZyBsaWtlIGEgc3BsaXQga2V5Ym9hcmQgYWxhIGh0dHBzOi8vbWVkaXVtLmNvbS9hYXJvbm4vdnItdGV4dC1pbnB1dC1zcGxpdC1rZXlib2FyZC1lNWJmM2ZkODdhNGNcclxuICogbWlnaHQgYmUgYmV0dGVyLlxyXG4gKiBcclxuICogUGV0ZXIgVG9kZCAyMDE3XHJcbiAqL1xyXG5cclxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IGNyZWF0ZUltYWdlQnV0dG9uR3JpZCBmcm9tICcuL2ltYWdlYnV0dG9uZ3JpZCc7XHJcbmltcG9ydCBjcmVhdGVJbWFnZUJ1dHRvbiBmcm9tICcuL2ltYWdlYnV0dG9uJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkKCB7IFxyXG4gICAga2V5TGlzdGVuZXIsXHJcbiAgICB0ZXh0Q3JlYXRvclxyXG59ID0ge30pIHtcclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgICBjb25zdCBvZmZzZXRUcmFuc2Zvcm0gPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICAgIGdyb3VwLmFkZChvZmZzZXRUcmFuc2Zvcm0pO1xyXG5cclxuICAgIGNvbnN0IGV2ZW50cyA9IG5ldyBFbWl0dGVyKCk7XHJcbiAgICBldmVudHMub24oJ2tleURvd24nLCBrZXlMaXN0ZW5lcik7XHJcbiAgICBcclxuICAgIGNvbnN0IGxvd2VyQ2hhcnMgPSBcIjEyMzQ1Njc4OTAtPXF3ZXJ0eXVpb3BbXWFzZGZnaGprbDsnI1xcXFx6eGN2Ym5tLC4vIFwiLnNwbGl0KCcnKTtcclxuICAgIGxldCBvYmplY3RzID0gbG93ZXJDaGFycy5tYXAoayA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgZnVuYzogKCkgPT4gZXZlbnRzLmVtaXQoJ2tleURvd24nLCBrKSwgdGV4dDogayB9O1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBsb3dlcktleXMgPSBjcmVhdGVJbWFnZUJ1dHRvbkdyaWQoe3RleHRDcmVhdG9yLCBvYmplY3RzLCBjb2x1bW5zOiAxMn0pO1xyXG4gICAgb2Zmc2V0VHJhbnNmb3JtLmFkZChsb3dlcktleXMpO1xyXG5cclxuICAgIGNvbnN0IHVwcGVyQ2hhcnMgPSBcIiFcXFwiwqMkJV4mKigpXytRV0VSVFlVSU9Qe31BU0RGR0hKS0w6QH58WlhDVkJOTTw+PyBcIi5zcGxpdCgnJyk7XHJcbiAgICBvYmplY3RzID0gdXBwZXJDaGFycy5tYXAoayA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgZnVuYzogKCkgPT4gZXZlbnRzLmVtaXQoJ2tleURvd24nLCBrKSwgdGV4dDogayB9O1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB1cHBlcktleXMgPSBjcmVhdGVJbWFnZUJ1dHRvbkdyaWQoe3RleHRDcmVhdG9yLCBvYmplY3RzLCBjb2x1bW5zOiAxMn0pO1xyXG4gICAgdXBwZXJLZXlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgIG9mZnNldFRyYW5zZm9ybS5hZGQodXBwZXJLZXlzKTtcclxuXHJcbiAgICBsZXQgc2hpZnQgPSBmYWxzZTtcclxuICAgIGZ1bmN0aW9uIHNoaWZ0VG9nZ2xlKCkge1xyXG4gICAgICAgIHNoaWZ0ID0gIXNoaWZ0O1xyXG4gICAgICAgIGxvd2VyS2V5cy52aXNpYmxlID0gIXNoaWZ0O1xyXG4gICAgICAgIHVwcGVyS2V5cy52aXNpYmxlID0gc2hpZnQ7XHJcbiAgIH1cclxuXHJcbiAgIGNvbnN0IHNwYWNlQmFyID0gY3JlYXRlSW1hZ2VCdXR0b25HcmlkKHsgdGV4dENyZWF0b3IsIGNvbHVtbnM6IDEsIHJvd0hlaWdodDogMC4xLCBvYmplY3RzOiBbXHJcbiAgICAgICB7ZnVuYzogKCk9PmV2ZW50cy5lbWl0KCdrZXlEb3duJywgJyAnKSwgdGV4dDogJ3NwYWNlJ31cclxuICAgIF19KTtcclxuICAgIG9mZnNldFRyYW5zZm9ybS5hZGQoc3BhY2VCYXIpO1xyXG4gICAgdmFyIHkgPSBzcGFjZUJhci5wb3NpdGlvbi55ID0gLTAuNSAqIChsb3dlcktleXMuc3BhY2luZyArIHNwYWNlQmFyLnNwYWNpbmcpO1xyXG4gICAgXHJcbiAgICBvYmplY3RzID0gW1xyXG4gICAgICAgIHsgdGV4dDogXCJzaGlmdFwiLCBmdW5jOiBzaGlmdFRvZ2dsZSB9LFxyXG4gICAgICAgIHsgdGV4dDogXCJiYWNrc3BhY2VcIiwgZnVuYzogKCkgPT4gZXZlbnRzLmVtaXQoJ2tleURvd24nLCAnXFxiJykgfSxcclxuICAgICAgICB7IHRleHQ6IFwiZW50ZXJcIiwgZnVuYzogKCkgPT4gZXZlbnRzLmVtaXQoJ2tleURvd24nLCAnXFxuJykgfVxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNwZWNpYWxLZXlzID0gY3JlYXRlSW1hZ2VCdXR0b25HcmlkKHt0ZXh0Q3JlYXRvciwgb2JqZWN0cywgY29sdW1uczogMywgcm93SGVpZ2h0OiAwLjF9KTtcclxuICAgIG9mZnNldFRyYW5zZm9ybS5hZGQoc3BlY2lhbEtleXMpO1xyXG4gICAgc3BlY2lhbEtleXMucG9zaXRpb24ueSA9IHktMC41ICogKHNwYWNlQmFyLnNwYWNpbmcgKyBzcGVjaWFsS2V5cy5zcGFjaW5nKTtcclxuICAgIGdyb3VwLnNwYWNpbmcgPSBsb3dlcktleXMuc3BhY2luZyArIHNwYWNlQmFyLnNwYWNpbmcgKyBzcGVjaWFsS2V5cy5zcGFjaW5nO1xyXG4gICAgLy90aGlzIGxvb2tzIHJpZ2h0LCBtdXN0IGFkbWl0IEkgaGF2ZW4ndCB0aG91Z2h0IHRocm91Z2ggZXhhY3RseSB3aHkgaXQgc2hvdWxkIGJlLlxyXG4gICAgb2Zmc2V0VHJhbnNmb3JtLnBvc2l0aW9uLnkgPSBzcGVjaWFsS2V5cy5zcGFjaW5nO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShncm91cCwgJ2hpdHNjYW4nLCB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiBbXHJcbiAgICAgICAgICAgIHNwZWNpYWxLZXlzLmhpdHNjYW4sIHNwYWNlQmFyLmhpdHNjYW4sIHNoaWZ0ID8gdXBwZXJLZXlzLmhpdHNjYW4gOiBsb3dlcktleXMuaGl0c2NhblxyXG4gICAgICAgIF0ucmVkdWNlKChhLCBiKSA9PiB7IHJldHVybiBhLmNvbmNhdChiKX0sIFtdKVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhY2VCYXIuZm9sZGVyID0gdXBwZXJLZXlzLmZvbGRlciA9IGxvd2VyS2V5cy5mb2xkZXIgPSBzcGVjaWFsS2V5cy5mb2xkZXIgPSBncm91cDtcclxuICAgIGdyb3VwLnVwZGF0ZUNvbnRyb2wgPSAoaW5wdXRzKSA9PiB7XHJcbiAgICAgICAgc3BlY2lhbEtleXMudXBkYXRlQ29udHJvbChpbnB1dHMpO1xyXG4gICAgICAgIGxvd2VyS2V5cy51cGRhdGVDb250cm9sKGlucHV0cyk7XHJcbiAgICAgICAgc3BhY2VCYXIudXBkYXRlQ29udHJvbChpbnB1dHMpO1xyXG4gICAgICAgIHVwcGVyS2V5cy51cGRhdGVDb250cm9sKGlucHV0cyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBncm91cDtcclxufVxyXG4iLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0ICogYXMgU2hhcmVkTWF0ZXJpYWxzIGZyb20gJy4vc2hhcmVkbWF0ZXJpYWxzJztcclxuaW1wb3J0ICogYXMgQ29sb3JzIGZyb20gJy4vY29sb3JzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhbGlnbkxlZnQoIG9iaiApe1xyXG4gIGlmKCBvYmogaW5zdGFuY2VvZiBUSFJFRS5NZXNoICl7XHJcbiAgICBvYmouZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICBjb25zdCB3aWR0aCA9IG9iai5nZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgueCAtIG9iai5nZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgueTtcclxuICAgIG9iai5nZW9tZXRyeS50cmFuc2xhdGUoIHdpZHRoLCAwLCAwICk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBlbHNlIGlmKCBvYmogaW5zdGFuY2VvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeSApe1xyXG4gICAgb2JqLmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgY29uc3Qgd2lkdGggPSBvYmouYm91bmRpbmdCb3gubWF4LnggLSBvYmouYm91bmRpbmdCb3gubWF4Lnk7XHJcbiAgICBvYmoudHJhbnNsYXRlKCB3aWR0aCwgMCwgMCApO1xyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYW5lbCggd2lkdGgsIGhlaWdodCwgZGVwdGgsIHVuaXF1ZU1hdGVyaWFsICl7XHJcbiAgY29uc3QgbWF0ZXJpYWwgPSB1bmlxdWVNYXRlcmlhbCA/IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7Y29sb3I6MHhmZmZmZmZ9KSA6IFNoYXJlZE1hdGVyaWFscy5QQU5FTDtcclxuICBjb25zdCBwYW5lbCA9IG5ldyBUSFJFRS5NZXNoKCBuZXcgVEhSRUUuQm94R2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQsIGRlcHRoICksIG1hdGVyaWFsICk7XHJcbiAgcGFuZWwuZ2VvbWV0cnkudHJhbnNsYXRlKCB3aWR0aCAqIDAuNSwgMCwgMCApO1xyXG5cclxuICBpZiggdW5pcXVlTWF0ZXJpYWwgKXtcclxuICAgIG1hdGVyaWFsLmNvbG9yLnNldEhleCggQ29sb3JzLkRFRkFVTFRfQkFDSyApO1xyXG4gIH1cclxuICBlbHNle1xyXG4gICAgQ29sb3JzLmNvbG9yaXplR2VvbWV0cnkoIHBhbmVsLmdlb21ldHJ5LCBDb2xvcnMuREVGQVVMVF9CQUNLICk7XHJcbiAgfVxyXG5cclxuICBwYW5lbC51c2VyRGF0YS5jdXJyZW50V2lkdGggPSB3aWR0aDtcclxuICBwYW5lbC51c2VyRGF0YS5jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0O1xyXG4gIHBhbmVsLnVzZXJEYXRhLmN1cnJlbnREZXB0aCA9IGRlcHRoO1xyXG5cclxuICByZXR1cm4gcGFuZWw7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZVBhbmVsKHBhbmVsLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkge1xyXG4gIHBhbmVsLmdlb21ldHJ5LnNjYWxlKHdpZHRoL3BhbmVsLnVzZXJEYXRhLmN1cnJlbnRXaWR0aCwgaGVpZ2h0L3BhbmVsLnVzZXJEYXRhLmN1cnJlbnRIZWlnaHQsIGRlcHRoL3BhbmVsLnVzZXJEYXRhLmN1cnJlbnREZXB0aCk7XHJcbiAgcGFuZWwudXNlckRhdGEuY3VycmVudFdpZHRoID0gd2lkdGg7XHJcbiAgcGFuZWwudXNlckRhdGEuY3VycmVudEhlaWdodCA9IGhlaWdodDtcclxuICBwYW5lbC51c2VyRGF0YS5jdXJyZW50RGVwdGggPSBkZXB0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xsZXJJREJveCggaGVpZ2h0LCBjb2xvciApe1xyXG4gIGNvbnN0IHBhbmVsID0gbmV3IFRIUkVFLk1lc2goIG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSggQ09OVFJPTExFUl9JRF9XSURUSCwgaGVpZ2h0LCBDT05UUk9MTEVSX0lEX0RFUFRIICksIFNoYXJlZE1hdGVyaWFscy5QQU5FTCApO1xyXG4gIHBhbmVsLmdlb21ldHJ5LnRyYW5zbGF0ZSggQ09OVFJPTExFUl9JRF9XSURUSCAqIDAuNSwgMCwgMCApO1xyXG4gIENvbG9ycy5jb2xvcml6ZUdlb21ldHJ5KCBwYW5lbC5nZW9tZXRyeSwgY29sb3IgKTtcclxuICByZXR1cm4gcGFuZWw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEb3duQXJyb3coKXtcclxuICBjb25zdCB3ID0gMC4wMDk2O1xyXG4gIGNvbnN0IGggPSAwLjAxNjtcclxuICBjb25zdCBzaCA9IG5ldyBUSFJFRS5TaGFwZSgpO1xyXG4gIHNoLm1vdmVUbygwLDApO1xyXG4gIHNoLmxpbmVUbygtdyxoKTtcclxuICBzaC5saW5lVG8odyxoKTtcclxuICBzaC5saW5lVG8oMCwwKTtcclxuXHJcbiAgY29uc3QgZ2VvID0gbmV3IFRIUkVFLlNoYXBlR2VvbWV0cnkoIHNoICk7XHJcbiAgZ2VvLnRyYW5zbGF0ZSggMCwgLWggKiAwLjUsIDAgKTtcclxuXHJcbiAgcmV0dXJuIG5ldyBUSFJFRS5NZXNoKCBnZW8sIFNoYXJlZE1hdGVyaWFscy5QQU5FTCApO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUEFORUxfV0lEVEggPSAxLjA7XHJcbmV4cG9ydCBjb25zdCBQQU5FTF9IRUlHSFQgPSAwLjA4O1xyXG5leHBvcnQgY29uc3QgUEFORUxfREVQVEggPSAwLjAxO1xyXG5leHBvcnQgY29uc3QgUEFORUxfU1BBQ0lORyA9IDA7Ly8uMDAxO1xyXG5leHBvcnQgY29uc3QgUEFORUxfTUFSR0lOID0gMC4wMTU7XHJcbmV4cG9ydCBjb25zdCBQQU5FTF9MQUJFTF9URVhUX01BUkdJTiA9IDAuMDY7XHJcbmV4cG9ydCBjb25zdCBQQU5FTF9WQUxVRV9URVhUX01BUkdJTiA9IDAuMDI7XHJcbmV4cG9ydCBjb25zdCBDT05UUk9MTEVSX0lEX1dJRFRIID0gMC4wMjtcclxuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfSURfREVQVEggPSAwLjAwMTtcclxuZXhwb3J0IGNvbnN0IEJVVFRPTl9ERVBUSCA9IDAuMDE7XHJcbmV4cG9ydCBjb25zdCBGT0xERVJfV0lEVEggPSAxLjAyNjtcclxuZXhwb3J0IGNvbnN0IFNVQkZPTERFUl9XSURUSCA9IDEuMDtcclxuZXhwb3J0IGNvbnN0IEZPTERFUl9IRUlHSFQgPSAwLjA5O1xyXG5leHBvcnQgY29uc3QgRk9MREVSX0dSQUJfSEVJR0hUID0gMC4wNTEyO1xyXG5leHBvcnQgY29uc3QgQk9SREVSX1RISUNLTkVTUyA9IDAuMDE7XHJcbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9TSVpFID0gMC4wNTtcclxuZXhwb3J0IGNvbnN0IFRFWFRfU0NBTEUgPSAwLjAwMDI0O1xyXG5leHBvcnQgY29uc3QgR1JJRF9CVVRUT05fTUFSR0lOID0gMC4wMTsiLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0IGNyZWF0ZUludGVyYWN0aW9uIGZyb20gJy4vaW50ZXJhY3Rpb24nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSggeyBncm91cCwgcGFuZWwgfSA9IHt9ICl7XHJcblxyXG4gIGNvbnN0IGludGVyYWN0aW9uID0gY3JlYXRlSW50ZXJhY3Rpb24oIHBhbmVsICk7XHJcblxyXG4gIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uR3JpcHBlZCcsIGhhbmRsZU9uR3JpcCApO1xyXG4gIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUmVsZWFzZUdyaXAnLCBoYW5kbGVPbkdyaXBSZWxlYXNlICk7XHJcblxyXG4gIC8vbGV0IG9sZFBhcmVudDtcclxuICBsZXQgb2xkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIGxldCBvbGRSb3RhdGlvbiA9IG5ldyBUSFJFRS5FdWxlcigpO1xyXG5cclxuICBjb25zdCByb3RhdGlvbkdyb3VwID0gbmV3IFRIUkVFLkdyb3VwKCk7XHJcbiAgcm90YXRpb25Hcm91cC5zY2FsZS5zZXQoIDAuMywgMC4zLCAwLjMgKTtcclxuICByb3RhdGlvbkdyb3VwLnBvc2l0aW9uLnNldCggLTAuMDE1LCAwLjAxNSwgMC4wICk7XHJcblxyXG5cclxuICBmdW5jdGlvbiBoYW5kbGVPbkdyaXAoIHAgKXtcclxuXHJcbiAgICBjb25zdCB7IGlucHV0T2JqZWN0LCBpbnB1dCB9ID0gcDtcclxuXHJcbiAgICBjb25zdCBmb2xkZXIgPSBncm91cC5mb2xkZXI7XHJcbiAgICBpZiggZm9sZGVyID09PSB1bmRlZmluZWQgKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBmb2xkZXIuYmVpbmdNb3ZlZCA9PT0gdHJ1ZSApe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2xkUG9zaXRpb24uY29weSggZm9sZGVyLnBvc2l0aW9uICk7XHJcbiAgICBvbGRSb3RhdGlvbi5jb3B5KCBmb2xkZXIucm90YXRpb24gKTtcclxuXHJcbiAgICBmb2xkZXIucG9zaXRpb24uc2V0KCAwLDAsMCApO1xyXG4gICAgZm9sZGVyLnJvdGF0aW9uLnNldCggMCwwLDAgKTtcclxuICAgIGZvbGRlci5yb3RhdGlvbi54ID0gLU1hdGguUEkgKiAwLjU7XHJcblxyXG4gICAgZm9sZGVyLm9sZFBhcmVudCA9IGZvbGRlci5wYXJlbnQ7XHJcblxyXG4gICAgcm90YXRpb25Hcm91cC5hZGQoIGZvbGRlciApO1xyXG5cclxuICAgIGlucHV0T2JqZWN0LmFkZCggcm90YXRpb25Hcm91cCApO1xyXG5cclxuICAgIHAubG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBmb2xkZXIuYmVpbmdNb3ZlZCA9IHRydWU7XHJcblxyXG4gICAgaW5wdXQuZXZlbnRzLmVtaXQoICdwaW5uZWQnLCBpbnB1dCApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFuZGxlT25HcmlwUmVsZWFzZSggeyBpbnB1dE9iamVjdCwgaW5wdXQgfT17fSApe1xyXG5cclxuICAgIGNvbnN0IGZvbGRlciA9IGdyb3VwLmZvbGRlcjtcclxuICAgIGlmKCBmb2xkZXIgPT09IHVuZGVmaW5lZCApe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGZvbGRlci5vbGRQYXJlbnQgPT09IHVuZGVmaW5lZCApe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGZvbGRlci5iZWluZ01vdmVkID09PSBmYWxzZSApe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9sZGVyLm9sZFBhcmVudC5hZGQoIGZvbGRlciApO1xyXG4gICAgZm9sZGVyLm9sZFBhcmVudCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBmb2xkZXIucG9zaXRpb24uY29weSggb2xkUG9zaXRpb24gKTtcclxuICAgIGZvbGRlci5yb3RhdGlvbi5jb3B5KCBvbGRSb3RhdGlvbiApO1xyXG5cclxuICAgIGZvbGRlci5iZWluZ01vdmVkID0gZmFsc2U7XHJcblxyXG4gICAgaW5wdXQuZXZlbnRzLmVtaXQoICdwaW5SZWxlYXNlZCcsIGlucHV0ICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaW50ZXJhY3Rpb247XHJcbn0iLCIvKipcclxuICogUEpUOiBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHNkZnNoYWRlciBmcm9tIGJtZm9udCwgd2hpY2ggc2hvdWxkIEp1c3QgV29yayB3aXRoIGxvZ2FyaXRobWljIGRlcHRoIGJ1ZmZlcnMuXHJcbiAqIEl0IHNob3VsZCBhbHNvIGFsbG93IHNvbWUgb3RoZXIgYXNwZWN0cyBvZiBUSFJFRSByZW5kZXJpbmcgdG8gYmUgaW5jb3Jwb3JhdGVkLCBsaWtlIGZvZywgY2xpcHBpbmcgcGxhbmVzLi4uXHJcbiAqIEVudmlyb25tZW50IG1hcHMgYW5kIHZhcmlvdXMgb3RoZXIgYml0cyBmcm9tIE1lc2hCYXNpY01hdGVyaWFsIGFyZSByZW1vdmVkLlxyXG4gKiBBdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaXMgd29yayBpbiBwcm9ncmVzcywgYW5kIHNvbWV3aGF0IG1vcmUgYmxvYXRlZCB0aGFuIGl0IG5lZWRzIHRvIGJlLlxyXG4gKiBUaGUgc2hhZGVyIGNvZGUgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIFNoYWRlck1hdGVyaWFsIHJhdGhlciB0aGFuIFJhd1NoYWRlck1hdGVyaWFsLlxyXG4gKi9cclxuLy8gaW1wb3J0ICogYXMgTGF5b3V0IGZyb20gJy4vbGF5b3V0JztcclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcclxuXHJcbi8qKlxyXG4gKiBzdGFydGluZyBmcm9tIFRIUkVFIG1lc2hiYXNpYyBzaGFkZXJzLCBwcnVuaW5nIC8gbW9kaWZ5aW5nLi4uXHJcbiAqL1xyXG5jb25zdCBtZXNoYmFzaWNfdmVydCA9IGBcclxuI2RlZmluZSBVU0VfTUFQXHJcbiNkZWZpbmUgVVNFX1VWXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuLy8jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuXHJcbnZvaWQgbWFpbigpIHsgXHJcbiAgdlV2ID0gdXY7XHJcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cclxuXHJcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cclxuXHJcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cclxufVxyXG5gO1xyXG5cclxudmFyIC8qc2pwdCB3YXMgY29uc3QgKi8gbWVzaGJhc2ljX2ZyYWcgPSBgXHJcbiNkZWZpbmUgVVNFX01BUFxyXG4jZGVmaW5lIFVTRV9VVlxyXG51bmlmb3JtIHZlYzMgY29sb3I7XHJcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcclxuXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbi8vI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxuXHJcbi8vLy8vXHJcbmZsb2F0IGFhc3RlcChmbG9hdCB2YWx1ZSkge1xyXG4gICAgLy8gV2Ugbm93IGFzc3VtZSBXZWJHTDIgYW5kIHNvIHRoZSBkZXJpdmF0aXZlcyBhcmUgYXZhaWxhYmxlLCBcclxuICAgIC8vIHNvIGFmd2lkdGggZGVwZW5kcyBvbiBzY2FsZSBvZiBndWlcclxuICAgIGZsb2F0IGFmd2lkdGggPSBsZW5ndGgodmVjMihkRmR4KHZhbHVlKSwgZEZkeSh2YWx1ZSkpKSAqIDAuNzA3MTA2NzgxMTg2NTQ3NTc7XHJcbiAgICByZXR1cm4gc21vb3Roc3RlcCgwLjUgLSBhZndpZHRoLCAwLjUgKyBhZndpZHRoLCB2YWx1ZSk7XHJcbn1cclxuLy8vL1xyXG5cclxudm9pZCBtYWluKCkge1xyXG5cclxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxyXG5cclxuICAgIC8vL1xyXG4gICAgdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSApO1xyXG4gICAgXHJcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKG1hcCwgdlV2KTtcclxuICAgIGZsb2F0IGFscGhhID0gYWFzdGVwKHRleENvbG9yLmEpO1xyXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgb3BhY2l0eSAqIGFscGhhKTtcclxuICAgIGlmIChnbF9GcmFnQ29sb3IuYSA8IDAuMDAwMSkgZGlzY2FyZDtcclxuICAgIC8vL1xyXG5cclxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XHJcbiAgICAvL1hYWDogYmlnIGNodW5rIHJlbW92ZWQgZnJvbSBvcmlnaW5hbCBtZXNoYmFzaWNfZnJhZyBoZXJlLlxyXG4gICAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cclxufVxyXG5gO1xyXG5cclxuaWYgKCtUSFJFRS5SRVZJU0lPTiA+IDE1MSkgeyAvLyBzanB0IHBhdGNoXHJcbiAgbWVzaGJhc2ljX2ZyYWcgPSAnXFxuI2RlZmluZSBVU0VfTUFQXFxuI2RlZmluZSBVU0VfVVZcXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbiNpbmNsdWRlIDxjb21tb24+XFxuLy8jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XFxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cXG5cXG4vLy8vL1xcbmZsb2F0IGFhc3RlcChmbG9hdCB2YWx1ZSkge1xcbiAgICAvLyBXZSBub3cgYXNzdW1lIFdlYkdMMiBhbmQgc28gdGhlIGRlcml2YXRpdmVzIGFyZSBhdmFpbGFibGUsIFxcbiAgICAvLyBzbyBhZndpZHRoIGRlcGVuZHMgb24gc2NhbGUgb2YgZ3VpXFxuICAgIGZsb2F0IGFmd2lkdGggPSBsZW5ndGgodmVjMihkRmR4KHZhbHVlKSwgZEZkeSh2YWx1ZSkpKSAqIDAuNzA3MTA2NzgxMTg2NTQ3NTc7XFxuICAgIHJldHVybiBzbW9vdGhzdGVwKDAuNSAtIGFmd2lkdGgsIDAuNSArIGFmd2lkdGgsIHZhbHVlKTtcXG59XFxuLy8vL1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXG5cXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxcblxcbiAgICAvLy9cXG4gICAgdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSApO1xcbiAgICBcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRChtYXAsIHZVdik7XFxuICAgIGZsb2F0IGFscGhhID0gYWFzdGVwKHRleENvbG9yLmEpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBvcGFjaXR5ICogYWxwaGEpO1xcbiAgICBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCAwLjAwMDEpIGRpc2NhcmQ7XFxuICAgIC8vL1xcblxcblxcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cXG4gICAgLy9YWFg6IGJpZyBjaHVuayByZW1vdmVkIGZyb20gb3JpZ2luYWwgbWVzaGJhc2ljX2ZyYWcgaGVyZS5cXG4gICAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PlxcblxcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XFxufVxcbic7XHJcbiAgY29uc29sZS53YXJuKCdjb2xvcnNwYWNlX2ZyYWdtZW50IHVzZWQnKTtcclxuICB9XHJcbiAgXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZVNERlNoYWRlciAob3B0KSB7XHJcbiAgb3B0ID0gb3B0IHx8IHt9O1xyXG4gIHZhciBvcGFjaXR5ID0gdHlwZW9mIG9wdC5vcGFjaXR5ID09PSAnbnVtYmVyJyA/IG9wdC5vcGFjaXR5IDogMTtcclxuICAvLy8tLSBoYXJkY29kZWQgaW4gc2hhZGVyIGNvZGUsIGd1aXZyIG5ldmVyIHBhc3NlZCB0aGVzZSBpbiBvcHQgLS1cclxuICAvL3ZhciBhbHBoYVRlc3QgPSB0eXBlb2Ygb3B0LmFscGhhVGVzdCA9PT0gJ251bWJlcicgPyBvcHQuYWxwaGFUZXN0IDogMC4wMDAxXHJcbiAgLy92YXIgcHJlY2lzaW9uID0gb3B0LnByZWNpc2lvbiB8fCAnaGlnaHAnXHJcbiAgdmFyIGNvbG9yID0gb3B0LmNvbG9yO1xyXG4gIHZhciBtYXAgPSBvcHQubWFwO1xyXG4gIFxyXG4gIG9wdC5leHRlbnNpb25zID0gb3B0LmV4dGVuc2lvbnMgfHwge307XHJcbiAgb3B0LmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMgPSB0cnVlOyAvL25iLCBmYWxzZSBkZWZhdWx0cyBmb3IgZnJhZ0RlcHRoLCBkcmF3QnVmZmVycywgc2hhZGVyVGV4dHVyZUxPRCB3aWxsIG5vIGxvbmdlciBiZSB0aGVyZS5cclxuICBvcHQubmFtZSA9IFwiU0RGIHRleHQgbWF0ZXJpYWxcIjtcclxuXHJcbiAgLy8gcmVtb3ZlIHRvIHNhdGlzZnkgcjczXHJcbiAgZGVsZXRlIG9wdC5tYXA7XHJcbiAgZGVsZXRlIG9wdC5jb2xvcjtcclxuICBkZWxldGUgb3B0LnByZWNpc2lvbjtcclxuICBkZWxldGUgb3B0Lm9wYWNpdHk7XHJcblxyXG4gIHJldHVybiBhc3NpZ24oe1xyXG4gICAgdW5pZm9ybXM6IHtcclxuICAgICAgb3BhY2l0eTogeyB0eXBlOiAnZicsIHZhbHVlOiBvcGFjaXR5IH0sXHJcbiAgICAgIG1hcDogeyB0eXBlOiAndCcsIHZhbHVlOiBtYXAgfHwgbmV3IFRIUkVFLlRleHR1cmUoKSB9LFxyXG4gICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBuZXcgVEhSRUUuQ29sb3IoY29sb3IpIH1cclxuICAgIH0sXHJcbiAgICB2ZXJ0ZXhTaGFkZXI6IG1lc2hiYXNpY192ZXJ0LFxyXG4gICAgZnJhZ21lbnRTaGFkZXI6IG1lc2hiYXNpY19mcmFnXHJcbiAgfSwgb3B0KTtcclxufVxyXG4iLCIvKipcclxuKiBkYXQtZ3VpVlIgSmF2YXNjcmlwdCBDb250cm9sbGVyIExpYnJhcnkgZm9yIFZSXHJcbiogaHR0cHM6Ly9naXRodWIuY29tL2RhdGFhcnRzL2RhdC5ndWlWUlxyXG4qXHJcbiogQ29weXJpZ2h0IDIwMTYgRGF0YSBBcnRzIFRlYW0sIEdvb2dsZSBJbmMuXHJcbipcclxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuKlxyXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0IFNERlNoYWRlciBmcm9tICcuL3NkZnNoYWRlcl9sb2dkZXB0aCc7XHJcbmltcG9ydCBjcmVhdGVHZW9tZXRyeSBmcm9tICd0aHJlZS1ibWZvbnQtdGV4dCc7XHJcbmltcG9ydCBwYXJzZUFTQ0lJIGZyb20gJ3BhcnNlLWJtZm9udC1hc2NpaSc7XHJcbmltcG9ydCAqIGFzIExheW91dCBmcm9tICcuL2xheW91dCc7XHJcblxyXG5pbXBvcnQgKiBhcyBGb250IGZyb20gJy4vZm9udCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWF0ZXJpYWwoIGNvbG9yICl7XHJcblxyXG4gIGNvbnN0IGltYWdlID0gRm9udC5pbWFnZSgpO1xyXG4gIGNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZShpbWFnZSk7IHRleHR1cmUubmFtZSA9ICdzZGZGb250VGV4dHVyZSdcclxuICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICB0ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICB0ZXh0dXJlLm1hZ0ZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlO1xyXG5cclxuICAvL05COjo6IHNvbWV3aGF0IGV4cGVyaW1lbnRhbCByZXBsYWNlbWVudCBvZiBSYXdTaGFkZXIgY29kZSBmcm9tIGJtZm9udCB3aXRoIHZhcmlhdGlvbiBvZiBNZXNoQmFzaWMgc2hhZGVyXHJcbiAgLy90aGlzIHNob3VsZCBhbGxvdyBmb3IgbG9nZGVwdGgsIGZvZyBpcyBhbHNvIGFudGljaXBhdGVkIHRvIHdvcmsgcmVhc29uYWJseSB3ZWxsLi4uIFxyXG4gIC8vdG9uZW1hcHBpbmcgZXRjIG1heSBjb25jZWl2YWJseSBiZSBpbXByb3ZlZC4uLiBZTU1WLlxyXG4gIGxldCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbChTREZTaGFkZXIoe1xyXG4gICAgc2lkZTogVEhSRUUuRG91YmxlU2lkZSxcclxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgY29sb3I6IGNvbG9yLFxyXG4gICAgbWFwOiB0ZXh0dXJlLFxyXG4gICAgdHlwZTogJ1NERiBUZXh0J1xyXG4gIH0pKTtcclxuICByZXR1cm4gbWF0ZXJpYWw7XHJcbn1cclxuXHJcbmNvbnN0IHRleHRTY2FsZSA9IExheW91dC5URVhUX1NDQUxFO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0b3IoKXtcclxuXHJcbiAgY29uc3QgZm9udCA9IHBhcnNlQVNDSUkoIEZvbnQuZm50KCkgKTtcclxuXHJcbiAgY29uc3QgY29sb3JNYXRlcmlhbHMgPSB7fTtcclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlVGV4dCggc3RyLCBmb250LCBjb2xvciA9IDB4ZmZmZmZmLCBzY2FsZSA9IDEuMCwgd2lkdGgsIGhlaWdodCApe1xyXG5cclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gY3JlYXRlR2VvbWV0cnkoe1xyXG4gICAgICB0ZXh0OiBzdHIsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGZsaXBZOiB0cnVlLFxyXG4gICAgICBmb250XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgY29uc3QgbGF5b3V0ID0gZ2VvbWV0cnkubGF5b3V0O1xyXG5cclxuICAgIGxldCBtYXRlcmlhbCA9IGNvbG9yTWF0ZXJpYWxzWyBjb2xvciBdO1xyXG4gICAgaWYoIG1hdGVyaWFsID09PSB1bmRlZmluZWQgKXtcclxuICAgICAgbWF0ZXJpYWwgPSBjb2xvck1hdGVyaWFsc1sgY29sb3IgXSA9IGNyZWF0ZU1hdGVyaWFsKCBjb2xvciApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTtcclxuICAgIG1lc2guc2NhbGUubXVsdGlwbHkoIG5ldyBUSFJFRS5WZWN0b3IzKDEsLTEsMSkgKTtcclxuXHJcbiAgICBjb25zdCBmaW5hbFNjYWxlID0gc2NhbGUgKiB0ZXh0U2NhbGU7XHJcblxyXG4gICAgbWVzaC5zY2FsZS5tdWx0aXBseVNjYWxhciggZmluYWxTY2FsZSApO1xyXG5cclxuICAgIG1lc2gucG9zaXRpb24ueSA9IGxheW91dC5oZWlnaHQgKiAwLjUgKiBmaW5hbFNjYWxlO1xyXG5cclxuICAgIHJldHVybiBtZXNoO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZSggc3RyLCB7IGNvbG9yPTB4ZmZmZmZmLCBzY2FsZT0xLjAgfSA9IHt9ICl7XHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBUSFJFRS5Hcm91cCgpO1xyXG5cclxuICAgIGxldCBtZXNoID0gY3JlYXRlVGV4dCggc3RyLCBmb250LCBjb2xvciwgc2NhbGUgKTtcclxuICAgIGdyb3VwLmFkZCggbWVzaCApO1xyXG4gICAgZ3JvdXAubGF5b3V0ID0gbWVzaC5nZW9tZXRyeS5sYXlvdXQ7XHJcbiAgICBncm91cC5jb21wdXRlV2lkdGggPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBncm91cC5sYXlvdXQud2lkdGggKiBzY2FsZSAqIExheW91dC5URVhUX1NDQUxFO1xyXG4gICAgfVxyXG4gICAgZ3JvdXAuY29tcHV0ZUhlaWdodCA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIGdyb3VwLmxheW91dC5oZWlnaHQgKiBzY2FsZSAqIExheW91dC5URVhUX1NDQUxFO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwLmNvbnN0cmFpbkJvdW5kcyA9ICh3LCBoKSA9PiB7XHJcbiAgICAgIGdyb3VwLnJlbW92ZShtZXNoKTtcclxuICAgICAgY29uc3QgcyA9IExheW91dC5URVhUX1NDQUxFO1xyXG4gICAgICBtZXNoID0gY3JlYXRlVGV4dChzdHIsIGZvbnQsIGNvbG9yLCBzY2FsZSwgdy9zLCBoL3MpO1xyXG4gICAgICBjb25zdCBoRmFjdG9yID0gbWVzaC5nZW9tZXRyeS5sYXlvdXQuaGVpZ2h0KnMvaDtcclxuICAgICAgaWYgKGhGYWN0b3IgPiAxKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCAwLjk1KiBzdHIubGVuZ3RoL2hGYWN0b3IpICsgJy4uLic7XHJcbiAgICAgICAgbWVzaCA9IGNyZWF0ZVRleHQoc3RyLCBmb250LCBjb2xvciwgc2NhbGUsIHcvcywgaC9zKTtcclxuICAgICAgfVxyXG4gICAgICBncm91cC5hZGQobWVzaCk7XHJcbiAgICAgIGdyb3VwLmxheW91dCA9IG1lc2guZ2VvbWV0cnkubGF5b3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwLnVwZGF0ZUxhYmVsID0gZnVuY3Rpb24oIHN0ciApe1xyXG4gICAgICBpZiAobWVzaC51c2VyRGF0YS5sYWJlbFN0cmluZyAhPT0gc3RyKSB7XHJcbiAgICAgICAgbWVzaC5nZW9tZXRyeS51cGRhdGUoIHN0ciApO1xyXG4gICAgICAgIG1lc2gudXNlckRhdGEubGFiZWxTdHJpbmcgPSBzdHI7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNyZWF0ZSxcclxuICAgIGdldE1hdGVyaWFsOiAoKT0+IG1hdGVyaWFsIC8vWFhYOiB0aGlzIGRhdGVzIGJhY2sgcXVpdGUgYSBsb25nIHdheSwgbm90IHN1cmUgaXQgd2FzIGV2ZXIgcmlnaHQuXHJcbiAgfVxyXG5cclxufSIsIi8qKlxyXG4qIGRhdC1ndWlWUiBKYXZhc2NyaXB0IENvbnRyb2xsZXIgTGlicmFyeSBmb3IgVlJcclxuKiBodHRwczovL2dpdGh1Yi5jb20vZGF0YWFydHMvZGF0Lmd1aVZSXHJcbipcclxuKiBDb3B5cmlnaHQgMjAxNiBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIEluYy5cclxuKlxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4qXHJcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4qXHJcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgKiBhcyBDb2xvcnMgZnJvbSAnLi9jb2xvcnMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBTkVMID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiAweGZmZmZmZiwgdmVydGV4Q29sb3JzOiB0cnVlIH0gKTtcclxuZXhwb3J0IGNvbnN0IExPQ0FUT1IgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoKTtcclxuZXhwb3J0IGNvbnN0IEZPTERFUiA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogMHgwMDAwMDAgfSApO1xyXG5leHBvcnQgY29uc3QgVE9PTFRJUCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogMHgyMDUwODAsIHRyYW5zcGFyZW50OiBmYWxzZSwgb3BhY2l0eTogMC44IH0gKTtcclxuIiwiLyoqXHJcbiogZGF0LWd1aVZSIEphdmFzY3JpcHQgQ29udHJvbGxlciBMaWJyYXJ5IGZvciBWUlxyXG4qIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhYXJ0cy9kYXQuZ3VpVlJcclxuKlxyXG4qIENvcHlyaWdodCAyMDE2IERhdGEgQXJ0cyBUZWFtLCBHb29nbGUgSW5jLlxyXG4qXHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbipcclxuKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbipcclxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKi9cclxuXHJcbmltcG9ydCBjcmVhdGVUZXh0TGFiZWwgZnJvbSAnLi90ZXh0bGFiZWwnO1xyXG5pbXBvcnQgY3JlYXRlSW50ZXJhY3Rpb24gZnJvbSAnLi9pbnRlcmFjdGlvbic7XHJcbmltcG9ydCAqIGFzIENvbG9ycyBmcm9tICcuL2NvbG9ycyc7XHJcbmltcG9ydCAqIGFzIExheW91dCBmcm9tICcuL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIFNoYXJlZE1hdGVyaWFscyBmcm9tICcuL3NoYXJlZG1hdGVyaWFscyc7XHJcbmltcG9ydCAqIGFzIEdyYWIgZnJvbSAnLi9ncmFiJztcclxuaW1wb3J0ICogYXMgUGFsZXR0ZSBmcm9tICcuL3BhbGV0dGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2xpZGVyKCB7XHJcbiAgdGV4dENyZWF0b3IsXHJcbiAgb2JqZWN0LFxyXG4gIHByb3BlcnR5TmFtZSA9ICd1bmRlZmluZWQnLFxyXG4gIGluaXRpYWxWYWx1ZSA9IDAuMCxcclxuICBtaW4gPSAwLjAsIG1heCA9IDEuMCxcclxuICBzdGVwID0gMC4xLFxyXG4gIHdpZHRoID0gTGF5b3V0LlBBTkVMX1dJRFRILFxyXG4gIGluaXRpYWxIZWlnaHQgPSBMYXlvdXQuUEFORUxfSEVJR0hULFxyXG4gIGRlcHRoID0gTGF5b3V0LlBBTkVMX0RFUFRIXHJcbn0gPSB7fSApe1xyXG5cclxuXHJcbiAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICBhbHBoYTogMS4wLFxyXG4gICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcclxuICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICB1c2VTdGVwOiB0cnVlLFxyXG4gICAgcHJlY2lzaW9uOiAxLFxyXG4gICAgbGlzdGVuOiBmYWxzZSxcclxuICAgIG1pbjogbWluLFxyXG4gICAgbWF4OiBtYXgsXHJcbiAgICBvbkNoYW5nZWRDQjogdW5kZWZpbmVkLFxyXG4gICAgb25GaW5pc2hlZENoYW5nZTogdW5kZWZpbmVkLFxyXG4gICAgcHJlc3Npbmc6IGZhbHNlXHJcbiAgfTtcclxuICBcclxuICBzdGF0ZS5zdGVwID0gZ2V0SW1wbGllZFN0ZXAoIHN0YXRlLnZhbHVlLCBzdGF0ZS5taW4sIHN0YXRlLm1heCApO1xyXG4gIHN0YXRlLnByZWNpc2lvbiA9IG51bURlY2ltYWxzKCBzdGF0ZS5zdGVwICk7XHJcbiAgc3RhdGUuYWxwaGEgPSBnZXRBbHBoYUZyb21WYWx1ZSggc3RhdGUudmFsdWUsIHN0YXRlLm1pbiwgc3RhdGUubWF4ICk7XHJcbiAgXHJcbiAgY29uc3QgZ3JvdXAgPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICBncm91cC5ndWlUeXBlID0gXCJzbGlkZXJcIjtcclxuICBncm91cC50b1N0cmluZyA9ICgpID0+IGBbJHtncm91cC5ndWlUeXBlfTogJHtwcm9wZXJ0eU5hbWV9XWA7XHJcbiAgXHJcbiAgY29uc3QgZGVzY3JpcHRvckxhYmVsID0gdGV4dENyZWF0b3IuY3JlYXRlKCBwcm9wZXJ0eU5hbWUgKTtcclxuICBkZXNjcmlwdG9yTGFiZWwucG9zaXRpb24ueCA9IExheW91dC5QQU5FTF9MQUJFTF9URVhUX01BUkdJTjtcclxuICBkZXNjcmlwdG9yTGFiZWwucG9zaXRpb24ueiA9IGRlcHRoO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi55ID0gLTAuMDM7XHJcblxyXG4gIGxldCBwYW5lbDtcclxuICBncm91cC5zZXRIZWlnaHQgPSBoZWlnaHQgPT4ge1xyXG4gICAgaWYgKHBhbmVsKSBncm91cC5yZW1vdmUoIHBhbmVsICk7XHJcbiAgICBcclxuICAgIGdyb3VwLnNwYWNpbmcgPSBoZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgU0xJREVSX1dJRFRIID0gd2lkdGggKiAwLjUgLSBMYXlvdXQuUEFORUxfTUFSR0lOO1xyXG4gICAgY29uc3QgU0xJREVSX0hFSUdIVCA9IGhlaWdodCAtIExheW91dC5QQU5FTF9NQVJHSU47XHJcbiAgICBjb25zdCBTTElERVJfREVQVEggPSBkZXB0aDtcclxuXHJcbiAgICAvLyAgZmlsbGVkIHZvbHVtZVxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSggU0xJREVSX1dJRFRILCBTTElERVJfSEVJR0hULCBTTElERVJfREVQVEggKTtcclxuICAgIHJlY3QudHJhbnNsYXRlKFNMSURFUl9XSURUSCowLjUsMCwwKTtcclxuICAgIC8vIExheW91dC5hbGlnbkxlZnQoIHJlY3QgKTtcclxuXHJcbiAgICBjb25zdCBoaXRzY2FuTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoKTtcclxuICAgIGhpdHNjYW5NYXRlcmlhbC52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgaGl0c2NhblZvbHVtZSA9IG5ldyBUSFJFRS5NZXNoKCByZWN0LmNsb25lKCksIGhpdHNjYW5NYXRlcmlhbCApO1xyXG4gICAgaGl0c2NhblZvbHVtZS5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnggPSB3aWR0aCAqIDAuNTtcclxuICAgIGhpdHNjYW5Wb2x1bWUubmFtZSA9ICdoaXRzY2FuVm9sdW1lJztcclxuXHJcbiAgICAvLyAgc2xpZGVyQkcgdm9sdW1lXHJcbiAgICBjb25zdCBzbGlkZXJCRyA9IG5ldyBUSFJFRS5NZXNoKCByZWN0LmNsb25lKCksIFNoYXJlZE1hdGVyaWFscy5QQU5FTCApO1xyXG4gICAgQ29sb3JzLmNvbG9yaXplR2VvbWV0cnkoIHNsaWRlckJHLmdlb21ldHJ5LCBDb2xvcnMuU0xJREVSX0JHICk7XHJcbiAgICBzbGlkZXJCRy5wb3NpdGlvbi56ID0gZGVwdGggKiAwLjU7XHJcbiAgICBzbGlkZXJCRy5wb3NpdGlvbi54ID0gU0xJREVSX1dJRFRIICsgTGF5b3V0LlBBTkVMX01BUkdJTjtcclxuXHJcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7IGNvbG9yOiBDb2xvcnMuREVGQVVMVF9DT0xPUiB9KTtcclxuICAgIGNvbnN0IGZpbGxlZFZvbHVtZSA9IG5ldyBUSFJFRS5NZXNoKCByZWN0LmNsb25lKCksIG1hdGVyaWFsICk7XHJcbiAgICBmaWxsZWRWb2x1bWUucG9zaXRpb24ueiA9IGRlcHRoICogMC41O1xyXG4gICAgaGl0c2NhblZvbHVtZS5hZGQoIGZpbGxlZFZvbHVtZSApO1xyXG5cclxuICAgIGNvbnN0IGVuZExvY2F0b3IgPSBuZXcgVEhSRUUuTWVzaCggbmV3IFRIUkVFLkJveEdlb21ldHJ5KCAwLjA1LCAwLjA1LCAwLjA1LCAxLCAxLCAxICksIFNoYXJlZE1hdGVyaWFscy5MT0NBVE9SICk7XHJcbiAgICBlbmRMb2NhdG9yLnBvc2l0aW9uLnggPSBTTElERVJfV0lEVEg7XHJcbiAgICBoaXRzY2FuVm9sdW1lLmFkZCggZW5kTG9jYXRvciApO1xyXG4gICAgZW5kTG9jYXRvci52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdmFsdWVMYWJlbCA9IHRleHRDcmVhdG9yLmNyZWF0ZSggc3RhdGUudmFsdWUudG9TdHJpbmcoKSApO1xyXG4gICAgdmFsdWVMYWJlbC5wb3NpdGlvbi54ID0gTGF5b3V0LlBBTkVMX1ZBTFVFX1RFWFRfTUFSR0lOICsgd2lkdGggKiAwLjU7XHJcbiAgICB2YWx1ZUxhYmVsLnBvc2l0aW9uLnogPSBkZXB0aCoyLjU7XHJcbiAgICB2YWx1ZUxhYmVsLnBvc2l0aW9uLnkgPSAtMC4wMzI1O1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xsZXJJRCA9IExheW91dC5jcmVhdGVDb250cm9sbGVySURCb3goIGhlaWdodCwgQ29sb3JzLkNPTlRST0xMRVJfSURfU0xJREVSICk7XHJcbiAgICBjb250cm9sbGVySUQucG9zaXRpb24ueiA9IGRlcHRoO1xyXG5cclxuICAgIHBhbmVsID0gTGF5b3V0LmNyZWF0ZVBhbmVsKCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApO1xyXG4gICAgcGFuZWwubmFtZSA9ICdwYW5lbCc7XHJcbiAgICBwYW5lbC5hZGQoIGRlc2NyaXB0b3JMYWJlbCwgaGl0c2NhblZvbHVtZSwgc2xpZGVyQkcsIHZhbHVlTGFiZWwsIGNvbnRyb2xsZXJJRCApO1xyXG5cclxuICAgIGdyb3VwLmFkZCggcGFuZWwgKVxyXG5cclxuICAgIHVwZGF0ZVZhbHVlTGFiZWwoIHN0YXRlLnZhbHVlICk7XHJcbiAgICB1cGRhdGVTbGlkZXIoKTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZUxhYmVsKCB2YWx1ZSApe1xyXG4gICAgICBpZiggc3RhdGUudXNlU3RlcCApe1xyXG4gICAgICAgIHZhbHVlTGFiZWwudXBkYXRlTGFiZWwoIHJvdW5kVG9EZWNpbWFsKCBzdGF0ZS52YWx1ZSwgc3RhdGUucHJlY2lzaW9uICkudG9TdHJpbmcoKSApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdmFsdWVMYWJlbC51cGRhdGVMYWJlbCggc3RhdGUudmFsdWUudG9TdHJpbmcoKSApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlVmlldygpe1xyXG4gICAgICBpZiggc3RhdGUucHJlc3NpbmcgKXtcclxuICAgICAgICBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIENvbG9ycy5JTlRFUkFDVElPTl9DT0xPUiApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgaWYoIGludGVyYWN0aW9uLmhvdmVyaW5nKCkgKXtcclxuICAgICAgICBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIENvbG9ycy5ISUdITElHSFRfQ09MT1IgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIG1hdGVyaWFsLmNvbG9yLnNldEhleCggQ29sb3JzLkRFRkFVTFRfQ09MT1IgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcigpe1xyXG4gICAgICBmaWxsZWRWb2x1bWUuc2NhbGUueCA9XHJcbiAgICAgICAgTWF0aC5taW4oXHJcbiAgICAgICAgICBNYXRoLm1heCggZ2V0QWxwaGFGcm9tVmFsdWUoIHN0YXRlLnZhbHVlLCBzdGF0ZS5taW4sIHN0YXRlLm1heCApICogd2lkdGgsIDAuMDAwMDAxICksXHJcbiAgICAgICAgICB3aWR0aFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT2JqZWN0KCB2YWx1ZSApe1xyXG4gICAgICBvYmplY3RbIHByb3BlcnR5TmFtZSBdID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlU3RhdGVGcm9tQWxwaGEoIGFscGhhICl7XHJcbiAgICAgIHN0YXRlLmFscGhhID0gZ2V0Q2xhbXBlZEFscGhhKCBhbHBoYSApO1xyXG4gICAgICBzdGF0ZS52YWx1ZSA9IGdldFZhbHVlRnJvbUFscGhhKCBzdGF0ZS5hbHBoYSwgc3RhdGUubWluLCBzdGF0ZS5tYXggKTtcclxuICAgICAgaWYoIHN0YXRlLnVzZVN0ZXAgKXtcclxuICAgICAgICBzdGF0ZS52YWx1ZSA9IGdldFN0ZXBwZWRWYWx1ZSggc3RhdGUudmFsdWUsIHN0YXRlLnN0ZXAgKTtcclxuICAgICAgfVxyXG4gICAgICBzdGF0ZS52YWx1ZSA9IGdldENsYW1wZWRWYWx1ZSggc3RhdGUudmFsdWUsIHN0YXRlLm1pbiwgc3RhdGUubWF4ICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbGlzdGVuVXBkYXRlKCl7XHJcbiAgICAgIHN0YXRlLnZhbHVlID0gZ2V0VmFsdWVGcm9tT2JqZWN0KCk7XHJcbiAgICAgIHN0YXRlLmFscGhhID0gZ2V0QWxwaGFGcm9tVmFsdWUoIHN0YXRlLnZhbHVlLCBzdGF0ZS5taW4sIHN0YXRlLm1heCApO1xyXG4gICAgICBzdGF0ZS5hbHBoYSA9IGdldENsYW1wZWRBbHBoYSggc3RhdGUuYWxwaGEgKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZyb21PYmplY3QoKXtcclxuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoIG9iamVjdFsgcHJvcGVydHlOYW1lIF0gKTtcclxuICAgIH1cclxuXHJcbiAgICBncm91cC5vbkNoYW5nZSA9IGZ1bmN0aW9uKCBjYWxsYmFjayApe1xyXG4gICAgICBzdGF0ZS5vbkNoYW5nZWRDQiA9IGNhbGxiYWNrO1xyXG4gICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLnN0ZXAgPSBmdW5jdGlvbiggc3RlcCApe1xyXG4gICAgICBzdGF0ZS5zdGVwID0gc3RlcDtcclxuICAgICAgc3RhdGUucHJlY2lzaW9uID0gbnVtRGVjaW1hbHMoIHN0YXRlLnN0ZXAgKVxyXG4gICAgICBzdGF0ZS51c2VTdGVwID0gdHJ1ZTtcclxuXHJcbiAgICAgIHN0YXRlLmFscGhhID0gZ2V0QWxwaGFGcm9tVmFsdWUoIHN0YXRlLnZhbHVlLCBzdGF0ZS5taW4sIHN0YXRlLm1heCApO1xyXG5cclxuICAgICAgdXBkYXRlU3RhdGVGcm9tQWxwaGEoIHN0YXRlLmFscGhhICk7XHJcbiAgICAgIHVwZGF0ZVZhbHVlTGFiZWwoIHN0YXRlLnZhbHVlICk7XHJcbiAgICAgIHVwZGF0ZVNsaWRlciggKTtcclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5saXN0ZW4gPSBmdW5jdGlvbigpe1xyXG4gICAgICBzdGF0ZS5saXN0ZW4gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGludGVyYWN0aW9uID0gY3JlYXRlSW50ZXJhY3Rpb24oIGhpdHNjYW5Wb2x1bWUgKTtcclxuICAgIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUHJlc3NlZCcsIGhhbmRsZVByZXNzICk7XHJcbiAgICBpbnRlcmFjdGlvbi5ldmVudHMub24oICdwcmVzc2luZycsIGhhbmRsZUhvbGQgKTtcclxuICAgIGludGVyYWN0aW9uLmV2ZW50cy5vbiggJ29uUmVsZWFzZWQnLCBoYW5kbGVSZWxlYXNlICk7XHJcblxyXG4gICAgZnVuY3Rpb24gaGFuZGxlUHJlc3MoIHAgKXtcclxuICAgICAgaWYoIGdyb3VwLnZpc2libGUgPT09IGZhbHNlICl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHN0YXRlLnByZXNzaW5nID0gdHJ1ZTtcclxuICAgICAgcC5sb2NrZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUhvbGQoIHsgcG9pbnQgfSA9IHt9ICl7XHJcbiAgICAgIGlmKCBncm91cC52aXNpYmxlID09PSBmYWxzZSApe1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RhdGUucHJlc3NpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgZmlsbGVkVm9sdW1lLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcbiAgICAgIGVuZExvY2F0b3IudXBkYXRlTWF0cml4V29ybGQoKTtcclxuXHJcbiAgICAgIGNvbnN0IGEgPSBuZXcgVEhSRUUuVmVjdG9yMygpLnNldEZyb21NYXRyaXhQb3NpdGlvbiggZmlsbGVkVm9sdW1lLm1hdHJpeFdvcmxkICk7XHJcbiAgICAgIGNvbnN0IGIgPSBuZXcgVEhSRUUuVmVjdG9yMygpLnNldEZyb21NYXRyaXhQb3NpdGlvbiggZW5kTG9jYXRvci5tYXRyaXhXb3JsZCApO1xyXG5cclxuICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHN0YXRlLnZhbHVlO1xyXG5cclxuICAgICAgdXBkYXRlU3RhdGVGcm9tQWxwaGEoIGdldFBvaW50QWxwaGEoIHBvaW50LCB7YSxifSApICk7XHJcbiAgICAgIHVwZGF0ZVZhbHVlTGFiZWwoIHN0YXRlLnZhbHVlICk7XHJcbiAgICAgIHVwZGF0ZVNsaWRlciggKTtcclxuICAgICAgdXBkYXRlT2JqZWN0KCBzdGF0ZS52YWx1ZSApO1xyXG5cclxuICAgICAgaWYoIHByZXZpb3VzVmFsdWUgIT09IHN0YXRlLnZhbHVlICYmIHN0YXRlLm9uQ2hhbmdlZENCICl7XHJcbiAgICAgICAgc3RhdGUub25DaGFuZ2VkQ0IoIHN0YXRlLnZhbHVlICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYW5kbGVSZWxlYXNlKCl7XHJcbiAgICAgIHN0YXRlLnByZXNzaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAuaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvbjtcclxuICAgIGdyb3VwLmhpdHNjYW4gPSBbIGhpdHNjYW5Wb2x1bWUsIHBhbmVsIF07XHJcblxyXG4gICAgY29uc3QgZ3JhYkludGVyYWN0aW9uID0gR3JhYi5jcmVhdGUoIHsgZ3JvdXAsIHBhbmVsIH0gKTtcclxuICAgIGNvbnN0IHBhbGV0dGVJbnRlcmFjdGlvbiA9IFBhbGV0dGUuY3JlYXRlKCB7IGdyb3VwLCBwYW5lbCB9ICk7XHJcblxyXG4gICAgZ3JvdXAudXBkYXRlQ29udHJvbCA9IGZ1bmN0aW9uKCBpbnB1dE9iamVjdHMgKXtcclxuICAgICAgaW50ZXJhY3Rpb24udXBkYXRlKCBpbnB1dE9iamVjdHMgKTtcclxuICAgICAgZ3JhYkludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcbiAgICAgIHBhbGV0dGVJbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG5cclxuICAgICAgaWYoIHN0YXRlLmxpc3RlbiApe1xyXG4gICAgICAgIGxpc3RlblVwZGF0ZSgpO1xyXG4gICAgICAgIHVwZGF0ZVZhbHVlTGFiZWwoIHN0YXRlLnZhbHVlICk7XHJcbiAgICAgICAgdXBkYXRlU2xpZGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdXBkYXRlVmlldygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5uYW1lID0gZnVuY3Rpb24oIHN0ciApe1xyXG4gICAgICBkZXNjcmlwdG9yTGFiZWwudXBkYXRlTGFiZWwoIHN0ciApO1xyXG4gICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm1pbiA9IGZ1bmN0aW9uKCBtICl7XHJcbiAgICAgIHN0YXRlLm1pbiA9IG07XHJcbiAgICAgIHN0YXRlLmFscGhhID0gZ2V0QWxwaGFGcm9tVmFsdWUoIHN0YXRlLnZhbHVlLCBzdGF0ZS5taW4sIHN0YXRlLm1heCApO1xyXG4gICAgICB1cGRhdGVTdGF0ZUZyb21BbHBoYSggc3RhdGUuYWxwaGEgKTtcclxuICAgICAgdXBkYXRlVmFsdWVMYWJlbCggc3RhdGUudmFsdWUgKTtcclxuICAgICAgdXBkYXRlU2xpZGVyKCApO1xyXG4gICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm1heCA9IGZ1bmN0aW9uKCBtICl7XHJcbiAgICAgIHN0YXRlLm1heCA9IG07XHJcbiAgICAgIHN0YXRlLmFscGhhID0gZ2V0QWxwaGFGcm9tVmFsdWUoIHN0YXRlLnZhbHVlLCBzdGF0ZS5taW4sIHN0YXRlLm1heCApO1xyXG4gICAgICB1cGRhdGVTdGF0ZUZyb21BbHBoYSggc3RhdGUuYWxwaGEgKTtcclxuICAgICAgdXBkYXRlVmFsdWVMYWJlbCggc3RhdGUudmFsdWUgKTtcclxuICAgICAgdXBkYXRlU2xpZGVyKCApO1xyXG4gICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9O1xyXG4gICAgaWYoZ3JvdXAuZm9sZGVyKSBncm91cC5mb2xkZXIucmVxdWVzdExheW91dCgpO1xyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH0gLy8gL3NldEhlaWdodFxyXG4gIGdyb3VwLnNldEhlaWdodCggaW5pdGlhbEhlaWdodCApO1xyXG4gIHJldHVybiBncm91cDtcclxufVxyXG5cclxuY29uc3QgdGEgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG5jb25zdCB0YiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbmNvbnN0IHRUb0EgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG5jb25zdCBhVG9CID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuXHJcbmZ1bmN0aW9uIGdldFBvaW50QWxwaGEoIHBvaW50LCBzZWdtZW50ICl7XHJcbiAgdGEuY29weSggc2VnbWVudC5iICkuc3ViKCBzZWdtZW50LmEgKTtcclxuICB0Yi5jb3B5KCBwb2ludCApLnN1Yiggc2VnbWVudC5hICk7XHJcblxyXG4gIGNvbnN0IHByb2plY3RlZCA9IHRiLnByb2plY3RPblZlY3RvciggdGEgKTtcclxuXHJcbiAgdFRvQS5jb3B5KCBwb2ludCApLnN1Yiggc2VnbWVudC5hICk7XHJcblxyXG4gIGFUb0IuY29weSggc2VnbWVudC5iICkuc3ViKCBzZWdtZW50LmEgKS5ub3JtYWxpemUoKTtcclxuXHJcbiAgY29uc3Qgc2lkZSA9IHRUb0Eubm9ybWFsaXplKCkuZG90KCBhVG9CICkgPj0gMCA/IDEgOiAtMTtcclxuXHJcbiAgY29uc3QgbGVuZ3RoID0gc2VnbWVudC5hLmRpc3RhbmNlVG8oIHNlZ21lbnQuYiApICogc2lkZTtcclxuXHJcbiAgbGV0IGFscGhhID0gcHJvamVjdGVkLmxlbmd0aCgpIC8gbGVuZ3RoO1xyXG4gIGlmKCBhbHBoYSA+IDEuMCApe1xyXG4gICAgYWxwaGEgPSAxLjA7XHJcbiAgfVxyXG4gIGlmKCBhbHBoYSA8IDAuMCApe1xyXG4gICAgYWxwaGEgPSAwLjA7XHJcbiAgfVxyXG4gIHJldHVybiBhbHBoYTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycChtaW4sIG1heCwgdmFsdWUpIHtcclxuICByZXR1cm4gKDEtdmFsdWUpKm1pbiArIHZhbHVlKm1heDtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFwX3JhbmdlKHZhbHVlLCBsb3cxLCBoaWdoMSwgbG93MiwgaGlnaDIpIHtcclxuICAgIHJldHVybiBsb3cyICsgKGhpZ2gyIC0gbG93MikgKiAodmFsdWUgLSBsb3cxKSAvIChoaWdoMSAtIGxvdzEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDbGFtcGVkQWxwaGEoIGFscGhhICl7XHJcbiAgaWYoIGFscGhhID4gMSApe1xyXG4gICAgcmV0dXJuIDFcclxuICB9XHJcbiAgaWYoIGFscGhhIDwgMCApe1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG4gIHJldHVybiBhbHBoYTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2xhbXBlZFZhbHVlKCB2YWx1ZSwgbWluLCBtYXggKXtcclxuICBpZiggdmFsdWUgPCBtaW4gKXtcclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG4gIGlmKCB2YWx1ZSA+IG1heCApe1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRJbXBsaWVkU3RlcCggdmFsdWUsIG1pbiwgbWF4ICl7XHJcbiAgLy9QSlQ6IHdoYXQgd291bGQgd2UgbGlrZSBzdGVwIHRvIGxvb2sgbGlrZT9cclxuICAvL1NvbWV0aGluZyB0aGF0IGhhcyBhYm91dCB0aGUgb3JkZXIgb2YgbWFnbml0dWRlLCBhbmQgbG9va3MgbmljZSBpbiBiYXNlIDEwP1xyXG4gIGNvbnN0IHIgPSBtYXgtbWluO1xyXG4gIGxldCBzdGVwID0gci8xMDA7IC8vd2hhdCBpcyB0aGUgcmF0aW8gb2YgbnVtYmVyIG9mIGRlY2ltYWxzIHRvIG9yZGVyIG9mIG1hZ25pdHVkZT9cclxuICBcclxuICByZXR1cm4gc3RlcDtcclxuXHJcbiAgLy8gaWYoIHZhbHVlID09PSAwICl7XHJcbiAgLy8gICByZXR1cm4gMTsgLy8gV2hhdCBhcmUgd2UsIHBzeWNoaWNzPyAvLzw8PDwtLS0gbm8sIHNvIHdlIHNob3VsZCBiYXNlIGltcGxpZWRTdGVwIG9uIG1pbi9tYXgsIG5vdCB2YWx1ZVxyXG4gIC8vIH0gZWxzZSB7XHJcbiAgLy8gICAvLyBIZXkgRG91ZywgY2hlY2sgdGhpcyBvdXQuXHJcbiAgLy8gICByZXR1cm4gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnModmFsdWUpKS9NYXRoLkxOMTApKS8xMDtcclxuICAvLyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFZhbHVlRnJvbUFscGhhKCBhbHBoYSwgbWluLCBtYXggKXtcclxuICByZXR1cm4gbWFwX3JhbmdlKCBhbHBoYSwgMC4wLCAxLjAsIG1pbiwgbWF4IClcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QWxwaGFGcm9tVmFsdWUoIHZhbHVlLCBtaW4sIG1heCApe1xyXG4gIHJldHVybiBtYXBfcmFuZ2UoIHZhbHVlLCBtaW4sIG1heCwgMC4wLCAxLjAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RlcHBlZFZhbHVlKCB2YWx1ZSwgc3RlcCApe1xyXG4gIGlmKCB2YWx1ZSAlIHN0ZXAgIT0gMCkge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoIHZhbHVlIC8gc3RlcCApICogc3RlcDtcclxuICB9XHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBudW1EZWNpbWFscyh4KSB7XHJcbiAgeCA9IHgudG9TdHJpbmcoKTtcclxuICBpZiAoeC5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgcmV0dXJuIHgubGVuZ3RoIC0geC5pbmRleE9mKCcuJykgLSAxO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJvdW5kVG9EZWNpbWFsKHZhbHVlLCBkZWNpbWFscykge1xyXG4gIGlmIChNYXRoLmFicyh2YWx1ZSkgPCAwLjAxICYmIHZhbHVlICE9PSAwKSByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgzKTtcclxuICBjb25zdCB0ZW5UbyA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XHJcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiB0ZW5UbykgLyB0ZW5UbztcclxufSIsIi8qKlxyXG4gKiBXaGVuIHRoZSB0ZXh0Ym94IGlzIGZvY3Vzc2VkLCAgYSBrZXlib2FyZCBzaG91bGQgYmUgY3JlYXRlZC4uLlxyXG4gKiBUaGVyZSBzaG91bGQgYWxzbyBiZSBhIHdheSBvZiBkaXNtaXNzaW5nIGl0IGxhdGVyLiAgSXQgbWF5IGJlIHRoYXQgd2Ugd2FudCB0b1xyXG4gKiBwcmV2ZW50IG11bHRpcGxlIGtleWJvYXJkcyBiZWluZyBtYWRlIHNpbXVsdGFuZW91c2x5P1xyXG4gKiBcclxuICogSW4gb3JkZXIgdG8gbWFrZSBpdCBhcHBlYXIsIGl0IGNhbiBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIHRoZSB0ZXhib3ggbm9kZSBpdHNlbGYuLi5cclxuICogVGhpcydsbCBtZWFuIHRoYXQgaXQgZ2V0cyBkcmFnZ2VkIGFyb3VuZCBieSB0aGUgcGFyZW50IEdVSSBhcyBpdCBtb3Zlcy4uLi5cclxuICogTWFrZXMgZm9yIHJlbGF0aXZlbHkgY2xlYW4sIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBhdCBsZWFzdC5cclxuICogQXQgdGhlIG1vbWVudCwga2V5Ym9hcmQgcG9zaXRpb25pbmcgaXMgbWVzc2VkIHVwIGJ5IHRoaXMgYXJyYW5nZW1lbnQuXHJcbiAqIFJlbW92aW5nIGdyYWJiZXIgbWFrZXMgaXQgbGVzcyBsaWtlbHkgYSB1c2VyIHdpbGwgZG8gdGhpcywgYnV0IG1pZ2h0IGJlIHdvcnRoIGZpeGluZyB0aGUgYmFzaWMgYnVnLlxyXG4gKiBcclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBHVUkgZnJvbSAnLi9pbmRleCc7XHJcbmltcG9ydCBjcmVhdGVUZXh0TGFiZWwgZnJvbSAnLi90ZXh0bGFiZWwnO1xyXG5pbXBvcnQgY3JlYXRlSW50ZXJhY3Rpb24gZnJvbSAnLi9pbnRlcmFjdGlvbic7XHJcbmltcG9ydCAqIGFzIENvbG9ycyBmcm9tICcuL2NvbG9ycyc7XHJcbmltcG9ydCAqIGFzIExheW91dCBmcm9tICcuL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIFNoYXJlZE1hdGVyaWFscyBmcm9tICcuL3NoYXJlZG1hdGVyaWFscyc7XHJcbmltcG9ydCAqIGFzIEdyYWIgZnJvbSAnLi9ncmFiJztcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUZXh0Qm94KHtcclxuICAgIHRleHRDcmVhdG9yLFxyXG4gICAgb2JqZWN0LFxyXG4gICAgcHJvcGVydHlOYW1lID0gJ3VuZGVmaW5lZCcsXHJcbiAgICB3aWR0aCA9IExheW91dC5QQU5FTF9XSURUSCxcclxuICAgIGhlaWdodCA9IExheW91dC5QQU5FTF9IRUlHSFQsXHJcbiAgICBkZXB0aCA9IExheW91dC5QQU5FTF9ERVBUSFxyXG59ID0ge30pIHtcclxuICAvLyBiaWcgb2xkIGNvcHkgLyBwYXN0ZSBmcm9tIGJ1dHRvbi5qcy4gTWlnaHQgdHJ5IHRvIGZhY3RvciBvdXQgc29tZSBvZiB0aGlzIGNvbW1vbiBjb2RlLlxyXG4gIGNvbnN0IEJVVFRPTl9XSURUSCA9IHdpZHRoICogMC41IC0gTGF5b3V0LlBBTkVMX01BUkdJTjtcclxuICBjb25zdCBCVVRUT05fSEVJR0hUID0gaGVpZ2h0IC0gTGF5b3V0LlBBTkVMX01BUkdJTjtcclxuICBjb25zdCBCVVRUT05fREVQVEggPSBMYXlvdXQuQlVUVE9OX0RFUFRIO1xyXG5cclxuICBjb25zdCBncm91cCA9IG5ldyBUSFJFRS5Hcm91cCgpO1xyXG4gIGdyb3VwLmd1aVR5cGUgPSBcInRleHRib3hcIjtcclxuICBncm91cC50b1N0cmluZyA9ICgpID0+IGBbJHtncm91cC5ndWlUeXBlfTogJHtwcm9wZXJ0eU5hbWV9XWA7XHJcblxyXG4gIGNvbnN0IHBhbmVsID0gTGF5b3V0LmNyZWF0ZVBhbmVsKCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApO1xyXG4gIGdyb3VwLmFkZCggcGFuZWwgKTtcclxuXHJcbiAgLy8gIGJhc2UgY2hlY2tib3hcclxuICBjb25zdCBkaXZpc2lvbnMgPSA0O1xyXG4gIGNvbnN0IGFzcGVjdFJhdGlvID0gQlVUVE9OX1dJRFRIIC8gQlVUVE9OX0hFSUdIVDtcclxuICBjb25zdCByZWN0ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KCBCVVRUT05fV0lEVEgsIEJVVFRPTl9IRUlHSFQsIEJVVFRPTl9ERVBUSCwgTWF0aC5mbG9vciggZGl2aXNpb25zICogYXNwZWN0UmF0aW8gKSwgZGl2aXNpb25zLCBkaXZpc2lvbnMgKTtcclxuICByZWN0LnRyYW5zbGF0ZSggQlVUVE9OX1dJRFRIICogMC41LCAwLCAwICk7XHJcblxyXG4gIC8vICBoaXRzY2FuIHZvbHVtZVxyXG4gIGNvbnN0IGhpdHNjYW5NYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCgpO1xyXG4gIGhpdHNjYW5NYXRlcmlhbC52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGhpdHNjYW5Wb2x1bWUgPSBuZXcgVEhSRUUuTWVzaCggcmVjdC5jbG9uZSgpLCBoaXRzY2FuTWF0ZXJpYWwgKTtcclxuICBoaXRzY2FuVm9sdW1lLnBvc2l0aW9uLnogPSBCVVRUT05fREVQVEggKiAwLjU7XHJcbiAgaGl0c2NhblZvbHVtZS5wb3NpdGlvbi54ID0gd2lkdGggKiAwLjU7XHJcblxyXG4gIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHsgY29sb3I6IDB4RkZGRkZGIH0pO1xyXG4gIGNvbnN0IGZpbGxlZFZvbHVtZSA9IG5ldyBUSFJFRS5NZXNoKCByZWN0LmNsb25lKCksIG1hdGVyaWFsICk7XHJcbiAgaGl0c2NhblZvbHVtZS5hZGQoIGZpbGxlZFZvbHVtZSApO1xyXG5cclxuXHJcbiAgLy9ob3cgY2FuIEkgY2hhbmdlIGNvbG9yIG9mIHRleHQ/XHJcbiAgY29uc3QgYnV0dG9uTGFiZWwgPSB0ZXh0Q3JlYXRvci5jcmVhdGUoIG9iamVjdFtwcm9wZXJ0eU5hbWVdLCB7IGNvbG9yOiAweDAwMDAwMDAsIHNjYWxlOiAwLjg2NiB9ICk7XHJcblxyXG4gIC8vICBUaGlzIGlzIGEgcmVhbCBoYWNrIHNpbmNlIHdlIG5lZWQgdG8gZml0IHRoZSB0ZXh0IHBvc2l0aW9uIHRvIHRoZSBmb250IHNjYWxpbmdcclxuICAvLyAgUGxlYXNlIGZpeCBtZS5cclxuICAvL2J1dHRvbkxhYmVsLnBvc2l0aW9uLnggPSBCVVRUT05fV0lEVEggKiAwLjUgLSBidXR0b25MYWJlbC5sYXlvdXQud2lkdGggKiAwLjAwMDAxMSAqIDAuNTtcclxuICBidXR0b25MYWJlbC5wb3NpdGlvbi54ID0gMC4wMTU7XHJcbiAgYnV0dG9uTGFiZWwucG9zaXRpb24ueiA9IEJVVFRPTl9ERVBUSCAqIDEuMjtcclxuICBidXR0b25MYWJlbC5wb3NpdGlvbi55ID0gLTAuMDI1O1xyXG4gIGZpbGxlZFZvbHVtZS5hZGQoIGJ1dHRvbkxhYmVsICk7XHJcblxyXG5cclxuICBjb25zdCBkZXNjcmlwdG9yTGFiZWwgPSB0ZXh0Q3JlYXRvci5jcmVhdGUoIHByb3BlcnR5TmFtZSApO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi54ID0gTGF5b3V0LlBBTkVMX0xBQkVMX1RFWFRfTUFSR0lOO1xyXG4gIGRlc2NyaXB0b3JMYWJlbC5wb3NpdGlvbi56ID0gZGVwdGg7XHJcbiAgZGVzY3JpcHRvckxhYmVsLnBvc2l0aW9uLnkgPSAtMC4wMztcclxuXHJcbiAgY29uc3QgY29udHJvbGxlcklEID0gTGF5b3V0LmNyZWF0ZUNvbnRyb2xsZXJJREJveCggaGVpZ2h0LCBDb2xvcnMuQ09OVFJPTExFUl9JRF9CVVRUT04gKTtcclxuICBjb250cm9sbGVySUQucG9zaXRpb24ueiA9IGRlcHRoO1xyXG5cclxuICBwYW5lbC5hZGQoIGRlc2NyaXB0b3JMYWJlbCwgaGl0c2NhblZvbHVtZSwgY29udHJvbGxlcklEICk7XHJcblxyXG4gIGNvbnN0IGludGVyYWN0aW9uID0gY3JlYXRlSW50ZXJhY3Rpb24oIGhpdHNjYW5Wb2x1bWUgKTtcclxuICBpbnRlcmFjdGlvbi5ldmVudHMub24oICdvblByZXNzZWQnLCBoYW5kbGVPblByZXNzICk7XHJcblxyXG4gIHVwZGF0ZVZpZXcoKTtcclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlU3RyaW5nKHN0cikge1xyXG4gICAgICBvYmplY3RbcHJvcGVydHlOYW1lXSA9IHN0cjtcclxuICAgICAgYnV0dG9uTGFiZWwudXBkYXRlTGFiZWwoc3RyKTtcclxuICB9XHJcbiAgdmFyIGtleWJvYXJkO1xyXG4gIGZ1bmN0aW9uIHRvZ2dsZUtleWJvYXJkKCkge1xyXG4gICAgaWYgKGtleWJvYXJkKSB7XHJcbiAgICAgICAga2V5Ym9hcmQudmlzaWJsZSA9ICFrZXlib2FyZC52aXNpYmxlO1xyXG4gICAgICAgIGlmIChrZXlib2FyZC52aXNpYmxlKSBncm91cC5mb2xkZXIuc2V0TW9kYWxFZGl0b3Ioa2V5Ym9hcmQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAga2V5Ym9hcmQgPSBkYXQuR1VJVlIuY3JlYXRlKFwia2V5Ym9hcmRcIik7XHJcbiAgICAgICAgZ3JvdXAuYWRkKGtleWJvYXJkKTtcclxuICAgICAgICBrZXlib2FyZC5mb2xkZXIgPSBncm91cC5mb2xkZXI7XHJcbiAgICAgICAgZ3JvdXAuZm9sZGVyLnNldE1vZGFsRWRpdG9yKGtleWJvYXJkKTtcclxuICAgICAgICBrZXlib2FyZC5wb3NpdGlvbi54ID0gd2lkdGg7XHJcbiAgICAgICAga2V5Ym9hcmQucG9zaXRpb24ueSA9IExheW91dC5GT0xERVJfSEVJR0hUO1xyXG4gICAgICAgIGtleWJvYXJkLmhpZGVIZWFkZXIoKTtcclxuICAgICAgICBrZXlib2FyZC5hZGRLZXlib2FyZCggKGspID0+IHtcclxuICAgICAgICAgICAgdmFyIHN0ciA9IG9iamVjdFtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGspIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1xcbic6XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zZXR0aW5nIFwia2V5Ym9hcmQudmlzaWJsZSA9IGZhbHNlXCIgaW4gdGhlIG1pZGRsZSBvZiBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgIC8vaGFuZGxlciBzZWVtcyB0byBraWxsIGFsbCBldmVudCBwcm9jZXNzaW5nIGZyb20gdGhlbiBvbi5cclxuICAgICAgICAgICAgICAgICAgICAvL3NldFRpbWVvdXQgaXMgYW4gYWRlcXVhdGUgd29ya2Fyb3VuZCBmb3Igbm93LlxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodG9nZ2xlS2V5Ym9hcmQsIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdcXGInOlxyXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aC0xKTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdHJpbmcoc3RyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IGs7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RyaW5nKHN0cik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhbmRsZU9uUHJlc3MoIHAgKXtcclxuICAgIC8vdGhpcyB0ZXN0IHNob3VsZCBiZSByZWR1bmRhbnQgbm93XHJcbiAgICAvLyBpZiggZ3JvdXAudmlzaWJsZSA9PT0gZmFsc2UgKXtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vb2JqZWN0WyBwcm9wZXJ0eU5hbWUgXSgpO1xyXG5cclxuICAgIC8vaGl0c2NhblZvbHVtZS5wb3NpdGlvbi56ID0gQlVUVE9OX0RFUFRIICogMC4xO1xyXG5cclxuICAgIC8vIGNyZWF0ZSBhIGtleWJvYXJkIGFuZCBhdHRhY2ggaXQgYXMgY2hpbGQgb2YgZ3JvdXAuLi4gXHJcbiAgICAvLyBvciBqdXN0IG1ha2Ugc3VyZSBleGlzdGluZyBrZXlib2FyZCBpcyB2aXNpYmxlLlxyXG4gICAgdG9nZ2xlS2V5Ym9hcmQoKTtcclxuXHJcbiAgICBwLmxvY2tlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBcclxuICBmdW5jdGlvbiB1cGRhdGVWaWV3KCl7XHJcblxyXG4gICAgaWYoIGludGVyYWN0aW9uLmhvdmVyaW5nKCkgKXtcclxuICAgICAgbWF0ZXJpYWwuY29sb3Iuc2V0SGV4KCBDb2xvcnMuVEVYVEJPWF9ISUdITElHSFRfQkcgKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIG1hdGVyaWFsLmNvbG9yLnNldEhleCggQ29sb3JzLlRFWFRCT1hfQkcgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBncm91cC5pbnRlcmFjdGlvbiA9IGludGVyYWN0aW9uO1xyXG4gIGdyb3VwLmhpdHNjYW4gPSBbIGhpdHNjYW5Wb2x1bWUsIHBhbmVsIF07XHJcblxyXG4gIGNvbnN0IGdyYWJJbnRlcmFjdGlvbiA9IEdyYWIuY3JlYXRlKCB7IGdyb3VwLCBwYW5lbCB9ICk7XHJcblxyXG4gIGdyb3VwLnVwZGF0ZUNvbnRyb2wgPSBmdW5jdGlvbiggaW5wdXRPYmplY3RzICl7XHJcbiAgICBpbnRlcmFjdGlvbi51cGRhdGUoIGlucHV0T2JqZWN0cyApO1xyXG4gICAgZ3JhYkludGVyYWN0aW9uLnVwZGF0ZSggaW5wdXRPYmplY3RzICk7XHJcbiAgICB1cGRhdGVWaWV3KCk7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAubmFtZSA9IGZ1bmN0aW9uKCBzdHIgKXtcclxuICAgIGRlc2NyaXB0b3JMYWJlbC51cGRhdGVMYWJlbCggc3RyICk7XHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfTtcclxuXHJcblxyXG4gIHJldHVybiBncm91cDtcclxufSIsIi8qKlxyXG4qIGRhdC1ndWlWUiBKYXZhc2NyaXB0IENvbnRyb2xsZXIgTGlicmFyeSBmb3IgVlJcclxuKiBodHRwczovL2dpdGh1Yi5jb20vZGF0YWFydHMvZGF0Lmd1aVZSXHJcbipcclxuKiBDb3B5cmlnaHQgMjAxNiBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIEluYy5cclxuKlxyXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4qXHJcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4qXHJcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgKiBhcyBDb2xvcnMgZnJvbSAnLi9jb2xvcnMnO1xyXG5pbXBvcnQgKiBhcyBTaGFyZWRNYXRlcmlhbHMgZnJvbSAnLi9zaGFyZWRtYXRlcmlhbHMnO1xyXG5pbXBvcnQgKiBhcyBMYXlvdXQgZnJvbSAnLi9sYXlvdXQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVGV4dExhYmVsKCB0ZXh0Q3JlYXRvciwgc3RyLCB3aWR0aCA9IDAuNCwgZGVwdGggPSAwLjAyOSwgZmdDb2xvciA9IDB4ZmZmZmZmLCBiZ0NvbG9yID0gQ29sb3JzLkRFRkFVTFRfQkFDSywgc2NhbGUgPSAxLjAgKXtcclxuXHJcbiAgY29uc3QgZ3JvdXAgPSBuZXcgVEhSRUUuR3JvdXAoKTtcclxuICBncm91cC5ndWlUeXBlID0gXCJ0ZXh0bGFiZWxcIjtcclxuICBncm91cC50b1N0cmluZyA9ICgpID0+IGBbJHtncm91cC5ndWlUeXBlfTogJHtzdHJ9XWA7XHJcblxyXG4gIGNvbnN0IGludGVybmFsUG9zaXRpb25pbmcgPSBuZXcgVEhSRUUuR3JvdXAoKTsgLy9yYXRoZXIgdW5uZWNlc3NhcnkuXHJcbiAgZ3JvdXAuYWRkKCBpbnRlcm5hbFBvc2l0aW9uaW5nICk7XHJcblxyXG4gIGNvbnN0IHRleHQgPSB0ZXh0Q3JlYXRvci5jcmVhdGUoIHN0ci50b1N0cmluZygpLCB7IGNvbG9yOiBmZ0NvbG9yLCBzY2FsZSB9ICk7XHJcbiAgaW50ZXJuYWxQb3NpdGlvbmluZy5hZGQoIHRleHQgKTtcclxuICBncm91cC51c2VyRGF0YS50ZXh0ID0gdGV4dDtcclxuXHJcbiAgZ3JvdXAuc2V0U3RyaW5nID0gZnVuY3Rpb24oIHN0ciApe1xyXG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSBzdHIgPSBcIlt1bmRlZmluZWRdXCI7XHJcbiAgICB0ZXh0LnVwZGF0ZUxhYmVsKCBzdHIudG9TdHJpbmcoKSApO1xyXG4gICAgLy90ZXh0LmNvbnN0cmFpbkJvdW5kcyh0b3RhbFdpZHRoLCAwLjA0KTtcclxuICB9O1xyXG5cclxuICBncm91cC5zZXROdW1iZXIgPSBmdW5jdGlvbiggc3RyICl7XHJcbiAgICB0ZXh0LnVwZGF0ZUxhYmVsKCBzdHIudG9GaXhlZCgyKSApO1xyXG4gIH07XHJcblxyXG4gIHRleHQucG9zaXRpb24ueiA9IGRlcHRoO1xyXG5cclxuICBjb25zdCBiYWNrQm91bmRzID0gMC4wMTtcclxuICBjb25zdCBtYXJnaW4gPSAwLjAxO1xyXG4gIGNvbnN0IHRvdGFsV2lkdGggPSB3aWR0aDtcclxuICBjb25zdCB0b3RhbEhlaWdodCA9IDAuMDQgKyBtYXJnaW4gKiAyO1xyXG5cclxuICAvL3RleHQuY29uc3RyYWluQm91bmRzKHRvdGFsV2lkdGgsIDAuMDQpO1xyXG5cclxuICBjb25zdCBsYWJlbEJhY2tHZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSggdG90YWxXaWR0aCwgdG90YWxIZWlnaHQsIGRlcHRoLCAxLCAxLCAxICk7XHJcbiAgbGFiZWxCYWNrR2VvbWV0cnkuYXBwbHlNYXRyaXg0KCBuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbiggdG90YWxXaWR0aCAqIDAuNSAtIG1hcmdpbiwgMCwgMCApICk7XHJcblxyXG4gIGNvbnN0IGxhYmVsQmFja01lc2ggPSBuZXcgVEhSRUUuTWVzaCggbGFiZWxCYWNrR2VvbWV0cnksIFNoYXJlZE1hdGVyaWFscy5QQU5FTCApO1xyXG4gIENvbG9ycy5jb2xvcml6ZUdlb21ldHJ5KCBsYWJlbEJhY2tNZXNoLmdlb21ldHJ5LCBiZ0NvbG9yICk7XHJcblxyXG4gIGxhYmVsQmFja01lc2gucG9zaXRpb24ueSA9IDAuMDM7XHJcbiAgaW50ZXJuYWxQb3NpdGlvbmluZy5hZGQoIGxhYmVsQmFja01lc2ggKTtcclxuICBpbnRlcm5hbFBvc2l0aW9uaW5nLnBvc2l0aW9uLnkgPSAtdG90YWxIZWlnaHQgKiAwLjU7XHJcblxyXG4gIGdyb3VwLmJhY2sgPSBsYWJlbEJhY2tNZXNoO1xyXG5cclxuICByZXR1cm4gZ3JvdXA7XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRQYXJlbnRIZWlnaHQgPSBMYXlvdXQuUEFORUxfSEVJR0hUICsgTGF5b3V0LlBBTkVMX1NQQUNJTkc7XHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb29sVGlwKCB0ZXh0Q3JlYXRvciwgdGlwLCBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0ID0gZGVmYXVsdFBhcmVudEhlaWdodCwgcGFyZW50RGVwdGggKSB7XHJcbiAgY29uc3QgdGlwVGV4dCA9IHRleHRDcmVhdG9yLmNyZWF0ZSh0aXApO1xyXG4gIFxyXG4gIGNvbnN0IHRpcEdyb3VwID0gbmV3IFRIUkVFLkdyb3VwKCk7XHJcblxyXG4gIGNvbnN0IHcgPSB0aXBUZXh0LmNvbXB1dGVXaWR0aCgpO1xyXG4gIGNvbnN0IGggPSBMYXlvdXQuVEVYVF9TQ0FMRSAqIHRpcFRleHQubGF5b3V0LmhlaWdodDtcclxuXHJcbiAgdGlwR3JvdXAucG9zaXRpb24ueCAgPSAwLjUgKiBwYXJlbnRXaWR0aDtcclxuICB0aXBHcm91cC5wb3NpdGlvbi55ID0gLTEuMDUgKiBwYXJlbnRIZWlnaHQgLSBoO1xyXG4gIHRpcEdyb3VwLnBvc2l0aW9uLnogPSBwYXJlbnREZXB0aCAqIDM7XHJcbiAgdGlwR3JvdXAudmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuLy8gIHN1Ymdyb3VwLmFkZCh0aXBHcm91cCk7XHJcbiAgdGlwR3JvdXAuYWRkKHRpcFRleHQpO1xyXG4vLyAgc3ViZ3JvdXAudGlwVGV4dCA9IHRpcEdyb3VwO1xyXG5cclxuICBjb25zdCBwYWRkZWRXID0gdyArIDAuMDMsIHBhZGRlZEggPSBoICsgMC4wMztcclxuICBjb25zdCB0aXBSZWN0ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkocGFkZGVkVywgcGFkZGVkSCwgMSwgMSk7XHJcbiAgY29uc3QgdGlwQmFja2dyb3VuZCA9IG5ldyBUSFJFRS5NZXNoKHRpcFJlY3QsIFNoYXJlZE1hdGVyaWFscy5UT09MVElQKTtcclxuICB0aXBCYWNrZ3JvdW5kLnBvc2l0aW9uLnggPSAwOyAvL3BhZGRlZFcgLyAyO1xyXG4gIHRpcEJhY2tncm91bmQucG9zaXRpb24ueSA9IGggLyAyO1xyXG4gIHRpcEJhY2tncm91bmQucG9zaXRpb24ueiA9IC1wYXJlbnREZXB0aCAqIDAuNTtcclxuICB0aXBHcm91cC5hZGQodGlwQmFja2dyb3VuZCk7XHJcblxyXG4gIHRpcFRleHQucG9zaXRpb24ueCA9IC0wLjUgKiB3O1xyXG4gIHRpcFRleHQucG9zaXRpb24ueSA9IC0wLjUgKiBoICsgMC4wMDE1O1xyXG5cclxuICB0aXBHcm91cC51c2VyRGF0YS53ID0gdztcclxuICB0aXBHcm91cC51c2VyRGF0YS5oID0gaDtcclxuXHJcbiAgcmV0dXJuIHRpcEdyb3VwO1xyXG59XHJcbiIsIi8qKiBiYXNpYyB1dGlsaXR5IGZ1bmN0aW9ucyAqL1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udHJvbGxlclZpc2libGUoY29udHJvbCkge1xyXG4gIHZhciBmb2xkZXIgPSBjb250cm9sLmZvbGRlcjtcclxuICAvL25vdGU6IHRoZSBiYXNpcyBvbiB3aGljaCBhIGNvbnRyb2xsZXIgaXMgY29uc2lkZXJlZCB2aXNpYmxlIHJldmlzZWQgZm9yICdoZWFkZXInIG9iamVjdHMuXHJcbiAgLy9mb3Igbm93LCB0aGlzIHNob3VsZCBhbGxvdyBoZWFkZXIgY29udHJvbGxlcnMgdG8gdXBkYXRlIHdoaWxlIGZvbGRlciBpcyBjb2xsYXBzZWQuXHJcbiAgLy9vbmx5IGFwcGxpZXMgdG8gY2hlY2tib3gsIHBlbmRpbmcgZGVzaWduIHJldmlzaW9uICYgZnVsbGVyIGltcGxlbWVudGF0aW9uLi4uXHJcbiAgXHJcbiAgLy8tLS0tIGlzU2hvd25JbkZvbGRlckhlYWRlciBubyBsb25nZXIgcmVsZXZhbnQsIGJ1dCBlbmRpbmcgdXAgd2l0aCBzb21ldGhpbmcgdGhhdCBsb29rcyBzaW1pbGFyLi4uLlxyXG4gIC8vaXNIZWFkZXJPYmplY3Qgd2lsbCBhcHBseSB0byB0aGUgYWN0dWFsIGNvbnRyb2wgYXBwZWFyaW5nIGluIHRoZSBmb2xkZXIgaGVhZGVyLCB3aGVyZWFzXHJcbiAgLy9pc1Nob3duSW5Gb2xkZXJIZWFkZXIgd2FzIHdoZW4gc3VjaCBvYmplY3RzIHdlcmVuJ3Qgc28gZnVsbHktZmxlZGdlZFxyXG4gIC8vaWYgKGNvbnRyb2wuaXNTaG93bkluRm9sZGVySGVhZGVyKSByZXR1cm4gaXNDb250cm9sbGVyVmlzaWJsZShmb2xkZXIpOyAvLzw8PDw8IHN0aWxsIGhpdHRpbmcgZm9sZGVkIGJ1dHRvbj8/PyAoYWxzbywgdHJ5IG5wbSBhdWRpdClcclxuICBpZiAoY29udHJvbC5pc0hlYWRlck9iamVjdCkgcmV0dXJuIGlzQ29udHJvbGxlclZpc2libGUoZm9sZGVyKTtcclxuXHJcbiAgLy9YWFggaGF2aW5nIHNvbWUgZGVmaW5pdGUgYnVncyBlLmcuIG1pc3NpbmcgZXZlbnRzIG92ZXIgJ3BpY3R1cmVzIC8gbWF0ZXJpYWxzJyBmb2xkZXIgaGVhZGVyIGluIGRlbW8uXHJcbiAgXHJcbiAgaWYgKCFjb250cm9sLnZpc2libGUpIHJldHVybiBmYWxzZTtcclxuICBcclxuICB3aGlsZSAoZm9sZGVyLmZvbGRlciAhPT0gZm9sZGVyKXtcclxuICAgIGlmIChmb2xkZXIuaXNDb2xsYXBzZWQoKSB8fCAhZm9sZGVyLnZpc2libGUpIHJldHVybiBmYWxzZTtcclxuICAgIGZvbGRlciA9IGZvbGRlci5mb2xkZXI7XHJcbiAgfVxyXG4gIGlmICghZm9sZGVyLnBhcmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gIHJldHVybiBmb2xkZXIudmlzaWJsZTtcclxufVxyXG5cclxuLyoqIFxyXG4gKiBJbnZpc2libGUgVEhSRUUgb2JqZWN0cyBpbmN1ciBzaWduaWZpY2FudCBDUFUgY29zdC5cclxuICogVGhpcyBhdm9pZHMgdGhhdCBieSByZW1vdmluZyB0aGVtIGZyb20gc2NlbmUgaGllcmFyY2h5LlxyXG4gKiBcclxuICogSWYgdmlzaWJsZSBpcyB0cnVlLCBtYWtlIHN1cmUgY2hpbGQudmlzaWJsZT10cnVlIGFuZCBpcyBhIGNoaWxkIG9mIHBhcmVudC5cclxuICogSWYgdmlzaWJsZSBpcyBmYWxzZSwgbWFrZSBzdXJlIGNoaWxkLnZpc2libGU9ZmFsc2UgYW5kIGlzIHJlbW92ZWQgZnJvbSBzY2VuZSBoaWVyYXJjaHkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0VmlzaWJpbGl0eShwYXJlbnQsIGNoaWxkLCB2aXNpYmxlKSB7XHJcbiAgICBjb25zdCBpc0NoaWxkID0gcGFyZW50LmNoaWxkcmVuLmluY2x1ZGVzKGNoaWxkKTtcclxuICAgIGNoaWxkLnZpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgLy9tYWtlIHN1cmUgd2UgdXNlIG9yaWdpbmFsIFRIUkVFIG1ldGhvZHMgdGhhdCB0aGlzIGxpYnJhcnkgb3ZlcnJpZGVzIChUT0RPOiByZWZhY3Rvci4uLilcclxuICAgIGlmICh2aXNpYmxlICYmICFpc0NoaWxkKSBUSFJFRS5Hcm91cC5wcm90b3R5cGUuYWRkLmNhbGwocGFyZW50LCBjaGlsZCk7XHJcbiAgICBpZiAoIXZpc2libGUgJiYgaXNDaGlsZCkgVEhSRUUuR3JvdXAucHJvdG90eXBlLnJlbW92ZS5jYWxsKHBhcmVudCwgY2hpbGQpO1xyXG4gICAgaWYgKCFwYXJlbnQudmlzaWJsZSkgY29uc29sZS53YXJuKGBzZXRWaXNpYmlsaXR5IGNhbGxlZCBvbiBjaGlsZCAke2NoaWxkfSBvZiBpbnZpc2libGUgcGFyZW50ICR7cGFyZW50fWApO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaGlnaGVzdCBsZXZlbCBvZiBwYXJlbnQgZm9sZGVyIGluIHRoZSBndWkgaGllYXJjaHkgY29udGFpbmluZyBhIGdpdmVuIG9iamVjdC5cclxuICogbmIuIG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIHRoZSBpbnB1dCBvYmplY3QgaWYgaXQgZGlkbid0IGhhdmUgYSAnZm9sZGVyJyBwcm9wZXJ0eS5cclxuICogTm93LCBpdCBpcyBpbnRlbmRlZCB0aGF0IGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGEgZm9sZGVyIGlmIGFwcHJvcHJpYXRlLCBvciBub3RoaW5nLlxyXG4gKiBAcGFyYW0geyp9IGdyb3VwIGVpdGhlciBhIGZvbGRlciwgb3IgYW4gb2JqZWN0IHdob3NlIHBhcmVudCBoYXMgYSBmb2xkZXIuLi4gYXBvbG9naWVzLCB0aGlzIGlzIG5vdCB0aGUgY2xlYXJlc3Qgc3BlYy5cclxuICogLi4uIGludGVudGlvbiBpcyB0aGF0IGl0IHNob3VsZCB3b3JrIHdpdGggYW55IGd1aSBlbGVtZW50LCBpbiBwYXJ0aWN1bGFyIGFueSBoaXRPYmplY3QgaW4gaW50ZXJhY3Rpb24uanMuLi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3BMZXZlbEZvbGRlcihncm91cCkge1xyXG4gICAgdmFyIGZvbGRlciA9IGdldEZvbGRlcihncm91cCk7XHJcbiAgICB3aGlsZSAoZm9sZGVyLmZvbGRlciAhPT0gZm9sZGVyKSBmb2xkZXIgPSBmb2xkZXIuZm9sZGVyO1xyXG4gICAgcmV0dXJuIGZvbGRlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlcihncm91cCkge1xyXG4gICAgaWYgKGdyb3VwLmZvbGRlcikgcmV0dXJuIGdyb3VwLmZvbGRlcjtcclxuICAgIGxldCBub2RlID0gZ3JvdXAucGFyZW50O1xyXG4gICAgd2hpbGUgKCFub2RlLmZvbGRlciAmJiBncm91cC5wYXJlbnQpIG5vZGUgPSBub2RlLnBhcmVudDtcclxuICAgIHJldHVybiBub2RlLmZvbGRlcjtcclxufVxyXG5cclxuLy93ZSBuZWVkIHRvIGF2b2lkIE5hTiBiZWNhdXNlIG9mIFRleHRHZW9tZXRyeSBwb3NpdGlvbiBoYXZpbmcgaXRlbVNpemUgPT0gMiB3aGljaCB1cHNldHMgVmVjdG9yMy5mcm9tQnVmZmVyQXR0cmlidXRlXHJcbi8vaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9pc3N1ZXMvMTQzNTJcclxuZXhwb3J0IGZ1bmN0aW9uIHNldEJveEZyb21PYmplY3QoYm94LCBvYmopIHtcclxuICBjb25zdCB3b25reUdlb20gPSBbXTtcclxuICBvYmoudHJhdmVyc2UobyA9PiB7XHJcbiAgICBpZiAoby5nZW9tZXRyeSAmJiBvLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgJiYgby5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLml0ZW1TaXplICE9PSAzKSB7XHJcbiAgICAgIG8uZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSA9IGZhbHNlO1xyXG4gICAgICB3b25reUdlb20ucHVzaChvLmdlb21ldHJ5KTtcclxuICAgIH1cclxuICB9KTtcclxuICBib3guc2V0RnJvbU9iamVjdChvYmopO1xyXG4gIHdvbmt5R2VvbS5mb3JFYWNoKGcgPT4gZy5pc0J1ZmZlckdlb21ldHJ5ID0gdHJ1ZSk7XHJcbiAgcmV0dXJuIGJveDtcclxufVxyXG4iLCJ2YXIgc3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFuQXJyYXlcblxuZnVuY3Rpb24gYW5BcnJheShhcnIpIHtcbiAgcmV0dXJuIChcbiAgICAgICBhcnIuQllURVNfUEVSX0VMRU1FTlRcbiAgICAmJiBzdHIuY2FsbChhcnIuYnVmZmVyKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJ1xuICAgIHx8IEFycmF5LmlzQXJyYXkoYXJyKVxuICApXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG51bXR5cGUobnVtLCBkZWYpIHtcblx0cmV0dXJuIHR5cGVvZiBudW0gPT09ICdudW1iZXInXG5cdFx0PyBudW0gXG5cdFx0OiAodHlwZW9mIGRlZiA9PT0gJ251bWJlcicgPyBkZWYgOiAwKVxufSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHR5cGUpIHtcbiAgc3dpdGNoIChkdHlwZSkge1xuICAgIGNhc2UgJ2ludDgnOlxuICAgICAgcmV0dXJuIEludDhBcnJheVxuICAgIGNhc2UgJ2ludDE2JzpcbiAgICAgIHJldHVybiBJbnQxNkFycmF5XG4gICAgY2FzZSAnaW50MzInOlxuICAgICAgcmV0dXJuIEludDMyQXJyYXlcbiAgICBjYXNlICd1aW50OCc6XG4gICAgICByZXR1cm4gVWludDhBcnJheVxuICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICByZXR1cm4gVWludDE2QXJyYXlcbiAgICBjYXNlICd1aW50MzInOlxuICAgICAgcmV0dXJuIFVpbnQzMkFycmF5XG4gICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICByZXR1cm4gRmxvYXQzMkFycmF5XG4gICAgY2FzZSAnZmxvYXQ2NCc6XG4gICAgICByZXR1cm4gRmxvYXQ2NEFycmF5XG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIEFycmF5XG4gICAgY2FzZSAndWludDhfY2xhbXBlZCc6XG4gICAgICByZXR1cm4gVWludDhDbGFtcGVkQXJyYXlcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpXG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cblxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGlzU2xvd0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNCdWZmZXIob2JqLnNsaWNlKDAsIDApKVxufVxuIiwidmFyIHdvcmRXcmFwID0gcmVxdWlyZSgnd29yZC13cmFwcGVyJylcbnZhciB4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJylcbnZhciBudW1iZXIgPSByZXF1aXJlKCdhcy1udW1iZXInKVxuXG52YXIgWF9IRUlHSFRTID0gWyd4JywgJ2UnLCAnYScsICdvJywgJ24nLCAncycsICdyJywgJ2MnLCAndScsICdtJywgJ3YnLCAndycsICd6J11cbnZhciBNX1dJRFRIUyA9IFsnbScsICd3J11cbnZhciBDQVBfSEVJR0hUUyA9IFsnSCcsICdJJywgJ04nLCAnRScsICdGJywgJ0snLCAnTCcsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJ11cblxuXG52YXIgVEFCX0lEID0gJ1xcdCcuY2hhckNvZGVBdCgwKVxudmFyIFNQQUNFX0lEID0gJyAnLmNoYXJDb2RlQXQoMClcbnZhciBBTElHTl9MRUZUID0gMCwgXG4gICAgQUxJR05fQ0VOVEVSID0gMSwgXG4gICAgQUxJR05fUklHSFQgPSAyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlTGF5b3V0KG9wdCkge1xuICByZXR1cm4gbmV3IFRleHRMYXlvdXQob3B0KVxufVxuXG5mdW5jdGlvbiBUZXh0TGF5b3V0KG9wdCkge1xuICB0aGlzLmdseXBocyA9IFtdXG4gIHRoaXMuX21lYXN1cmUgPSB0aGlzLmNvbXB1dGVNZXRyaWNzLmJpbmQodGhpcylcbiAgdGhpcy51cGRhdGUob3B0KVxufVxuXG5UZXh0TGF5b3V0LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihvcHQpIHtcbiAgb3B0ID0geHRlbmQoe1xuICAgIG1lYXN1cmU6IHRoaXMuX21lYXN1cmVcbiAgfSwgb3B0KVxuICB0aGlzLl9vcHQgPSBvcHRcbiAgdGhpcy5fb3B0LnRhYlNpemUgPSBudW1iZXIodGhpcy5fb3B0LnRhYlNpemUsIDQpXG5cbiAgaWYgKCFvcHQuZm9udClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgcHJvdmlkZSBhIHZhbGlkIGJpdG1hcCBmb250JylcblxuICB2YXIgZ2x5cGhzID0gdGhpcy5nbHlwaHNcbiAgdmFyIHRleHQgPSBvcHQudGV4dHx8JycgXG4gIHZhciBmb250ID0gb3B0LmZvbnRcbiAgdGhpcy5fc2V0dXBTcGFjZUdseXBocyhmb250KVxuICBcbiAgdmFyIGxpbmVzID0gd29yZFdyYXAubGluZXModGV4dCwgb3B0KVxuICB2YXIgbWluV2lkdGggPSBvcHQud2lkdGggfHwgMFxuXG4gIC8vY2xlYXIgZ2x5cGhzXG4gIGdseXBocy5sZW5ndGggPSAwXG5cbiAgLy9nZXQgbWF4IGxpbmUgd2lkdGhcbiAgdmFyIG1heExpbmVXaWR0aCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbihwcmV2LCBsaW5lKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KHByZXYsIGxpbmUud2lkdGgsIG1pbldpZHRoKVxuICB9LCAwKVxuXG4gIC8vdGhlIHBlbiBwb3NpdGlvblxuICB2YXIgeCA9IDBcbiAgdmFyIHkgPSAwXG4gIHZhciBsaW5lSGVpZ2h0ID0gbnVtYmVyKG9wdC5saW5lSGVpZ2h0LCBmb250LmNvbW1vbi5saW5lSGVpZ2h0KVxuICB2YXIgYmFzZWxpbmUgPSBmb250LmNvbW1vbi5iYXNlXG4gIHZhciBkZXNjZW5kZXIgPSBsaW5lSGVpZ2h0LWJhc2VsaW5lXG4gIHZhciBsZXR0ZXJTcGFjaW5nID0gb3B0LmxldHRlclNwYWNpbmcgfHwgMFxuICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aCAtIGRlc2NlbmRlclxuICB2YXIgYWxpZ24gPSBnZXRBbGlnblR5cGUodGhpcy5fb3B0LmFsaWduKVxuXG4gIC8vZHJhdyB0ZXh0IGFsb25nIGJhc2VsaW5lXG4gIHkgLT0gaGVpZ2h0XG4gIFxuICAvL3RoZSBtZXRyaWNzIGZvciB0aGlzIHRleHQgbGF5b3V0XG4gIHRoaXMuX3dpZHRoID0gbWF4TGluZVdpZHRoXG4gIHRoaXMuX2hlaWdodCA9IGhlaWdodFxuICB0aGlzLl9kZXNjZW5kZXIgPSBsaW5lSGVpZ2h0IC0gYmFzZWxpbmVcbiAgdGhpcy5fYmFzZWxpbmUgPSBiYXNlbGluZVxuICB0aGlzLl94SGVpZ2h0ID0gZ2V0WEhlaWdodChmb250KVxuICB0aGlzLl9jYXBIZWlnaHQgPSBnZXRDYXBIZWlnaHQoZm9udClcbiAgdGhpcy5fbGluZUhlaWdodCA9IGxpbmVIZWlnaHRcbiAgdGhpcy5fYXNjZW5kZXIgPSBsaW5lSGVpZ2h0IC0gZGVzY2VuZGVyIC0gdGhpcy5feEhlaWdodFxuICAgIFxuICAvL2xheW91dCBlYWNoIGdseXBoXG4gIHZhciBzZWxmID0gdGhpc1xuICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGxpbmVJbmRleCkge1xuICAgIHZhciBzdGFydCA9IGxpbmUuc3RhcnRcbiAgICB2YXIgZW5kID0gbGluZS5lbmRcbiAgICB2YXIgbGluZVdpZHRoID0gbGluZS53aWR0aFxuICAgIHZhciBsYXN0R2x5cGhcbiAgICBcbiAgICAvL2ZvciBlYWNoIGdseXBoIGluIHRoYXQgbGluZS4uLlxuICAgIGZvciAodmFyIGk9c3RhcnQ7IGk8ZW5kOyBpKyspIHtcbiAgICAgIHZhciBpZCA9IHRleHQuY2hhckNvZGVBdChpKVxuICAgICAgdmFyIGdseXBoID0gc2VsZi5nZXRHbHlwaChmb250LCBpZClcbiAgICAgIGlmIChnbHlwaCkge1xuICAgICAgICBpZiAobGFzdEdseXBoKSBcbiAgICAgICAgICB4ICs9IGdldEtlcm5pbmcoZm9udCwgbGFzdEdseXBoLmlkLCBnbHlwaC5pZClcblxuICAgICAgICB2YXIgdHggPSB4XG4gICAgICAgIGlmIChhbGlnbiA9PT0gQUxJR05fQ0VOVEVSKSBcbiAgICAgICAgICB0eCArPSAobWF4TGluZVdpZHRoLWxpbmVXaWR0aCkvMlxuICAgICAgICBlbHNlIGlmIChhbGlnbiA9PT0gQUxJR05fUklHSFQpXG4gICAgICAgICAgdHggKz0gKG1heExpbmVXaWR0aC1saW5lV2lkdGgpXG5cbiAgICAgICAgZ2x5cGhzLnB1c2goe1xuICAgICAgICAgIHBvc2l0aW9uOiBbdHgsIHldLFxuICAgICAgICAgIGRhdGE6IGdseXBoLFxuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIGxpbmU6IGxpbmVJbmRleFxuICAgICAgICB9KSAgXG5cbiAgICAgICAgLy9tb3ZlIHBlbiBmb3J3YXJkXG4gICAgICAgIHggKz0gZ2x5cGgueGFkdmFuY2UgKyBsZXR0ZXJTcGFjaW5nXG4gICAgICAgIGxhc3RHbHlwaCA9IGdseXBoXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9uZXh0IGxpbmUgZG93blxuICAgIHkgKz0gbGluZUhlaWdodFxuICAgIHggPSAwXG4gIH0pXG4gIHRoaXMuX2xpbmVzVG90YWwgPSBsaW5lcy5sZW5ndGg7XG59XG5cblRleHRMYXlvdXQucHJvdG90eXBlLl9zZXR1cFNwYWNlR2x5cGhzID0gZnVuY3Rpb24oZm9udCkge1xuICAvL1RoZXNlIGFyZSBmYWxsYmFja3MsIHdoZW4gdGhlIGZvbnQgZG9lc24ndCBpbmNsdWRlXG4gIC8vJyAnIG9yICdcXHQnIGdseXBoc1xuICB0aGlzLl9mYWxsYmFja1NwYWNlR2x5cGggPSBudWxsXG4gIHRoaXMuX2ZhbGxiYWNrVGFiR2x5cGggPSBudWxsXG5cbiAgaWYgKCFmb250LmNoYXJzIHx8IGZvbnQuY2hhcnMubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIC8vdHJ5IHRvIGdldCBzcGFjZSBnbHlwaFxuICAvL3RoZW4gZmFsbCBiYWNrIHRvIHRoZSAnbScgb3IgJ3cnIGdseXBoc1xuICAvL3RoZW4gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBnbHlwaCBhdmFpbGFibGVcbiAgdmFyIHNwYWNlID0gZ2V0R2x5cGhCeUlkKGZvbnQsIFNQQUNFX0lEKSBcbiAgICAgICAgICB8fCBnZXRNR2x5cGgoZm9udCkgXG4gICAgICAgICAgfHwgZm9udC5jaGFyc1swXVxuXG4gIC8vYW5kIGNyZWF0ZSBhIGZhbGxiYWNrIGZvciB0YWJcbiAgdmFyIHRhYldpZHRoID0gdGhpcy5fb3B0LnRhYlNpemUgKiBzcGFjZS54YWR2YW5jZVxuICB0aGlzLl9mYWxsYmFja1NwYWNlR2x5cGggPSBzcGFjZVxuICB0aGlzLl9mYWxsYmFja1RhYkdseXBoID0geHRlbmQoc3BhY2UsIHtcbiAgICB4OiAwLCB5OiAwLCB4YWR2YW5jZTogdGFiV2lkdGgsIGlkOiBUQUJfSUQsIFxuICAgIHhvZmZzZXQ6IDAsIHlvZmZzZXQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDBcbiAgfSlcbn1cblxuVGV4dExheW91dC5wcm90b3R5cGUuZ2V0R2x5cGggPSBmdW5jdGlvbihmb250LCBpZCkge1xuICB2YXIgZ2x5cGggPSBnZXRHbHlwaEJ5SWQoZm9udCwgaWQpXG4gIGlmIChnbHlwaClcbiAgICByZXR1cm4gZ2x5cGhcbiAgZWxzZSBpZiAoaWQgPT09IFRBQl9JRCkgXG4gICAgcmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGFiR2x5cGhcbiAgZWxzZSBpZiAoaWQgPT09IFNQQUNFX0lEKSBcbiAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tTcGFjZUdseXBoXG4gIHJldHVybiBudWxsXG59XG5cblRleHRMYXlvdXQucHJvdG90eXBlLmNvbXB1dGVNZXRyaWNzID0gZnVuY3Rpb24odGV4dCwgc3RhcnQsIGVuZCwgd2lkdGgpIHtcbiAgdmFyIGxldHRlclNwYWNpbmcgPSB0aGlzLl9vcHQubGV0dGVyU3BhY2luZyB8fCAwXG4gIHZhciBmb250ID0gdGhpcy5fb3B0LmZvbnRcbiAgdmFyIGN1clBlbiA9IDBcbiAgdmFyIGN1cldpZHRoID0gMFxuICB2YXIgY291bnQgPSAwXG4gIHZhciBnbHlwaFxuICB2YXIgbGFzdEdseXBoXG5cbiAgaWYgKCFmb250LmNoYXJzIHx8IGZvbnQuY2hhcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgIGVuZDogc3RhcnQsXG4gICAgICB3aWR0aDogMFxuICAgIH1cbiAgfVxuXG4gIGVuZCA9IE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQpXG4gIGZvciAodmFyIGk9c3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHZhciBpZCA9IHRleHQuY2hhckNvZGVBdChpKVxuICAgIHZhciBnbHlwaCA9IHRoaXMuZ2V0R2x5cGgoZm9udCwgaWQpXG5cbiAgICBpZiAoZ2x5cGgpIHtcbiAgICAgIC8vbW92ZSBwZW4gZm9yd2FyZFxuICAgICAgdmFyIHhvZmYgPSBnbHlwaC54b2Zmc2V0XG4gICAgICB2YXIga2VybiA9IGxhc3RHbHlwaCA/IGdldEtlcm5pbmcoZm9udCwgbGFzdEdseXBoLmlkLCBnbHlwaC5pZCkgOiAwXG4gICAgICBjdXJQZW4gKz0ga2VyblxuXG4gICAgICB2YXIgbmV4dFBlbiA9IGN1clBlbiArIGdseXBoLnhhZHZhbmNlICsgbGV0dGVyU3BhY2luZ1xuICAgICAgdmFyIG5leHRXaWR0aCA9IGN1clBlbiArIGdseXBoLndpZHRoXG5cbiAgICAgIC8vd2UndmUgaGl0IG91ciBsaW1pdDsgd2UgY2FuJ3QgbW92ZSBvbnRvIHRoZSBuZXh0IGdseXBoXG4gICAgICBpZiAobmV4dFdpZHRoID49IHdpZHRoIHx8IG5leHRQZW4gPj0gd2lkdGgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vb3RoZXJ3aXNlIGNvbnRpbnVlIGFsb25nIG91ciBsaW5lXG4gICAgICBjdXJQZW4gPSBuZXh0UGVuXG4gICAgICBjdXJXaWR0aCA9IG5leHRXaWR0aFxuICAgICAgbGFzdEdseXBoID0gZ2x5cGhcbiAgICB9XG4gICAgY291bnQrK1xuICB9XG4gIFxuICAvL21ha2Ugc3VyZSByaWdodG1vc3QgZWRnZSBsaW5lcyB1cCB3aXRoIHJlbmRlcmVkIGdseXBoc1xuICBpZiAobGFzdEdseXBoKVxuICAgIGN1cldpZHRoICs9IGxhc3RHbHlwaC54b2Zmc2V0XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBzdGFydCArIGNvdW50LFxuICAgIHdpZHRoOiBjdXJXaWR0aFxuICB9XG59XG5cbi8vZ2V0dGVycyBmb3IgdGhlIHByaXZhdGUgdmFyc1xuO1snd2lkdGgnLCAnaGVpZ2h0JywgXG4gICdkZXNjZW5kZXInLCAnYXNjZW5kZXInLFxuICAneEhlaWdodCcsICdiYXNlbGluZScsXG4gICdjYXBIZWlnaHQnLFxuICAnbGluZUhlaWdodCcgXS5mb3JFYWNoKGFkZEdldHRlcilcblxuZnVuY3Rpb24gYWRkR2V0dGVyKG5hbWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHRMYXlvdXQucHJvdG90eXBlLCBuYW1lLCB7XG4gICAgZ2V0OiB3cmFwcGVyKG5hbWUpLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufVxuXG4vL2NyZWF0ZSBsb29rdXBzIGZvciBwcml2YXRlIHZhcnNcbmZ1bmN0aW9uIHdyYXBwZXIobmFtZSkge1xuICByZXR1cm4gKG5ldyBGdW5jdGlvbihbXG4gICAgJ3JldHVybiBmdW5jdGlvbiAnK25hbWUrJygpIHsnLFxuICAgICcgIHJldHVybiB0aGlzLl8nK25hbWUsXG4gICAgJ30nXG4gIF0uam9pbignXFxuJykpKSgpXG59XG5cbmZ1bmN0aW9uIGdldEdseXBoQnlJZChmb250LCBpZCkge1xuICBpZiAoIWZvbnQuY2hhcnMgfHwgZm9udC5jaGFycy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG51bGxcblxuICB2YXIgZ2x5cGhJZHggPSBmaW5kQ2hhcihmb250LmNoYXJzLCBpZClcbiAgaWYgKGdseXBoSWR4ID49IDApXG4gICAgcmV0dXJuIGZvbnQuY2hhcnNbZ2x5cGhJZHhdXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldFhIZWlnaHQoZm9udCkge1xuICBmb3IgKHZhciBpPTA7IGk8WF9IRUlHSFRTLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlkID0gWF9IRUlHSFRTW2ldLmNoYXJDb2RlQXQoMClcbiAgICB2YXIgaWR4ID0gZmluZENoYXIoZm9udC5jaGFycywgaWQpXG4gICAgaWYgKGlkeCA+PSAwKSBcbiAgICAgIHJldHVybiBmb250LmNoYXJzW2lkeF0uaGVpZ2h0XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gZ2V0TUdseXBoKGZvbnQpIHtcbiAgZm9yICh2YXIgaT0wOyBpPE1fV0lEVEhTLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlkID0gTV9XSURUSFNbaV0uY2hhckNvZGVBdCgwKVxuICAgIHZhciBpZHggPSBmaW5kQ2hhcihmb250LmNoYXJzLCBpZClcbiAgICBpZiAoaWR4ID49IDApIFxuICAgICAgcmV0dXJuIGZvbnQuY2hhcnNbaWR4XVxuICB9XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIGdldENhcEhlaWdodChmb250KSB7XG4gIGZvciAodmFyIGk9MDsgaTxDQVBfSEVJR0hUUy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpZCA9IENBUF9IRUlHSFRTW2ldLmNoYXJDb2RlQXQoMClcbiAgICB2YXIgaWR4ID0gZmluZENoYXIoZm9udC5jaGFycywgaWQpXG4gICAgaWYgKGlkeCA+PSAwKSBcbiAgICAgIHJldHVybiBmb250LmNoYXJzW2lkeF0uaGVpZ2h0XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gZ2V0S2VybmluZyhmb250LCBsZWZ0LCByaWdodCkge1xuICBpZiAoIWZvbnQua2VybmluZ3MgfHwgZm9udC5rZXJuaW5ncy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIDBcblxuICB2YXIgdGFibGUgPSBmb250Lmtlcm5pbmdzXG4gIGZvciAodmFyIGk9MDsgaTx0YWJsZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXJuID0gdGFibGVbaV1cbiAgICBpZiAoa2Vybi5maXJzdCA9PT0gbGVmdCAmJiBrZXJuLnNlY29uZCA9PT0gcmlnaHQpXG4gICAgICByZXR1cm4ga2Vybi5hbW91bnRcbiAgfVxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBnZXRBbGlnblR5cGUoYWxpZ24pIHtcbiAgaWYgKGFsaWduID09PSAnY2VudGVyJylcbiAgICByZXR1cm4gQUxJR05fQ0VOVEVSXG4gIGVsc2UgaWYgKGFsaWduID09PSAncmlnaHQnKVxuICAgIHJldHVybiBBTElHTl9SSUdIVFxuICByZXR1cm4gQUxJR05fTEVGVFxufVxuXG5mdW5jdGlvbiBmaW5kQ2hhciAoYXJyYXksIHZhbHVlLCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDBcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0uaWQgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTFcbn0iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUJNRm9udEFzY2lpKGRhdGEpIHtcbiAgaWYgKCFkYXRhKVxuICAgIHRocm93IG5ldyBFcnJvcignbm8gZGF0YSBwcm92aWRlZCcpXG4gIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXG5cbiAgdmFyIG91dHB1dCA9IHtcbiAgICBwYWdlczogW10sXG4gICAgY2hhcnM6IFtdLFxuICAgIGtlcm5pbmdzOiBbXVxuICB9XG5cbiAgdmFyIGxpbmVzID0gZGF0YS5zcGxpdCgvXFxyXFxuP3xcXG4vZylcblxuICBpZiAobGluZXMubGVuZ3RoID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignbm8gZGF0YSBpbiBCTUZvbnQgZmlsZScpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsaW5lRGF0YSA9IHNwbGl0TGluZShsaW5lc1tpXSwgaSlcbiAgICBpZiAoIWxpbmVEYXRhKSAvL3NraXAgZW1wdHkgbGluZXNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICBpZiAobGluZURhdGEua2V5ID09PSAncGFnZScpIHtcbiAgICAgIGlmICh0eXBlb2YgbGluZURhdGEuZGF0YS5pZCAhPT0gJ251bWJlcicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWFsZm9ybWVkIGZpbGUgYXQgbGluZSAnICsgaSArICcgLS0gbmVlZHMgcGFnZSBpZD1OJylcbiAgICAgIGlmICh0eXBlb2YgbGluZURhdGEuZGF0YS5maWxlICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYWxmb3JtZWQgZmlsZSBhdCBsaW5lICcgKyBpICsgJyAtLSBuZWVkcyBwYWdlIGZpbGU9XCJwYXRoXCInKVxuICAgICAgb3V0cHV0LnBhZ2VzW2xpbmVEYXRhLmRhdGEuaWRdID0gbGluZURhdGEuZGF0YS5maWxlXG4gICAgfSBlbHNlIGlmIChsaW5lRGF0YS5rZXkgPT09ICdjaGFycycgfHwgbGluZURhdGEua2V5ID09PSAna2VybmluZ3MnKSB7XG4gICAgICAvLy4uLiBkbyBub3RoaW5nIGZvciB0aGVzZSB0d28gLi4uXG4gICAgfSBlbHNlIGlmIChsaW5lRGF0YS5rZXkgPT09ICdjaGFyJykge1xuICAgICAgb3V0cHV0LmNoYXJzLnB1c2gobGluZURhdGEuZGF0YSlcbiAgICB9IGVsc2UgaWYgKGxpbmVEYXRhLmtleSA9PT0gJ2tlcm5pbmcnKSB7XG4gICAgICBvdXRwdXQua2VybmluZ3MucHVzaChsaW5lRGF0YS5kYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXRbbGluZURhdGEua2V5XSA9IGxpbmVEYXRhLmRhdGFcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbmZ1bmN0aW9uIHNwbGl0TGluZShsaW5lLCBpZHgpIHtcbiAgbGluZSA9IGxpbmUucmVwbGFjZSgvXFx0Ky9nLCAnICcpLnRyaW0oKVxuICBpZiAoIWxpbmUpXG4gICAgcmV0dXJuIG51bGxcblxuICB2YXIgc3BhY2UgPSBsaW5lLmluZGV4T2YoJyAnKVxuICBpZiAoc3BhY2UgPT09IC0xKSBcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBuYW1lZCByb3cgYXQgbGluZSBcIiArIGlkeClcblxuICB2YXIga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgc3BhY2UpXG5cbiAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKHNwYWNlICsgMSlcbiAgLy9jbGVhciBcImxldHRlclwiIGZpZWxkIGFzIGl0IGlzIG5vbi1zdGFuZGFyZCBhbmRcbiAgLy9yZXF1aXJlcyBhZGRpdGlvbmFsIGNvbXBsZXhpdHkgdG8gcGFyc2UgXCIgLyA9IHN5bWJvbHNcbiAgbGluZSA9IGxpbmUucmVwbGFjZSgvbGV0dGVyPVtcXCdcXFwiXVxcUytbXFwnXFxcIl0vZ2ksICcnKVxuICBsaW5lID0gbGluZS5zcGxpdChcIj1cIilcbiAgbGluZSA9IGxpbmUubWFwKGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpLm1hdGNoKCgvKFwiLio/XCJ8W15cIlxcc10rKSsoPz1cXHMqfFxccyokKS9nKSlcbiAgfSlcblxuICB2YXIgZGF0YSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkdCA9IGxpbmVbaV1cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAga2V5OiBkdFswXSxcbiAgICAgICAgZGF0YTogXCJcIlxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGkgPT09IGxpbmUubGVuZ3RoIC0gMSkge1xuICAgICAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdLmRhdGEgPSBwYXJzZURhdGEoZHRbMF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXS5kYXRhID0gcGFyc2VEYXRhKGR0WzBdKVxuICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAga2V5OiBkdFsxXSxcbiAgICAgICAgZGF0YTogXCJcIlxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0ID0ge1xuICAgIGtleToga2V5LFxuICAgIGRhdGE6IHt9XG4gIH1cblxuICBkYXRhLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIG91dC5kYXRhW3Yua2V5XSA9IHYuZGF0YTtcbiAgfSlcblxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0YShkYXRhKSB7XG4gIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gXCJcIlxuXG4gIGlmIChkYXRhLmluZGV4T2YoJ1wiJykgPT09IDAgfHwgZGF0YS5pbmRleE9mKFwiJ1wiKSA9PT0gMClcbiAgICByZXR1cm4gZGF0YS5zdWJzdHJpbmcoMSwgZGF0YS5sZW5ndGggLSAxKVxuICBpZiAoZGF0YS5pbmRleE9mKCcsJykgIT09IC0xKVxuICAgIHJldHVybiBwYXJzZUludExpc3QoZGF0YSlcbiAgcmV0dXJuIHBhcnNlSW50KGRhdGEsIDEwKVxufVxuXG5mdW5jdGlvbiBwYXJzZUludExpc3QoZGF0YSkge1xuICByZXR1cm4gZGF0YS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsLCAxMClcbiAgfSlcbn0iLCJ2YXIgZHR5cGUgPSByZXF1aXJlKCdkdHlwZScpXG52YXIgYW5BcnJheSA9IHJlcXVpcmUoJ2FuLWFycmF5JylcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpXG5cbnZhciBDVyA9IFswLCAyLCAzXVxudmFyIENDVyA9IFsyLCAxLCAzXVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZVF1YWRFbGVtZW50cyhhcnJheSwgb3B0KSB7XG4gICAgLy9pZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IGFuIG91dHB1dCBhcnJheVxuICAgIGlmICghYXJyYXkgfHwgIShhbkFycmF5KGFycmF5KSB8fCBpc0J1ZmZlcihhcnJheSkpKSB7XG4gICAgICAgIG9wdCA9IGFycmF5IHx8IHt9XG4gICAgICAgIGFycmF5ID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnbnVtYmVyJykgLy9iYWNrd2FyZHMtY29tcGF0aWJsZVxuICAgICAgICBvcHQgPSB7IGNvdW50OiBvcHQgfVxuICAgIGVsc2VcbiAgICAgICAgb3B0ID0gb3B0IHx8IHt9XG5cbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvcHQudHlwZSA9PT0gJ3N0cmluZycgPyBvcHQudHlwZSA6ICd1aW50MTYnXG4gICAgdmFyIGNvdW50ID0gdHlwZW9mIG9wdC5jb3VudCA9PT0gJ251bWJlcicgPyBvcHQuY291bnQgOiAxXG4gICAgdmFyIHN0YXJ0ID0gKG9wdC5zdGFydCB8fCAwKSBcblxuICAgIHZhciBkaXIgPSBvcHQuY2xvY2t3aXNlICE9PSBmYWxzZSA/IENXIDogQ0NXLFxuICAgICAgICBhID0gZGlyWzBdLCBcbiAgICAgICAgYiA9IGRpclsxXSxcbiAgICAgICAgYyA9IGRpclsyXVxuXG4gICAgdmFyIG51bUluZGljZXMgPSBjb3VudCAqIDZcblxuICAgIHZhciBpbmRpY2VzID0gYXJyYXkgfHwgbmV3IChkdHlwZSh0eXBlKSkobnVtSW5kaWNlcylcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCBudW1JbmRpY2VzOyBpICs9IDYsIGogKz0gNCkge1xuICAgICAgICB2YXIgeCA9IGkgKyBzdGFydFxuICAgICAgICBpbmRpY2VzW3ggKyAwXSA9IGogKyAwXG4gICAgICAgIGluZGljZXNbeCArIDFdID0gaiArIDFcbiAgICAgICAgaW5kaWNlc1t4ICsgMl0gPSBqICsgMlxuICAgICAgICBpbmRpY2VzW3ggKyAzXSA9IGogKyBhXG4gICAgICAgIGluZGljZXNbeCArIDRdID0gaiArIGJcbiAgICAgICAgaW5kaWNlc1t4ICsgNV0gPSBqICsgY1xuICAgIH1cbiAgICByZXR1cm4gaW5kaWNlc1xufSIsInZhciBjcmVhdGVMYXlvdXQgPSByZXF1aXJlKCdsYXlvdXQtYm1mb250LXRleHQnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIGNyZWF0ZUluZGljZXMgPSByZXF1aXJlKCdxdWFkLWluZGljZXMnKVxuXG52YXIgdmVydGljZXMgPSByZXF1aXJlKCcuL2xpYi92ZXJ0aWNlcycpXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL2xpYi91dGlscycpXG5cbnZhciBCYXNlID0gVEhSRUUuQnVmZmVyR2VvbWV0cnlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVUZXh0R2VvbWV0cnkgKG9wdCkge1xuICByZXR1cm4gbmV3IFRleHRHZW9tZXRyeShvcHQpXG59XG5cbmZ1bmN0aW9uIFRleHRHZW9tZXRyeSAob3B0KSB7XG4gIC8vLy8gc2pwdCBwYXRjaCBmb3IgdGhyZWUxNDIsIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGlzIGEgY2xhc3NcclxuICBpZiAoK1RIUkVFLlJFVklTSU9OIDwgMTQyKSB7IFxyXG4gICAgQmFzZS5jYWxsKHRoaXMpO1xyXG4gIH0gZWxzZSB7IFxyXG4gICAgY29uc3Qgenp6ID0gbmV3IEJhc2UoKTsgLy9QSlQ6IGNsYXNzaWMgc2pwdCB2YXJpYWJsZSBuYW1pbmcg8J+ZhFxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB6enopO1xyXG4gIH1cclxuXG4gIGlmICh0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJykge1xuICAgIG9wdCA9IHsgdGV4dDogb3B0IH1cbiAgfVxuXG4gIC8vIHVzZSB0aGVzZSBhcyBkZWZhdWx0IHZhbHVlcyBmb3IgYW55IHN1YnNlcXVlbnRcbiAgLy8gY2FsbHMgdG8gdXBkYXRlKClcbiAgdGhpcy5fb3B0ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0KVxuXG4gIC8vIGFsc28gZG8gYW4gaW5pdGlhbCBzZXR1cC4uLlxuICBpZiAob3B0KSB0aGlzLnVwZGF0ZShvcHQpXG59XG5cbmluaGVyaXRzKFRleHRHZW9tZXRyeSwgQmFzZSlcblxuVGV4dEdlb21ldHJ5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAob3B0KSB7XG4gIGlmICh0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJykge1xuICAgIG9wdCA9IHsgdGV4dDogb3B0IH1cbiAgfVxuXG4gIC8vIHVzZSBjb25zdHJ1Y3RvciBkZWZhdWx0c1xuICBvcHQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9vcHQsIG9wdClcblxuICBpZiAoIW9wdC5mb250KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBzcGVjaWZ5IGEgeyBmb250IH0gaW4gb3B0aW9ucycpXG4gIH1cblxuICB0aGlzLmxheW91dCA9IGNyZWF0ZUxheW91dChvcHQpXG5cbiAgLy8gZ2V0IHZlYzIgdGV4Y29vcmRzXG4gIHZhciBmbGlwWSA9IG9wdC5mbGlwWSAhPT0gZmFsc2VcblxuICAvLyB0aGUgZGVzaXJlZCBCTUZvbnQgZGF0YVxuICB2YXIgZm9udCA9IG9wdC5mb250XG5cbiAgLy8gZGV0ZXJtaW5lIHRleHR1cmUgc2l6ZSBmcm9tIGZvbnQgZmlsZVxuICB2YXIgdGV4V2lkdGggPSBmb250LmNvbW1vbi5zY2FsZVdcbiAgdmFyIHRleEhlaWdodCA9IGZvbnQuY29tbW9uLnNjYWxlSFxuXG4gIC8vIGdldCB2aXNpYmxlIGdseXBoc1xuICB2YXIgZ2x5cGhzID0gdGhpcy5sYXlvdXQuZ2x5cGhzLmZpbHRlcihmdW5jdGlvbiAoZ2x5cGgpIHtcbiAgICB2YXIgYml0bWFwID0gZ2x5cGguZGF0YVxuICAgIHJldHVybiBiaXRtYXAud2lkdGggKiBiaXRtYXAuaGVpZ2h0ID4gMFxuICB9KVxuXG4gIC8vIHByb3ZpZGUgdmlzaWJsZSBnbHlwaHMgZm9yIGNvbnZlbmllbmNlXG4gIHRoaXMudmlzaWJsZUdseXBocyA9IGdseXBoc1xuXG4gIC8vIGdldCBjb21tb24gdmVydGV4IGRhdGFcbiAgdmFyIHBvc2l0aW9ucyA9IHZlcnRpY2VzLnBvc2l0aW9ucyhnbHlwaHMpXG4gIHZhciB1dnMgPSB2ZXJ0aWNlcy51dnMoZ2x5cGhzLCB0ZXhXaWR0aCwgdGV4SGVpZ2h0LCBmbGlwWSlcbiAgdmFyIGluZGljZXMgPSBjcmVhdGVJbmRpY2VzKFtdLCB7XG4gICAgY2xvY2t3aXNlOiB0cnVlLFxuICAgIHR5cGU6ICd1aW50MTYnLFxuICAgIGNvdW50OiBnbHlwaHMubGVuZ3RoXG4gIH0pXG5cbiAgLy8gdXBkYXRlIHZlcnRleCBkYXRhXG4gIHRoaXMuc2V0SW5kZXgoaW5kaWNlcylcbiAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbnMsIDIpKVxuICB0aGlzLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHV2cywgMikpXG5cbiAgLy8gdXBkYXRlIG11bHRpcGFnZSBkYXRhXG4gIGlmICghb3B0Lm11bHRpcGFnZSAmJiAncGFnZScgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgLy8gZGlzYWJsZSBtdWx0aXBhZ2UgcmVuZGVyaW5nXG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ3BhZ2UnKVxuICB9IGVsc2UgaWYgKG9wdC5tdWx0aXBhZ2UpIHtcbiAgICAvLyBlbmFibGUgbXVsdGlwYWdlIHJlbmRlcmluZ1xuICAgIHZhciBwYWdlcyA9IHZlcnRpY2VzLnBhZ2VzKGdseXBocylcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGFnZScsIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUocGFnZXMsIDEpKVxuICB9XG59XG5cblRleHRHZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCkge1xuICAgIHRoaXMuYm91bmRpbmdTcGhlcmUgPSBuZXcgVEhSRUUuU3BoZXJlKClcbiAgfVxuXG4gIHZhciBwb3NpdGlvbnMgPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXlcbiAgdmFyIGl0ZW1TaXplID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLml0ZW1TaXplXG4gIGlmICghcG9zaXRpb25zIHx8ICFpdGVtU2l6ZSB8fCBwb3NpdGlvbnMubGVuZ3RoIDwgMikge1xuICAgIHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzID0gMFxuICAgIHRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyLnNldCgwLCAwLCAwKVxuICAgIHJldHVyblxuICB9XG4gIHV0aWxzLmNvbXB1dGVTcGhlcmUocG9zaXRpb25zLCB0aGlzLmJvdW5kaW5nU3BoZXJlKVxuICBpZiAoaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpKSB7XG4gICAgY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6ICcgK1xuICAgICAgJ0NvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAnICtcbiAgICAgICdcInBvc2l0aW9uXCIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJylcbiAgfVxufVxuXG5UZXh0R2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVCb3VuZGluZ0JveCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYm91bmRpbmdCb3ggPT09IG51bGwpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IFRIUkVFLkJveDMoKVxuICB9XG5cbiAgdmFyIGJib3ggPSB0aGlzLmJvdW5kaW5nQm94XG4gIHZhciBwb3NpdGlvbnMgPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXlcbiAgdmFyIGl0ZW1TaXplID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLml0ZW1TaXplXG4gIGlmICghcG9zaXRpb25zIHx8ICFpdGVtU2l6ZSB8fCBwb3NpdGlvbnMubGVuZ3RoIDwgMikge1xuICAgIGJib3gubWFrZUVtcHR5KClcbiAgICByZXR1cm5cbiAgfVxuICB1dGlscy5jb21wdXRlQm94KHBvc2l0aW9ucywgYmJveClcbn1cbiIsInZhciBpdGVtU2l6ZSA9IDJcbnZhciBib3ggPSB7IG1pbjogWzAsIDBdLCBtYXg6IFswLCAwXSB9XG5cbmZ1bmN0aW9uIGJvdW5kcyAocG9zaXRpb25zKSB7XG4gIHZhciBjb3VudCA9IHBvc2l0aW9ucy5sZW5ndGggLyBpdGVtU2l6ZVxuICBib3gubWluWzBdID0gcG9zaXRpb25zWzBdXG4gIGJveC5taW5bMV0gPSBwb3NpdGlvbnNbMV1cbiAgYm94Lm1heFswXSA9IHBvc2l0aW9uc1swXVxuICBib3gubWF4WzFdID0gcG9zaXRpb25zWzFdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgdmFyIHggPSBwb3NpdGlvbnNbaSAqIGl0ZW1TaXplICsgMF1cbiAgICB2YXIgeSA9IHBvc2l0aW9uc1tpICogaXRlbVNpemUgKyAxXVxuICAgIGJveC5taW5bMF0gPSBNYXRoLm1pbih4LCBib3gubWluWzBdKVxuICAgIGJveC5taW5bMV0gPSBNYXRoLm1pbih5LCBib3gubWluWzFdKVxuICAgIGJveC5tYXhbMF0gPSBNYXRoLm1heCh4LCBib3gubWF4WzBdKVxuICAgIGJveC5tYXhbMV0gPSBNYXRoLm1heCh5LCBib3gubWF4WzFdKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbXB1dGVCb3ggPSBmdW5jdGlvbiAocG9zaXRpb25zLCBvdXRwdXQpIHtcbiAgYm91bmRzKHBvc2l0aW9ucylcbiAgb3V0cHV0Lm1pbi5zZXQoYm94Lm1pblswXSwgYm94Lm1pblsxXSwgMClcbiAgb3V0cHV0Lm1heC5zZXQoYm94Lm1heFswXSwgYm94Lm1heFsxXSwgMClcbn1cblxubW9kdWxlLmV4cG9ydHMuY29tcHV0ZVNwaGVyZSA9IGZ1bmN0aW9uIChwb3NpdGlvbnMsIG91dHB1dCkge1xuICBib3VuZHMocG9zaXRpb25zKVxuICB2YXIgbWluWCA9IGJveC5taW5bMF1cbiAgdmFyIG1pblkgPSBib3gubWluWzFdXG4gIHZhciBtYXhYID0gYm94Lm1heFswXVxuICB2YXIgbWF4WSA9IGJveC5tYXhbMV1cbiAgdmFyIHdpZHRoID0gbWF4WCAtIG1pblhcbiAgdmFyIGhlaWdodCA9IG1heFkgLSBtaW5ZXG4gIHZhciBsZW5ndGggPSBNYXRoLnNxcnQod2lkdGggKiB3aWR0aCArIGhlaWdodCAqIGhlaWdodClcbiAgb3V0cHV0LmNlbnRlci5zZXQobWluWCArIHdpZHRoIC8gMiwgbWluWSArIGhlaWdodCAvIDIsIDApXG4gIG91dHB1dC5yYWRpdXMgPSBsZW5ndGggLyAyXG59XG4iLCJtb2R1bGUuZXhwb3J0cy5wYWdlcyA9IGZ1bmN0aW9uIHBhZ2VzIChnbHlwaHMpIHtcbiAgdmFyIHBhZ2VzID0gbmV3IEZsb2F0MzJBcnJheShnbHlwaHMubGVuZ3RoICogNCAqIDEpXG4gIHZhciBpID0gMFxuICBnbHlwaHMuZm9yRWFjaChmdW5jdGlvbiAoZ2x5cGgpIHtcbiAgICB2YXIgaWQgPSBnbHlwaC5kYXRhLnBhZ2UgfHwgMFxuICAgIHBhZ2VzW2krK10gPSBpZFxuICAgIHBhZ2VzW2krK10gPSBpZFxuICAgIHBhZ2VzW2krK10gPSBpZFxuICAgIHBhZ2VzW2krK10gPSBpZFxuICB9KVxuICByZXR1cm4gcGFnZXNcbn1cblxubW9kdWxlLmV4cG9ydHMudXZzID0gZnVuY3Rpb24gdXZzIChnbHlwaHMsIHRleFdpZHRoLCB0ZXhIZWlnaHQsIGZsaXBZKSB7XG4gIHZhciB1dnMgPSBuZXcgRmxvYXQzMkFycmF5KGdseXBocy5sZW5ndGggKiA0ICogMilcbiAgdmFyIGkgPSAwXG4gIGdseXBocy5mb3JFYWNoKGZ1bmN0aW9uIChnbHlwaCkge1xuICAgIHZhciBiaXRtYXAgPSBnbHlwaC5kYXRhXG4gICAgdmFyIGJ3ID0gKGJpdG1hcC54ICsgYml0bWFwLndpZHRoKVxuICAgIHZhciBiaCA9IChiaXRtYXAueSArIGJpdG1hcC5oZWlnaHQpXG5cbiAgICAvLyB0b3AgbGVmdCBwb3NpdGlvblxuICAgIHZhciB1MCA9IGJpdG1hcC54IC8gdGV4V2lkdGhcbiAgICB2YXIgdjEgPSBiaXRtYXAueSAvIHRleEhlaWdodFxuICAgIHZhciB1MSA9IGJ3IC8gdGV4V2lkdGhcbiAgICB2YXIgdjAgPSBiaCAvIHRleEhlaWdodFxuXG4gICAgaWYgKGZsaXBZKSB7XG4gICAgICB2MSA9ICh0ZXhIZWlnaHQgLSBiaXRtYXAueSkgLyB0ZXhIZWlnaHRcbiAgICAgIHYwID0gKHRleEhlaWdodCAtIGJoKSAvIHRleEhlaWdodFxuICAgIH1cblxuICAgIC8vIEJMXG4gICAgdXZzW2krK10gPSB1MFxuICAgIHV2c1tpKytdID0gdjFcbiAgICAvLyBUTFxuICAgIHV2c1tpKytdID0gdTBcbiAgICB1dnNbaSsrXSA9IHYwXG4gICAgLy8gVFJcbiAgICB1dnNbaSsrXSA9IHUxXG4gICAgdXZzW2krK10gPSB2MFxuICAgIC8vIEJSXG4gICAgdXZzW2krK10gPSB1MVxuICAgIHV2c1tpKytdID0gdjFcbiAgfSlcbiAgcmV0dXJuIHV2c1xufVxuXG5tb2R1bGUuZXhwb3J0cy5wb3NpdGlvbnMgPSBmdW5jdGlvbiBwb3NpdGlvbnMgKGdseXBocykge1xuICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShnbHlwaHMubGVuZ3RoICogNCAqIDIpXG4gIHZhciBpID0gMFxuICBnbHlwaHMuZm9yRWFjaChmdW5jdGlvbiAoZ2x5cGgpIHtcbiAgICB2YXIgYml0bWFwID0gZ2x5cGguZGF0YVxuXG4gICAgLy8gYm90dG9tIGxlZnQgcG9zaXRpb25cbiAgICB2YXIgeCA9IGdseXBoLnBvc2l0aW9uWzBdICsgYml0bWFwLnhvZmZzZXRcbiAgICB2YXIgeSA9IGdseXBoLnBvc2l0aW9uWzFdICsgYml0bWFwLnlvZmZzZXRcblxuICAgIC8vIHF1YWQgc2l6ZVxuICAgIHZhciB3ID0gYml0bWFwLndpZHRoXG4gICAgdmFyIGggPSBiaXRtYXAuaGVpZ2h0XG5cbiAgICAvLyBCTFxuICAgIHBvc2l0aW9uc1tpKytdID0geFxuICAgIHBvc2l0aW9uc1tpKytdID0geVxuICAgIC8vIFRMXG4gICAgcG9zaXRpb25zW2krK10gPSB4XG4gICAgcG9zaXRpb25zW2krK10gPSB5ICsgaFxuICAgIC8vIFRSXG4gICAgcG9zaXRpb25zW2krK10gPSB4ICsgd1xuICAgIHBvc2l0aW9uc1tpKytdID0geSArIGhcbiAgICAvLyBCUlxuICAgIHBvc2l0aW9uc1tpKytdID0geCArIHdcbiAgICBwb3NpdGlvbnNbaSsrXSA9IHlcbiAgfSlcbiAgcmV0dXJuIHBvc2l0aW9uc1xufVxuIiwidmFyIG5ld2xpbmUgPSAvXFxuL1xudmFyIG5ld2xpbmVDaGFyID0gJ1xcbidcbnZhciB3aGl0ZXNwYWNlID0gL1xccy9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0ZXh0LCBvcHQpIHtcbiAgICB2YXIgbGluZXMgPSBtb2R1bGUuZXhwb3J0cy5saW5lcyh0ZXh0LCBvcHQpXG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhsaW5lLnN0YXJ0LCBsaW5lLmVuZClcbiAgICB9KS5qb2luKCdcXG4nKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5saW5lcyA9IGZ1bmN0aW9uIHdvcmR3cmFwKHRleHQsIG9wdCkge1xuICAgIG9wdCA9IG9wdHx8e31cblxuICAgIC8vemVybyB3aWR0aCByZXN1bHRzIGluIG5vdGhpbmcgdmlzaWJsZVxuICAgIGlmIChvcHQud2lkdGggPT09IDAgJiYgb3B0Lm1vZGUgIT09ICdub3dyYXAnKSBcbiAgICAgICAgcmV0dXJuIFtdXG5cbiAgICB0ZXh0ID0gdGV4dHx8JydcbiAgICB2YXIgd2lkdGggPSB0eXBlb2Ygb3B0LndpZHRoID09PSAnbnVtYmVyJyA/IG9wdC53aWR0aCA6IE51bWJlci5NQVhfVkFMVUVcbiAgICB2YXIgc3RhcnQgPSBNYXRoLm1heCgwLCBvcHQuc3RhcnR8fDApXG4gICAgdmFyIGVuZCA9IHR5cGVvZiBvcHQuZW5kID09PSAnbnVtYmVyJyA/IG9wdC5lbmQgOiB0ZXh0Lmxlbmd0aFxuICAgIHZhciBtb2RlID0gb3B0Lm1vZGVcblxuICAgIHZhciBtZWFzdXJlID0gb3B0Lm1lYXN1cmUgfHwgbW9ub3NwYWNlXG4gICAgaWYgKG1vZGUgPT09ICdwcmUnKVxuICAgICAgICByZXR1cm4gcHJlKG1lYXN1cmUsIHRleHQsIHN0YXJ0LCBlbmQsIHdpZHRoKVxuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGdyZWVkeShtZWFzdXJlLCB0ZXh0LCBzdGFydCwgZW5kLCB3aWR0aCwgbW9kZSlcbn1cblxuZnVuY3Rpb24gaWR4T2YodGV4dCwgY2hyLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihjaHIsIHN0YXJ0KVxuICAgIGlmIChpZHggPT09IC0xIHx8IGlkeCA+IGVuZClcbiAgICAgICAgcmV0dXJuIGVuZFxuICAgIHJldHVybiBpZHhcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNocikge1xuICAgIHJldHVybiB3aGl0ZXNwYWNlLnRlc3QoY2hyKVxufVxuXG5mdW5jdGlvbiBwcmUobWVhc3VyZSwgdGV4dCwgc3RhcnQsIGVuZCwgd2lkdGgpIHtcbiAgICB2YXIgbGluZXMgPSBbXVxuICAgIHZhciBsaW5lU3RhcnQgPSBzdGFydFxuICAgIGZvciAodmFyIGk9c3RhcnQ7IGk8ZW5kICYmIGk8dGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hyID0gdGV4dC5jaGFyQXQoaSlcbiAgICAgICAgdmFyIGlzTmV3bGluZSA9IG5ld2xpbmUudGVzdChjaHIpXG5cbiAgICAgICAgLy9JZiB3ZSd2ZSByZWFjaGVkIGEgbmV3bGluZSwgdGhlbiBzdGVwIGRvd24gYSBsaW5lXG4gICAgICAgIC8vT3IgaWYgd2UndmUgcmVhY2hlZCB0aGUgRU9GXG4gICAgICAgIGlmIChpc05ld2xpbmUgfHwgaT09PWVuZC0xKSB7XG4gICAgICAgICAgICB2YXIgbGluZUVuZCA9IGlzTmV3bGluZSA/IGkgOiBpKzFcbiAgICAgICAgICAgIHZhciBtZWFzdXJlZCA9IG1lYXN1cmUodGV4dCwgbGluZVN0YXJ0LCBsaW5lRW5kLCB3aWR0aClcbiAgICAgICAgICAgIGxpbmVzLnB1c2gobWVhc3VyZWQpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGkrMVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBncmVlZHkobWVhc3VyZSwgdGV4dCwgc3RhcnQsIGVuZCwgd2lkdGgsIG1vZGUpIHtcbiAgICAvL0EgZ3JlZWR5IHdvcmQgd3JhcHBlciBiYXNlZCBvbiBMaWJHRFggYWxnb3JpdGhtXG4gICAgLy9odHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL0JpdG1hcEZvbnRDYWNoZS5qYXZhXG4gICAgdmFyIGxpbmVzID0gW11cblxuICAgIHZhciB0ZXN0V2lkdGggPSB3aWR0aFxuICAgIC8vaWYgJ25vd3JhcCcgaXMgc3BlY2lmaWVkLCB3ZSBvbmx5IHdyYXAgb24gbmV3bGluZSBjaGFyc1xuICAgIGlmIChtb2RlID09PSAnbm93cmFwJylcbiAgICAgICAgdGVzdFdpZHRoID0gTnVtYmVyLk1BWF9WQUxVRVxuXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmIHN0YXJ0IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgLy9nZXQgbmV4dCBuZXdsaW5lIHBvc2l0aW9uXG4gICAgICAgIHZhciBuZXdMaW5lID0gaWR4T2YodGV4dCwgbmV3bGluZUNoYXIsIHN0YXJ0LCBlbmQpXG5cbiAgICAgICAgLy9lYXQgd2hpdGVzcGFjZSBhdCBzdGFydCBvZiBsaW5lXG4gICAgICAgIHdoaWxlIChzdGFydCA8IG5ld0xpbmUpIHtcbiAgICAgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKCB0ZXh0LmNoYXJBdChzdGFydCkgKSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgc3RhcnQrK1xuICAgICAgICB9XG5cbiAgICAgICAgLy9kZXRlcm1pbmUgdmlzaWJsZSAjIG9mIGdseXBocyBmb3IgdGhlIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICB2YXIgbWVhc3VyZWQgPSBtZWFzdXJlKHRleHQsIHN0YXJ0LCBuZXdMaW5lLCB0ZXN0V2lkdGgpXG5cbiAgICAgICAgdmFyIGxpbmVFbmQgPSBzdGFydCArIChtZWFzdXJlZC5lbmQtbWVhc3VyZWQuc3RhcnQpXG4gICAgICAgIHZhciBuZXh0U3RhcnQgPSBsaW5lRW5kICsgbmV3bGluZUNoYXIubGVuZ3RoXG5cbiAgICAgICAgLy9pZiB3ZSBoYWQgdG8gY3V0IHRoZSBsaW5lIGJlZm9yZSB0aGUgbmV4dCBuZXdsaW5lLi4uXG4gICAgICAgIGlmIChsaW5lRW5kIDwgbmV3TGluZSkge1xuICAgICAgICAgICAgLy9maW5kIGNoYXIgdG8gYnJlYWsgb25cbiAgICAgICAgICAgIHdoaWxlIChsaW5lRW5kID4gc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKHRleHQuY2hhckF0KGxpbmVFbmQpKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICBsaW5lRW5kLS1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW5lRW5kID09PSBzdGFydCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0U3RhcnQgPiBzdGFydCArIG5ld2xpbmVDaGFyLmxlbmd0aCkgbmV4dFN0YXJ0LS1cbiAgICAgICAgICAgICAgICBsaW5lRW5kID0gbmV4dFN0YXJ0IC8vIElmIG5vIGNoYXJhY3RlcnMgdG8gYnJlYWssIHNob3cgYWxsLlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0U3RhcnQgPSBsaW5lRW5kXG4gICAgICAgICAgICAgICAgLy9lYXQgd2hpdGVzcGFjZSBhdCBlbmQgb2YgbGluZVxuICAgICAgICAgICAgICAgIHdoaWxlIChsaW5lRW5kID4gc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlc3BhY2UodGV4dC5jaGFyQXQobGluZUVuZCAtIG5ld2xpbmVDaGFyLmxlbmd0aCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgbGluZUVuZC0tXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lRW5kID49IHN0YXJ0KSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbWVhc3VyZSh0ZXh0LCBzdGFydCwgbGluZUVuZCwgdGVzdFdpZHRoKVxuICAgICAgICAgICAgbGluZXMucHVzaChyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBuZXh0U3RhcnRcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzXG59XG5cbi8vZGV0ZXJtaW5lcyB0aGUgdmlzaWJsZSBudW1iZXIgb2YgZ2x5cGhzIHdpdGhpbiBhIGdpdmVuIHdpZHRoXG5mdW5jdGlvbiBtb25vc3BhY2UodGV4dCwgc3RhcnQsIGVuZCwgd2lkdGgpIHtcbiAgICB2YXIgZ2x5cGhzID0gTWF0aC5taW4od2lkdGgsIGVuZC1zdGFydClcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogc3RhcnQrZ2x5cGhzXG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kXG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICB2YXIgdGFyZ2V0ID0ge31cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV1cblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0XG59XG4iXX0= diff --git a/build/datguivr.map b/build/datguivr.map new file mode 100644 index 0000000..c615e78 --- /dev/null +++ b/build/datguivr.map @@ -0,0 +1 @@ +{"version":3,"sources":["datguivr.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","_interopRequireWildcard","obj","__esModule","newObj","key","Object","prototype","hasOwnProperty","default","createButton","handleOnPress","group","visible","object","propertyName","hitscanVolume","position","z","BUTTON_DEPTH","locked","handleOnRelease","updateView","interaction","hovering","material","color","setHex","Colors","BUTTON_HIGHLIGHT_COLOR","BUTTON_COLOR","_ref","arguments","undefined","textCreator","_ref$propertyName","_ref$width","width","Layout","PANEL_WIDTH","_ref$height","height","PANEL_HEIGHT","_ref$depth","depth","PANEL_DEPTH","BUTTON_WIDTH","PANEL_MARGIN","BUTTON_HEIGHT","THREE","Group","guiType","toString","panel","createPanel","add","aspectRatio","rect","BoxGeometry","Math","floor","translate","hitscanMaterial","MeshBasicMaterial","Mesh","clone","x","filledVolume","buttonLabel","create","scale","layout","y","descriptorLabel","PANEL_LABEL_TEXT_MARGIN","controllerID","createControllerIDBox","CONTROLLER_ID_BUTTON","_interaction2","events","on","hitscan","grabInteraction","Grab","updateControl","inputObjects","update","name","str","updateLabel","defineProperty","value","_interaction","_colors","_layout","_grab","./colors","./grab","./interaction","./layout","2","_interopRequireDefault","createCheckbox","state","onChangedCB","checkmark","borderBox","_header","getFolderHeaderObject","size","BORDER_THICKNESS","Graphic","CHECKBOX_SIZE","handleHeaderPress","listen","folder","_ref$initialValue","initialValue","CHECKBOX_PAD","onChange","callback","isShownInFolderHeader","showInFolderHeader","addHeaderItem","get","set","setHeight","newHeight","remove","spacing","CHECKBOX_WIDTH","CHECKBOX_HEIGHT","CHECKBOX_DEPTH","CHECKMARK_SIZE","CHECKBOX_BG_COLOR","CONTROLLER_ID_CHECKBOX","requestLayout","_textlabel","_graphic","_sharedmaterials","./graphic","./sharedmaterials","./textlabel","3","HSVtoRGB","h","s","v","g","b","q","RGBtoHSV","max","min","d","createColorPicker","colpow","pow","changeFn","image","emit","setPanelPosition","toggleDetailPanel","setModalEditor","dat","GUIVR","hideHeader","fancyPanel","setH","uniforms","selectedHSV","localPoint","setRGB","HMaterial","needsUpdate","SVMaterial","ShaderMaterial","vertexShader","VertShader","fragmentShader","SVFragShader","setSV","buttonDepth","addXYController","HSliderFragShader","listenUpdate","copy","func","Vector3","_events2","_imagebutton2","changeColorOnHover","originalUpdateControl","_events","_imagebutton","hsv2rgb","./imagebutton","4","colorizeGeometry","geometry","col","Color","getAttribute","array","Float32Array","fill","setAttribute","BufferAttribute","DEFAULT_COLOR","HIGHLIGHT_COLOR","INTERACTION_COLOR","EMISSIVE_COLOR","HIGHLIGHT_EMISSIVE_COLOR","OUTLINE_COLOR","DEFAULT_BACK","DEFAULT_FOLDER_BACK","HIGHLIGHT_BACK","INACTIVE_COLOR","CONTROLLER_ID_SLIDER","CONTROLLER_ID_TEXT","CONTROLLER_ID_DROPDOWN","DROPDOWN_BG_COLOR","DROPDOWN_FG_COLOR","SLIDER_BG","TEXTBOX_BG","TEXTBOX_HIGHLIGHT_BG","5","_toConsumableArray","arr","Array","isArray","arr2","from","createDropdown","findLabelFromProp","options","find","optionName","keys","createOption","labelText","isOption","label","_textlabel2","DROPDOWN_WIDTH","back","modalDropdown","push","labelInteraction","labelInteractions","optionLabels","open","selectedLabel","setString","propertyChanged","collapseOptions","onChooseCB","openOptions","clearModalEditor","forEach","configureLabelPosition","index","DROPDOWN_MARGIN","MAX_DROPDOWN_LABELS_IN_COLUMN","DROPDOWN_OPTION_HEIGHT","optionToLabel","optionLabel","userData","tipObj","_utils","setVisibility","_ref$options","DROPDOWN_HEIGHT","DROPDOWN_DEPTH","sourceObject","sourcePropertyName","setValue","indexOf","console","warn","join","initialLabel","downArrow","apply","map","onChoose","setToolTip","tip","createToolTip","FOLDER_WIDTH","getToolTip","./utils","6","orthographicFolderLayout","cam","topFolderStack","isOrthographic","tfs","filter","near","far","updateMatrix","fixFolderPosition","log","camBoxSetup","isOrthographicCamera","l","left","right","top","bottom","scratchCamBox","createFolder","addImpl","addOriginal","removeImpl","removeOriginal","sceneDetach","child","parent","scene","updateMatrixWorld","applyMatrix4","matrixWorld","sceneAttach","Matrix4","getInverse","sceneShift","oldParent","newParent","node","performLayout","performHeaderLayout","topFolder","getTopLevelFolder","modalEditor","layoutInProgress","columnHeight","columnIndex","columnYOff","includes","splice","spacingPerController","PANEL_SPACING","emptyFolderSpace","FOLDER_HEIGHT","totalSpacing","collapseGroup","children","collapsed","lastGuiIndex","guiIndex","sort","rotation","PI","lastHeight","isFolder","offset","MAX_FOLDER_ITEMS_IN_COLUMN","panelWidth","SUBFOLDER_WIDTH","resizePanel","layoutPending","dx","headerItems","grabber","detachButtonInteraction","detachButtonMaterial","guiAdd","guiRemove","addControllerFuncs","globalControllers","previousParent","isAccordion","newValue","guiChildren","close","folderName","straightRotation","Quaternion","thresh","this","setRotationFromQuaternion","box","setBoxFromObject","scratchFolderBox","boxW","camBox","intersection","intersect","intersectionSize","getSize","scratchSize","screenW","screenH","isCollapsed","concat","hasChild","_len","args","_key","createDownArrow","FOLDER_GRAB_HEIGHT","grabBar","hideGrabber","showGrabber","showHeader","isHeaderObject","transparent","detachButtonRect","dockTexture","dock","undockTexture","undock","detachButton","detachedParent","reattach","detach","isDetachable","newController","addController","decorateChildren","partOfModal","modalWasSetInCurrentFrame","_len2","_key2","assert","_setDetachedFrom","detachChild","par","m","matrix","setPosition","beingMoved","detachFromParent","addFolder","semis","semiDetached","_len3","_key3","error","_len4","_key4","identity","promoteZOrder","accordion","paletteInteraction","Palette","_beingMoved","defineProperties","_hits","hits","k","controller","_palette","Box3","./palette","7","Image","src","fnt","8","handleTick","_ref2","input","grabDisabled","mouse","pressed","selected","raycast","ray","intersectPlane","mousePlane","mouseIntersection","press","sub","mouseOffset","worldToLocal","intersections","hitObject","tPosition","setFromMatrixPosition","setFromNormalAndCoplanarPoint","mouseCamera","getWorldDirection","normal","inputObject","tempMatrix","premultiply","decompose","quaternion","9","texture","Texture","side","DoubleSide","alphaTest","PlaneGeometry","minFilter","LinearMipMapLinearFilter","magFilter","LinearFilter","geo","10","createImageButton","handleHover","isControllerVisible","getNormalisedLocalCoordinates","point","hoverFunc","handlePressing","pressing","_ref$func","_ref$pressing","_ref$image","_ref$wide","wide","_ref$changeColorOnHov","_ref$buttonDepth","isMaterial","targetMaterial","TextureLoader","load","wrapS","wrapT","ClampToEdgeWrapping","isTexture","isWebGLRenderTarget","onHover","onPressing","11","createImageButtonGrid","applyImageToMaterial","initPanel","buttons","layoutButtons","buttonWPadded","buttonHPadded","objects","subgroup","lastPressed","release","text","columns","row","_margin","GRID_BUTTON_MARGIN","TEXT_SCALE","w","computeWidth","constrainBounds","textX","textY","tipText","hoverCol","noHoverCol","highlightLastPressed","lastPressedCol","rowHeight","_ref$columns","margin","rows","ceil","setRowHeight","12","isNumber","isNaN","parseFloat","isFinite","isBoolean","isFunction","functionToCheck","getType","isObject","item","_typeof","isString","isColor","bindViveController","gripped","vibrate","gamepad","hapticActuators","pulse","hapticsTap","setIntervalTimes","hapticsEcho","addEventListener","getGamepad","cb","delay","times","id","setInterval","clearInterval","Symbol","iterator","constructor","_slider","_slider2","_checkbox","_checkbox2","_button","_button2","_folder","_folder2","_dropdown","_dropdown2","_imagebuttongrid","_imagebuttongrid2","_keyboard","_keyboard2","_textbox","_textbox2","_colorpicker","_colorpicker2","_sdftext","SDFText","getVisibleControllers","controllers","getVisibleHitscanObjects","reduce","enableMouse","camera","renderer","mouseEnabled","mouseRenderer","mouseInput","onOrthoMouseRelease","removeListener","laser","disableMouse","createLaser","BufferGeometry","Line","laserMaterial","createCursor","SphereGeometry","cursorMaterial","createInput","Raycaster","cursor","grip","hover","addInputObject","flag","clicked","ViveController","addSlider","slider","addCheckbox","checkbox","addButton","button","addImageButton","addImageButtonPanel","cols","Number","isInteger","unshift","grid","addKeyboard","keyListener","kb","addTextbox","addColorPicker","addDropdown","dropdown","arg3","arg4","addSimpleSlider","number","addSimpleDropdown","proxy","option","addSimpleCheckbox","checked","addSimpleButton","fn","argSet","Set","removeTest","clearAll","addHeaderFuncs","autoUpdate","requestAnimationFrame","hitscanObjects","folders","performMouseInput","checkCancelledInteractions","tMatrix","extractRotation","tDirection","laserRotateModifier","applyQuaternion","normalize","intersectObjects","parseIntersections","guiIntersections","inputs","slice","hitNonModals","hitNonModal","interactions","interactionName","hitVolume","updateLaser","pp","computeBoundingSphere","computeBoundingBox","firstHit","performMouseIntersection","setFromCamera","creator","LineBasicMaterial","blending","AdditiveBlending","Vector2","Plane","window","event","clientRect","domElement","getBoundingClientRect","clientX","clientY","innerWidth","innerHeight","publicInterface","globalEvents","define","amd","./button","./checkbox","./colorpicker","./dropdown","./folder","./imagebuttongrid","./keyboard","./sdftext","./slider","./textbox","13","createInteraction","anyHover","anyPressing","anyActive","availableInputs","_extractHit","extractHit","hitPoint","performStateEvents","buttonName","buttonClickName","downName","holdName","upName","hoverName","tVector","payload","_payload","_payload2","isMainHover","noMainHover","14","createKeyboard","shiftToggle","shift","lowerKeys","upperKeys","offsetTransform","lowerChars","split","spaceBar","specialKeys","15","alignLeft","boundingBox","_width","uniqueMaterial","SharedMaterials","PANEL","currentWidth","currentHeight","currentDepth","CONTROLLER_ID_WIDTH","CONTROLLER_ID_DEPTH","sh","Shape","moveTo","lineTo","ShapeGeometry","PANEL_VALUE_TEXT_MARGIN","16","handleOnGrip","oldPosition","oldRotation","rotationGroup","handleOnGripRelease","Euler","17","assign","meshbasic_frag","REVISION","opt","opacity","extensions","derivatives","precision","type","object-assign","18","createMaterial","Font","generateMipmaps","_sdfshader_logdepth2","createText","font","_threeBmfontText2","align","flipY","colorMaterials","mesh","multiply","finalScale","textScale","multiplyScalar","_ref$color","_ref$scale","computeHeight","hFactor","substring","labelString","_parseBmfontAscii2","getMaterial","_sdfshader_logdepth","_threeBmfontText","_parseBmfontAscii","_font","./font","./sdfshader_logdepth","parse-bmfont-ascii","three-bmfont-text","19","TOOLTIP","FOLDER","LOCATOR","vertexColors","20","createSlider","_ref$min","_ref$max","_ref$step","step","_ref$initialHeight","initialHeight","alpha","useStep","onFinishedChange","getImpliedStep","numDecimals","getAlphaFromValue","updateValueLabel","valueLabel","roundToDecimal","updateSlider","updateObject","updateStateFromAlpha","getClampedAlpha","getValueFromAlpha","getSteppedValue","getClampedValue","getValueFromObject","handlePress","handleHold","endLocator","previousValue","getPointAlpha","handleRelease","SLIDER_WIDTH","SLIDER_HEIGHT","SLIDER_DEPTH","sliderBG","segment","ta","tb","projected","projectOnVector","tToA","aToB","dot","distanceTo","map_range","low1","high1","low2","high2","round","decimals","abs","toExponential","tenTo","21","createTextBox","updateString","toggleKeyboard","keyboard","setTimeout","_index","./index","22","createTextLabel","fgColor","bgColor","internalPositioning","setNumber","toFixed","totalWidth","labelBackGeometry","makeTranslation","labelBackMesh","parentWidth","parentHeight","defaultParentHeight","parentDepth","tipGroup","paddedW","paddedH","tipRect","tipBackground","23","control","isChild","getFolder","wonkyGeom","traverse","isBufferGeometry","attributes","itemSize","setFromObject","24","anArray","BYTES_PER_ELEMENT","buffer","25","num","def","26","dtype","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Float64Array","Uint8ClampedArray","27","ProcessEmitWarning","warning","EventEmitter","init","checkListener","listener","TypeError","_getMaxListeners","that","_maxListeners","defaultMaxListeners","_addListener","target","prepend","existing","_eventsCount","newListener","warned","String","emitter","count","onceWrapper","fired","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","spliceOne","list","pop","ret","once","Promise","resolve","reject","errorListener","err","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","handler","flags","wrapListener","arg","removeEventListener","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","enumerable","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","message","context","len","listeners","addListener","prependListener","prependOnceListener","originalListener","off","removeAllListeners","rawListeners","eventNames","28","ctor","superCtor","super_","writable","configurable","TempCtor","29","isBuffer","isSlowBuffer","readFloatLE","_isBuffer","30","TextLayout","glyphs","_measure","computeMetrics","addGetter","wrapper","getGlyphById","chars","glyphIdx","findChar","getXHeight","X_HEIGHTS","charCodeAt","idx","getMGlyph","M_WIDTHS","getCapHeight","CAP_HEIGHTS","getKerning","kernings","table","kern","first","second","amount","getAlignType","ALIGN_CENTER","ALIGN_RIGHT","ALIGN_LEFT","start","wordWrap","xtend","TAB_ID","SPACE_ID","measure","_opt","tabSize","_setupSpaceGlyphs","lines","minWidth","maxLineWidth","prev","line","lineHeight","common","baseline","base","descender","letterSpacing","_height","_descender","_baseline","_xHeight","_capHeight","_lineHeight","_ascender","self","lineIndex","lastGlyph","end","lineWidth","glyph","getGlyph","tx","data","xadvance","_linesTotal","_fallbackSpaceGlyph","_fallbackTabGlyph","space","tabWidth","xoffset","yoffset","curPen","curWidth","nextPen","nextWidth","as-number","word-wrapper","31","toObject","val","propIsEnumerable","propertyIsEnumerable","test1","test2","fromCharCode","test3","letter","source","symbols","to","32","splitLine","replace","trim","match","dt","parseData","out","parseIntList","parseInt","output","pages","lineData","file","33","CW","CCW","dir","clockwise","numIndices","indices","j","an-array","is-buffer","34","TextGeometry","Base","zzz","createLayout","inherits","createIndices","vertices","utils","texWidth","scaleW","texHeight","scaleH","bitmap","visibleGlyphs","positions","uvs","setIndex","multipage","removeAttribute","boundingSphere","Sphere","radius","center","computeSphere","bbox","makeEmpty","computeBox","./lib/utils","./lib/vertices","layout-bmfont-text","quad-indices","35","bounds","minX","minY","maxX","maxY","sqrt","36","page","bw","bh","u0","v1","u1","v0","37","idxOf","chr","isWhitespace","whitespace","test","pre","lineStart","charAt","isNewline","newline","lineEnd","measured","greedy","mode","testWidth","MAX_VALUE","newLine","newlineChar","nextStart","result","monospace","38","extend"],"mappings":"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","file":"datguivr.min.js"} \ No newline at end of file diff --git a/build/datguivr.min.js b/build/datguivr.min.js new file mode 100644 index 0000000..c6e7e5f --- /dev/null +++ b/build/datguivr.min.js @@ -0,0 +1,10 @@ +!function(){function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0&&void 0!==arguments[0]?arguments[0]:{},e=d.textCreator,f=d.object,h=d.propertyName,j=void 0===h?"undefined":h,l=d.width,n=void 0===l?k.PANEL_WIDTH:l,o=d.height,p=void 0===o?k.PANEL_HEIGHT:o,q=d.depth,r=void 0===q?k.PANEL_DEPTH:q,s=.5*n-k.PANEL_MARGIN,t=p-k.PANEL_MARGIN,u=k.BUTTON_DEPTH,v=new THREE.Group;v.guiType="button",v.toString=function(){return"["+v.guiType+": "+j+"]"};var w=k.createPanel(n,p,r);v.add(w);var x=s/t,y=new THREE.BoxGeometry(s,t,u,Math.floor(4*x),4,4);y.translate(.5*s,0,0);var z=new THREE.MeshBasicMaterial;z.visible=!1;var A=new THREE.Mesh(y.clone(),z);A.position.z=.5*u,A.position.x=.5*n;var B=new THREE.MeshBasicMaterial({color:i.BUTTON_COLOR}),C=new THREE.Mesh(y.clone(),B);A.add(C);var D=e.create(j,{scale:.866});D.position.x=.5*s-11e-6*D.layout.width*.5,D.position.z=1.2*u,D.position.y=-.025,C.add(D);var E=e.create(j);E.position.x=k.PANEL_LABEL_TEXT_MARGIN,E.position.z=r,E.position.y=-.03;var F=k.createControllerIDBox(p,i.CONTROLLER_ID_BUTTON);F.position.z=r,w.add(E,A,F);var G=(0,g.default)(A);G.events.on("onPressed",a),G.events.on("onReleased",b),c(),v.interaction=G,v.hitscan=[A,w];var H=m.create({group:v,panel:w});return v.updateControl=function(a){G.update(a),H.update(a),c()},v.name=function(a){return E.updateLabel(a),v},v.buttonLabel=function(a){return D.updateLabel(a),v},v}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("./interaction"),g=function(a){return a&&a.__esModule?a:{default:a}}(f),h=a("./colors"),i=d(h),j=a("./layout"),k=d(j),l=a("./grab"),m=d(l)},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15}],2:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a){return a&&a.__esModule?a:{default:a}}function f(){function a(a){!1!==y.visible&&(w.value=!w.value,g[j]=w.value,A&&A(w.value),a.locked=!0)}function b(){B.visible=w.value,C.visible=D.hovering(),F&&(F.checkmark.visible=w.value,F.borderBox.visible=F.interaction.hovering())}function c(){if(F)return F;var a=.6*m.PANEL_HEIGHT,c=new THREE.BoxGeometry(a,a,v);c.translate(.5*a,0,0);var e=new THREE.MeshBasicMaterial;e.visible=!0;var f=new THREE.Mesh(c.clone(),e);F=f,f.position.z=v;var h=m.createPanel(a+m.BORDER_THICKNESS,a+m.BORDER_THICKNESS,v,!0);F.borderBox=h,h.material.color.setHex(2063079),h.position.x=.5*-m.BORDER_THICKNESS+.5*q,h.position.z=.5*v;var k=o.checkmark(.4*a/m.CHECKBOX_SIZE);F.checkmark=k,k.visible=w.value,k.position.z=.51*v,f.add(k);var l=(0,i.default)(f);return l.events.on("onPressed",d),F.interaction=l,F.updateControl=function(a){w.listen&&(w.value=g[j]),l.update(a),b()},F}function d(a){!1!==y.folder.visible&&!1!==F.visible&&(w.value=!w.value,g[j]=w.value,A&&A(w.value),a.locked=!0,F.checkmark.visible=w.value)}var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},f=e.textCreator,g=e.object,h=e.propertyName,j=void 0===h?"undefined":h,l=e.initialValue,n=void 0!==l&&l,p=e.width,q=void 0===p?m.PANEL_WIDTH:p,s=e.height,t=void 0===s?m.PANEL_HEIGHT:s,u=e.depth,v=void 0===u?m.PANEL_DEPTH:u,w={value:n,listen:!1},x=m.PANEL_HEIGHT-m.CHECKBOX_SIZE,y=new THREE.Group;y.guiType="checkbox",y.toString=function(){return"["+y.guiType+": "+j+"]"};var z=f.create(j);z.position.x=m.PANEL_LABEL_TEXT_MARGIN,z.position.z=v,z.position.y=-.03;var A=void 0;y.onChange=function(a){return A=a,y},y.listen=function(){return w.listen=!0,y},y.name=function(a){return z.updateLabel(a),y};var B=void 0,C=void 0,D=void 0,E=!1;y.showInFolderHeader=function(){var a=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return a!==E&&(E=a,F=c(),a?y.folder.addHeaderItem(F):F.visible=!1),y},Object.defineProperty(y,"isShownInFolderHeader",{get:function(){return E},set:y.showInFolderHeader});var F=void 0,G=void 0;return y.setHeight=function(c){G&&y.remove(G),y.spacing=c;var d=c-x,e=d,f=v,h=.4*d/m.CHECKBOX_SIZE;G=m.createPanel(q,c,v),y.add(G);var l=new THREE.BoxGeometry(d,e,f);l.translate(.5*d,0,0);var n=new THREE.MeshBasicMaterial;n.visible=!1;var p=new THREE.Mesh(l.clone(),n);p.position.z=v,p.position.x=.5*q;var s=new THREE.MeshBasicMaterial({color:k.CHECKBOX_BG_COLOR}),t=new THREE.Mesh(l.clone(),s);p.add(t);var u=m.createControllerIDBox(c,k.CONTROLLER_ID_CHECKBOX);u.position.z=v,C=m.createPanel(d+m.BORDER_THICKNESS,e+m.BORDER_THICKNESS,f,!0),C.material.color.setHex(2063079),C.position.x=.5*-m.BORDER_THICKNESS+.5*q,C.position.z=.5*v,B=o.checkmark(h),B.position.z=.51*v,p.add(B),G.add(z,p,u,C),D=(0,i.default)(p),D.events.on("onPressed",a),b(),y.interaction=D,y.hitscan=[p,G];var A=r.create({group:y,panel:G});return y.updateControl=function(a){w.listen&&(w.value=g[j]),D.update(a),A.update(a),b()},y.folder&&y.folder.requestLayout(),y},y.setHeight(t),y}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("./textlabel"),h=(e(g),a("./interaction")),i=e(h),j=a("./colors"),k=d(j),l=a("./layout"),m=d(l),n=a("./graphic"),o=d(n),p=a("./sharedmaterials"),q=(d(p),a("./grab")),r=d(q)},{"./colors":4,"./grab":8,"./graphic":9,"./interaction":13,"./layout":15,"./sharedmaterials":19,"./textlabel":22}],3:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a){return a&&a.__esModule?a:{default:a}}function f(a,b,c){var d,e,f,g,h,i,j,k;switch(1===arguments.length&&(void 0!==a.x?(b=a.y,c=a.z,a=a.x):(b=a.s,c=a.v,a=a.h)),g=Math.floor(6*a),h=6*a-g,i=c*(1-b),j=c*(1-h*b),k=c*(1-(1-h)*b),g%6){case 0:d=c,e=k,f=i;break;case 1:d=j,e=c,f=i;break;case 2:d=i,e=c,f=k;break;case 3:d=i,e=j,f=c;break;case 4:d=k,e=i,f=c;break;case 5:d=c,e=i,f=j}return{r:d,g:e,b:f}}function g(a,b,c){1===arguments.length&&(b=a.g,c=a.b,a=a.r);var d,e=Math.max(a,b,c),f=Math.min(a,b,c),g=e-f,h=0===e?0:g/e,i=e;switch(e){case f:d=0;break;case a:d=b-c+g*(b1&&void 0!==arguments[1]?arguments[1]:.4545;a.r=Math.pow(a.r,b),a.g=Math.pow(a.g,b),a.b=Math.pow(a.b,b)}function b(){B.color.set(y),a(B.color),C.emit("onChange",y)}function c(){F&&F.position.set(0,0,5*w)}function d(){if(F)return F.visible=!F.visible,F.visible&&E.folder.setModalEditor(F),void c();if(F=dat.GUIVR.create("Color Chooser"),F.hideHeader(),G){var a=function(a){A.selectedHSV.value.x=a.localPoint.x;var c=f(A.selectedHSV.value);y.setRGB(c.r,c.g,c.b),b(),h.needsUpdate=!0},d=new THREE.ShaderMaterial({uniforms:A,vertexShader:s,fragmentShader:t}),e=function(a){A.selectedHSV.value.y=a.localPoint.x,A.selectedHSV.value.z=a.localPoint.y;var c=f(A.selectedHSV.value);y.setRGB(c.r,c.g,c.b),b(),h.needsUpdate=!0},g=o.BUTTON_DEPTH/10;F.addXYController(e,d,!0,o.PANEL_WIDTH/2,w,g);var h=new THREE.ShaderMaterial({uniforms:A,vertexShader:s,fragmentShader:u});F.addXYController(a,h,!0,o.PANEL_HEIGHT,w,g)}else F.add(y,"r",0,1).onChange(b),F.add(y,"g",0,1).onChange(b),F.add(y,"b",0,1).onChange(b);E.add(F),E.folder.setModalEditor(F),c(),F.folder=E.folder}function e(){y=i[k],B.color.copy(y),a(B.color),A.selectedHSV.value.copy(g(y))}var h=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=h.object,k=h.propertyName,m=h.textCreator,n=h.width,p=void 0===n?o.PANEL_WIDTH:n,q=h.height,r=void 0===q?o.PANEL_HEIGHT:q,v=h.depth,w=void 0===v?o.PANEL_DEPTH/3:v,x=d,y=i[k],z=g(y),A={selectedHSV:{value:new THREE.Vector3(z.h,z.s,z.v)}},B=new THREE.MeshBasicMaterial({color:y}),C=new j.default,D={listen:!1},E=(0,l.default)({textCreator:m,func:x,image:B,propertyName:k,width:p,height:r,depth:w,changeColorOnHover:!1});E.guiType="ColorPicker";var F,G=!0;E.onChange=function(a){return C.on("onChange",a),E};var H=E.updateControl;return E.updateControl=function(a){D.listen&&e(),H(a)},E.listen=function(){return D.listen=!0,E},E}Object.defineProperty(c,"__esModule",{value:!0}),c.default=h;var i=a("events"),j=e(i),k=a("./imagebutton"),l=e(k),m=a("./colors"),n=(d(m),a("./layout")),o=d(n),p=a("./sharedmaterials"),q=(d(p),a("./grab")),r=(d(q),"\nvec3 hsv2rgb(vec3 c) {\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}"),s="\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}\n",t="\nuniform vec3 selectedHSV;\nvarying vec2 vUv;\n"+r+"\n\nvoid main() {\n vec3 hsv = vec3(selectedHSV.x, vUv);\n\n // draw a black circle around selected SV.\n // might look better via separate three object, but shader is less housekeeping\n // need to know aspect ratio if I want it to be a proper circle, though.\n float d = length(selectedHSV.yz - vUv);\n if (d < 0.015 && d > 0.01) hsv.z = 0.;\n gl_FragColor.rgb = sqrt(hsv2rgb(hsv));\n gl_FragColor.w = 1.0; // sjpt\n}\n",u="\nuniform vec3 selectedHSV;\nvarying vec2 vUv;\n"+r+"\n\nvoid main() {\n // draw a rectangular indicator around selected H\n // might look better via separate three object, but shader is simpler\n float dist = abs(selectedHSV.x - vUv.x);\n bool indicator = dist < 0.01 && dist > 0.005;\n float v = indicator ? 0. : 1.;\n gl_FragColor.rgb = sqrt(hsv2rgb(vec3(vUv.x, 1., v)));\n gl_FragColor.w = 1.0; // sjpt\n}\n"},{"./colors":4,"./grab":8,"./imagebutton":10,"./layout":15,"./sharedmaterials":19,events:27}],4:[function(a,b,c){"use strict";function d(a,b){var c=new THREE.Color(b),d=a.getAttribute("color"),e=void 0;d?e=d.array:(e=new Float32Array(a.getAttribute("position").array.length).fill(.5),d=a.setAttribute("color",new THREE.BufferAttribute(e,3)));for(var f=0;f0&&void 0!==arguments[0]?arguments[0]:{},n=l.textCreator,p=l.object,r=l.propertyName,u=void 0===r?"undefined":r,v=(l.initialValue,l.options),w=void 0===v?[]:v,x=l.width,y=void 0===x?o.PANEL_WIDTH:x,z=l.height,A=void 0===z?o.PANEL_HEIGHT:z,B=l.depth,C=void 0===B?o.PANEL_DEPTH:B,D={open:!1,listen:!1},E=.5*y-o.PANEL_MARGIN,F=A-o.PANEL_MARGIN,G=C,H=A-1.2*o.PANEL_MARGIN,I=-.4*o.PANEL_MARGIN,J=25,K=new THREE.Group;K.guiType="dropdown",K.toString=function(){return"["+K.guiType+": "+u+"]"},K.userData.sourceObject=p,K.userData.sourcePropertyName=u,K.userData.setValue=function(a){if(-1===w.indexOf(a))return void console.warn('dat.GUIVR: Unknown option "'+a+'" for dropdown "'+u+'".\nValid options: ['+w.join(", ")+"]");p[u]=a,V&&V(p[u])};var L=o.createPanel(y,A,C);K.add(L),K.hitscan=[L];var M=new THREE.Group;M.visible=!1,M.hitscan=[];var N=[],O=[],P=a(),Q=b(P||" ",!1);Q.position.x=.5*o.PANEL_MARGIN+.5*y,Q.position.z=C;var R=q.downArrow();R.position.set(E-.04,0,1.01*C),Q.add(R),Q.add(M),Array.isArray(w)?M.add.apply(M,f(w.map(g))):M.add.apply(M,f(Object.keys(w).map(g))),c();var S=n.create(u);S.position.x=o.PANEL_LABEL_TEXT_MARGIN,S.position.z=C,S.position.y=-.03;var T=o.createControllerIDBox(A,m.CONTROLLER_ID_DROPDOWN);T.position.z=C;var U=o.createPanel(E+o.BORDER_THICKNESS,F+.5*o.BORDER_THICKNESS,G,!0);U.material.color.setHex(2063079),U.position.x=.5*-o.BORDER_THICKNESS+.5*y,U.position.z=.5*C,L.add(S,T,Q,U),j();var V=void 0,W=void 0;K.onChange=function(a){return V=a,K},K.onChoose=function(a){return W=a,K};var X=s.create({group:K,panel:L});return K.listen=function(){return D.listen=!0,K},K.updateControl=function(b){D.listen&&Q.setString(a()),N.forEach(function(a){a.update(b)}),X.update(b),j()},K.name=function(a){return S.updateLabel(a),K},K.setToolTip=function(a){var b=K;b.userData.tip=a,b.userData.tipObj=(0,h.createToolTip)(n,a,o.FOLDER_WIDTH,b.spacing,o.BUTTON_DEPTH)},K.getToolTip=function(){return K.userData.tip},K}Object.defineProperty(c,"__esModule",{value:!0}),c.default=g;var h=a("./textlabel"),i=e(h),j=a("./interaction"),k=e(j),l=a("./colors"),m=d(l),n=a("./layout"),o=d(n),p=a("./graphic"),q=d(p),r=a("./grab"),s=d(r),t=a("./utils")},{"./colors":4,"./grab":8,"./graphic":9,"./interaction":13,"./layout":15,"./textlabel":22,"./utils":23}],6:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b=c-o.PANEL_DEPTH&&console.log("GUIVR Warning: likely problem with z-order in orthographicFolderLayout")}}function g(a){if(a.isOrthographicCamera){var b=a.near,c=a.far,d=(x.length,a.left),e=a.right,f=a.top,g=a.bottom,h=a.position.z;return z.min.set(d,g,-c+h),z.max.set(e,f,-b+h),z}}function h(){function a(a){L.call(H,a)}function b(a){M.call(H,a)}function c(a,b,c){b.updateMatrixWorld(),a.applyMatrix4(b.matrixWorld),b.remove(a),c.add(a)}function d(a,b,c){c.updateMatrixWorld(),a.applyMatrix4((new THREE.Matrix4).getInverse(c.matrixWorld)),b.remove(a),c.add(a)}function h(a,b,e){for(var f=b;f.parent;)f=f.parent;var g=f;c(a,b,g),d(a,g,e)}function j(){l();var a=(0,w.getTopLevelFolder)(H);a===H?(a.modalEditor&&a.modalEditor.performLayout&&a.modalEditor.performLayout(),a.userData.layoutInProgress=!0,a.userData.columnHeight=0,a.userData.columnIndex=0,a.userData.columnYOff=-a.position.y,x.includes(H)||(x.push(H),H.userData.isOrthographic&&f())):(H.userData.columnHeight=H.folder.userData.columnHeight,H.userData.columnIndex=H.folder.userData.columnIndex,x.includes(H)&&(x.splice(x.indexOf(H),1),H.userData.isOrthographic&&f()));var b=o.PANEL_HEIGHT+o.PANEL_SPACING,c=o.FOLDER_HEIGHT+o.PANEL_SPACING,d=c;I.children.forEach(function(a){a.visible=!G.collapsed});var e=0;if(I.children.forEach(function(a,b){void 0===a.guiIndex?a.guiIndex=e+=1:e=a.guiIndex}),I.children.sort(function(a,b){return a.guiIndex-b.guiIndex}),G.collapsed)P.rotation.z=.5*Math.PI;else{P.rotation.z=0;var g=0,h=c;I.children.forEach(function(a,e){a.isFolder&&(a.userData.columnYOff=H.userData.columnYOff-g,a.performLayout());var f,i=a.spacing?a.spacing:b,j=.5*(h+i);if(a.isFolder){var f=.5*(h+c);a.position.y=g-f}else a.position.y=g-j;g-=j,h=i,e0&&void 0!==arguments[0]?arguments[0]:{},r=p.textCreator,s=p.name,u=p.guiAdd,z=p.guiRemove,B=p.addControllerFuncs,C=p.globalControllers,D=40,E=o.FOLDER_WIDTH,F=o.PANEL_DEPTH,G={collapsed:!1,previousParent:void 0},H=new THREE.Group;H.guiType="folder",H.toString=function(){return"["+H.guiType+": "+s+"]"};var I=new THREE.Group;H.add(I);var J=!1;Object.defineProperty(H,"accordion",{get:function(){return J},set:function(a){a&&!J&&H.guiChildren.filter(function(a){return a.isFolder}).map(function(a){return a.close()}),J=a,H.requestLayout()}}),H.requestLayout=function(){var a=(0,w.getTopLevelFolder)(H);a.userData.layoutInProgress?console.log("requested layout of folder "+H.folderName+" while layout already in progress..."):a.userData.layoutPending=!0},H.performLayout=j;var K=new THREE.Quaternion;H.fixFolderPosition=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.01,b=this;if(b.userData.isOrthographic){b.setRotationFromQuaternion(K);var c=(0,w.setBoxFromObject)(y,b),d=c.max.x-c.min.x,e=(c.max.y,c.max.y,b.userData.isOrthographic),f=g(e),h=c.intersect(f),i=h.getSize(A),j=e.right-e.left,k=e.top-e.bottom;i.x/=d,i.y/=d;var l=!1;i.x-1&&a.userData.semiDetached.splice(c,1)}return H._setDetachedFrom(null),!0},H.addController=function(){for(var a=arguments.length,b=Array(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:{},b=a.input,c=(0,g.getTopLevelFolder)(e);if(void 0!==c&&!c.grabDisabled&&b.mouse)if(b.pressed&&b.selected&&b.raycast.ray.intersectPlane(b.mousePlane,b.mouseIntersection)){if(b.interaction.press===i)return b.mouseIntersection.sub(b.mouseOffset),b.selected.parent.updateMatrixWorld(),b.selected.parent.worldToLocal(b.mouseIntersection),c.position.copy(b.mouseIntersection),void c.updateMatrix()}else if(b.intersections.length>0){var d=b.intersections[0].object;d===h&&(d.updateMatrixWorld(),k.setFromMatrixPosition(d.matrixWorld),b.mousePlane.setFromNormalAndCoplanarPoint(b.mouseCamera.getWorldDirection(b.mousePlane.normal),k))}}function b(a){var b=a.inputObject,c=a.input,d=(0,g.getTopLevelFolder)(e);if(void 0!==d&&!0!==d.beingMoved){if(c.mouse){if(c.intersections.length>0&&c.raycast.ray.intersectPlane(c.mousePlane,c.mouseIntersection)){var f=c.intersections[0].object;if(f!==h)return;if(c.selected=d,d.grabDisabled)return;c.selected.updateMatrixWorld(),k.setFromMatrixPosition(c.selected.matrixWorld),c.mouseOffset.copy(c.mouseIntersection).sub(k)}}else{if(d.grabDisabled)return;j.getInverse(b.matrixWorld),d.matrix.premultiply(j),d.matrix.decompose(d.position,d.quaternion,d.scale),d.oldParent=d.parent,b.add(d)}a.locked=!0,d.beingMoved=!0,c.events.emit("grabbed",c)}}function c(a){var b=a.inputObject,c=a.input,d=(0,g.getTopLevelFolder)(e);if(void 0!==d&&!1!==d.beingMoved){if(c.mouse)c.selected=void 0;else{if(void 0===d.oldParent)return;d.matrix.premultiply(b.matrixWorld),d.matrix.decompose(d.position,d.quaternion,d.scale),d.oldParent.add(d),d.oldParent=void 0}d.beingMoved=!1,c.events.emit("grabReleased",d)}}var d=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d.group,h=d.panel,i=(0,f.default)(h);i.events.on("onPressed",b),i.events.on("tick",a),i.events.on("onReleased",c);var j=new THREE.Matrix4,k=new THREE.Vector3;return i}Object.defineProperty(c,"__esModule",{value:!0}),c.create=d;var e=a("./interaction"),f=function(a){return a&&a.__esModule?a:{default:a}}(e),g=a("./utils")},{"./interaction":13,"./utils":23}],9:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.grabBar=function(){var a=new Image;a.src="data:image/png;base64,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/GMzLdsAADskaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzEzMiA3OS4xNTkyODQsIDIwMTYvMDQvMTktMTM6MTM6NDAgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE2LTA5LTI4VDE2OjI1OjMyLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTYtMDktMjhUMTY6Mzc6MjMtMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE2LTA5LTI4VDE2OjM3OjIzLTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmFhYTFjMTQzLTUwZmUtOTQ0My1hNThmLWEyM2VkNTM3MDdmMDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjdlNzdmYmZjLTg1ZDQtMTFlNi1hYzhmLWFjNzU0ZWQ1ODM3ZjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmM1ZmM0ZGYyLTkxY2MtZTI0MS04Y2VjLTMzODIyY2Q1ZWFlOTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjNWZjNGRmMi05MWNjLWUyNDEtOGNlYy0zMzgyMmNkNWVhZTk8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTYtMDktMjhUMTY6MjU6MzItMDc6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y29udmVydGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpwYXJhbWV0ZXJzPmZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmFhYTFjMTQzLTUwZmUtOTQ0My1hNThmLWEyM2VkNTM3MDdmMDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wOS0yOFQxNjozNzoyMy0wNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj42NDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+OhF7RwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAlElEQVR42uzZsQ3AIAxEUTuTZJRskt5LRFmCdTLapUKCBijo/F0hn2SkJxIKXJJlrsOSFwAAAABA6vKI6O7BUorXdZu1/VEWEZeZfbN5m/ZamjfK+AQAAAAAAAAAAAAAAAAAAAAAACBfuaSna7i/dd1mbX+USTrN7J7N27TX0rxRxgngZYifIAAAAJC4fgAAAP//AwAuMVPw20hxCwAAAABJRU5ErkJggg==";var b=new THREE.Texture;b.name="tttt1",b.image=a,b.needsUpdate=!0;var c=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,map:b});return c.alphaTest=.5,function(){var b=new THREE.PlaneGeometry(a.width/1e3,a.height/1e3,1,1);return new THREE.Mesh(b,c)}}(),c.downArrow=function(){var a=new Image +;a.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAYAAADS1n9/AAAACXBIWXMAACxLAAAsSwGlPZapAAA4K2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTEwLTIwVDIxOjE4OjI1LTA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0xMC0yMFQyMToxODoyNS0wNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDozMDQyYjI0ZS1iMzc2LWI0NGItOGI4Yy1lZTFjY2IzYWU1MDU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6MzA0MmIyNGUtYjM3Ni1iNDRiLThiOGMtZWUxY2NiM2FlNTA1PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MzA0MmIyNGUtYjM3Ni1iNDRiLThiOGMtZWUxY2NiM2FlNTA1PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjMwNDJiMjRlLWIzNzYtYjQ0Yi04YjhjLWVlMWNjYjNhZTUwNTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTI4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5Uilz0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJdSURBVHja7N3LccJAEIThRuW7ncUeTQhkQAiIDMgIhUIIcFQWJgJ88FKlovwArN2d6Z45cZGA/T9viYftxeVyQYzudLEEASAmAMQEgBjJeWl1xymlNwAHAMdxHHvFxU8pDQCWAFbjOH7I7ACT+O8ANnkhFONv8hoc8prwA7iJfx0pBJP412mGoDMQXwrBN/GbIuiMxJdA8Ev8Zgg6Q/GpEdwRvwmCzlh8SgQPxK+OoMYOMDwYnwrBE/GnCAbXAPKTX//jFJuUUu84fv9k/OusS/8QdAbl387eI4L8mPcznKroTlhyB1jOeC5XCGaMX2ItqwFYATipISgQ/5TX0heA/N62FIJS8Ut+TlD0IlAJgcf4VV4GKiDwGr/W+wDUCDzHrwaAFYH3+FUBsCFgiF8dAAsClvhNAHhHwBS/GQCvCNjiNwXgDQFj/OYAvCBgjW8CgHUEzPHNALCKgD2+KQDWECjENwfACgKV+CYBTBD0AM61ERSIfwbQW4xvFkBGcMw7QTUEheKv8nNBADCMQDG+eQC1EKjGB4CFl78RlFJa4usXTF7njJRvz35eD/FdASiIAKrx3QEohACq8V1cA1S6JpCM7xKAQQRu47sFYAiB6/iuARhA4D6+ewANEVDEpwDQAAFNfBoAFRFQxacCUAEBXXw6AAURUManBFAAAW18WgAzIqCOTw1gBgT08ekBTBDsnjh0xx5fAkBGMADYPnDINh+DAKCHQCa+FIA7EUjFlwPwBwK5+JIAfkAgGR9w+JWwOef6zWDV+PIAYuLfxgWAWIIAEBMAYgJAjOR8DgD+6Ozgv4uy9gAAAABJRU5ErkJggg==";var b=new THREE.Texture;b.name="tttt3",b.image=a,b.needsUpdate=!0,b.minFilter=THREE.LinearMipMapLinearFilter,b.magFilter=THREE.LinearFilter;var c=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,map:b});return c.alphaTest=.2,function(){var b=new THREE.PlaneGeometry(a.width/1e3*.3,a.height/1e3*.3,1,1);return b.translate(-.005,-.004,0),new THREE.Mesh(b,c)}}(),c.checkmark=function(){var a=new Image +;a.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAYAAADS1n9/AAAACXBIWXMAACxLAAAsSwGlPZapAAA4K2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTEwLTIwVDIxOjMzOjUzLTA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0xMC0yMFQyMTozMzo1My0wNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo2ODcxYTk5Yy0zNjE5LTlkNGEtODdkNi0wYWE5YTRiNWU4Mjc8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6Njg3MWE5OWMtMzYxOS05ZDRhLTg3ZDYtMGFhOWE0YjVlODI3PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6Njg3MWE5OWMtMzYxOS05ZDRhLTg3ZDYtMGFhOWE0YjVlODI3PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY4NzFhOTljLTM2MTktOWQ0YS04N2Q2LTBhYTlhNGI1ZTgyNzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0xMC0xOFQxNzozMzowNi0wNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTI4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5z9RT3AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAATtSURBVHja7Jzbb5RFGMZ/2xbCvVhASExUiI144w0hQtHEGrHgISqgN6KgtNYWAb0w0Wo1XqrbPbSlokYSxfMhemX/Aa7wGAVq8XTp30DXi5mJm0a2u9v3/b6Z2XludrOHdw/PMzPP+74zX6FWqyGFgYEBElpGD/AecCtwB/Dbcm+Ym5sT+/Cu9P/nim6gCDwCXAt8DVyX5RdIAsgPBaAEjNQ9diPwFbA5CSB+TAFP/c/jW4HPgL4kgHgxCww1eP5m4GN7mwQQEbos+U808dqtwEf2NgkgErc/0yT5Dn12OdiSBBA++aUWyXfYAnwDXJ8EEG6qNwkMryDGZpsi3pAEEB6qV3D7raIP+NKmikkAgeAt4IhgvJvsTJAE4DkKwCngsELss0kA/q/5s8AhhdjTwEFpd5ogS35VaeTPAk8Di0kA/pJfEl7zHU7SuHKYlgAP1vyykNtfihkt8pMAZEkaVohbVYqbBCCIU8CTCnFLwJj2l08CWNma/7aS268Cx6QNXxKArHmeBh5XWk7GsiA/TwGMYfa/hUp+mfYaO824/eGsyM9LAC9gmiPvAzsDI7/Lrs1DSiN/KI8flCXGgVft/V7gDLArIAFMh+r2fRDAS8DEksc2Ah8C/R3s9svAaJ5TWlbkv3yF59Zjdr1s93ja13L7Fev2azELYLwB+Q5rMb3ubR4avpNKbn8aeAa4nLe6tQ3fRJOv7QW+8Ggm6LEjVKOxM4M5D3A57x+pKYAX6wxfs9gAfALs8IB8rcaOKxvXfFC5lgDGgVfafK8zhrty/E+0XHklL7efpQAmWpj2lxPBbTn8J7Po1fZH8QzSAnjNjn4JrMecjsmqWFQA3lVy+yXr9oldAHcKx7sa+DwDY9hj8/yDiqneYicI4FHgR+GYa5WzA83GzhRw1FfyNQTwC3CPvZXEOuBTzEUUJLEqg1TPW/K1TOCfwCBwUTjuNciWjbsxZViNVC+32r4vaeAfwF3AgnDcTVYEtwuNUA3yy5jdu3SyAAB+B3YrLAcbBOoE7yhN+5N2zScJwGAeeAD4TjhuL6aB1Kon6LbkP6Y08o/jSYXPFwEAnAceVhDBVS1mB66xo0H+FKaxs0hgyKodfAF4EPhJqU6w3EywyhqzQ0rkj4RIfpYCALgE7LEzgiRcxbC/wcivoFPedeQHi6y3hP1ljeG8Uoq4NDsoYIo8Wjt5giY/DwHUp4i/KmQHZ+pEUMDs5NFw+0UyOLQRqwDccnAv8L1w3HXAaZsivq5k+IrACSJBnqeD54EDwAfALYJxNwHfKpmysiV/MRYB5H0y6AKwH/hBOO5qYI2C4TsaE/k+CADM1bH3Il8xlETVGr4akcGXs4F/A3fbGcE3VAioth+qAMB0EXd7JoJJPNzGFasAwDSQBpHfVNKu2z9G5PDxePgC8BBwLueRfyLGNT8EAYDZTHIA+QZSs2v+8djcfmgCcHWC+5FvIC3n9kc7hXzfBeCM4R7ky8Yd5/ZDFQD810C6qPgZ0bv9kAVQnyJqFIvexGzmIAnAb1wC7hM2hkXgWToYoV0lzDWQJFLE6Bo7nSAAlyLuY2UNpAoZXootCUAeC5gG0s9tkj9KQtACANNAGqS1PYalRH48AnApYrPby4oEdmgjCaD5FHEvjbeXvYEp7yZEKADnCfZbEfwDPI85L+DIf44OaOy0g38HAM/e7guIRx94AAAAAElFTkSuQmCC";var b=new THREE.Texture;b.name="tttt3",b.image=a,b.needsUpdate=!0,b.minFilter=THREE.LinearMipMapLinearFilter,b.magFilter=THREE.LinearFilter;var c=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,map:b});return c.alphaTest=.2,function(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.4,d=new THREE.PlaneGeometry(a.width/1e3*b,a.height/1e3*b,1,1);return d.translate(.025*b/.4,0,0),new THREE.Mesh(d,c)}}(),c.dock=function(){var a=new Image;a.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+Gkqr6gAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc/ZogMDbGwsJg02BgxamKjjISaNI1Rfm1mnvmh5o3Xe0+abJWtosTGrwV/AVtlrRSRkoWVNbFBz3memknm3M49n/u995zuPRdc8ZyiGpU9oOZNPTYa9k3PzPqqn6ilCg+NdCYUQxuKRiOUtfdbKux4HbBrlT/3r3kWUoYCFTXCg4qmm8JjwpEVU7N5S7hZySYWhE+Eu3S5oPCNrScdfrY54/CnzXo8NgyuBmFfpoSTJaxkdVVYXo5fzS0rv/exX1KXyk9NSmwTb8UgxihhfIwzwjAhehmQOUSAIN2yokx+z0/+BEuSq8isUUBnkQxZTLpEXZbqKYlp0VMychTs/v/tq5HuCzrV68JQ9WhZr+1QvQlfG5b1cWBZX4fgfoDzfDF/aR/630TfKGr+PfCuwelFUUtuw9k6tNxrCT3xI7nFXek0vBxD/Qw0XUHtnNOz332O7iC+Kl91CTu70CHnvfPfIyhnx9hAUU0AAAASUExURfz8/FVVVV1dXf///39/fyZFyb+hjMcAAAAGdFJOU///////ALO/pL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAEESURBVGiB7dhBDoMwDERR7jTiJCPuf5WumphVxXykVJGzIpJ5cgskdo4LjqOBrQA9HA000MD+wPVjvAWcFBjzEBgJpMCcZ8BMIATKPAJKAhlQ5wnwTcApMC5DYCSQAver58BMIATKDRFQEsiAGk8AU0AQMAUEAVNAEDAFBAFTQBAwBQQBU0AQMAUEAVNAEDAFBAFTQBDwcgD/BP4n4sfIXyT8KvOPCX/OfEHBSxpfVPGyzjcWvLXxzRVv77zAwCUOL7JwmccLTVzq8mI7L/fPkkIE4JaHN1247eONJ259efN9i1lzAFGDFh3ClKhVB1EzbNlh3Ij7wxPNBhpoYDWQjga2AD5S/CyIvbmq7gAAAABJRU5ErkJggg==";var b=new THREE.Texture;b.name="tttt4",b.image=a,b.needsUpdate=!0,b.minFilter=THREE.LinearMipMapLinearFilter,b.magFilter=THREE.LinearFilter;var c=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,map:b});return c.alphaTest=.2,function(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.4,d=new THREE.PlaneGeometry(a.width/1e3*b,a.height/1e3*b,1,1);return d.translate(.025*b/.4,0,0),new THREE.Mesh(d,c)}}(),c.undock=function(){var a=new Image;a.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+Gkqr6gAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc/ZogMDbGwsJg02BgxamKjjISaNI1Rfm1mnvmh5o3Xe0+abJWtosTGrwV/AVtlrRSRkoWVNbFBz3memknm3M49n/u995zuPRdc8ZyiGpU9oOZNPTYa9k3PzPqqn6ilCg+NdCYUQxuKRiOUtfdbKux4HbBrlT/3r3kWUoYCFTXCg4qmm8JjwpEVU7N5S7hZySYWhE+Eu3S5oPCNrScdfrY54/CnzXo8NgyuBmFfpoSTJaxkdVVYXo5fzS0rv/exX1KXyk9NSmwTb8UgxihhfIwzwjAhehmQOUSAIN2yokx+z0/+BEuSq8isUUBnkQxZTLpEXZbqKYlp0VMychTs/v/tq5HuCzrV68JQ9WhZr+1QvQlfG5b1cWBZX4fgfoDzfDF/aR/630TfKGr+PfCuwelFUUtuw9k6tNxrCT3xI7nFXek0vBxD/Qw0XUHtnNOz332O7iC+Kl91CTu70CHnvfPfIyhnx9hAUU0AAAASUExURfz8/FVVVV1dXf///39/fyZFyb+hjMcAAAAGdFJOU///////ALO/pL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAEPSURBVGiB7dgxCsQwDATA/EnoJUL//8pVsWWlOLwLUTByFfbEsNc4di4n19XAUYBsrgYaaOB8wP8sGjAWcBowFnAaMBZwGjAWcBjQUAECJAxjQKiAAfJ82gRmBRCYFVBgVECBx+/bgKZsG8gD+0CqsA+kCQBYKwDAOoIASwUEWGYgIFaAgDiEAaECBoQpEJgVQGCOocCogALwjvSoAAP3IA4oCwgNKAsIDWg5wP4FZQEnAWUBJwFlgTsr21BGVrWpzqzoxRKympdrzEoOGEtWcchas4KDZsreP2zn7PULx3gEgVGg6to3CxRdfUOBout/KFD6CcRYQEjAWEBIwFggz33wi2YDDTRQDaCrgSOAH8H8KqggYpAUAAAAAElFTkSuQmCC";var b=new THREE.Texture;b.name="tttt5",b.image=a,b.needsUpdate=!0,b.minFilter=THREE.LinearMipMapLinearFilter,b.magFilter=THREE.LinearFilter;var c=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,map:b});return c.alphaTest=.2,function(){var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.4,d=new THREE.PlaneGeometry(a.width/1e3*b,a.height/1e3*b,1,1);return d.translate(.025*b/.4,0,0),new THREE.Mesh(d,c)}}()},{}],10:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(){function a(a){(0,n.isControllerVisible)(K)&&(a.localPoint=c(a.point),U&&U(a))}function b(a){(0,n.isControllerVisible)(K)&&(a.localPoint=c(a.point),l&&l[p](a),r&&r(a),O.position.z=.1*J,a.locked=!0)}function c(a){var b=O.worldToLocal(a);return b.x/=H,b.y/=I,b.y+=.5,b.x=Math.max(Math.min(b.x,1),0),b.y=Math.max(Math.min(b.y,1),0),b}function d(a){(0,n.isControllerVisible)(K)&&(a.localPoint=c(a.point),t&&t(a))}function e(){O.position.z=.5*J}function f(){P.color&&(T.hovering()?E&&P.color.setHex(16777215):E&&P.color.setHex(13421772))}var h=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},j=h.textCreator,l=h.object,o=h.propertyName,p=void 0===o?"undefined":o,q=h.func,r=void 0===q?void 0:q,s=h.pressing,t=void 0===s?void 0:s,u=h.image,v=void 0===u?"textures/spotlight.jpg":u,w=h.wide,x=void 0!==w&&w,y=h.width,z=void 0===y?k.PANEL_WIDTH:y,A=h.height,B=h.depth,C=void 0===B?k.PANEL_DEPTH:B,D=h.changeColorOnHover,E=void 0===D||D,F=h.buttonDepth,G=void 0===F?k.BUTTON_DEPTH:F;A||(A=k.PANEL_WIDTH*(x?.94:.25));var H=z*(x?.94:.25)-k.PANEL_MARGIN,I=A-k.PANEL_MARGIN,J=G,K=new THREE.Group;K.guiType="imagebutton",K.toString=function(){return"["+K.guiType+": "+p+"]"},K.spacing=A;var L=k.createPanel(z,A,C);K.add(L);var M=new THREE.PlaneGeometry(H,I,1,1);M.translate(.5*H,0,J);var N=new THREE.MeshBasicMaterial;N.visible=!1;var O=new THREE.Mesh(M.clone(),N);O.position.z=J,x?(O.position.x=.75*k.PANEL_LABEL_TEXT_MARGIN,O.position.y=.01):O.position.x=.5*z;var P;v.isMaterial?P=v:(P=new THREE.MeshBasicMaterial,P.transparent=!0,function(a,b){if("string"==typeof a)(new THREE.TextureLoader).load(a,function(a){a.wrapS=a.wrapT=THREE.ClampToEdgeWrapping,b.map=a,b.needsUpdate=!0});else if(a.isTexture)b.map=a;else{if(!a.isWebGLRenderTarget)throw"not sure how to interpret image "+a;b.map=a.texture}b.needsUpdate=!0}(v,P));var Q=new THREE.Mesh(M.clone(),P);O.add(Q);var R=j.create(p);R.position.x=k.PANEL_LABEL_TEXT_MARGIN,R.position.z=C,R.position.y=-.03,x&&(R.visible=!1);var S=k.createControllerIDBox(A,i.CONTROLLER_ID_BUTTON);S.position.z=C,L.add(R,O,S);var T=(0,g.default)(O);T.events.on("hovering",a),T.events.on("onPressed",b),T.events.on("pressing",d),T.events.on("onReleased",e),f();var U=void 0;K.onHover=function(a){return U=a,K},K.onPressing=function(a){return t=a,K},K.interaction=T,K.hitscan=[O,L];var V=m.create({group:K,panel:L});return K.updateControl=function(a){T.update(a),V.update(a),f()},K.name=function(a){return R.updateLabel(a),K},K}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("./interaction"),g=function(a){return a&&a.__esModule?a:{default:a}}(f),h=a("./colors"),i=d(h),j=a("./layout"),k=d(j),l=a("./grab"),m=d(l),n=a("./utils")},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15,"./utils":23}],11:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(){function a(a,b){if("string"==typeof a)(new THREE.TextureLoader).load(a,function(a){a.wrapS=a.wrapT=THREE.ClampToEdgeWrapping,b.map=a,b.needsUpdate=!0});else if(a.isTexture)b.map=a;else{if(!a.isWebGLRenderTarget)throw"not sure how to interpret image "+a;b.map=a.texture}b.needsUpdate=!0}function b(){E&&y.remove(E),E=l.createPanel(m,A,r),y.add(E);var a=l.createControllerIDBox(A,j.CONTROLLER_ID_BUTTON);a.position.z=r,E.add(a),F=o.create({group:y,panel:E}),G.forEach(function(a){return y.remove(a)}),G=[],y.guiChildren=G}function c(){b();var c=.99*v,d=.99*w,e=new THREE.PlaneGeometry(c,d,1,1);e.translate(c/2,-d/2,x);i.forEach(function(b,c){function d(a){if(!1!==j.visible){a.locked=!0;try{b.func()}catch(a){return void(b.error=a||"undefined exception")}C=b,j.position.z=.4*x}}function i(){j.position.z=x,b.release&&b.release()}if(b.image||b.text){var j=new THREE.Group;j.guiType="imageButtonGridElement",y.add(j),G.push(j);var k=c%t,m=Math.floor(c/t);j.position.x=2*l.PANEL_MARGIN+v*k,j.position.y=A/2-w*m,j.position.z=x;var n=new THREE.MeshBasicMaterial;n.visible=!1;var o=new THREE.Mesh(e.clone(),n),q=new THREE.MeshBasicMaterial;if(q.transparent=!0,b.image&&a(b.image,q),b.text){var r=g.create(b.text),s=2*l.GRID_BUTTON_MARGIN,u=l.TEXT_SCALE*r.layout.height,z=r.computeWidth();z>v-s&&(r.constrainBounds(v-s,w-s),u=l.TEXT_SCALE*r.layout.height,z=r.computeWidth()),j.add(r),j.text=r,r.position.x=b.textX||.5*(v-z),r.position.y=b.textY||-.5*w-u,r.position.z=1.2*x}var F=new THREE.Mesh(e.clone(),q);if(o.add(F),b.tip){var H=(0,f.createToolTip)(g,b.tip,v,w,x);j.tipText=H}j.add(o),E.add(j);var I=(0,h.default)(o);I.events.on("onPressed",d),I.events.on("onReleased",i),b.hoverCol=b.text?2184:16777215,b.noHoverCol=b.text?273:13421772,j.updateView=function(){B&&C===b?q.color.setHex(D):q.color.setHex(I.hovering()?b.hoverCol:b.noHoverCol),j.tipText&&(0,p.setVisibility)(j,j.tipText,I.hovering()),b.error&&q.color.setHex(11154227)},j.updateView(),j.interaction=I,j.hitscan=o}}),y.hitscan=G.map(function(a){return a.hitscan}),y.hitscan.push(E)}function d(){G.forEach(function(a){return a.updateView()})}var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},g=e.textCreator,i=e.objects,k=e.width,m=void 0===k?l.PANEL_WIDTH:k,n=e.rowHeight,q=e.depth,r=void 0===q?l.PANEL_DEPTH:q,s=e.columns,t=void 0===s?4:s,u=3*l.PANEL_MARGIN,v=1/t*(m-u),w=n>0?n:v,x=l.BUTTON_DEPTH,y=new THREE.Group;y.guiType="imagebuttongrid",y.toString=function(){return"["+y.guiType+": "+i+"]"};var z=Math.ceil(i.length/t),A=l.PANEL_MARGIN+w*z;y.spacing=A,y.setRowHeight=function(a){return n=w=a,A=l.PANEL_MARGIN+w*z,y.spacing=A,c(),y};var B=!1,C=null,D=void 0;y.highlightLastPressed=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:3364334;return B=!1!==a,D=a,y};var E=void 0,F=void 0,G=[];return c(),y.updateControl=function(a){G.forEach(function(b){b.interaction.update(a)}),F.update(a),d()},y.name=function(a){return descriptorLabel.updateLabel(a),y},y}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("./textlabel"),g=a("./interaction"),h=function(a){return a&&a.__esModule?a:{default:a}}(g),i=a("./colors"),j=d(i),k=a("./layout"),l=d(k),m=a("./sharedmaterials"),n=(d(m),a("./grab")),o=d(n),p=a("./utils")},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15,"./sharedmaterials":19,"./textlabel":22,"./utils":23}],12:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){ +if(Array.isArray(a)){for(var b=0,c=Array(a.length);b0&&h.hapticActuators[0].pulse(a,b)}function f(){n(function(a,b,c){return e(1-c,.5)},10,20)}function g(){n(function(a,b,c){return e(4,1*(1-c))},100,4)}b.addEventListener("triggerdown",function(){return c(!0)}),b.addEventListener("triggerup",function(){return c(!1)}),b.addEventListener("gripsdown",function(){return d(!0)}),b.addEventListener("gripsup",function(){return d(!1)});var h=b.getGamepad();a.events.on("onControllerHeld",function(a){e(.3,.3)}),a.events.on("grabbed",function(){f()}),a.events.on("grabReleased",function(){g()}),a.events.on("pinned",function(){f()}),a.events.on("pinReleased",function(){g()})}function n(a,b,c){var d=0,e=setInterval(function(){a(d,c,d/c),++d>=c&&clearInterval(e)},b);return e}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},p=a("events"),q=d(p),r=a("./slider"),s=d(r),t=a("./checkbox"),u=d(t),v=a("./button"),w=d(v),x=a("./folder"),y=d(x),z=a("./dropdown"),A=d(z),B=a("./imagebutton"),C=d(B),D=a("./imagebuttongrid"),E=d(D),F=a("./keyboard"),G=d(F),H=a("./textbox"),I=d(H),J=a("./colorpicker"),K=d(J),L=a("./sdftext"),M=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}(L),N=a("./utils"),O=a("./interaction"),P=function(){function a(){return ea.filter(N.isControllerVisible)}function b(){return a().map(function(a){return a.hitscan.filter(function(a){return a.visible})}).reduce(function(a,b){return a.concat(b)},[])}function c(a,b){return fa=!0,ga=b,la.mouseCamera=a,a.isOrthographicCamera?ha||(ha=function(a){return a.fixFolderPosition()},la.events.on("grabReleased",ha)):ha&&(la.events.removeListener("grabReleased",ha),ha=void 0),la.laser}function d(){fa=!1,ha&&(la.events.removeListener("grabReleased",ha),ha=void 0)}function n(){var a=new THREE.BufferGeometry;return a.setAttribute("position",new THREE.BufferAttribute(new Float32Array([0,0,0,0,0,0]))),new THREE.Line(a,ja)}function o(){return new THREE.Mesh(new THREE.SphereGeometry(.006,4,4),ka)}function p(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new THREE.Group,b={raycast:new THREE.Raycaster(new THREE.Vector3,new THREE.Vector3),laser:n(),cursor:o(),object:a,pressed:!1,gripped:!1,events:new q.default,interaction:{grip:void 0,press:void 0,hover:void 0}};return b.laser.add(b.cursor),b}function r(a){var b=p(a);return b.laser.pressed=function(a){var c=b.intersections;a&&c&&c.length>0?(b.pressed=!0,b.clicked=!0):b.pressed=!1},b.laser.gripped=function(a){b.gripped=a},b.laser.cursor=b.cursor,THREE.ViveController&&a instanceof THREE.ViveController&&m(b,a,b.laser.pressed,b.laser.gripped),da.push(b),b.laser}function t(a,b){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:100,e=(0,s.default)({textCreator:ca,propertyName:b,object:a,min:c,max:d,initialValue:a[b]});return ea.push(e),e}function v(a,b){var c=(0,u.default)({textCreator:ca,propertyName:b,object:a,initialValue:a[b]});return ea.push(c),c}function x(a,b){var c=(0,w.default)({textCreator:ca,propertyName:b,object:a});return ea.push(c),c}function z(a,b,c,d){var e={f:a},f=(0,C.default)({textCreator:ca,object:e,propertyName:"f",image:b,wide:c,height:d});return ea.push(f),f}function B(a,b,c,d){var e=(0,C.default)({textCreator:ca,pressing:a,propertyName:"",image:b,wide:c,height:d});return ea.push(e),e}function D(a){for(var b=Number.isInteger(a)?a:4,c=arguments.length,d=Array(c>1?c-1:0),e=1;e0&&void 0!==arguments[0]?arguments[0]:0;return t({number:a},"number",a,arguments.length>1&&void 0!==arguments[1]?arguments[1]:1)}function R(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],b={option:""};return void 0!==a&&(b.option=j(a)?a[0]:a[Object.keys(a)[0]]),L(b,"option",a)}function S(){return v({checked:arguments.length>0&&void 0!==arguments[0]&&arguments[0]},"checked")}function T(a){return x({button:void 0!==a?a:function(){}},"button")}function U(){for(var a=arguments.length,b=Array(a),c=0;c-1))return console.log("Internal error in remove, not anticipated by removeTest. Internal dat.GUIVR state may be inconsistent."),!1;ea.splice(b,1)}),!0)}function V(){for(var a=arguments.length,b=Array(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:{},b=(a.box,a.object),c=a.raycast,e=a.laser,f=a.cursor,g=a.interaction,h=arguments[1];Z(g,d),b.updateMatrixWorld(),ma.set(0,0,0).setFromMatrixPosition(b.matrixWorld),oa.identity().extractRotation(b.matrixWorld),na.set(0,0,-1),b.laserRotateModifier&&na.applyQuaternion(b.laserRotateModifier),na.applyMatrix4(oa).normalize(),c.set(ma,na);var i=e.geometry.getAttribute("position").array;i[0]=ma.x,i[1]=ma.y,i[2]=ma.z;var j=c.intersectObjects(d,!1);_(j,e,f),da[h].intersections=j,b.userData&&(b.userData.guiIntersections=j)});var g=da.slice();fa&&g.push(la),e.forEach(function(a){return a.updateControl(g)});var h=g.filter(function(a){return a.hitNonModal});return 0!=h.length&&(h.forEach(function(a){return a.hitNonModal=!1}),f.forEach(function(a){return a.clearModalEditor()})),la.clicked=!1,da.forEach(function(a){return a.clicked=!1}),la.intersections}function Z(a,b){["press","grip","hover"].forEach(function(c){var d=a[c];d&&b.indexOf(d.hitVolume)<0&&(a[c]=void 0,d.update([]))})}function $(a,b){var c=a.geometry.getAttribute("position").array;c[3]=b.x,c[4]=b.y,c[5]=b.z,c.needsUpdate=!0,a.visible=!0,a.geometry.computeBoundingSphere(),a.geometry.computeBoundingBox()}function _(a,b,c){if(a.length>0){var d=a[0];$(b,d.point),c.position.copy(d.point),c.visible=!0,c.updateMatrixWorld()}else b.visible=!1,c.visible=!1}function aa(a,c,d){a.setFromCamera(c,d);var e=b();return a.intersectObjects(e,!1)}function ba(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=(b.box,b.object,b.raycast),d=b.laser,e=b.cursor,f=b.mouse,g=b.mouseCamera;Z(b.interaction,a);var h=[];return g&&(h=aa(c,f,g),_(h,d,e),e.visible=!0,d.visible=!0),h}var ca=M.creator(),da=[],ea=[],fa=!1,ga=void 0,ha=void 0,ia=!0,ja=new THREE.LineBasicMaterial({color:5614335,transparent:!0,blending:THREE.AdditiveBlending}),ka=new THREE.MeshBasicMaterial({color:4473924,transparent:!0,blending:THREE.AdditiveBlending}),la=function(){var a=new THREE.Vector2(-1,-1),b=p();return b.mouse=a,b.mouseIntersection=new THREE.Vector3,b.mouseOffset=new THREE.Vector3,b.mousePlane=new THREE.Plane,b.intersections=[],b.mouseCamera=void 0,window.addEventListener("mousemove",function(c){if(c.buttons||(b.pressed=!1),ga){var d=ga.domElement.getBoundingClientRect();a.x=(c.clientX-d.left)/d.width*2-1,a.y=-(c.clientY-d.top)/d.height*2+1}else a.x=c.clientX/window.innerWidth*2-1,a.y=-c.clientY/window.innerHeight*2+1},!1),window.addEventListener("mousedown",function(a){b.intersections.length,b.pressed=!0,b.clicked=!0},!0),window.addEventListener("mouseup",function(a){b.pressed=!1},!1),b}(),ma=new THREE.Vector3,na=new THREE.Vector3(0,0,-1),oa=new THREE.Matrix4;Y();var pa={create:X,addInputObject:r,enableMouse:c,disableMouse:d,textCreator:ca,globalEvents:O.globalEvents,clearAll:W,update:Y};return Object.defineProperty(pa,"autoUpdate",{get:function(){return ia},set:function(a){return ia=a}}),pa}();window&&(void 0===window.dat&&(window.dat={}),window.dat.GUIVR=P),b&&(b.exports={dat:P}),"function"==typeof define&&define.amd&&define([],P)},{"./button":1,"./checkbox":2,"./colorpicker":3,"./dropdown":5,"./folder":6,"./imagebutton":10,"./imagebuttongrid":11,"./interaction":13,"./keyboard":14,"./sdftext":18,"./slider":20,"./textbox":21,"./utils":23,events:27}],13:[function(a,b,c){"use strict";function d(a){function b(b){k=!1,l=!1,m=!1,b.forEach(function(b){o.indexOf(b)<0&&o.push(b);var e=c(b),f=e.hitObject,g=e.hitPoint,h=a===f;k=k||h,d({input:b,hover:h,hitObject:f,hitPoint:g,buttonName:"pressed",buttonClickName:"clicked",interactionName:"press",downName:"onPressed",holdName:"pressing",upName:"onReleased",hoverName:"hovering"}),d({input:b,hover:h,hitObject:f,hitPoint:g,buttonName:"gripped",interactionName:"grip",downName:"onGripped",holdName:"gripping",upName:"onReleaseGrip"}),j.emit("tick",{input:b,hitObject:f,inputObject:b.object})})}function c(a){return a.intersections.length<=0?{hitPoint:n.setFromMatrixPosition(a.cursor.matrixWorld).clone(),hitObject:void 0}:{hitPoint:a.intersections[0].point,hitObject:a.intersections[0].object}}function d(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=a.input,c=a.hover,d=a.hitObject,f=a.hitPoint,g=a.buttonName,i=a.buttonClickName,k=a.interactionName,n=a.downName,o=a.holdName,q=a.upName,r=a.hoverName;if(!0===b[g]&&void 0===d)return void(b.hitNonModal=!0);if(r&&c&&!1===b[g]){var s={input:b,hitObject:d,point:f,inputObject:b.object,locked:!1};j.emit(r,s)}if(c&&!0===b[i||g]&&void 0===b.interaction[k]){var t={input:b,hitObject:d,point:f,inputObject:b.object,locked:!1};d.userData.partOfModal||(b.hitNonModal=!0),e(d),h.emit(n,t),j.emit(n,t),t.locked&&(b.interaction[k]=p,b.interaction.hover=p),l=!0,m=!0}if(b[g]&&b.interaction[k]===p){var u={input:b,hitObject:d,point:f,inputObject:b.object,locked:!1};j.emit(o,u),l=!0,b.events.emit("onControllerHeld")}!1===b[g]&&b.interaction[k]===p&&(b.interaction[k]=void 0,b.interaction.hover=void 0,j.emit(q,{input:b,hitObject:d,point:f,inputObject:b.object}))}function e(a){(0,g.getTopLevelFolder)(a).promoteZOrder()}function i(){for(var a=!0,b=0;b0}var j=new f.default,k=!1,l=!1,m=!1,n=new THREE.Vector3,o=[],p={hovering:i,pressing:function(){return l},update:b,events:j,hitVolume:a};return p}Object.defineProperty(c,"__esModule",{value:!0}),c.globalEvents=void 0,c.default=d;var e=a("events"),f=function(a){return a&&a.__esModule?a:{default:a}}(e),g=a("./utils"),h=c.globalEvents=new f.default},{"./utils":23,events:27}],14:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){n=!n,l.visible=!n,m.visible=n}var b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},c=b.keyListener,d=b.textCreator,e=new THREE.Group,f=new THREE.Group;e.add(f);var h=new g.default;h.on("keyDown",c);var j="1234567890-=qwertyuiop[]asdfghjkl;'#\\zxcvbnm,./ ".split(""),k=j.map(function(a){return{func:function(){return h.emit("keyDown",a)},text:a}}),l=(0,i.default)({textCreator:d,objects:k,columns:12});f.add(l),k='!"£$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>? '.split("").map(function(a){return{func:function(){return h.emit("keyDown",a)},text:a}});var m=(0,i.default)({textCreator:d,objects:k,columns:12});m.visible=!1,f.add(m);var n=!1,o=(0,i.default)({textCreator:d,columns:1,rowHeight:.1,objects:[{func:function(){return h.emit("keyDown"," ")},text:"space"}]});f.add(o);var p=o.position.y=-.5*(l.spacing+o.spacing);k=[{text:"shift",func:a},{text:"backspace",func:function(){return h.emit("keyDown","\b")}},{text:"enter",func:function(){return h.emit("keyDown","\n")}}];var q=(0,i.default)({textCreator:d,objects:k,columns:3,rowHeight:.1});return f.add(q),q.position.y=p-.5*(o.spacing+q.spacing),e.spacing=l.spacing+o.spacing+q.spacing,f.position.y=q.spacing,Object.defineProperty(e,"hitscan",{get:function(){return[q.hitscan,o.hitscan,n?m.hitscan:l.hitscan].reduce(function(a,b){return a.concat(b)},[])}}),o.folder=m.folder=l.folder=q.folder=e,e.updateControl=function(a){q.updateControl(a),l.updateControl(a),o.updateControl(a),m.updateControl(a)},e}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("events"),g=d(f),h=a("./imagebuttongrid"),i=d(h),j=a("./imagebutton");d(j)},{"./imagebutton":10,"./imagebuttongrid":11,events:27}],15:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a){if(a instanceof THREE.Mesh){a.geometry.computeBoundingBox();var b=a.geometry.boundingBox.max.x-a.geometry.boundingBox.max.y;return a.geometry.translate(b,0,0),a}if(a instanceof THREE.BufferGeometry){a.computeBoundingBox();var c=a.boundingBox.max.x-a.boundingBox.max.y;return a.translate(c,0,0),a}}function f(a,b,c,d){var e=d?new THREE.MeshBasicMaterial({color:16777215}):k.PANEL,f=new THREE.Mesh(new THREE.BoxGeometry(a,b,c),e);return f.geometry.translate(.5*a,0,0),d?e.color.setHex(m.DEFAULT_BACK):m.colorizeGeometry(f.geometry,m.DEFAULT_BACK),f.userData.currentWidth=a,f.userData.currentHeight=b,f.userData.currentDepth=c,f}function g(a,b,c,d){a.geometry.scale(b/a.userData.currentWidth,c/a.userData.currentHeight,d/a.userData.currentDepth),a.userData.currentWidth=b,a.userData.currentHeight=c,a.userData.currentDepth=d}function h(a,b){var c=new THREE.Mesh(new THREE.BoxGeometry(n,a,o),k.PANEL);return c.geometry.translate(.5*n,0,0),m.colorizeGeometry(c.geometry,b),c}function i(){var a=.016,b=new THREE.Shape;b.moveTo(0,0),b.lineTo(-.0096,a),b.lineTo(.0096,a),b.lineTo(0,0);var c=new THREE.ShapeGeometry(b);return c.translate(0,-.008,0),new THREE.Mesh(c,k.PANEL)}Object.defineProperty(c,"__esModule",{value:!0}),c.GRID_BUTTON_MARGIN=c.TEXT_SCALE=c.CHECKBOX_SIZE=c.BORDER_THICKNESS=c.FOLDER_GRAB_HEIGHT=c.FOLDER_HEIGHT=c.SUBFOLDER_WIDTH=c.FOLDER_WIDTH=c.BUTTON_DEPTH=c.CONTROLLER_ID_DEPTH=c.CONTROLLER_ID_WIDTH=c.PANEL_VALUE_TEXT_MARGIN=c.PANEL_LABEL_TEXT_MARGIN=c.PANEL_MARGIN=c.PANEL_SPACING=c.PANEL_DEPTH=c.PANEL_HEIGHT=c.PANEL_WIDTH=void 0,c.alignLeft=e,c.createPanel=f,c.resizePanel=g,c.createControllerIDBox=h,c.createDownArrow=i;var j=a("./sharedmaterials"),k=d(j),l=a("./colors"),m=d(l),n=(c.PANEL_WIDTH=1,c.PANEL_HEIGHT=.08,c.PANEL_DEPTH=.01,c.PANEL_SPACING=0,c.PANEL_MARGIN=.015,c.PANEL_LABEL_TEXT_MARGIN=.06,c.PANEL_VALUE_TEXT_MARGIN=.02,c.CONTROLLER_ID_WIDTH=.02),o=c.CONTROLLER_ID_DEPTH=.001;c.BUTTON_DEPTH=.01,c.FOLDER_WIDTH=1.026,c.SUBFOLDER_WIDTH=1,c.FOLDER_HEIGHT=.09,c.FOLDER_GRAB_HEIGHT=.0512,c.BORDER_THICKNESS=.01,c.CHECKBOX_SIZE=.05,c.TEXT_SCALE=24e-5,c.GRID_BUTTON_MARGIN=.01},{"./colors":4,"./sharedmaterials":19}],16:[function(a,b,c){"use strict";function d(){function a(a){var b=a.inputObject,c=a.input,e=d.folder;void 0!==e&&!0!==e.beingMoved&&(h.copy(e.position),i.copy(e.rotation),e.position.set(0,0,0),e.rotation.set(0,0,0),e.rotation.x=.5*-Math.PI,e.oldParent=e.parent,j.add(e),b.add(j),a.locked=!0,e.beingMoved=!0,c.events.emit("pinned",c))}function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=(a.inputObject,a.input),c=d.folder;void 0!==c&&void 0!==c.oldParent&&!1!==c.beingMoved&&(c.oldParent.add(c),c.oldParent=void 0,c.position.copy(h),c.rotation.copy(i),c.beingMoved=!1,b.events.emit("pinReleased",b))}var c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},d=c.group,e=c.panel,g=(0,f.default)(e);g.events.on("onGripped",a),g.events.on("onReleaseGrip",b);var h=new THREE.Vector3,i=new THREE.Euler,j=new THREE.Group;return j.scale.set(.3,.3,.3),j.position.set(-.015,.015,0),g}Object.defineProperty(c,"__esModule",{value:!0}),c.create=d;var e=a("./interaction"),f=function(a){return a&&a.__esModule?a:{default:a}}(e)},{"./interaction":13}],17:[function(a,b,c){"use strict";var d=a("object-assign"),e="\n#define USE_MAP\n#define USE_UV\nuniform vec3 color;\nuniform float opacity;\n\n#include \n//#include \n#include \n#include \n#include \n#include \n#include \n\n/////\nfloat aastep(float value) {\n // We now assume WebGL2 and so the derivatives are available, \n // so afwidth depends on scale of gui\n float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757;\n return smoothstep(0.5 - afwidth, 0.5 + afwidth, value);\n}\n////\n\nvoid main() {\n\n\t#include \n\n ///\n vec4 diffuseColor = vec4( color, opacity );\n \n vec4 texColor = texture2D(map, vUv);\n float alpha = aastep(texColor.a);\n gl_FragColor = vec4(color, opacity * alpha);\n if (gl_FragColor.a < 0.0001) discard;\n ///\n\n\t#include \n //XXX: big chunk removed from original meshbasic_frag here.\n #include \n\t#include \n\t#include \n}\n";+THREE.REVISION>151&&(e="\n#define USE_MAP\n#define USE_UV\nuniform vec3 color;\nuniform float opacity;\n\n#include \n//#include \n#include \n#include \n#include \n#include \n#include \n\n/////\nfloat aastep(float value) {\n // We now assume WebGL2 and so the derivatives are available, \n // so afwidth depends on scale of gui\n float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757;\n return smoothstep(0.5 - afwidth, 0.5 + afwidth, value);\n}\n////\n\nvoid main() {\n\n\t#include \n\n ///\n vec4 diffuseColor = vec4( color, opacity );\n \n vec4 texColor = texture2D(map, vUv);\n float alpha = aastep(texColor.a);\n gl_FragColor = vec4(color, opacity * alpha);\n if (gl_FragColor.a < 0.0001) discard;\n ///\n\n\t#include \n //XXX: big chunk removed from original meshbasic_frag here.\n #include \n\t#include \n\t#include \n}\n",console.warn("colorspace_fragment used")),b.exports=function(a){a=a||{};var b="number"==typeof a.opacity?a.opacity:1,c=a.color,f=a.map;return a.extensions=a.extensions||{},a.extensions.derivatives=!0,a.name="SDF text material",delete a.map,delete a.color,delete a.precision,delete a.opacity,d({uniforms:{opacity:{type:"f",value:b},map:{type:"t",value:f||new THREE.Texture},color:{type:"c",value:new THREE.Color(c)}},vertexShader:"\n#define USE_MAP\n#define USE_UV\n#include \n#include \n//#include \n#include \n#include \n#include \n\nvoid main() { \n vUv = uv;\n\t#include \n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n}\n",fragmentShader:e},a)}},{"object-assign":31}],18:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a){return a&&a.__esModule?a:{default:a}}function f(a){var b=q.image(),c=new THREE.Texture(b);return c.name="sdfFontTexture",c.needsUpdate=!0,c.minFilter=THREE.LinearFilter,c.magFilter=THREE.LinearFilter,c.generateMipmaps=!1,new THREE.ShaderMaterial((0,i.default)({side:THREE.DoubleSide,transparent:!0,color:a,map:c,type:"SDF Text"}))}function g(){function a(a,b){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:16777215,e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,g=arguments[4],h=arguments[5],i=(0,k.default)({text:a,align:"left",width:g,height:h,flipY:!0,font:b}),j=i.layout,l=d[c];void 0===l&&(l=d[c]=f(c));var m=new THREE.Mesh(i,l);m.scale.multiply(new THREE.Vector3(1,-1,1));var n=e*r;return m.scale.multiplyScalar(n),m.position.y=.5*j.height*n,m}function b(b){var d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=d.color,f=void 0===e?16777215:e,g=d.scale,h=void 0===g?1:g,i=new THREE.Group,j=a(b,c,f,h);return i.add(j),i.layout=j.geometry.layout,i.computeWidth=function(){return i.layout.width*h*o.TEXT_SCALE},i.computeHeight=function(){return i.layout.height*h*o.TEXT_SCALE},i.constrainBounds=function(d,e){i.remove(j);var g=o.TEXT_SCALE;j=a(b,c,f,h,d/g,e/g);var k=j.geometry.layout.height*g/e;k>1&&(b=b.substring(0,.95*b.length/k)+"...",j=a(b,c,f,h,d/g,e/g)),i.add(j),i.layout=j.geometry.layout},i.updateLabel=function(a){j.userData.labelString!==a&&(j.geometry.update(a),j.userData.labelString=a)},i}var c=(0,m.default)(q.fnt()),d={};return{create:b,getMaterial:function(){return material}}}Object.defineProperty(c,"__esModule",{value:!0}),c.createMaterial=f,c.creator=g;var h=a("./sdfshader_logdepth"),i=e(h),j=a("three-bmfont-text"),k=e(j),l=a("parse-bmfont-ascii"),m=e(l),n=a("./layout"),o=d(n),p=a("./font"),q=d(p),r=o.TEXT_SCALE},{"./font":7,"./layout":15,"./sdfshader_logdepth":17,"parse-bmfont-ascii":32,"three-bmfont-text":34}],19:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.TOOLTIP=c.FOLDER=c.LOCATOR=c.PANEL=void 0;var d=a("./colors");(function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);b.default=a})(d),c.PANEL=new THREE.MeshBasicMaterial({color:16777215,vertexColors:!0}),c.LOCATOR=new THREE.MeshBasicMaterial,c.FOLDER=new THREE.MeshBasicMaterial({color:0}),c.TOOLTIP=new THREE.MeshBasicMaterial({color:2117760,transparent:!1,opacity:.8})},{"./colors":4}],20:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a){return a&&a.__esModule?a:{default:a}}function f(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=a.textCreator,c=a.object,d=a.propertyName,e=void 0===d?"undefined":d,f=a.initialValue,h=void 0===f?0:f,q=a.min,r=void 0===q?0:q,t=a.max,v=void 0===t?1:t,x=a.step,z=void 0===x?.1:x,B=a.width,D=void 0===B?w.PANEL_WIDTH:B,E=a.initialHeight,F=void 0===E?w.PANEL_HEIGHT:E,G=a.depth,H=void 0===G?w.PANEL_DEPTH:G,I={alpha:1,value:h,step:z,useStep:!0,precision:1,listen:!1,min:r,max:v,onChangedCB:void 0,onFinishedChange:void 0,pressing:!1};I.step=k(I.value,I.min,I.max),I.precision=o(I.step),I.alpha=m(I.value,I.min,I.max);var J=new THREE.Group;J.guiType="slider",J.toString=function(){return"["+J.guiType+": "+e+"]"};var K=b.create(e);K.position.x=w.PANEL_LABEL_TEXT_MARGIN,K.position.z=H,K.position.y=-.03;var L=void 0;return J.setHeight=function(a){function d(a){I.useStep?S.updateLabel(p(I.value,I.precision).toString()):S.updateLabel(I.value.toString())}function f(){I.pressing?P.color.setHex(u.INTERACTION_COLOR):U.hovering()?P.color.setHex(u.HIGHLIGHT_COLOR):P.color.setHex(u.DEFAULT_COLOR)}function h(){Q.scale.x=Math.min(Math.max(m(I.value,I.min,I.max)*D,1e-6),D)}function k(a){c[e]=a}function q(a){I.alpha=i(a),I.value=l(I.alpha,I.min,I.max),I.useStep&&(I.value=n(I.value,I.step)),I.value=j(I.value,I.min,I.max)}function r(){I.value=t(),I.alpha=m(I.value,I.min,I.max),I.alpha=i(I.alpha)}function t(){return parseFloat(c[e])}function v(a){!1!==J.visible&&(I.pressing=!0,a.locked=!0)}function x(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=a.point;if(!1!==J.visible){I.pressing=!0,Q.updateMatrixWorld(),R.updateMatrixWorld();var c=(new THREE.Vector3).setFromMatrixPosition(Q.matrixWorld),e=(new THREE.Vector3).setFromMatrixPosition(R.matrixWorld),f=I.value;q(g(b,{a:c,b:e})),d(I.value),h(),k(I.value),f!==I.value&&I.onChangedCB&&I.onChangedCB(I.value)}}function z(){I.pressing=!1}L&&J.remove(L),J.spacing=a;var B=.5*D-w.PANEL_MARGIN,E=a-w.PANEL_MARGIN,F=H,G=new THREE.BoxGeometry(B,E,F);G.translate(.5*B,0,0);var M=new THREE.MeshBasicMaterial;M.visible=!1;var N=new THREE.Mesh(G.clone(),M);N.position.z=H,N.position.x=.5*D,N.name="hitscanVolume";var O=new THREE.Mesh(G.clone(),y.PANEL);u.colorizeGeometry(O.geometry,u.SLIDER_BG),O.position.z=.5*H,O.position.x=B+w.PANEL_MARGIN;var P=new THREE.MeshBasicMaterial({color:u.DEFAULT_COLOR}),Q=new THREE.Mesh(G.clone(),P);Q.position.z=.5*H,N.add(Q);var R=new THREE.Mesh(new THREE.BoxGeometry(.05,.05,.05,1,1,1),y.LOCATOR);R.position.x=B,N.add(R),R.visible=!1;var S=b.create(I.value.toString());S.position.x=w.PANEL_VALUE_TEXT_MARGIN+.5*D,S.position.z=2.5*H,S.position.y=-.0325;var T=w.createControllerIDBox(a,u.CONTROLLER_ID_SLIDER);T.position.z=H,L=w.createPanel(D,a,H),L.name="panel",L.add(K,N,O,S,T),J.add(L),d(I.value),h(),J.onChange=function(a){return I.onChangedCB=a,J},J.step=function(a){return I.step=a,I.precision=o(I.step),I.useStep=!0,I.alpha=m(I.value,I.min,I.max),q(I.alpha),d(I.value),h(),J},J.listen=function(){return I.listen=!0,J};var U=(0,s.default)(N);U.events.on("onPressed",v),U.events.on("pressing",x),U.events.on("onReleased",z),J.interaction=U,J.hitscan=[N,L];var V=A.create({group:J,panel:L}),W=C.create({group:J,panel:L});return J.updateControl=function(a){U.update(a),V.update(a),W.update(a),I.listen&&(r(),d(I.value),h()),f()},J.name=function(a){return K.updateLabel(a),J},J.min=function(a){return I.min=a,I.alpha=m(I.value,I.min,I.max),q(I.alpha),d(I.value),h(),J},J.max=function(a){return I.max=a,I.alpha=m(I.value,I.min,I.max),q(I.alpha),d(I.value),h(),J},J.folder&&J.folder.requestLayout(),J},J.setHeight(F),J}function g(a,b){D.copy(b.b).sub(b.a),E.copy(a).sub(b.a);var c=E.projectOnVector(D);F.copy(a).sub(b.a),G.copy(b.b).sub(b.a).normalize();var d=F.normalize().dot(G)>=0?1:-1,e=b.a.distanceTo(b.b)*d,f=c.length()/e;return f>1&&(f=1),f<0&&(f=0),f}function h(a,b,c,d,e){return d+(e-d)*(a-b)/(c-b)}function i(a){return a>1?1:a<0?0:a}function j(a,b,c){return ac?c:a}function k(a,b,c){return(c-b)/100}function l(a,b,c){return h(a,0,1,b,c)}function m(a,b,c){return h(a,b,c,0,1)}function n(a,b){return a%b!=0?Math.round(a/b)*b:a}function o(a){return a=a.toString(),a.indexOf(".")>-1?a.length-a.indexOf(".")-1:0}function p(a,b){if(Math.abs(a)<.01&&0!==a)return a.toExponential(3);var c=Math.pow(10,b);return Math.round(a*c)/c}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var q=a("./textlabel"),r=(e(q),a("./interaction")),s=e(r),t=a("./colors"),u=d(t),v=a("./layout"),w=d(v),x=a("./sharedmaterials"),y=d(x),z=a("./grab"),A=d(z),B=a("./palette"),C=d(B),D=new THREE.Vector3,E=new THREE.Vector3,F=new THREE.Vector3,G=new THREE.Vector3},{"./colors":4,"./grab":8,"./interaction":13,"./layout":15,"./palette":16,"./sharedmaterials":19,"./textlabel":22}],21:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function f(){function a(a){g[i]=a,E.updateLabel(a)}function b(){if(I)return I.visible=!I.visible,void(I.visible&&w.folder.setModalEditor(I));I=dat.GUIVR.create("keyboard"),w.add(I),I.folder=w.folder,w.folder.setModalEditor(I),I.position.x=m,I.position.y=n.FOLDER_HEIGHT,I.hideHeader(),I.addKeyboard(function(c){var d=g[i];switch(c){case"\n":setTimeout(b,100);break;case"\b":d=d.substring(0,d.length-1),a(d);break;default:d+=c,a(d)}})}function c(a){b(),a.locked=!0}function d(){H.hovering()?C.color.setHex(l.TEXTBOX_HIGHLIGHT_BG):C.color.setHex(l.TEXTBOX_BG)}var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},f=e.textCreator,g=e.object,h=e.propertyName,i=void 0===h?"undefined":h,k=e.width,m=void 0===k?n.PANEL_WIDTH:k,o=e.height,p=void 0===o?n.PANEL_HEIGHT:o,r=e.depth,s=void 0===r?n.PANEL_DEPTH:r,t=.5*m-n.PANEL_MARGIN,u=p-n.PANEL_MARGIN,v=n.BUTTON_DEPTH,w=new THREE.Group;w.guiType="textbox",w.toString=function(){return"["+w.guiType+": "+i+"]"};var x=n.createPanel(m,p,s);w.add(x);var y=t/u,z=new THREE.BoxGeometry(t,u,v,Math.floor(4*y),4,4);z.translate(.5*t,0,0);var A=new THREE.MeshBasicMaterial;A.visible=!1;var B=new THREE.Mesh(z.clone(),A);B.position.z=.5*v,B.position.x=.5*m;var C=new THREE.MeshBasicMaterial({color:16777215}),D=new THREE.Mesh(z.clone(),C);B.add(D);var E=f.create(g[i],{color:0,scale:.866});E.position.x=.015,E.position.z=1.2*v,E.position.y=-.025,D.add(E);var F=f.create(i);F.position.x=n.PANEL_LABEL_TEXT_MARGIN,F.position.z=s,F.position.y=-.03;var G=n.createControllerIDBox(p,l.CONTROLLER_ID_BUTTON);G.position.z=s,x.add(F,B,G);var H=(0,j.default)(B);H.events.on("onPressed",c),d();var I;w.interaction=H,w.hitscan=[B,x];var J=q.create({group:w,panel:x});return w.updateControl=function(a){H.update(a),J.update(a),d()},w.name=function(a){return F.updateLabel(a),w},w}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("./index"),h=(e(g),a("./textlabel")),i=(d(h),a("./interaction")),j=d(i),k=a("./colors"),l=e(k),m=a("./layout"),n=e(m),o=a("./sharedmaterials"),p=(e(o),a("./grab")),q=e(p)},{"./colors":4,"./grab":8,"./index":12,"./interaction":13,"./layout":15,"./sharedmaterials":19,"./textlabel":22}],22:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b.default=a,b}function e(a,b){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.4,d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.029,e=arguments.length>4&&void 0!==arguments[4]?arguments[4]:16777215,f=arguments.length>5&&void 0!==arguments[5]?arguments[5]:h.DEFAULT_BACK,g=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,i=new THREE.Group;i.guiType="textlabel",i.toString=function(){return"["+i.guiType+": "+b+"]"};var k=new THREE.Group;i.add(k);var l=a.create(b.toString(),{color:e,scale:g});k.add(l),i.userData.text=l,i.setString=function(a){void 0===a&&(a="[undefined]"),l.updateLabel(a.toString())},i.setNumber=function(a){l.updateLabel(a.toFixed(2))},l.position.z=d;var m=c,n=new THREE.BoxGeometry(m,.06,d,1,1,1) +;n.applyMatrix4((new THREE.Matrix4).makeTranslation(.5*m-.01,0,0));var o=new THREE.Mesh(n,j.PANEL);return h.colorizeGeometry(o.geometry,f),o.position.y=.03,k.add(o),k.position.y=-.03,i.back=o,i}function f(a,b,c){var d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:m,e=arguments[4],f=a.create(b),g=new THREE.Group,h=f.computeWidth(),i=l.TEXT_SCALE*f.layout.height;g.position.x=.5*c,g.position.y=-1.05*d-i,g.position.z=3*e,g.visible=!1,g.add(f);var k=h+.03,n=i+.03,o=new THREE.PlaneGeometry(k,n,1,1),p=new THREE.Mesh(o,j.TOOLTIP);return p.position.x=0,p.position.y=i/2,p.position.z=.5*-e,g.add(p),f.position.x=-.5*h,f.position.y=-.5*i+.0015,g.userData.w=h,g.userData.h=i,g}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e,c.createToolTip=f;var g=a("./colors"),h=d(g),i=a("./sharedmaterials"),j=d(i),k=a("./layout"),l=d(k),m=l.PANEL_HEIGHT+l.PANEL_SPACING},{"./colors":4,"./layout":15,"./sharedmaterials":19}],23:[function(a,b,c){"use strict";function d(a){var b=a.folder;if(a.isHeaderObject)return d(b);if(!a.visible)return!1;for(;b.folder!==b;){if(b.isCollapsed()||!b.visible)return!1;b=b.folder}return!!b.parent&&b.visible}function e(a,b,c){var d=a.children.includes(b);b.visible=c,c&&!d&&THREE.Group.prototype.add.call(a,b),!c&&d&&THREE.Group.prototype.remove.call(a,b),a.visible||console.warn("setVisibility called on child "+b+" of invisible parent "+a)}function f(a){for(var b=g(a);b.folder!==b;)b=b.folder;return b}function g(a){if(a.folder)return a.folder;for(var b=a.parent;!b.folder&&a.parent;)b=b.parent;return b.folder}function h(a,b){var c=[];return b.traverse(function(a){a.geometry&&a.geometry.isBufferGeometry&&3!==a.geometry.attributes.position.itemSize&&(a.geometry.isBufferGeometry=!1,c.push(a.geometry))}),a.setFromObject(b),c.forEach(function(a){return a.isBufferGeometry=!0}),a}Object.defineProperty(c,"__esModule",{value:!0}),c.isControllerVisible=d,c.setVisibility=e,c.getTopLevelFolder=f,c.getFolder=g,c.setBoxFromObject=h},{}],24:[function(a,b,c){function d(a){return a.BYTES_PER_ELEMENT&&"[object ArrayBuffer]"===e.call(a.buffer)||Array.isArray(a)}var e=Object.prototype.toString;b.exports=d},{}],25:[function(a,b,c){b.exports=function(a,b){return"number"==typeof a?a:"number"==typeof b?b:0}},{}],26:[function(a,b,c){b.exports=function(a){switch(a){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}},{}],27:[function(a,b,c){"use strict";function d(a){console&&console.warn&&console.warn(a)}function e(){e.init.call(this)}function f(a){if("function"!=typeof a)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof a)}function g(a){return void 0===a._maxListeners?e.defaultMaxListeners:a._maxListeners}function h(a,b,c,e){var h,i,j;if(f(c),i=a._events,void 0===i?(i=a._events=Object.create(null),a._eventsCount=0):(void 0!==i.newListener&&(a.emit("newListener",b,c.listener?c.listener:c),i=a._events),j=i[b]),void 0===j)j=i[b]=c,++a._eventsCount;else if("function"==typeof j?j=i[b]=e?[c,j]:[j,c]:e?j.unshift(c):j.push(c),(h=g(a))>0&&j.length>h&&!j.warned){j.warned=!0;var k=new Error("Possible EventEmitter memory leak detected. "+j.length+" "+String(b)+" listeners added. Use emitter.setMaxListeners() to increase limit");k.name="MaxListenersExceededWarning",k.emitter=a,k.type=b,k.count=j.length,d(k)}return a}function i(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function j(a,b,c){var d={fired:!1,wrapFn:void 0,target:a,type:b,listener:c},e=i.bind(d);return e.listener=c,d.wrapFn=e,e}function k(a,b,c){var d=a._events;if(void 0===d)return[];var e=d[b];return void 0===e?[]:"function"==typeof e?c?[e.listener||e]:[e]:c?o(e):m(e,e.length)}function l(a){var b=this._events;if(void 0!==b){var c=b[a];if("function"==typeof c)return 1;if(void 0!==c)return c.length}return 0}function m(a,b){for(var c=new Array(b),d=0;d0&&(f=b[0]),f instanceof Error)throw f;var g=new Error("Unhandled error."+(f?" ("+f.message+")":""));throw g.context=f,g}var h=e[a];if(void 0===h)return!1;if("function"==typeof h)u(h,this,b);else for(var i=h.length,j=m(h,i),c=0;c=0;g--)if(c[g]===b||c[g].listener===b){h=c[g].listener,e=g;break}if(e<0)return this;0===e?c.shift():n(c,e),1===c.length&&(d[a]=c[0]),void 0!==d.removeListener&&this.emit("removeListener",a,h||b)}return this},e.prototype.off=e.prototype.removeListener,e.prototype.removeAllListeners=function(a){var b,c,d;if(void 0===(c=this._events))return this;if(void 0===c.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==c[a]&&(0==--this._eventsCount?this._events=Object.create(null):delete c[a]),this;if(0===arguments.length){var e,f=Object.keys(c);for(d=0;d=0;d--)this.removeListener(a,b[d]);return this},e.prototype.listeners=function(a){return k(this,a,!0)},e.prototype.rawListeners=function(a){return k(this,a,!1)},e.listenerCount=function(a,b){return"function"==typeof a.listenerCount?a.listenerCount(b):l.call(a,b)},e.prototype.listenerCount=l,e.prototype.eventNames=function(){return this._eventsCount>0?s(this._events):[]}},{}],28:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){b&&(a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}))}:b.exports=function(a,b){if(b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}}},{}],29:[function(a,b,c){function d(a){return!!a.constructor&&"function"==typeof a.constructor.isBuffer&&a.constructor.isBuffer(a)}function e(a){return"function"==typeof a.readFloatLE&&"function"==typeof a.slice&&d(a.slice(0,0))}b.exports=function(a){return null!=a&&(d(a)||e(a)||!!a._isBuffer)}},{}],30:[function(a,b,c){function d(a){this.glyphs=[],this._measure=this.computeMetrics.bind(this),this.update(a)}function e(a){Object.defineProperty(d.prototype,a,{get:f(a),configurable:!0})}function f(a){return new Function(["return function "+a+"() {"," return this._"+a,"}"].join("\n"))()}function g(a,b){if(!a.chars||0===a.chars.length)return null;var c=m(a.chars,b);return c>=0?a.chars[c]:null}function h(a){for(var b=0;b=0)return a.chars[d].height}return 0}function i(a){for(var b=0;b=0)return a.chars[d]}return 0}function j(a){for(var b=0;b=0)return a.chars[d].height}return 0}function k(a,b,c){if(!a.kernings||0===a.kernings.length)return 0;for(var d=a.kernings,e=0;e=d||o>=d)break;i=o,j=p,f=e}l++}return f&&(j+=f.xoffset),{start:b,end:b+l,width:j}},["width","height","descender","ascender","xHeight","baseline","capHeight","lineHeight"].forEach(e)},{"as-number":25,"word-wrapper":37,xtend:38}],31:[function(a,b,c){"use strict";function d(a){if(null===a||void 0===a)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(a)}var e=Object.getOwnPropertySymbols,f=Object.prototype.hasOwnProperty,g=Object.prototype.propertyIsEnumerable;b.exports=function(){try{if(!Object.assign)return!1;var a=new String("abc");if(a[5]="de","5"===Object.getOwnPropertyNames(a)[0])return!1;for(var b={},c=0;c<10;c++)b["_"+String.fromCharCode(c)]=c;if("0123456789"!==Object.getOwnPropertyNames(b).map(function(a){return b[a]}).join(""))return!1;var d={};return"abcdefghijklmnopqrst".split("").forEach(function(a){d[a]=a}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},d)).join("")}catch(a){return!1}}()?Object.assign:function(a,b){for(var c,h,i=d(a),j=1;j0});this.visibleGlyphs=i;var j=h.positions(i),k=h.uvs(i,d,f,b),l=g([],{clockwise:!0,type:"uint16",count:i.length});if(this.setIndex(l),this.setAttribute("position",new THREE.BufferAttribute(j,2)),this.setAttribute("uv",new THREE.BufferAttribute(k,2)),!a.multipage&&"page"in this.attributes)this.removeAttribute("page");else if(a.multipage){var m=h.pages(i);this.setAttribute("page",new THREE.BufferAttribute(m,1))}},d.prototype.computeBoundingSphere=function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);var a=this.attributes.position.array,b=this.attributes.position.itemSize;if(!a||!b||a.length<2)return this.boundingSphere.radius=0,void this.boundingSphere.center.set(0,0,0);i.computeSphere(a,this.boundingSphere),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.')},d.prototype.computeBoundingBox=function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3);var a=this.boundingBox,b=this.attributes.position.array,c=this.attributes.position.itemSize;if(!b||!c||b.length<2)return void a.makeEmpty();i.computeBox(b,a)}},{"./lib/utils":35,"./lib/vertices":36,inherits:28,"layout-bmfont-text":30,"quad-indices":33}],35:[function(a,b,c){function d(a){var b=a.length/e;f.min[0]=a[0],f.min[1]=a[1],f.max[0]=a[0],f.max[1]=a[1];for(var c=0;cd?d:e}function e(a){return k.test(a)}function f(a,b,c,d,e){for(var f=[],g=c,h=c;hc&&!e(b.charAt(n));)n--;if(n===c)o>c+j.length&&o--,n=o;else for(o=n;n>c&&e(b.charAt(n-j.length));)n--}if(n>=c){var p=a(b,c,n,k);i.push(p)}c=o}return i}function h(a,b,c,d){return{start:b,end:b+Math.min(d,c-b)}}var i=/\n/,j="\n",k=/\s/;b.exports=function(a,c){return b.exports.lines(a,c).map(function(b){return a.substring(b.start,b.end)}).join("\n")},b.exports.lines=function(a,b){if(b=b||{},0===b.width&&"nowrap"!==b.mode)return[];a=a||"";var c="number"==typeof b.width?b.width:Number.MAX_VALUE,d=Math.max(0,b.start||0),e="number"==typeof b.end?b.end:a.length,i=b.mode,j=b.measure||h;return"pre"===i?f(j,a,d,e,c):g(j,a,d,e,c,i)}},{}],38:[function(a,b,c){function d(){for(var a={},b=0;b 0.01) hsv.z = 0.; - gl_FragColor.rgb = hsv2rgb(hsv); + gl_FragColor.rgb = sqrt(hsv2rgb(hsv)); gl_FragColor.w = 1.0; // sjpt } `; @@ -65,7 +63,7 @@ void main() { float dist = abs(selectedHSV.x - vUv.x); bool indicator = dist < 0.01 && dist > 0.005; float v = indicator ? 0. : 1.; - gl_FragColor.rgb = hsv2rgb(vec3(vUv.x, 1., v)); + gl_FragColor.rgb = sqrt(hsv2rgb(vec3(vUv.x, 1., v))); gl_FragColor.w = 1.0; // sjpt } `; @@ -162,8 +160,16 @@ export default function createColorPicker( { var panel; + // change colour in place, course gamma compensation + function colpow(c, p=0.4545) { + c.r = Math.pow(c.r, p); // uglify doesn't understand ** + c.g = Math.pow(c.g, p); // uglify doesn't understand ** + c.b = Math.pow(c.b, p); // uglify doesn't understand ** + } + function changeFn() { image.color.set(color); + colpow(image.color); events.emit('onChange', color); } @@ -244,6 +250,7 @@ export default function createColorPicker( { //even if ref hasn't changed, value still might've, and we're not currently reflecting that. color = object[propertyName]; image.color.copy(color); + colpow(image.color); uniforms.selectedHSV.value.copy(RGBtoHSV(color)); } group.listen = () => { diff --git a/modules/datguivr/folder.js b/modules/datguivr/folder.js index aefbe45..0f6ac85 100644 --- a/modules/datguivr/folder.js +++ b/modules/datguivr/folder.js @@ -44,13 +44,18 @@ function orthographicFolderLayout() { //camBoxSetup(cam); const tfs = topFolderStack.filter(x => x.visible); const near = cam.near, far = cam.far, n = tfs.length; - const zs = tfs.map(f => f.position.z).sort((a,b)=>a-b); - zs[-1] = -9999; // I suppose this is to deal with accessing zs[i-1] below ¯\_(ツ)_/¯ - zs.forEach( (z,i) => zs[i] = Math.max(zs[i], zs[i-1] + 10*Layout.PANEL_DEPTH)); // in case of equals + // Attempt to keep some old z values threw others out, + // especially if many folders undocked in which case we hit the "GUIVR Warning" below + // and sometimes the menus froze. + // So we use the simpler z - i/n below. + //const zs = tfs.map(f => f.position.z).sort((a,b)=>a-b); + //zs[-1] = -9999; // I suppose this is to deal with accessing zs[i-1] below ¯\_(ツ)_/¯ + //zs.forEach( (z,i) => zs[i] = Math.max(zs[i], zs[i-1] + 10*Layout.PANEL_DEPTH)); // in case of equals tfs.forEach((f, i) => { //let z = -0.9*far + i*10*Layout.PANEL_DEPTH; - const z = zs[i]; + //const z = zs[i]; + const z = i/n; if (z !== f.position.z) { f.position.z = z; f.updateMatrix(); @@ -82,7 +87,7 @@ export default function createFolder({ globalControllers } = {} ){ - const MAX_FOLDER_ITEMS_IN_COLUMN = 25; + const MAX_FOLDER_ITEMS_IN_COLUMN = 40; const width = Layout.FOLDER_WIDTH; const depth = Layout.PANEL_DEPTH;