var Base, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; Base = (function() { function Base() { this.changeAnimation = __bind(this.changeAnimation, this); this.frame = 0; window.setInterval(this.changeAnimation, 500); } Base.prototype.tick = function(tile) {}; Base.prototype.sprite = function() { return [this.frame * 8, 0, 8, 8]; }; Base.prototype.spritedetail = function() { return [0, 0, 16, 16]; }; Base.prototype.isMoveable = function() { return false; }; Base.prototype.changeAnimation = function() { if (this.frame === 3) { return this.frame = 0; } else { return this.frame += 1; } }; Base.prototype.spaceProvided = 30; Base.prototype.energyProvided = 7; Base.prototype.isDockable = true; return Base; })(); var Miner, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; Miner = (function() { function Miner() { this.changeAnimation = __bind(this.changeAnimation, this); this.frame = 0; window.setInterval(this.changeAnimation, 500); } Miner.prototype.tick = function(tile) { tile.click("left"); tile.click("left"); tile.click("left"); return tile.click("left"); }; Miner.prototype.sprite = function() { return [this.frame * 8, 16, 8, 8]; }; Miner.prototype.spritedetail = function() { return [0, 16 * 2, 16, 16]; }; Miner.prototype.isMoveable = function() { return true; }; Miner.prototype.changeAnimation = function() { if (this.frame === 1) { return this.frame = 0; } else { return this.frame += 1; } }; Miner.prototype.spaceProvided = 5; Miner.prototype.energyProvided = 0; Miner.prototype.isDockable = false; return Miner; })(); var Silo, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; Silo = (function() { function Silo() { this.changeAnimation = __bind(this.changeAnimation, this); this.frame = 0; window.setInterval(this.changeAnimation, 500); } Silo.prototype.tick = function(tile) {}; Silo.prototype.sprite = function() { return [this.frame * 8, 8, 8, 8]; }; Silo.prototype.spritedetail = function() { return [0, 16, 16, 16]; }; Silo.prototype.isMoveable = function() { return false; }; Silo.prototype.changeAnimation = function() { if (this.frame === 1) { return this.frame = 0; } else { return this.frame += 1; } }; Silo.prototype.spaceProvided = 15; Silo.prototype.energyProvided = 0; Silo.prototype.isDockable = true; return Silo; })(); var Solarpanel; Solarpanel = (function() { function Solarpanel() {} Solarpanel.prototype.tick = function(tile) {}; Solarpanel.prototype.sprite = function() { return [0, 8 * 3, 8, 8]; }; Solarpanel.prototype.spritedetail = function() { return [0, 16 * 3, 16, 16]; }; Solarpanel.prototype.isMoveable = function() { return false; }; Solarpanel.prototype.spaceProvided = 0; Solarpanel.prototype.energyProvided = 15; Solarpanel.prototype.isDockable = true; return Solarpanel; })(); var AnimatedItem, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; AnimatedItem = (function() { function AnimatedItem(options) { this.changeAnimation = __bind(this.changeAnimation, this); this.maxFrames = options.maxFrames, this.image = options.image, this.speed = options.speed; this.frame = 0; window.setInterval(this.changeAnimation, this.speed); } AnimatedItem.prototype.sprite = function() { return [this.frame * 8, 0, 8, 8]; }; AnimatedItem.prototype.changeAnimation = function() { if (this.frame === this.maxFrames) { return this.frame = 0; } else { return this.frame += 1; } }; return AnimatedItem; })(); var Tile; Tile = (function() { function Tile(position) { var i, restype, _i, _len, _ref; this.position = position; this.layers = []; _ref = allResourceTypes(); for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { restype = _ref[i]; this.layers.push(new Tilelayer({ type: restype, depth: i, amount: Math.round(Math.random() * app.game.maxTileAmount) + 1 })); } this.currentLayer = 0; this.empty = false; this.entity = null; this.isActive = false; this.isBuildable = !(Math.round(Math.random() * 10) === 5); if (this.position === 20 * 5 + 10) { this.isBuildable = true; } this.randomSeed = Math.round(Math.random() * 10); } Tile.prototype.click = function(button) { var name; if (!this.isBuildable) { return; } if (button === "left" && !this.empty) { if ((app.game.availableSiloStorage() - app.game.usedSiloStorage()) > 0) { if (this.layers[this.currentLayer].collect()) { name = app.layerIndexToName(this.currentLayer); return app.game.resources[name] += 1; } else { this.currentLayer += 1; if (this.currentLayer === allResourceTypes().length - 1) { this.entity = null; return this.empty = true; } } } } }; Tile.prototype.tick = function() { if (this.entity) { return this.entity.tick(this); } }; Tile.prototype.moveIn = function() { return this.isActive = true; }; Tile.prototype.moveOut = function() { return this.isActive = false; }; Tile.prototype.select = function() { return this.isSelected = true; }; Tile.prototype.deselect = function() { return this.isSelected = false; }; Tile.prototype.getCurrentLayer = function() { return this.layers[this.currentLayer]; }; Tile.prototype.render = function(x, y) { var color, i, numPercent, tileLayer, _i; tileLayer = this.getCurrentLayer(); app.layer.drawRegion(app.images.layers, tileLayer.sprite, x * 8, y * 8); if (!this.isBuildable) { app.layer.drawRegion(app.images.deadtiles, [8 * this.randomSeed, 0, 8, 8], x * 8, y * 8); return; } if (this.entity) { app.layer.drawRegion(app.images.entities, this.entity.sprite(), x * 8, y * 8); } if ((this.entity && this.entity.isMoveable()) || this.isActive) { app.layer.drawImage(app.images.progress, x * 8, y * 8); numPercent = Math.floor((tileLayer.amount * 6) / app.game.maxTileAmount); for (i = _i = 0; 0 <= numPercent ? _i <= numPercent : _i >= numPercent; i = 0 <= numPercent ? ++_i : --_i) { color = ["#f00", "#a00", "#f60", "#aa0", "#0a0", "#0a0"][numPercent]; if (i === numPercent) { color = ["#f00", "#f00", "#f80", "#ff0", "#0f0", "#0f0"][numPercent]; } app.layer.setPixel(color, x * 8 + 1 + i, y * 8 + 6); } } if (this.isActive) { app.layer.drawImage(app.images.active, x * 8, y * 8); } if (this.isSelected) { return app.layer.drawImage(app.images.selected, x * 8, y * 8); } }; return Tile; })(); var Tilelayer; Tilelayer = (function() { function Tilelayer(options) { this.type = options.type, this.depth = options.depth, this.amount = options.amount; this.randomFactor = getRandomInt(0, 4); this.sprite = [this.randomFactor * 8, this.depth * 8, 8, 8]; this.spritedetail = [0, this.depth * 16, 16, 16]; this.hudSprite = [this.randomFactor * 8, this.depth * 8, 4, 4]; } Tilelayer.prototype.collect = function() { if (this.amount === 0) { return false; } return this.amount -= 1; }; return Tilelayer; })(); var allResourceTypes, getRandomInt, posToTile, posToXY, xyToPos, __hasProp = {}.hasOwnProperty; getRandomInt = function(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }; allResourceTypes = function() { var k, _ref, _results; _ref = app.game.resources; _results = []; for (k in _ref) { if (!__hasProp.call(_ref, k)) continue; _results.push(k); } return _results; }; posToTile = function(x, y) { return app.game.map[xyToPos(x, y)]; }; posToXY = function(pos) { var x, y; y = Math.floor(pos / 20); x = pos - (y * 20); return [x, y]; }; xyToPos = function(x, y) { return y * 20 + x; }; var app, __hasProp = {}.hasOwnProperty; app = playground({ width: 8 * 20, height: 8 * 15, scaleToFit: true, smoothing: false, create: function() { this.loadImages("layers", "active", "progress", "selected", "entities", "hud", "actions", "speechbubbles", "deadtiles", "layerdetails", "entitydetails", "buildinfo", "cursor", "info", "end", "intro1", "intro2", "intro3", "intro4", "titlescreen"); return this.currentHoveredTile = new Tile; }, ready: function() { this.game.start(); return this.setState(this.game); }, render: function() { this.layer.clear("#00f"); return this.game.render(); }, layerIndexToName: function(index) { var k, resTypes; resTypes = (function() { var _ref, _results; _ref = this.game.resources; _results = []; for (k in _ref) { if (!__hasProp.call(_ref, k)) continue; _results.push(k); } return _results; }).call(this); return resTypes[index]; } }); app.game = { start: function() { var i, _i, _ref; for (i = _i = 0, _ref = 20 * 15 - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { this.map[i] = new Tile(i); } this.map[20 * 5 + 10].entity = new Base; this.mouseX = 0; this.mouseY = 0; this.currentHoveredTile = new Tile(-1); this.currentSelectedTile = null; window.setInterval(this.tick, 1000); this.hud.start(); this.speechbubble.start(); this.cutScene = false; this.intro = false; return this.titleScreen = true; }, startCutScene: function() { if (this.titleScreen) { this.titleScreen = false; this.cutScene = true; app.game.cutSceneImage = app.images.intro1; return window.setTimeout(app.game.cutScene2, 1500); } }, cutScene2: (function(_this) { return function() { app.game.cutSceneImage = app.images.intro2; return window.setTimeout(app.game.cutScene3, 2000); }; })(this), cutScene3: (function(_this) { return function() { app.game.cutSceneImage = app.images.intro3; return window.setTimeout(app.game.cutScene4, 1500); }; })(this), cutScene4: (function(_this) { return function() { app.game.cutSceneImage = app.images.intro4; return window.setTimeout(app.game.cutSceneEnd, 1500); }; })(this), cutSceneEnd: (function(_this) { return function() { app.game.cutScene = false; app.game.intro = true; return app.game.startIntro(); }; })(this), startIntro: function() { this.speechbubble.setFix(90, 27); this.speechbubble.say('help', 2000); return this.timeout = window.setTimeout(this.intro2, 3000); }, intro2: (function(_this) { return function() { app.game.speechbubble.say('damn', 2000); return app.game.timeout = window.setTimeout(app.game.intro3, 3000); }; })(this), intro3: (function(_this) { return function() { app.game.speechbubble.say('need', 3500); return app.game.timeout = window.setTimeout(app.game.intro4, 4500); }; })(this), intro4: (function(_this) { return function() { app.game.speechbubble.say('collect', 3500); return app.game.timeout = window.setTimeout(app.game.introEnd, 3500); }; })(this), introEnd: (function(_this) { return function() { _this.intro = false; return app.game.speechbubble.setMouse(); }; })(this), render: function() { var i, tile, x, y, _i, _len, _ref; if (this.titleScreen) { app.layer.drawImage(app.images.titlescreen, 0, 0, 20 * 8, 15 * 8); return; } if (this.cutScene) { app.layer.drawImage(this.cutSceneImage, 0, 0, 20 * 8, 15 * 8); return; } if (this.gameEndCheck()) { app.layer.drawImage(app.images.end, 0, 0, 20 * 8, 15 * 8); return; } _ref = this.map; for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { tile = _ref[i]; y = Math.floor(i / 20); x = i - (y * 20); tile.render(x, y); } this.hud.render(); return this.speechbubble.render(); }, mousedown: function(event) { var tile; tile = posToTile(Math.floor(event.x / 8), Math.floor(event.y / 8)); if (!(tile && tile.isBuildable)) { return; } if (this.isMouseInView(event.x / 8, event.y / 8)) { switch (event.button) { case 'left': if (event.x > 143 && event.x < 151 && event.y > 95 && event.y < 106) { return app.game.hud.showBuildInfo(); } else { tile.click(event.button); if (this.currentSelectedTile) { this.currentSelectedTile.deselect(); } tile.select(); return this.currentSelectedTile = tile; } break; case 'right': if (this.currentSelectedTile) { this.currentSelectedTile.deselect(); } return this.currentSelectedTile = null; } } }, mousemove: function(event) { var tile; this.mouseX = event.x; this.mouseY = event.y; if (this.isMouseInView(event.x, event.y)) { tile = posToTile(Math.floor(event.x / 8), Math.floor(event.y / 8)); if (tile) { if (tile !== this.currentHoveredTile) { tile.moveIn(); if (this.currentHoveredTile) { this.currentHoveredTile.moveOut(); } return this.currentHoveredTile = tile; } } } else { if (this.currentHoveredTile) { this.currentHoveredTile.moveOut(); } return this.currentHoveredTile = null; } }, isMouseInView: function(mouseX, mouseY) { if (mouseX < app.width && mouseX >= 0 && mouseY < app.height && mouseY >= 0) { return true; } return false; }, keyup: function(event) { switch (event.key) { case "enter": return this.startCutScene(); case "m": return this.createMiner(); case "e": return this.createSolarpanel(); case "i": return app.game.hud.showBuildInfo(); case "s": return this.createSilo(); case "c": return this.cheatah(); case "1": return this.releaseRes('stardust'); case "2": return this.releaseRes('dirt'); case "3": return this.releaseRes('bedrock'); case "4": return this.releaseRes('oxodum'); case "5": return this.releaseRes('lubinit'); case "6": return this.releaseRes('darkana'); case "7": return this.releaseRes('bio'); case "8": return this.releaseRes('notch'); case "9": return this.releaseRes('lava'); case "space": if (this.currentSelectedTile) { this.currentSelectedTile.deselect(); } return this.currentSelectedTile = null; } }, releaseRes: function(string) { return this.resources[string] = 0; }, tick: (function(_this) { return function() { var tile, _i, _len, _ref, _results; _ref = app.game.map; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { tile = _ref[_i]; _results.push(tile.tick()); } return _results; }; })(this), createMiner: function() { if (this.currentSelectedTile && !this.currentSelectedTile.entity) { if (this.checkResource('lubinit', 5, true)) { return this.currentSelectedTile.entity = new Miner; } else { return this.speechbubble.say('nores'); } } else { return this.speechbubble.say('nosel'); } }, createSilo: function() { if (this.currentSelectedTile) { if (this.checkPosition(this.currentSelectedTile)) { if (this.checkResource('dirt', 5, true)) { return this.currentSelectedTile.entity = new Silo; } else { return this.speechbubble.say('nores'); } } else { return this.speechbubble.say('toofar'); } } else { return this.speechbubble.say('nosel'); } }, createSolarpanel: function() { if (this.currentSelectedTile) { if (this.checkPosition(this.currentSelectedTile)) { if (this.checkResource('notch', 30, true)) { return this.currentSelectedTile.entity = new Solarpanel; } else { return this.speechbubble.say('nores'); } } else { return this.speechbubble.say('toofar'); } } else { return this.speechbubble.say('nosel'); } }, checkResource: function(type, amount, drain) { if (drain == null) { drain = false; } if (this.resources[type] >= amount) { if (drain) { this.resources[type] -= amount; } return true; } return false; }, checkPosition: function(tile) { var x, y, _ref; if (tile.entity) { return false; } _ref = posToXY(tile.position), x = _ref[0], y = _ref[1]; if (app.game.map[xyToPos(x - 1, y)].entity && app.game.map[xyToPos(x - 1, y)].entity.isDockable && x > 0) { return true; } if (app.game.map[xyToPos(x + 1, y)].entity && app.game.map[xyToPos(x + 1, y)].entity.isDockable && x < 19) { return true; } if (app.game.map[xyToPos(x, y - 1)].entity && app.game.map[xyToPos(x, y - 1)].entity.isDockable && y > 0) { return true; } if (app.game.map[xyToPos(x, y + 1)].entity && app.game.map[xyToPos(x, y + 1)].entity.isDockable && y < 14) { return true; } return false; }, cheatah: function() { var amount, type, _ref, _results; _ref = this.resources; _results = []; for (type in _ref) { amount = _ref[type]; _results.push(this.resources[type] = 100); } return _results; }, map: [], miners: [], maxTileAmount: 75, availableSiloStorage: function() { var space, tile, _i, _len, _ref; space = 0; _ref = app.game.map; for (_i = 0, _len = _ref.length; _i < _len; _i++) { tile = _ref[_i]; if (tile.entity) { space += tile.entity.spaceProvided; } } return space; }, usedSiloStorage: function() { var amount, resource, space, _ref; space = 0; _ref = this.resources; for (resource in _ref) { amount = _ref[resource]; space += amount; } return space; }, solarpanelCount: function() { var energy, tile, _i, _len, _ref; energy = 0; _ref = app.game.map; for (_i = 0, _len = _ref.length; _i < _len; _i++) { tile = _ref[_i]; if (tile.entity && tile.entity.energyProvided > 10) { energy += 1; } } return energy; }, gameEndCheck: function() { if (this.solarpanelCount() >= 4) { return true; } return false; }, resources: { stardust: 0, dirt: 0, bedrock: 0, oxodum: 0, lubinit: 0, darkana: 0, bio: 0, notch: 0, lava: 0 } }; var __hasProp = {}.hasOwnProperty; app.game.hud = { start: function() { var i, k, resTypes, restype, _i, _len, _results; resTypes = (function() { var _ref, _results; _ref = app.game.resources; _results = []; for (k in _ref) { if (!__hasProp.call(_ref, k)) continue; _results.push(k); } return _results; })(); this.position = { x: 45, y: 103 }; this.buildinfo = false; this.itemArrow = new AnimatedItem({ maxFrames: 10, image: app.images.actions, speed: 50 }); this.resources = []; _results = []; for (i = _i = 0, _len = resTypes.length; _i < _len; i = ++_i) { restype = resTypes[i]; _results.push(this.resources[restype] = new Tilelayer({ type: restype, depth: i })); } return _results; }, render: function() { var colorStep, currentSelectedTile, f, i, length, panelusage, resourcePanelColor, usedSiloStoragePercent, x, y, _i, _j; panelusage = 'resources'; app.layer.drawImage(app.images.hud, 0, 11 * 8); app.layer.drawImage(app.images.info, 143, 95); if (this.buildinfo) { app.layer.drawRegion(app.images.buildinfo, [0, 0, 106, 10], 1, 1); app.layer.drawRegion(app.images.buildinfo, [0, 10, 106, 10], 1, 12); app.layer.drawRegion(app.images.buildinfo, [0, 20, 106, 10], 1, 23); app.layer.drawRegion(app.images.buildinfo, [0, 30, 106, 10], 1, 34); } currentSelectedTile = app.game.currentSelectedTile; if (currentSelectedTile !== null) { panelusage = 'tile'; if (currentSelectedTile.entity) { panelusage = 'entity'; app.layer.drawRegion(app.images.entitydetails, currentSelectedTile.entity.spritedetail(), 12, 95); } else { app.layer.drawRegion(app.images.layerdetails, currentSelectedTile.getCurrentLayer().spritedetail, 12, 95); } } usedSiloStoragePercent = Math.round((100 / app.game.availableSiloStorage()) * app.game.usedSiloStorage()); for (f = _i = 0; _i <= 100; f = ++_i) { resourcePanelColor = "#333"; if (f <= usedSiloStoragePercent) { colorStep = Math.round((usedSiloStoragePercent / 100) * 5); resourcePanelColor = ["#0a0", "#0a0", "#aa0", "#f60", "#a00", "#f00"][colorStep]; } x = 44 + f; y = 112; app.layer.setPixel(resourcePanelColor, x, y); } length = Math.round(((25 * app.game.solarpanelCount()) * 45) / 100); for (i = _j = 0; 0 <= length ? _j <= length : _j >= length; i = 0 <= length ? ++_j : --_j) { app.layer.setPixel("#228ca5", 49 + i, 91); app.layer.setPixel("#8ddaed", 50 + i, 92); app.layer.setPixel("#228ca5", 49 + i, 93); } switch (panelusage) { case 'tile': return this.showResources(); case 'entity': if (currentSelectedTile.entity.isMoveable()) { return app.layer.drawRegion(this.itemArrow.image, this.itemArrow.sprite(), 44, 102); } break; case 'resources': return this.showResources(); } }, showBuildInfo: function() { if (this.timeout) { clearTimeout(this.timeout); } this.buildinfo = true; return this.timeout = window.setTimeout(this.hideBuildInfo, 6000); }, hideBuildInfo: function() { return app.game.hud.buildinfo = false; }, showResources: function() { var amount, amountByTwenty, amountLeft, color, e, f, i, spritePosition, tileLayer, type, x, y, _i, _j, _ref, _results; i = 0; _ref = app.game.resources; _results = []; for (type in _ref) { amount = _ref[type]; if (amount > 0) { tileLayer = this.resources[type]; spritePosition = { x: i * 9 + this.position.x, y: this.position.y }; app.layer.drawRegion(app.images.layers, tileLayer.hudSprite, spritePosition.x, spritePosition.y); amountByTwenty = Math.floor(amount / 20); amountLeft = amount - amountByTwenty * 20; for (e = _i = 0; 0 <= amountLeft ? _i <= amountLeft : _i >= amountLeft; e = 0 <= amountLeft ? ++_i : --_i) { color = "#0a0"; if (e === amountLeft) { color = "#0f0"; } if (e < 6) { x = spritePosition.x - 1 + e; y = spritePosition.y - 1; } else if (e < 10) { x = spritePosition.x + 4; y = spritePosition.y - 1 + e - 5; } else if (e < 15) { x = spritePosition.x + 14 - e; y = spritePosition.y + 4; } else { x = spritePosition.x - 1; y = spritePosition.y + 19 - e; } app.layer.setPixel(color, x, y); } for (f = _j = 0; 0 <= amountByTwenty ? _j <= amountByTwenty : _j >= amountByTwenty; f = 0 <= amountByTwenty ? ++_j : --_j) { if (f > 0) { color = "#0000ff"; x = spritePosition.x - 2 + f; y = spritePosition.y + 7; app.layer.setPixel(color, x, y); } } } _results.push(i++); } return _results; } }; app.game.speechbubble = { start: function() { this.sprite = [0, 0, 27, 13]; return this.positioning = 'mouse'; }, setFix: function(x, y) { this.x = x; this.y = y; return this.positioning = 'fixed'; }, setMouse: function() { return this.positioning = 'mouse'; }, say: function(text, timeout) { if (timeout == null) { timeout = 1000; } if (this.timeout) { clearTimeout(this.timeout); } switch (text) { case 'help': this.sprite = [0, 0, 27, 13]; break; case 'toofar': this.sprite = [0, 13, 90, 13]; break; case 'nores': this.sprite = [0, 26, 90, 13]; break; case 'nosel': this.sprite = [0, 39, 90, 13]; break; case 'damn': this.sprite = [0, 52, 90, 13]; break; case 'need': this.sprite = [0, 65, 90, 13]; break; case 'collect': this.sprite = [0, 78, 90, 13]; } this.visible = true; return this.timeout = window.setTimeout(this.hide, timeout); }, hide: (function(_this) { return function() { return app.game.speechbubble.visible = false; }; })(this), render: function() { var x, y; switch (this.positioning) { case 'mouse': x = app.game.mouseX + 5; y = app.game.mouseY - 15; break; case 'fixed': x = this.x; y = this.y; } if (this.visible) { return app.layer.drawRegion(app.images.speechbubbles, this.sprite, x, y); } } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJhc2UuY29mZmVlIiwibWluZXIuY29mZmVlIiwic2lsby5jb2ZmZWUiLCJzb2xhcnBhbmVsLmNvZmZlZSIsImFuaW1hdGVkaXRlbS5jb2ZmZWUiLCJ0aWxlLmNvZmZlZSIsInRpbGVsYXllci5jb2ZmZWUiLCJ0b29scy5jb2ZmZWUiLCJhcHAuY29mZmVlIiwiZ2FtZS5jb2ZmZWUiLCJodWQuY29mZmVlIiwic3BlZWNoYnViYmxlLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLElBQUE7RUFBQSxrRkFBQTs7QUFBQTtBQUNlLEVBQUEsY0FBQSxHQUFBO0FBQ1gsNkRBQUEsQ0FBQTtBQUFBLElBQUEsSUFBQyxDQUFBLEtBQUQsR0FBUyxDQUFULENBQUE7QUFBQSxJQUVBLE1BQU0sQ0FBQyxXQUFQLENBQW1CLElBQUMsQ0FBQSxlQUFwQixFQUFxQyxHQUFyQyxDQUZBLENBRFc7RUFBQSxDQUFiOztBQUFBLGlCQUtBLElBQUEsR0FBTSxTQUFDLElBQUQsR0FBQSxDQUxOLENBQUE7O0FBQUEsaUJBT0EsTUFBQSxHQUFRLFNBQUEsR0FBQTtXQUNOLENBQUMsSUFBQyxDQUFBLEtBQUQsR0FBTyxDQUFSLEVBQVcsQ0FBWCxFQUFjLENBQWQsRUFBaUIsQ0FBakIsRUFETTtFQUFBLENBUFIsQ0FBQTs7QUFBQSxpQkFVQSxZQUFBLEdBQWMsU0FBQSxHQUFBO1dBQ1osQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEVBQVAsRUFBVyxFQUFYLEVBRFk7RUFBQSxDQVZkLENBQUE7O0FBQUEsaUJBYUEsVUFBQSxHQUFZLFNBQUEsR0FBQTtXQUNWLE1BRFU7RUFBQSxDQWJaLENBQUE7O0FBQUEsaUJBZ0JBLGVBQUEsR0FBaUIsU0FBQSxHQUFBO0FBQ2YsSUFBQSxJQUFHLElBQUMsQ0FBQSxLQUFELEtBQVUsQ0FBYjthQUNFLElBQUMsQ0FBQSxLQUFELEdBQVMsRUFEWDtLQUFBLE1BQUE7YUFHRSxJQUFDLENBQUEsS0FBRCxJQUFVLEVBSFo7S0FEZTtF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LENBQUEsSUFBbkIsRUFBeUIsT0FBekIsRUFiUjtFQUFBLENBYkw7QUFBQSxFQTRCQSxJQUFBLEVBQU0sQ0FBQSxTQUFBLEtBQUEsR0FBQTtXQUFBLFNBQUEsR0FBQTthQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQXRCLEdBQWdDLE1BRDVCO0lBQUEsRUFBQTtFQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0E1Qk47QUFBQSxFQStCQSxNQUFBLEVBQVEsU0FBQSxHQUFBO0FBQ04sUUFBQSxJQUFBO0FBQUEsWUFBTyxJQUFDLENBQUEsV0FBUjtBQUFBLFdBQ08sT0FEUDtBQUVJLFFBQUEsQ0FBQSxHQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBVCxHQUFnQixDQUFwQixDQUFBO0FBQUEsUUFDQSxDQUFBLEdBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFULEdBQWdCLEVBRHBCLENBRko7QUFDTztBQURQLFdBSU8sT0FKUDtBQUtJLFFBQUEsQ0FBQSxHQUFJLElBQUMsQ0FBQSxDQUFMLENBQUE7QUFBQSxRQUNBLENBQUEsR0FBSSxJQUFDLENBQUEsQ0FETCxDQUxKO0FBQUEsS0FBQTtBQVFBLElBQUEsSUFBZ0UsSUFBQyxDQUFBLE9BQWpFO2FBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBaEMsRUFBK0MsSUFBQyxDQUFBLE1BQWhELEVBQXdELENBQXhELEVBQTJELENBQTNELEVBQUE7S0FUTTtFQUFBLENBL0JSO0NBREYsQ0FBQSIsImZpbGUiOiJhcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBCYXNlXG4gIGNvbnN0cnVjdG9yOiAtPlxuICAgIEBmcmFtZSA9IDBcblxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAY2hhbmdlQW5pbWF0aW9uLCA1MDBcblxuICB0aWNrOiAodGlsZSktPlxuXG4gIHNwcml0ZTogLT5cbiAgICBbQGZyYW1lKjgsIDAsIDgsIDhdIFxuXG4gIHNwcml0ZWRldGFpbDogLT5cbiAgICBbMCwgMCwgMTYsIDE2XVxuXG4gIGlzTW92ZWFibGU6IC0+XG4gICAgZmFsc2VcblxuICBjaGFuZ2VBbmltYXRpb246ID0+XG4gICAgaWYgQGZyYW1lID09IDNcbiAgICAgIEBmcmFtZSA9IDBcbiAgICBlbHNlXG4gICAgICBAZnJhbWUgKz0gMVxuXG4gIHNwYWNlUHJvdmlkZWQ6IDMwXG4gIGVuZXJneVByb3ZpZGVkOiA3XG4gIGlzRG9ja2FibGU6IHRydWVcbiIsImNsYXNzIE1pbmVyXG4gIGNvbnN0cnVjdG9yOiAtPlxuICAgIEBmcmFtZSA9IDBcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgQGNoYW5nZUFuaW1hdGlvbiwgNTAwXG5cbiAgdGljazogKHRpbGUpIC0+XG4gICAgdGlsZS5jbGljayBcImxlZnRcIlxuICAgIHRpbGUuY2xpY2sgXCJsZWZ0XCJcbiAgICB0aWxlLmNsaWNrIFwibGVmdFwiXG4gICAgdGlsZS5jbGljayBcImxlZnRcIlxuXG4gIHNwcml0ZTogLT5cbiAgICBbQGZyYW1lKjgsIDE2LCA4LCA4XSBcblxuICBzcHJpdGVkZXRhaWw6IC0+XG4gICAgWzAsIDE2KjIsIDE2LCAxNl1cblxuICBpc01vdmVhYmxlOiAtPlxuICAgIHRydWVcblxuICBjaGFuZ2VBbmltYXRpb246ID0+XG4gICAgaWYgQGZyYW1lID09IDFcbiAgICAgIEBmcmFtZSA9IDBcbiAgICBlbHNlXG4gICAgICBAZnJhbWUgKz0gMVxuXG4gIHNwYWNlUHJvdmlkZWQ6IDVcbiAgZW5lcmd5UHJvdmlkZWQ6IDBcbiAgaXNEb2NrYWJsZTogZmFsc2VcbiIsImNsYXNzIFNpbG9cbiAgY29uc3RydWN0b3I6IC0+XG4gICAgQGZyYW1lID0gMFxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAY2hhbmdlQW5pbWF0aW9uLCA1MDBcbiAgICBcbiAgdGljazogKHRpbGUpLT5cblxuICBzcHJpdGU6IC0+XG4gICAgW0BmcmFtZSo4LCA4LCA4LCA4XVxuXG4gIHNwcml0ZWRldGFpbDogLT5cbiAgICBbMCwgMTYsIDE2LCAxNl1cblxuICBpc01vdmVhYmxlOiAtPlxuICAgIGZhbHNlXG5cbiAgY2hhbmdlQW5pbWF0aW9uOiA9PlxuICAgIGlmIEBmcmFtZSA9PSAxXG4gICAgICBAZnJhbWUgPSAwXG4gICAgZWxzZVxuICAgICAgQGZyYW1lICs9IDFcblxuICBzcGFjZVByb3ZpZGVkOiAxNVxuICBlbmVyZ3lQcm92aWRlZDogMFxuXG4gIGlzRG9ja2FibGU6IHRydWVcblxuIiwiY2xhc3MgU29sYXJwYW5lbFxuICB0aWNrOiAodGlsZSktPlxuXG4gIHNwcml0ZTogLT5cbiAgICBbMCwgOCozLCA4LCA4XSBcblxuICBzcHJpdGVkZXRhaWw6IC0+XG4gICAgWzAsIDE2KjMsIDE2LCAxNl1cblxuICBpc01vdmVhYmxlOiAtPlxuICAgIGZhbHNlXG5cbiAgc3BhY2VQcm92aWRlZDogMFxuICBlbmVyZ3lQcm92aWRlZDogMTVcbiAgaXNEb2NrYWJsZTogdHJ1ZVxuIiwiY2xhc3MgQW5pbWF0ZWRJdGVtXG4gIGNvbnN0cnVjdG9yOiAob3B0aW9ucykgLT5cbiAgICB7QG1heEZyYW1lcywgQGltYWdlLCBAc3BlZWR9ID0gb3B0aW9uc1xuXG4gICAgQGZyYW1lID0gMFxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAY2hhbmdlQW5pbWF0aW9uLCBAc3BlZWRcblxuICBzcHJpdGU6IC0+XG4gICAgW0BmcmFtZSo4LCAwLCA4LCA4XVxuXG4gIGNoYW5nZUFuaW1hdGlvbjogPT5cbiAgICBpZiBAZnJhbWUgPT0gQG1heEZyYW1lc1xuICAgICAgQGZyYW1lID0gMFxuICAgIGVsc2VcbiAgICAgIEBmcmFtZSArPSAxXG4iLCJjbGFzcyBUaWxlXG4gIGNvbnN0cnVjdG9yOiAocG9zaXRpb24pLT5cbiAgICBAcG9zaXRpb24gPSBwb3NpdGlvblxuICAgIEBsYXllcnMgPSBbXVxuICAgIGZvciByZXN0eXBlLCBpIGluIGFsbFJlc291cmNlVHlwZXMoKVxuICAgICAgQGxheWVycy5wdXNoIG5ldyBUaWxlbGF5ZXIoXG4gICAgICAgIHR5cGU6IHJlc3R5cGUsXG4gICAgICAgIGRlcHRoOiBpLFxuICAgICAgICBhbW91bnQ6IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSphcHAuZ2FtZS5tYXhUaWxlQW1vdW50KSsxXG4gICAgICApXG4gICAgXG4gICAgQGN1cnJlbnRMYXllciA9IDBcbiAgICBAZW1wdHkgPSBmYWxzZVxuICAgIEBlbnRpdHkgPSBudWxsXG4gICAgQGlzQWN0aXZlID0gZmFsc2VcbiAgICBAaXNCdWlsZGFibGUgPSAhKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMCkgPT0gNSlcbiAgICBAaXNCdWlsZGFibGUgPSB0cnVlIGlmIEBwb3NpdGlvbiA9PSAyMCo1KzEwXG4gICAgQHJhbmRvbVNlZWQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTApXG5cbiAgY2xpY2s6IChidXR0b24pLT5cbiAgICAjIFNvbWUgdGlsZXMgYXJlIG5vdCBidWlsZGFibGVcbiAgICByZXR1cm4gdW5sZXNzIEBpc0J1aWxkYWJsZVxuXG4gICAgaWYgYnV0dG9uID09IFwibGVmdFwiIGFuZCAhQGVtcHR5XG4gICAgICBpZiAoYXBwLmdhbWUuYXZhaWxhYmxlU2lsb1N0b3JhZ2UoKSAtIGFwcC5nYW1lLnVzZWRTaWxvU3RvcmFnZSgpKSA+IDBcbiAgICAgICAgaWYgQGxheWVyc1tAY3VycmVudExheWVyXS5jb2xsZWN0KClcbiAgICAgICAgICBuYW1lID0gYXBwLmxheWVySW5kZXhUb05hbWUoQGN1cnJlbnRMYXllcilcbiAgICAgICAgICBhcHAuZ2FtZS5yZXNvdXJjZXNbbmFtZV0gKz0gMVxuICAgICAgICBlbHNlXG4gICAgICAgICAgQGN1cnJlbnRMYXllciArPSAxXG5cbiAgICAgICAgICBpZiBAY3VycmVudExheWVyID09IGFsbFJlc291cmNlVHlwZXMoKS5sZW5ndGgtMVxuICAgICAgICAgICAgIyBJZiB3ZSByZWFjaCB0aGUgYm90dG9tLCB0aGUgZW50aXR5IG9uIHRvcCBkaWVzLlxuICAgICAgICAgICAgQGVudGl0eSA9IG51bGxcbiAgICAgICAgICAgIEBlbXB0eSA9IHRydWVcblxuICB0aWNrOiAtPlxuICAgIEBlbnRpdHkudGljayBAIGlmIEBlbnRpdHlcblxuICBtb3ZlSW46IC0+XG4gICAgQGlzQWN0aXZlID0gdHJ1ZVxuXG4gIG1vdmVPdXQ6IC0+XG4gICAgQGlzQWN0aXZlID0gZmFsc2VcblxuICBzZWxlY3Q6IC0+XG4gICAgQGlzU2VsZWN0ZWQgPSB0cnVlXG5cbiAgZGVzZWxlY3Q6IC0+XG4gICAgQGlzU2VsZWN0ZWQgPSBmYWxzZVxuXG4gIGdldEN1cnJlbnRMYXllcjogLT5cbiAgICBAbGF5ZXJzW0BjdXJyZW50TGF5ZXJdXG5cbiAgcmVuZGVyOiAoeCwgeSktPlxuICAgIHRpbGVMYXllciA9IEBnZXRDdXJyZW50TGF5ZXIoKVxuICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMubGF5ZXJzLCB0aWxlTGF5ZXIuc3ByaXRlLCB4KjgsIHkqOFxuXG4gICAgdW5sZXNzIEBpc0J1aWxkYWJsZVxuICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5kZWFkdGlsZXMsIFs4KkByYW5kb21TZWVkLCAwLCA4LCA4XSwgeCo4LCB5KjhcbiAgICAgIHJldHVyblxuXG4gICAgaWYgQGVudGl0eVxuICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5lbnRpdGllcywgQGVudGl0eS5zcHJpdGUoKSwgeCo4LCB5KjhcblxuICAgIGlmIChAZW50aXR5IGFuZCBAZW50aXR5LmlzTW92ZWFibGUoKSkgb3IgQGlzQWN0aXZlXG4gICAgICAjIERyYXcgdGhlIHN0YXR1cyBpbmRpY2F0b3IuXG4gICAgICBhcHAubGF5ZXIuZHJhd0ltYWdlIGFwcC5pbWFnZXMucHJvZ3Jlc3MsIHgqOCwgeSo4XG4gICAgICBudW1QZXJjZW50ID0gTWF0aC5mbG9vcigodGlsZUxheWVyLmFtb3VudCo2KS9hcHAuZ2FtZS5tYXhUaWxlQW1vdW50KVxuICAgICAgZm9yIGkgaW4gWzAuLm51bVBlcmNlbnRdXG4gICAgICAgIGNvbG9yID0gW1wiI2YwMFwiLCBcIiNhMDBcIiwgXCIjZjYwXCIsIFwiI2FhMFwiLCBcIiMwYTBcIiwgXCIjMGEwXCJdW251bVBlcmNlbnRdXG4gICAgICAgIGNvbG9yID0gW1wiI2YwMFwiLCBcIiNmMDBcIiwgXCIjZjgwXCIsIFwiI2ZmMFwiLCBcIiMwZjBcIiwgXCIjMGYwXCJdW251bVBlcmNlbnRdIGlmIGkgPT0gbnVtUGVyY2VudFxuICAgICAgICBhcHAubGF5ZXIuc2V0UGl4ZWwoY29sb3IsIHgqOCsxK2ksIHkqOCs2KVxuICAgIFxuICAgIGlmIEBpc0FjdGl2ZVxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLmFjdGl2ZSwgeCo4LCB5KjhcblxuICAgIGlmIEBpc1NlbGVjdGVkICAgIFxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLnNlbGVjdGVkLCB4KjgsIHkqOFxuXG5cbiIsImNsYXNzIFRpbGVsYXllclxuICBjb25zdHJ1Y3RvcjogKG9wdGlvbnMpLT5cbiAgICB7QHR5cGUsIEBkZXB0aCwgQGFtb3VudH0gPSBvcHRpb25zXG4gICAgQHJhbmRvbUZhY3RvciA9IGdldFJhbmRvbUludCAwLCA0XG4gICAgQHNwcml0ZSA9IFtAcmFuZG9tRmFjdG9yKjgsIEBkZXB0aCo4LCA4LCA4XVxuICAgIEBzcHJpdGVkZXRhaWwgPSBbMCwgQGRlcHRoKjE2LCAxNiwgMTZdXG4gICAgQGh1ZFNwcml0ZSA9IFtAcmFuZG9tRmFjdG9yKjgsIEBkZXB0aCo4LCA0LCA0XVxuXG4gIGNvbGxlY3Q6IC0+XG4gICAgcmV0dXJuIGZhbHNlIGlmIEBhbW91bnQgPT0gMFxuICAgIEBhbW91bnQgLT0gMVxuIiwiZ2V0UmFuZG9tSW50ID0gKG1pbiwgbWF4KSAtPlxuICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xuXG5hbGxSZXNvdXJjZVR5cGVzID0gLT5cbiAgKGsgZm9yIG93biBrIG9mIGFwcC5nYW1lLnJlc291cmNlcylcblxucG9zVG9UaWxlID0gKHgsIHkpLT5cbiAgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCwgeSldXG5cbnBvc1RvWFkgPSAocG9zKS0+XG4gIHkgPSBNYXRoLmZsb29yKHBvcy8yMClcbiAgeCA9IHBvcy0oeSoyMClcbiAgW3gsIHldXG5cbnh5VG9Qb3MgPSAoeCwgeSktPlxuICB5KjIwICsgeFxuIiwiYXBwID0gcGxheWdyb3VuZChcbiAgd2lkdGg6IDgqMjAsXG4gIGhlaWdodDogOCoxNSxcbiAgc2NhbGVUb0ZpdDogdHJ1ZSxcbiAgc21vb3RoaW5nOiBmYWxzZSxcblxuICBjcmVhdGU6IC0+XG4gICAgQGxvYWRJbWFnZXMgXCJsYXllcnNcIiwgXCJhY3RpdmVcIiwgXCJwcm9ncmVzc1wiLCBcInNlbGVjdGVkXCIsIFwiZW50aXRpZXNcIiwgXCJodWRcIiwgXCJhY3Rpb25zXCIsIFwic3BlZWNoYnViYmxlc1wiLCBcImRlYWR0aWxlc1wiLCBcImxheWVyZGV0YWlsc1wiLCBcImVudGl0eWRldGFpbHNcIiwgXCJidWlsZGluZm9cIiwgXCJjdXJzb3JcIiwgXCJpbmZvXCIsIFwiZW5kXCIsIFwiaW50cm8xXCIsIFwiaW50cm8yXCIsIFwiaW50cm8zXCIsIFwiaW50cm80XCIsIFwidGl0bGVzY3JlZW5cIlxuICAgIEBjdXJyZW50SG92ZXJlZFRpbGUgPSBuZXcgVGlsZVxuICBcbiAgcmVhZHk6IC0+XG4gICAgQGdhbWUuc3RhcnQoKVxuICAgIEBzZXRTdGF0ZSBAZ2FtZVxuXG4gIHJlbmRlcjogLT5cbiAgICBAbGF5ZXIuY2xlYXIgXCIjMDBmXCJcbiAgICBAZ2FtZS5yZW5kZXIoKVxuXG4gIGxheWVySW5kZXhUb05hbWU6IChpbmRleCktPlxuICAgIHJlc1R5cGVzID0gKGsgZm9yIG93biBrIG9mIEBnYW1lLnJlc291cmNlcylcbiAgICByZXNUeXBlc1tpbmRleF1cbilcbiIsImFwcC5nYW1lID1cbiAgc3RhcnQ6IC0+XG4gICAgZm9yIGkgaW4gWzAuLjIwKjE1LTFdXG4gICAgICBAbWFwW2ldID0gbmV3IFRpbGUoaSlcbiAgICBAbWFwWzIwKjUrMTBdLmVudGl0eSA9IG5ldyBCYXNlXG5cbiAgICBAbW91c2VYID0gMFxuICAgIEBtb3VzZVkgPSAwICAgIFxuICAgIEBjdXJyZW50SG92ZXJlZFRpbGUgPSBuZXcgVGlsZSgtMSlcbiAgICBAY3VycmVudFNlbGVjdGVkVGlsZSA9IG51bGxcblxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAdGljaywgMTAwMFxuICAgIEBodWQuc3RhcnQoKVxuICAgIEBzcGVlY2hidWJibGUuc3RhcnQoKVxuXG4gICAgQGN1dFNjZW5lID0gZmFsc2VcbiAgICBAaW50cm8gPSBmYWxzZVxuICAgIEB0aXRsZVNjcmVlbiA9IHRydWVcblxuICAjIFRPRE86IFJlZmFjdG9yIHRoaXMgd2hvbGUgY3JhcCAuLi4gSSBjYW4ndCBiZWxpdmUgSSBhbSB3cml0aW5nIHRoaXMgLi4uXG4gIHN0YXJ0Q3V0U2NlbmU6IC0+XG4gICAgaWYgQHRpdGxlU2NyZWVuXG4gICAgICBAdGl0bGVTY3JlZW4gPSBmYWxzZVxuICAgICAgQGN1dFNjZW5lID0gdHJ1ZVxuICAgICAgYXBwLmdhbWUuY3V0U2NlbmVJbWFnZSA9IGFwcC5pbWFnZXMuaW50cm8xXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCBhcHAuZ2FtZS5jdXRTY2VuZTIsIDE1MDBcblxuICBjdXRTY2VuZTI6ID0+XG4gICAgYXBwLmdhbWUuY3V0U2NlbmVJbWFnZSA9IGFwcC5pbWFnZXMuaW50cm8yXG4gICAgd2luZG93LnNldFRpbWVvdXQgYXBwLmdhbWUuY3V0U2NlbmUzLCAyMDAwXG5cbiAgY3V0U2NlbmUzOiA9PlxuICAgIGFwcC5nYW1lLmN1dFNjZW5lSW1hZ2UgPSBhcHAuaW1hZ2VzLmludHJvM1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0IGFwcC5nYW1lLmN1dFNjZW5lNCwgMTUwMFxuXG4gIGN1dFNjZW5lNDogPT5cbiAgICBhcHAuZ2FtZS5jdXRTY2VuZUltYWdlID0gYXBwLmltYWdlcy5pbnRybzRcbiAgICB3aW5kb3cuc2V0VGltZW91dCBhcHAuZ2FtZS5jdXRTY2VuZUVuZCwgMTUwMFxuXG4gIGN1dFNjZW5lRW5kOiA9PlxuICAgIGFwcC5nYW1lLmN1dFNjZW5lID0gZmFsc2VcbiAgICBhcHAuZ2FtZS5pbnRybyA9IHRydWVcbiAgICBhcHAuZ2FtZS5zdGFydEludHJvKClcblxuICBzdGFydEludHJvOiAtPlxuICAgIEBzcGVlY2hidWJibGUuc2V0Rml4IDkwLCAyN1xuICAgIEBzcGVlY2hidWJibGUuc2F5ICdoZWxwJywgMjAwMFxuXG4gICAgQHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBAaW50cm8yLCAzMDAwXG5cbiAgaW50cm8yOiA9PlxuICAgIGFwcC5nYW1lLnNwZWVjaGJ1YmJsZS5zYXkgJ2RhbW4nLCAyMDAwXG4gICAgYXBwLmdhbWUudGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0IGFwcC5nYW1lLmludHJvMywgMzAwMFxuXG4gIGludHJvMzogPT5cbiAgICBhcHAuZ2FtZS5zcGVlY2hidWJibGUuc2F5ICduZWVkJywgMzUwMFxuICAgIGFwcC5nYW1lLnRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBhcHAuZ2FtZS5pbnRybzQsIDQ1MDBcblxuICBpbnRybzQ6ID0+XG4gICAgYXBwLmdhbWUuc3BlZWNoYnViYmxlLnNheSAnY29sbGVjdCcsIDM1MDBcbiAgICBhcHAuZ2FtZS50aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQgYXBwLmdhbWUuaW50cm9FbmQsIDM1MDBcblxuICBpbnRyb0VuZDogPT5cbiAgICBAaW50cm8gPSBmYWxzZVxuICAgIGFwcC5nYW1lLnNwZWVjaGJ1YmJsZS5zZXRNb3VzZSgpXG5cbiAgcmVuZGVyOiAtPlxuICAgIGlmIEB0aXRsZVNjcmVlblxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLnRpdGxlc2NyZWVuLCAwLCAwLCAyMCo4LCAxNSo4XG4gICAgICByZXR1cm5cbiAgICAgIFxuICAgIGlmIEBjdXRTY2VuZVxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBAY3V0U2NlbmVJbWFnZSwgMCwgMCwgMjAqOCwgMTUqOFxuICAgICAgcmV0dXJuXG4gIFxuICAgIGlmIEBnYW1lRW5kQ2hlY2soKVxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLmVuZCwgMCwgMCwgMjAqOCwgMTUqOFxuICAgICAgcmV0dXJuXG5cbiAgICBmb3IgdGlsZSwgaSBpbiBAbWFwXG4gICAgICB5ID0gTWF0aC5mbG9vcihpLzIwKVxuICAgICAgeCA9IGktKHkqMjApXG4gICAgICB0aWxlLnJlbmRlcih4LCB5KVxuICAgIEBodWQucmVuZGVyKClcbiAgICBAc3BlZWNoYnViYmxlLnJlbmRlcigpXG5cbiAgbW91c2Vkb3duOiAoZXZlbnQpLT5cbiAgICB0aWxlID0gcG9zVG9UaWxlKE1hdGguZmxvb3IoZXZlbnQueC84KSwgTWF0aC5mbG9vcihldmVudC55LzgpKVxuXG4gICAgIyBDYW4ndCBjbGljayBvbiBkZWFkIHRpbGVzXG4gICAgcmV0dXJuIHVubGVzcyB0aWxlIGFuZCB0aWxlLmlzQnVpbGRhYmxlXG4gICAgXG4gICAgaWYgQGlzTW91c2VJblZpZXcgZXZlbnQueC84LCBldmVudC55LzhcbiAgICAgIHN3aXRjaCBldmVudC5idXR0b25cbiAgICAgICAgd2hlbiAnbGVmdCdcbiAgICAgICAgICBpZiBldmVudC54ID4gMTQzIGFuZCBldmVudC54IDwgMTUxIGFuZCBldmVudC55ID4gOTUgYW5kIGV2ZW50LnkgPCAxMDZcbiAgICAgICAgICAgIGFwcC5nYW1lLmh1ZC5zaG93QnVpbGRJbmZvKClcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aWxlLmNsaWNrKGV2ZW50LmJ1dHRvbilcblxuICAgICAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUuZGVzZWxlY3QoKSBpZiBAY3VycmVudFNlbGVjdGVkVGlsZVxuICAgICAgICAgICAgdGlsZS5zZWxlY3QoKVxuICAgICAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUgPSB0aWxlXG4gICAgICAgIHdoZW4gJ3JpZ2h0J1xuICAgICAgICAgIEBjdXJyZW50U2VsZWN0ZWRUaWxlLmRlc2VsZWN0KCkgaWYgQGN1cnJlbnRTZWxlY3RlZFRpbGVcbiAgICAgICAgICBAY3VycmVudFNlbGVjdGVkVGlsZSA9IG51bGxcblxuICBtb3VzZW1vdmU6IChldmVudCktPlxuICAgIEBtb3VzZVggPSBldmVudC54XG4gICAgQG1vdXNlWSA9IGV2ZW50LnlcblxuICAgIGlmIEBpc01vdXNlSW5WaWV3IGV2ZW50LngsIGV2ZW50LnlcbiAgICAgIHRpbGUgPSBwb3NUb1RpbGUoTWF0aC5mbG9vcihldmVudC54LzgpLCBNYXRoLmZsb29yKGV2ZW50LnkvOCkpXG5cbiAgICAgIGlmIHRpbGVcbiAgICAgICAgaWYgdGlsZSAhPSBAY3VycmVudEhvdmVyZWRUaWxlXG4gICAgICAgICAgdGlsZS5tb3ZlSW4oKVxuICAgICAgICAgIEBjdXJyZW50SG92ZXJlZFRpbGUubW92ZU91dCgpIGlmIEBjdXJyZW50SG92ZXJlZFRpbGVcbiAgICAgICAgICBAY3VycmVudEhvdmVyZWRUaWxlID0gdGlsZVxuICAgIGVsc2VcbiAgICAgIEBjdXJyZW50SG92ZXJlZFRpbGUubW92ZU91dCgpIGlmIEBjdXJyZW50SG92ZXJlZFRpbGVcbiAgICAgIEBjdXJyZW50SG92ZXJlZFRpbGUgPSBudWxsXG5cbiAgaXNNb3VzZUluVmlldzogKG1vdXNlWCwgbW91c2VZKSAtPlxuICAgIGlmIG1vdXNlWCA8IGFwcC53aWR0aCBhbmQgbW91c2VYID49IDAgYW5kIG1vdXNlWSA8IGFwcC5oZWlnaHQgYW5kIG1vdXNlWSA+PSAwXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgZmFsc2VcblxuICBrZXl1cDogKGV2ZW50KSAtPlxuICAgIHN3aXRjaCBldmVudC5rZXlcbiAgICAgIHdoZW4gXCJlbnRlclwiIHRoZW4gQHN0YXJ0Q3V0U2NlbmUoKVxuICAgICAgd2hlbiBcIm1cIiB0aGVuIEBjcmVhdGVNaW5lcigpXG4gICAgICB3aGVuIFwiZVwiIHRoZW4gQGNyZWF0ZVNvbGFycGFuZWwoKVxuICAgICAgd2hlbiBcImlcIiB0aGVuIGFwcC5nYW1lLmh1ZC5zaG93QnVpbGRJbmZvKClcbiAgICAgIHdoZW4gXCJzXCIgdGhlbiBAY3JlYXRlU2lsbygpXG4gICAgICB3aGVuIFwiY1wiIHRoZW4gQGNoZWF0YWgoKVxuICAgICAgd2hlbiBcIjFcIiB0aGVuIEByZWxlYXNlUmVzICdzdGFyZHVzdCdcbiAgICAgIHdoZW4gXCIyXCIgdGhlbiBAcmVsZWFzZVJlcyAnZGlydCdcbiAgICAgIHdoZW4gXCIzXCIgdGhlbiBAcmVsZWFzZVJlcyAnYmVkcm9jaydcbiAgICAgIHdoZW4gXCI0XCIgdGhlbiBAcmVsZWFzZVJlcyAnb3hvZHVtJ1xuICAgICAgd2hlbiBcIjVcIiB0aGVuIEByZWxlYXNlUmVzICdsdWJpbml0J1xuICAgICAgd2hlbiBcIjZcIiB0aGVuIEByZWxlYXNlUmVzICdkYXJrYW5hJ1xuICAgICAgd2hlbiBcIjdcIiB0aGVuIEByZWxlYXNlUmVzICdiaW8nXG4gICAgICB3aGVuIFwiOFwiIHRoZW4gQHJlbGVhc2VSZXMgJ25vdGNoJ1xuICAgICAgd2hlbiBcIjlcIiB0aGVuIEByZWxlYXNlUmVzICdsYXZhJ1xuICAgICAgd2hlbiBcInNwYWNlXCJcbiAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUuZGVzZWxlY3QoKSBpZiBAY3VycmVudFNlbGVjdGVkVGlsZVxuICAgICAgICBAY3VycmVudFNlbGVjdGVkVGlsZSA9IG51bGxcblxuICByZWxlYXNlUmVzOiAoc3RyaW5nKSAtPlxuICAgIEByZXNvdXJjZXNbc3RyaW5nXSA9IDBcblxuICB0aWNrOiA9PlxuICAgIHRpbGUudGljaygpIGZvciB0aWxlIGluIGFwcC5nYW1lLm1hcFxuXG4gIGNyZWF0ZU1pbmVyOiAtPlxuICAgIGlmIEBjdXJyZW50U2VsZWN0ZWRUaWxlIGFuZCAhQGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5XG4gICAgICBpZiBAY2hlY2tSZXNvdXJjZSgnbHViaW5pdCcsIDUsIHRydWUpXG4gICAgICAgIEBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eSA9IG5ldyBNaW5lclxuICAgICAgZWxzZVxuICAgICAgICBAc3BlZWNoYnViYmxlLnNheSAnbm9yZXMnXG4gICAgZWxzZVxuICAgICAgQHNwZWVjaGJ1YmJsZS5zYXkgJ25vc2VsJ1xuXG4gIGNyZWF0ZVNpbG86IC0+XG4gICAgaWYgQGN1cnJlbnRTZWxlY3RlZFRpbGVcbiAgICAgIGlmIEBjaGVja1Bvc2l0aW9uKEBjdXJyZW50U2VsZWN0ZWRUaWxlKVxuICAgICAgICBpZiBAY2hlY2tSZXNvdXJjZSgnZGlydCcsIDUsIHRydWUpXG4gICAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5ID0gbmV3IFNpbG9cbiAgICAgICAgZWxzZVxuICAgICAgICAgIEBzcGVlY2hidWJibGUuc2F5ICdub3JlcydcbiAgICAgIGVsc2VcbiAgICAgICAgQHNwZWVjaGJ1YmJsZS5zYXkgJ3Rvb2ZhcidcbiAgICBlbHNlXG4gICAgICBAc3BlZWNoYnViYmxlLnNheSAnbm9zZWwnXG5cbiAgIyBUT0RPOiBPTUcgcmVmYWN0b3IgdGhpcyAuLi5cbiAgY3JlYXRlU29sYXJwYW5lbDogLT5cbiAgICBpZiBAY3VycmVudFNlbGVjdGVkVGlsZVxuICAgICAgaWYgQGNoZWNrUG9zaXRpb24oQGN1cnJlbnRTZWxlY3RlZFRpbGUpXG4gICAgICAgIGlmIEBjaGVja1Jlc291cmNlKCdub3RjaCcsIDMwLCB0cnVlKVxuICAgICAgICAgIEBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eSA9IG5ldyBTb2xhcnBhbmVsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBAc3BlZWNoYnViYmxlLnNheSAnbm9yZXMnXG4gICAgICBlbHNlXG4gICAgICAgIEBzcGVlY2hidWJibGUuc2F5ICd0b29mYXInXG4gICAgZWxzZVxuICAgICAgQHNwZWVjaGJ1YmJsZS5zYXkgJ25vc2VsJ1xuICAgIFxuICBjaGVja1Jlc291cmNlOiAodHlwZSwgYW1vdW50LCBkcmFpbiA9IGZhbHNlKSAtPlxuICAgIGlmIEByZXNvdXJjZXNbdHlwZV0gPj0gYW1vdW50XG4gICAgICBAcmVzb3VyY2VzW3R5cGVdIC09IGFtb3VudCBpZiBkcmFpblxuICAgICAgcmV0dXJuIHRydWVcbiAgICBmYWxzZVxuXG4gIGNoZWNrUG9zaXRpb246ICh0aWxlKS0+XG4gICAgcmV0dXJuIGZhbHNlIGlmIHRpbGUuZW50aXR5XG5cbiAgICAjIENoZWNrIGFsbCA0IGRpcmVjdGlvbnNcbiAgICBbeCwgeV0gPSBwb3NUb1hZKHRpbGUucG9zaXRpb24pXG5cbiAgICAjIExlZnRcbiAgICByZXR1cm4gdHJ1ZSBpZiBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LTEsIHkpXS5lbnRpdHkgXFxcbiAgICAgIGFuZCBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LTEsIHkpXS5lbnRpdHkuaXNEb2NrYWJsZSBcXFxuICAgICAgYW5kIHggPiAwXG5cbiAgICAjIFJpZ2h0XG4gICAgcmV0dXJuIHRydWUgaWYgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCsxLCB5KV0uZW50aXR5IFxcXG4gICAgICBhbmQgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCsxLCB5KV0uZW50aXR5LmlzRG9ja2FibGUgXFxcbiAgICAgIGFuZCB4IDwgMTlcblxuICAgICMgVG9wXG4gICAgcmV0dXJuIHRydWUgaWYgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCwgeS0xKV0uZW50aXR5IFxcXG4gICAgICBhbmQgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCwgeS0xKV0uZW50aXR5LmlzRG9ja2FibGUgXFxcbiAgICAgIGFuZCB5ID4gMFxuXG4gICAgIyBCb3R0b21cbiAgICByZXR1cm4gdHJ1ZSBpZiBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LCB5KzEpXS5lbnRpdHkgXFxcbiAgICAgIGFuZCBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LCB5KzEpXS5lbnRpdHkuaXNEb2NrYWJsZSBcXFxuICAgICAgYW5kIHkgPCAxNFxuXG4gICAgZmFsc2VcblxuICBjaGVhdGFoOiAtPlxuICAgIGZvciB0eXBlLCBhbW91bnQgb2YgQHJlc291cmNlc1xuICAgICAgQHJlc291cmNlc1t0eXBlXSA9IDEwMFxuXG4gIG1hcDogW11cbiAgbWluZXJzOiBbXVxuICBtYXhUaWxlQW1vdW50OiA3NVxuXG4gIGF2YWlsYWJsZVNpbG9TdG9yYWdlOiAtPlxuICAgIHNwYWNlID0gMFxuICAgIGZvciB0aWxlIGluIGFwcC5nYW1lLm1hcFxuICAgICAgc3BhY2UgKz0gdGlsZS5lbnRpdHkuc3BhY2VQcm92aWRlZCBpZiB0aWxlLmVudGl0eVxuICAgIHNwYWNlXG5cbiAgdXNlZFNpbG9TdG9yYWdlOiAtPlxuICAgIHNwYWNlID0gMFxuICAgIHNwYWNlICs9IGFtb3VudCBmb3IgcmVzb3VyY2UsIGFtb3VudCBvZiBAcmVzb3VyY2VzXG4gICAgc3BhY2VcblxuICBzb2xhcnBhbmVsQ291bnQ6IC0+XG4gICAgZW5lcmd5ID0gMFxuICAgIGZvciB0aWxlIGluIGFwcC5nYW1lLm1hcFxuICAgICAgIyBGSVhNRTogVGhhdHMgbm90IGEgc2FuZSBzb2x1dGlvbiBoYWhhaGFoIDpEXG4gICAgICBlbmVyZ3kgKz0gMSBpZiB0aWxlLmVudGl0eSBhbmQgdGlsZS5lbnRpdHkuZW5lcmd5UHJvdmlkZWQgPiAxMFxuICAgIGVuZXJneVxuXG4gIGdhbWVFbmRDaGVjazogLT5cbiAgICByZXR1cm4gdHJ1ZSBpZiBAc29sYXJwYW5lbENvdW50KCkgPj0gNFxuICAgIGZhbHNlXG5cbiAgcmVzb3VyY2VzOlxuICAgIHN0YXJkdXN0OiAwXG4gICAgZGlydDogMFxuICAgIGJlZHJvY2s6IDBcbiAgICBveG9kdW06IDBcbiAgICBsdWJpbml0OiAwXG4gICAgZGFya2FuYTogMFxuICAgIGJpbzogMFxuICAgIG5vdGNoOiAwXG4gICAgbGF2YTogMFxuIiwiYXBwLmdhbWUuaHVkID1cbiAgc3RhcnQ6IC0+XG4gICAgcmVzVHlwZXMgPSAoayBmb3Igb3duIGsgb2YgYXBwLmdhbWUucmVzb3VyY2VzKVxuICAgIFxuICAgIEBwb3NpdGlvbiA9IHg6IDQ1LCB5OiAxMDNcbiAgICBAYnVpbGRpbmZvID0gZmFsc2VcblxuICAgIEBpdGVtQXJyb3cgPSBuZXcgQW5pbWF0ZWRJdGVtIG1heEZyYW1lczogMTAsIGltYWdlOiBhcHAuaW1hZ2VzLmFjdGlvbnMsIHNwZWVkOiA1MFxuXG4gICAgQHJlc291cmNlcyA9IFtdXG4gICAgZm9yIHJlc3R5cGUsIGkgaW4gcmVzVHlwZXNcbiAgICAgIEByZXNvdXJjZXNbcmVzdHlwZV0gPSBuZXcgVGlsZWxheWVyKFxuICAgICAgICB0eXBlOiByZXN0eXBlLFxuICAgICAgICBkZXB0aDogaVxuICAgICAgKVxuXG4gIHJlbmRlcjogLT5cbiAgICBwYW5lbHVzYWdlID0gJ3Jlc291cmNlcydcbiAgICBhcHAubGF5ZXIuZHJhd0ltYWdlIGFwcC5pbWFnZXMuaHVkLCAwLCAxMSo4XG5cbiAgICBhcHAubGF5ZXIuZHJhd0ltYWdlIGFwcC5pbWFnZXMuaW5mbywgMTQzLCA5NVxuXG4gICAgIyBjdXJzb3JcbiAgICAjIGFwcC5sYXllci5kcmF3SW1hZ2UgYXBwLmltYWdlcy5jdXJzb3IsIGFwcC5nYW1lLm1vdXNlWCwgYXBwLmdhbWUubW91c2VZXG5cbiAgICBpZiBAYnVpbGRpbmZvXG4gICAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLmJ1aWxkaW5mbywgWzAsIDAsIDEwNiwgMTBdLCAxLCAxXG4gICAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLmJ1aWxkaW5mbywgWzAsIDEwLCAxMDYsIDEwXSwgMSwgMTJcbiAgICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMuYnVpbGRpbmZvLCBbMCwgMjAsIDEwNiwgMTBdLCAxLCAyM1xuICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5idWlsZGluZm8sIFswLCAzMCwgMTA2LCAxMF0sIDEsIDM0XG5cbiAgICBjdXJyZW50U2VsZWN0ZWRUaWxlID0gYXBwLmdhbWUuY3VycmVudFNlbGVjdGVkVGlsZVxuICAgIGlmIGN1cnJlbnRTZWxlY3RlZFRpbGUgIT0gbnVsbFxuICAgICAgcGFuZWx1c2FnZSA9ICd0aWxlJ1xuXG4gICAgICBpZiBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eVxuICAgICAgICBwYW5lbHVzYWdlID0gJ2VudGl0eSdcbiAgICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5lbnRpdHlkZXRhaWxzLCBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eS5zcHJpdGVkZXRhaWwoKSwgMTIsIDk1XG4gICAgICBlbHNlXG4gICAgICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMubGF5ZXJkZXRhaWxzLCBjdXJyZW50U2VsZWN0ZWRUaWxlLmdldEN1cnJlbnRMYXllcigpLnNwcml0ZWRldGFpbCwgMTIsIDk1XG5cbiAgICAjIHNpbG8gY2FwYWNpdHlcbiAgICB1c2VkU2lsb1N0b3JhZ2VQZXJjZW50ID0gTWF0aC5yb3VuZCgoMTAwIC8gYXBwLmdhbWUuYXZhaWxhYmxlU2lsb1N0b3JhZ2UoKSkgKiBhcHAuZ2FtZS51c2VkU2lsb1N0b3JhZ2UoKSlcbiAgICBmb3IgZiBpbiBbMC4uMTAwXVxuICAgICAgcmVzb3VyY2VQYW5lbENvbG9yID0gXCIjMzMzXCJcblxuICAgICAgaWYgZiA8PSB1c2VkU2lsb1N0b3JhZ2VQZXJjZW50XG4gICAgICAgIGNvbG9yU3RlcCA9IE1hdGgucm91bmQoKHVzZWRTaWxvU3RvcmFnZVBlcmNlbnQvMTAwKSo1KVxuICAgICAgICByZXNvdXJjZVBhbmVsQ29sb3IgPSBbXCIjMGEwXCIsIFwiIzBhMFwiLCBcIiNhYTBcIiwgXCIjZjYwXCIsIFwiI2EwMFwiLCBcIiNmMDBcIl1bY29sb3JTdGVwXVxuXG4gICAgICB4ID0gNDQrZlxuICAgICAgeSA9IDExMlxuICAgICAgYXBwLmxheWVyLnNldFBpeGVsKHJlc291cmNlUGFuZWxDb2xvciwgeCwgeSlcblxuICAgICMgRW5lcmd5IHByb2R1Y3Rpb24gKDQ3KVxuICAgIFxuICAgIGxlbmd0aCA9IE1hdGgucm91bmQoKCgyNSphcHAuZ2FtZS5zb2xhcnBhbmVsQ291bnQoKSkqNDUpLzEwMClcbiAgICBmb3IgaSBpbiBbMC4ubGVuZ3RoXVxuICAgICAgYXBwLmxheWVyLnNldFBpeGVsKFwiIzIyOGNhNVwiLCA0OStpLCA5MSlcbiAgICAgIGFwcC5sYXllci5zZXRQaXhlbChcIiM4ZGRhZWRcIiwgNTAraSwgOTIpXG4gICAgICBhcHAubGF5ZXIuc2V0UGl4ZWwoXCIjMjI4Y2E1XCIsIDQ5K2ksIDkzKVxuXG4gICAgc3dpdGNoIHBhbmVsdXNhZ2VcbiAgICAgIHdoZW4gJ3RpbGUnXG4gICAgICAgIEBzaG93UmVzb3VyY2VzKClcbiAgICAgIHdoZW4gJ2VudGl0eSdcbiAgICAgICAgI2FwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMuZW50aXRpZXMsIGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5LnNwcml0ZSgpLCA0NCwgMTAyXG4gICAgICAgIGlmIGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5LmlzTW92ZWFibGUoKVxuICAgICAgICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIEBpdGVtQXJyb3cuaW1hZ2UsIEBpdGVtQXJyb3cuc3ByaXRlKCksIDQ0LCAxMDJcbiAgICAgIHdoZW4gJ3Jlc291cmNlcydcbiAgICAgICAgQHNob3dSZXNvdXJjZXMoKVxuXG4gIHNob3dCdWlsZEluZm86IC0+XG4gICAgY2xlYXJUaW1lb3V0KEB0aW1lb3V0KSBpZiBAdGltZW91dFxuICAgIEBidWlsZGluZm8gPSB0cnVlXG4gICAgQHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBAaGlkZUJ1aWxkSW5mbywgNjAwMFxuXG4gIGhpZGVCdWlsZEluZm86IC0+XG4gICAgYXBwLmdhbWUuaHVkLmJ1aWxkaW5mbyA9IGZhbHNlXG5cbiAgc2hvd1Jlc291cmNlczogLT5cbiAgICAjIHJlc291cmNlc1xuICAgIGkgPSAwXG4gICAgZm9yIHR5cGUsIGFtb3VudCBvZiBhcHAuZ2FtZS5yZXNvdXJjZXNcbiAgICAgIGlmIGFtb3VudCA+IDBcbiAgICAgICAgdGlsZUxheWVyID0gQHJlc291cmNlc1t0eXBlXVxuXG4gICAgICAgIHNwcml0ZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IGkqOStAcG9zaXRpb24ueFxuICAgICAgICAgIHk6IEBwb3NpdGlvbi55XG4gICAgICAgIH1cblxuICAgICAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLmxheWVycywgdGlsZUxheWVyLmh1ZFNwcml0ZSwgc3ByaXRlUG9zaXRpb24ueCwgc3ByaXRlUG9zaXRpb24ueVxuXG4gICAgICAgIGFtb3VudEJ5VHdlbnR5ID0gTWF0aC5mbG9vcihhbW91bnQvMjApXG4gICAgICAgIGFtb3VudExlZnQgPSBhbW91bnQgLSBhbW91bnRCeVR3ZW50eSoyMFxuICAgICAgICBmb3IgZSBpbiBbMC4uYW1vdW50TGVmdF1cbiAgICAgICAgICBjb2xvciA9IFwiIzBhMFwiXG4gICAgICAgICAgY29sb3IgPSBcIiMwZjBcIiBpZiBlID09IGFtb3VudExlZnRcblxuICAgICAgICAgIGlmIGUgPCA2XG4gICAgICAgICAgICB4ID0gc3ByaXRlUG9zaXRpb24ueC0xK2VcbiAgICAgICAgICAgIHkgPSBzcHJpdGVQb3NpdGlvbi55LTFcbiAgICAgICAgICBlbHNlIGlmIGUgPCAxMFxuICAgICAgICAgICAgeCA9IHNwcml0ZVBvc2l0aW9uLngrNFxuICAgICAgICAgICAgeSA9IHNwcml0ZVBvc2l0aW9uLnktMStlLTVcbiAgICAgICAgICBlbHNlIGlmIGUgPCAxNVxuICAgICAgICAgICAgeCA9IHNwcml0ZVBvc2l0aW9uLngrMTQtZVxuICAgICAgICAgICAgeSA9IHNwcml0ZVBvc2l0aW9uLnkrNFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggPSBzcHJpdGVQb3NpdGlvbi54LTFcbiAgICAgICAgICAgIHkgPSBzcHJpdGVQb3NpdGlvbi55KzE5LWVcblxuICAgICAgICAgIGFwcC5sYXllci5zZXRQaXhlbChjb2xvciwgeCwgeSlcblxuICAgICAgICBmb3IgZiBpbiBbMC4uYW1vdW50QnlUd2VudHldXG4gICAgICAgICAgaWYgZiA+IDBcbiAgICAgICAgICAgIGNvbG9yID0gXCIjMDAwMGZmXCJcblxuICAgICAgICAgICAgeCA9IHNwcml0ZVBvc2l0aW9uLngtMitmXG4gICAgICAgICAgICB5ID0gc3ByaXRlUG9zaXRpb24ueSs3XG5cbiAgICAgICAgICAgIGFwcC5sYXllci5zZXRQaXhlbChjb2xvciwgeCwgeSlcblxuICAgICAgaSsrXG4iLCJhcHAuZ2FtZS5zcGVlY2hidWJibGUgPVxuICBzdGFydDogLT5cbiAgICBAc3ByaXRlID0gWzAsIDAsIDI3LCAxM11cbiAgICBAcG9zaXRpb25pbmcgPSAnbW91c2UnXG5cbiAgc2V0Rml4OiAoeCwgeSkgLT5cbiAgICBAeCA9IHhcbiAgICBAeSA9IHlcblxuICAgIEBwb3NpdGlvbmluZyA9ICdmaXhlZCdcblxuICBzZXRNb3VzZTogLT5cbiAgICBAcG9zaXRpb25pbmcgPSAnbW91c2UnXG5cbiAgc2F5OiAodGV4dCwgdGltZW91dCA9IDEwMDApIC0+XG4gICAgY2xlYXJUaW1lb3V0KEB0aW1lb3V0KSBpZiBAdGltZW91dFxuXG4gICAgc3dpdGNoIHRleHRcbiAgICAgIHdoZW4gJ2hlbHAnIHRoZW4gQHNwcml0ZSA9IFswLCAwLCAyNywgMTNdXG4gICAgICB3aGVuICd0b29mYXInIHRoZW4gQHNwcml0ZSA9IFswLCAxMywgOTAsIDEzXVxuICAgICAgd2hlbiAnbm9yZXMnIHRoZW4gQHNwcml0ZSA9IFswLCAyNiwgOTAsIDEzXVxuICAgICAgd2hlbiAnbm9zZWwnIHRoZW4gQHNwcml0ZSA9IFswLCAzOSwgOTAsIDEzXVxuICAgICAgd2hlbiAnZGFtbicgdGhlbiBAc3ByaXRlID0gWzAsIDUyLCA5MCwgMTNdXG4gICAgICB3aGVuICduZWVkJyB0aGVuIEBzcHJpdGUgPSBbMCwgNjUsIDkwLCAxM11cbiAgICAgIHdoZW4gJ2NvbGxlY3QnIHRoZW4gQHNwcml0ZSA9IFswLCA3OCwgOTAsIDEzXVxuXG4gICAgQHZpc2libGUgPSB0cnVlXG4gICAgQHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBAaGlkZSwgdGltZW91dFxuXG4gIGhpZGU6ID0+XG4gICAgYXBwLmdhbWUuc3BlZWNoYnViYmxlLnZpc2libGUgPSBmYWxzZVxuXG4gIHJlbmRlcjogLT5cbiAgICBzd2l0Y2ggQHBvc2l0aW9uaW5nXG4gICAgICB3aGVuICdtb3VzZSdcbiAgICAgICAgeCA9IGFwcC5nYW1lLm1vdXNlWCs1XG4gICAgICAgIHkgPSBhcHAuZ2FtZS5tb3VzZVktMTVcbiAgICAgIHdoZW4gJ2ZpeGVkJ1xuICAgICAgICB4ID0gQHhcbiAgICAgICAgeSA9IEB5XG5cbiAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLnNwZWVjaGJ1YmJsZXMsIEBzcHJpdGUsIHgsIHkgaWYgQHZpc2libGUiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=