UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

144 lines (143 loc) • 18.8 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); require("../../_virtual/_rolldown/runtime.cjs.cjs"); const require_item_Item = require("../../item/Item.cjs.cjs"); const require_network_NetworkUtil = require("../NetworkUtil.cjs.cjs"); const require_network_Identifiers = require("../Identifiers.cjs.cjs"); const require_network_packet_DataPacket = require("./DataPacket.cjs.cjs"); let _jsprismarine_math = require("@jsprismarine/math"); //#region src/network/packet/InventoryTransactionPacket.ts var UseItemAction = /* @__PURE__ */ function(UseItemAction) { UseItemAction[UseItemAction["CLICK_BLOCK"] = 0] = "CLICK_BLOCK"; UseItemAction[UseItemAction["CLICK_AIR"] = 1] = "CLICK_AIR"; UseItemAction[UseItemAction["BREAK_BLOCK"] = 2] = "BREAK_BLOCK"; return UseItemAction; }({}); var TransactionType = /* @__PURE__ */ function(TransactionType) { TransactionType[TransactionType["NORMAL"] = 0] = "NORMAL"; TransactionType[TransactionType["MISMATCH"] = 1] = "MISMATCH"; TransactionType[TransactionType["USE_ITEM"] = 2] = "USE_ITEM"; TransactionType[TransactionType["USE_ITEM_ON_ENTITY"] = 3] = "USE_ITEM_ON_ENTITY"; TransactionType[TransactionType["RELASE_ITEM"] = 4] = "RELASE_ITEM"; return TransactionType; }({}); var LegacySlotChange = class LegacySlotChange { containerId; slots; constructor(containerId, slots) { this.containerId = containerId; this.slots = slots; } static fromNetwork(stream) { const containerId = stream.readByte(); const slotCount = stream.readUnsignedVarInt(); return new LegacySlotChange(containerId, Array.from(stream.read(slotCount))); } toNetwork(stream) { stream.writeByte(this.containerId); stream.writeUnsignedVarInt(this.slots.length); stream.write(Buffer.from(this.slots)); } }; var ActionSource = /* @__PURE__ */ function(ActionSource) { ActionSource[ActionSource["INVALID"] = -1] = "INVALID"; ActionSource[ActionSource["CONTAINER"] = 0] = "CONTAINER"; ActionSource[ActionSource["GLOBAL"] = 1] = "GLOBAL"; ActionSource[ActionSource["WORLD"] = 2] = "WORLD"; ActionSource[ActionSource["CREATIVE"] = 3] = "CREATIVE"; ActionSource[ActionSource["UNTRACKED_INTERACTION_UI"] = 100] = "UNTRACKED_INTERACTION_UI"; ActionSource[ActionSource["NON_IMPLEMENTED_TODO"] = 99999] = "NON_IMPLEMENTED_TODO"; return ActionSource; }({}); var InventoryAction = class InventoryAction { sourceType; windowId; sourceFlags; targetSlot; oldItem; newItem; constructor(sourceType, windowId, sourceFlags, targetSlot, oldItem, newItem) { this.sourceType = sourceType; this.windowId = windowId; this.sourceFlags = sourceFlags; this.targetSlot = targetSlot; this.oldItem = oldItem; this.newItem = newItem; } static fromNetwork(stream) { const sourceType = stream.readUnsignedVarInt(); return new InventoryAction(sourceType, sourceType === 0 || sourceType === 99999 ? stream.readVarInt() : null, sourceType === 2 ? stream.readUnsignedVarInt() : null, stream.readUnsignedVarInt(), require_item_Item.Item.networkDeserialize(stream), require_item_Item.Item.networkDeserialize(stream)); } toNetwork(stream) { stream.writeUnsignedVarInt(this.sourceType); [0, 99999].includes(this.sourceType) && stream.writeVarInt(this.windowId); this.sourceType === 2 && stream.writeUnsignedVarInt(this.sourceFlags); stream.writeUnsignedVarInt(this.targetSlot); this.oldItem.networkSerialize(stream); this.newItem.networkSerialize(stream); } }; var InventoryTransactionPacket = class extends require_network_packet_DataPacket.default { static NetID = require_network_Identifiers.default.InventoryTransactionPacket; legacyRequestId; legacySlotChanges; transactionType; inventoryActions; transactionData; decodePayload() { this.legacyRequestId = this.readVarInt(); if (this.legacyRequestId !== 0) { const slotChanges = this.readUnsignedVarInt(); this.legacySlotChanges = Array.from({ length: slotChanges }, () => LegacySlotChange.fromNetwork(this)); } this.transactionType = this.readUnsignedVarInt(); const actionsCount = this.readUnsignedVarInt(); this.inventoryActions = Array.from({ length: actionsCount }, () => InventoryAction.fromNetwork(this)); switch (this.transactionType) { case 0: case 1: break; case 2: this.transactionData = { actionType: this.readUnsignedVarInt(), blockPosition: require_network_NetworkUtil.NetworkUtil.readBlockPosition(this), blockFace: this.readVarInt(), hotbarSlot: this.readVarInt(), itemInHand: require_item_Item.Item.networkDeserialize(this), playerPosition: new _jsprismarine_math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new _jsprismarine_math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), blockRuntimeId: this.readUnsignedVarInt() }; break; case 3: this.transactionData = { entityRuntimeId: this.readUnsignedVarLong(), actionType: this.readUnsignedVarInt(), hotbarSlot: this.readVarInt(), itemInHand: require_item_Item.Item.networkDeserialize(this), playerPosition: new _jsprismarine_math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()), clickPosition: new _jsprismarine_math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; case 4: this.transactionData = { actionType: this.readUnsignedVarInt(), hotbarSlot: this.readVarInt(), itemInHand: require_item_Item.Item.networkDeserialize(this), headRotation: new _jsprismarine_math.Vector3(this.readFloatLE(), this.readFloatLE(), this.readFloatLE()) }; break; default: throw new TypeError(`Unknown transaction type ${this.transactionType}`); } } }; //#endregion exports.ActionSource = ActionSource; exports.InventoryAction = InventoryAction; exports.LegacySlotChange = LegacySlotChange; exports.TransactionType = TransactionType; exports.UseItemAction = UseItemAction; exports.default = InventoryTransactionPacket; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQuY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmV0d29yay9wYWNrZXQvSW52ZW50b3J5VHJhbnNhY3Rpb25QYWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi8uLi9pdGVtL0l0ZW0nO1xuaW1wb3J0IHR5cGUgQmxvY2tQb3NpdGlvbiBmcm9tICcuLi8uLi93b3JsZC9CbG9ja1Bvc2l0aW9uJztcbmltcG9ydCBJZGVudGlmaWVycyBmcm9tICcuLi9JZGVudGlmaWVycyc7XG5pbXBvcnQgeyBOZXR3b3JrVXRpbCB9IGZyb20gJy4uL05ldHdvcmtVdGlsJztcbmltcG9ydCBEYXRhUGFja2V0IGZyb20gJy4vRGF0YVBhY2tldCc7XG5cbmV4cG9ydCBlbnVtIFVzZUl0ZW1BY3Rpb24ge1xuICAgIENMSUNLX0JMT0NLLFxuICAgIENMSUNLX0FJUixcbiAgICBCUkVBS19CTE9DS1xufVxuXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblR5cGUge1xuICAgIE5PUk1BTCxcbiAgICBNSVNNQVRDSCxcbiAgICBVU0VfSVRFTSxcbiAgICBVU0VfSVRFTV9PTl9FTlRJVFksXG4gICAgUkVMQVNFX0lURU1cbn1cblxuZXhwb3J0IGNsYXNzIExlZ2FjeVNsb3RDaGFuZ2Uge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNvbnRhaW5lcklkOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBzbG90czogbnVtYmVyW11cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogTGVnYWN5U2xvdENoYW5nZSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcklkID0gc3RyZWFtLnJlYWRCeXRlKCk7XG4gICAgICAgIGNvbnN0IHNsb3RDb3VudCA9IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgY29uc3Qgc2xvdHMgPSBBcnJheS5mcm9tKHN0cmVhbS5yZWFkKHNsb3RDb3VudCkpO1xuICAgICAgICByZXR1cm4gbmV3IExlZ2FjeVNsb3RDaGFuZ2UoY29udGFpbmVySWQsIHNsb3RzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9OZXR3b3JrKHN0cmVhbTogQmluYXJ5U3RyZWFtKTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZUJ5dGUodGhpcy5jb250YWluZXJJZCk7XG4gICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkVmFySW50KHRoaXMuc2xvdHMubGVuZ3RoKTtcbiAgICAgICAgc3RyZWFtLndyaXRlKEJ1ZmZlci5mcm9tKHRoaXMuc2xvdHMpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblNvdXJjZSB7XG4gICAgSU5WQUxJRCA9IC0xLFxuICAgIENPTlRBSU5FUixcbiAgICBHTE9CQUwsXG4gICAgV09STEQsXG4gICAgQ1JFQVRJVkUsXG4gICAgVU5UUkFDS0VEX0lOVEVSQUNUSU9OX1VJID0gMTAwLFxuICAgIE5PTl9JTVBMRU1FTlRFRF9UT0RPID0gOTk5OTlcbn1cblxuZXhwb3J0IGNsYXNzIEludmVudG9yeUFjdGlvbiB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc291cmNlVHlwZTogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgd2luZG93SWQ6IG51bWJlciB8IG51bGwsXG4gICAgICAgIHB1YmxpYyBzb3VyY2VGbGFnczogbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgcHVibGljIHRhcmdldFNsb3Q6IG51bWJlcixcbiAgICAgICAgcHVibGljIG9sZEl0ZW06IEl0ZW0sXG4gICAgICAgIHB1YmxpYyBuZXdJdGVtOiBJdGVtXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTmV0d29yayhzdHJlYW06IEJpbmFyeVN0cmVhbSk6IEludmVudG9yeUFjdGlvbiB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCk7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkID1cbiAgICAgICAgICAgIHNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5DT05UQUlORVIgfHwgc291cmNlVHlwZSA9PT0gQWN0aW9uU291cmNlLk5PTl9JTVBMRU1FTlRFRF9UT0RPXG4gICAgICAgICAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBzb3VyY2VGbGFncyA9IHNvdXJjZVR5cGUgPT09IEFjdGlvblNvdXJjZS5XT1JMRCA/IHN0cmVhbS5yZWFkVW5zaWduZWRWYXJJbnQoKSA6IG51bGw7XG4gICAgICAgIHJldHVybiBuZXcgSW52ZW50b3J5QWN0aW9uKFxuICAgICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICAgIHdpbmRvd0lkLFxuICAgICAgICAgICAgc291cmNlRmxhZ3MsXG4gICAgICAgICAgICBzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCksXG4gICAgICAgICAgICBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZShzdHJlYW0pLFxuICAgICAgICAgICAgSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b05ldHdvcmsoc3RyZWFtOiBCaW5hcnlTdHJlYW0pOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5zb3VyY2VUeXBlKTtcbiAgICAgICAgW0FjdGlvblNvdXJjZS5DT05UQUlORVIsIEFjdGlvblNvdXJjZS5OT05fSU1QTEVNRU5URURfVE9ET10uaW5jbHVkZXModGhpcy5zb3VyY2VUeXBlKSAmJlxuICAgICAgICAgICAgc3RyZWFtLndyaXRlVmFySW50KHRoaXMud2luZG93SWQhKTtcbiAgICAgICAgdGhpcy5zb3VyY2VUeXBlID09PSBBY3Rpb25Tb3VyY2UuV09STEQgJiYgc3RyZWFtLndyaXRlVW5zaWduZWRWYXJJbnQodGhpcy5zb3VyY2VGbGFncyEpO1xuICAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZFZhckludCh0aGlzLnRhcmdldFNsb3QpO1xuICAgICAgICB0aGlzLm9sZEl0ZW0ubmV0d29ya1NlcmlhbGl6ZShzdHJlYW0pO1xuICAgICAgICB0aGlzLm5ld0l0ZW0ubmV0d29ya1NlcmlhbGl6ZShzdHJlYW0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGFjdGlvblR5cGU6IG51bWJlcjtcbiAgICBob3RiYXJTbG90OiBudW1iZXI7XG4gICAgaXRlbUluSGFuZDogSXRlbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VJdGVtRGF0YSBleHRlbmRzIFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgYmxvY2tQb3NpdGlvbjogQmxvY2tQb3NpdGlvbjtcbiAgICBibG9ja0ZhY2U6IG51bWJlcjtcbiAgICBwbGF5ZXJQb3NpdGlvbjogVmVjdG9yMztcbiAgICBjbGlja1Bvc2l0aW9uOiBWZWN0b3IzO1xuICAgIGJsb2NrUnVudGltZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSXRlbU9uRW50aXR5RGF0YSBleHRlbmRzIFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgZW50aXR5UnVudGltZUlkOiBiaWdpbnQ7XG4gICAgcGxheWVyUG9zaXRpb246IFZlY3RvcjM7XG4gICAgY2xpY2tQb3NpdGlvbjogVmVjdG9yMztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWxhc2VJdGVtRGF0YSBleHRlbmRzIFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgaGVhZFJvdGF0aW9uOiBWZWN0b3IzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldCBleHRlbmRzIERhdGFQYWNrZXQge1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQgPSBJZGVudGlmaWVycy5JbnZlbnRvcnlUcmFuc2FjdGlvblBhY2tldDtcblxuICAgIHB1YmxpYyBsZWdhY3lSZXF1ZXN0SWQhOiBudW1iZXI7XG4gICAgcHVibGljIGxlZ2FjeVNsb3RDaGFuZ2VzITogTGVnYWN5U2xvdENoYW5nZVtdO1xuXG4gICAgcHVibGljIHRyYW5zYWN0aW9uVHlwZSE6IFRyYW5zYWN0aW9uVHlwZTtcbiAgICBwdWJsaWMgaW52ZW50b3J5QWN0aW9ucyE6IEludmVudG9yeUFjdGlvbltdO1xuXG4gICAgcHVibGljIHRyYW5zYWN0aW9uRGF0YSE6IFRyYW5zYWN0aW9uRGF0YTtcblxuICAgIHB1YmxpYyBkZWNvZGVQYXlsb2FkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxlZ2FjeVJlcXVlc3RJZCA9IHRoaXMucmVhZFZhckludCgpO1xuICAgICAgICBpZiAodGhpcy5sZWdhY3lSZXF1ZXN0SWQgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNsb3RDaGFuZ2VzID0gdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKTtcbiAgICAgICAgICAgIHRoaXMubGVnYWN5U2xvdENoYW5nZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBzbG90Q2hhbmdlcyB9LCAoKSA9PiBMZWdhY3lTbG90Q2hhbmdlLmZyb21OZXR3b3JrKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25UeXBlID0gdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKTtcblxuICAgICAgICBjb25zdCBhY3Rpb25zQ291bnQgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuICAgICAgICB0aGlzLmludmVudG9yeUFjdGlvbnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBhY3Rpb25zQ291bnQgfSwgKCkgPT4gSW52ZW50b3J5QWN0aW9uLmZyb21OZXR3b3JrKHRoaXMpKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMudHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5OT1JNQUw6XG4gICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5NSVNNQVRDSDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVTRV9JVEVNOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25EYXRhID0gPFVzZUl0ZW1EYXRhPntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5yZWFkVW5zaWduZWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tQb3NpdGlvbjogTmV0d29ya1V0aWwucmVhZEJsb2NrUG9zaXRpb24odGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrRmFjZTogdGhpcy5yZWFkVmFySW50KCksXG4gICAgICAgICAgICAgICAgICAgIGhvdGJhclNsb3Q6IHRoaXMucmVhZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSW5IYW5kOiBJdGVtLm5ldHdvcmtEZXNlcmlhbGl6ZSh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyUG9zaXRpb246IG5ldyBWZWN0b3IzKHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCkpLFxuICAgICAgICAgICAgICAgICAgICBjbGlja1Bvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKSxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdW50aW1lSWQ6IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVVNFX0lURU1fT05fRU5USVRZOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25EYXRhID0gPFVzZUl0ZW1PbkVudGl0eURhdGE+e1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHlSdW50aW1lSWQ6IHRoaXMucmVhZFVuc2lnbmVkVmFyTG9uZygpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBob3RiYXJTbG90OiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbUluSGFuZDogSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIHBsYXllclBvc2l0aW9uOiBuZXcgVmVjdG9yMyh0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSwgdGhpcy5yZWFkRmxvYXRMRSgpKSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tQb3NpdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuUkVMQVNFX0lURU06XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSA8UmVsYXNlSXRlbURhdGE+e1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpLFxuICAgICAgICAgICAgICAgICAgICBob3RiYXJTbG90OiB0aGlzLnJlYWRWYXJJbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbUluSGFuZDogSXRlbS5uZXR3b3JrRGVzZXJpYWxpemUodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGhlYWRSb3RhdGlvbjogbmV3IFZlY3RvcjModGhpcy5yZWFkRmxvYXRMRSgpLCB0aGlzLnJlYWRGbG9hdExFKCksIHRoaXMucmVhZEZsb2F0TEUoKSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRyYW5zYWN0aW9uIHR5cGUgJHt0aGlzLnRyYW5zYWN0aW9uVHlwZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsSUFBWSxnQkFBTCx5QkFBQSxlQUFBO0NBQ0gsY0FBQSxjQUFBLGlCQUFBLEtBQUE7Q0FDQSxjQUFBLGNBQUEsZUFBQSxLQUFBO0NBQ0EsY0FBQSxjQUFBLGlCQUFBLEtBQUE7O0FBQ0osRUFBQSxDQUFBLENBQUE7QUFFQSxJQUFZLGtCQUFMLHlCQUFBLGlCQUFBO0NBQ0gsZ0JBQUEsZ0JBQUEsWUFBQSxLQUFBO0NBQ0EsZ0JBQUEsZ0JBQUEsY0FBQSxLQUFBO0NBQ0EsZ0JBQUEsZ0JBQUEsY0FBQSxLQUFBO0NBQ0EsZ0JBQUEsZ0JBQUEsd0JBQUEsS0FBQTtDQUNBLGdCQUFBLGdCQUFBLGlCQUFBLEtBQUE7O0FBQ0osRUFBQSxDQUFBLENBQUE7QUFFQSxJQUFhLG1CQUFiLE1BQWEsaUJBQWlCO0NBRWY7Q0FDQTtDQUZYLFlBQ0ksYUFDQSxPQUNGO0VBRlMsS0FBQSxjQUFBO0VBQ0EsS0FBQSxRQUFBO0NBQ1I7Q0FFSCxPQUFjLFlBQVksUUFBd0M7RUFDOUQsTUFBTSxjQUFjLE9BQU8sU0FBUztFQUNwQyxNQUFNLFlBQVksT0FBTyxtQkFBbUI7RUFFNUMsT0FBTyxJQUFJLGlCQUFpQixhQURkLE1BQU0sS0FBSyxPQUFPLEtBQUssU0FBUyxDQUNMLENBQUs7Q0FDbEQ7Q0FFQSxVQUFpQixRQUE0QjtFQUN6QyxPQUFPLFVB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