UNPKG

@jsprismarine/nbt

Version:
143 lines (140 loc) • 19.7 kB
import fs from 'node:fs'; import BinaryStream from '@jsprismarine/jsbinaryutils'; import NBTReader from './NBTReader.es.js'; import NBTWriter from './NBTWriter.es.js'; import ByteValue from './types/ByteVal.es.js'; import DoubleValue from './types/DoubleVal.es.js'; import FloatValue from './types/FloatVal.es.js'; import LongValue from './types/LongVal.es.js'; import NumberValue from './types/NumberVal.es.js'; import ShortValue from './types/ShortVal.es.js'; import StringValue from './types/StringVal.es.js'; class NBTTagCompound { name; children = /* @__PURE__ */ new Map(); static readFromFile(path, byteOrder) { return NBTTagCompound.readFromStream(new BinaryStream(fs.readFileSync(path)), byteOrder); } static readFromStream(input, byteOrder, varints = false) { const reader = new NBTReader(input, byteOrder); reader.setUseVarint(varints); return reader.parse(); } constructor(name = null) { this.name = name; } setName(name) { this.name = name; } getName() { return this.name; } addValue(name, value) { if (value instanceof NBTTagCompound && name !== value.getName()) { throw new Error(`Failed to add NBTTagCompound with name ${value.getName()} given name ${name}`); } this.children.set(name, value); } addChild(tag) { this.children.set(tag.getName(), tag); } getList(name, insert) { if (this.children.has(name)) { return this.children.get(name); } if (insert) { const backingList = /* @__PURE__ */ new Set(); this.addValue(name, backingList); return backingList; } return null; } getCompound(name, insert) { if (this.children.has(name)) { return this.children.get(name); } if (insert) { const compound = new NBTTagCompound(); this.addValue(name, compound); return compound; } return null; } writeToStream(out, byteOrder, varints = false) { const writer = new NBTWriter(out, byteOrder); writer.setUseVarint(varints); writer.writeCompound(this); } getByte(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getShort(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getNumber(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getLong(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getFloat(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getDouble(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } getString(name, defaultValue) { return this.children.has(name) ? this.children.get(name).getValue() : defaultValue; } remove(key) { return this.children.delete(key); } entries() { return this.children.entries(); } has(key) { return this.children.has(key); } size() { return this.children.size; } // Thanks stackoverflow! https://stackoverflow.com/questions/35948335/how-can-i-check-if-two-map-objects-are-equal equals(that) { if (this.children.size !== that.children.size) { return false; } for (const [key, val] of this.children) { const testVal = that.children.get(key); if (testVal === void 0 && !that.children.has(key)) { return false; } if (val instanceof NBTTagCompound && testVal instanceof NBTTagCompound && !val.equals(testVal)) { return false; } if (val instanceof ByteValue && testVal instanceof ByteValue && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof DoubleValue && testVal instanceof DoubleValue && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof FloatValue && testVal instanceof FloatValue && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof LongValue && testVal instanceof LongValue && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof NumberValue && testVal instanceof NumberValue && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof ShortValue && testVal instanceof ShortValue && val.getValue() !== testVal.getValue()) { return false; } if (val instanceof StringValue && testVal instanceof StringValue && val.getValue() !== testVal.getValue()) { return false; } } return true; } } export { NBTTagCompound as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUVGFnQ29tcG91bmQuZXMuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9OQlRUYWdDb21wb3VuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB0eXBlIHsgQnl0ZU9yZGVyIH0gZnJvbSAnLi9CeXRlT3JkZXInO1xuaW1wb3J0IE5CVFJlYWRlciBmcm9tICcuL05CVFJlYWRlcic7XG5pbXBvcnQgTkJUV3JpdGVyIGZyb20gJy4vTkJUV3JpdGVyJztcbmltcG9ydCBCeXRlVmFsIGZyb20gJy4vdHlwZXMvQnl0ZVZhbCc7XG5pbXBvcnQgRG91YmxlVmFsIGZyb20gJy4vdHlwZXMvRG91YmxlVmFsJztcbmltcG9ydCBGbG9hdFZhbCBmcm9tICcuL3R5cGVzL0Zsb2F0VmFsJztcbmltcG9ydCBMb25nVmFsIGZyb20gJy4vdHlwZXMvTG9uZ1ZhbCc7XG5pbXBvcnQgTnVtYmVyVmFsIGZyb20gJy4vdHlwZXMvTnVtYmVyVmFsJztcbmltcG9ydCBTaG9ydFZhbCBmcm9tICcuL3R5cGVzL1Nob3J0VmFsJztcbmltcG9ydCBTdHJpbmdWYWwgZnJvbSAnLi90eXBlcy9TdHJpbmdWYWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOQlRUYWdDb21wb3VuZCB7XG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIHB1YmxpYyByZWFkb25seSBjaGlsZHJlbjogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZEZyb21GaWxlKHBhdGg6IHN0cmluZywgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIHJldHVybiBOQlRUYWdDb21wb3VuZC5yZWFkRnJvbVN0cmVhbShuZXcgQmluYXJ5U3RyZWFtKGZzLnJlYWRGaWxlU3luYyhwYXRoKSksIGJ5dGVPcmRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWFkRnJvbVN0cmVhbShpbnB1dDogQmluYXJ5U3RyZWFtLCBieXRlT3JkZXI6IEJ5dGVPcmRlciwgdmFyaW50cyA9IGZhbHNlKTogTkJUVGFnQ29tcG91bmQge1xuICAgICAgICBjb25zdCByZWFkZXI6IE5CVFJlYWRlciA9IG5ldyBOQlRSZWFkZXIoaW5wdXQsIGJ5dGVPcmRlcik7XG4gICAgICAgIHJlYWRlci5zZXRVc2VWYXJpbnQodmFyaW50cyk7XG4gICAgICAgIHJldHVybiByZWFkZXIucGFyc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE5CVFRhZ0NvbXBvdW5kICYmIG5hbWUgIT09IHZhbHVlLmdldE5hbWUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gYWRkIE5CVFRhZ0NvbXBvdW5kIHdpdGggbmFtZSAke3ZhbHVlLmdldE5hbWUoKX0gZ2l2ZW4gbmFtZSAke25hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkKHRhZzogTkJUVGFnQ29tcG91bmQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zZXQodGFnLmdldE5hbWUoKSEsIHRhZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExpc3QobmFtZTogc3RyaW5nLCBpbnNlcnQ6IGJvb2xlYW4pOiBTZXQ8YW55PiB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmdldChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnNlcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhY2tpbmdMaXN0OiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVmFsdWUobmFtZSwgYmFja2luZ0xpc3QpO1xuICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvdW5kKG5hbWU6IHN0cmluZywgaW5zZXJ0OiBib29sZWFuKTogTkJUVGFnQ29tcG91bmQgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3VuZDogTkJUVGFnQ29tcG91bmQgPSBuZXcgTkJUVGFnQ29tcG91bmQoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVmFsdWUobmFtZSwgY29tcG91bmQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVG9TdHJlYW0ob3V0OiBCaW5hcnlTdHJlYW0sIGJ5dGVPcmRlcjogQnl0ZU9yZGVyLCB2YXJpbnRzID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd3JpdGVyOiBOQlRXcml0ZXIgPSBuZXcgTkJUV3JpdGVyKG91dCwgYnl0ZU9yZGVyKTtcbiAgICAgICAgd3JpdGVyLnNldFVzZVZhcmludCh2YXJpbnRzKTtcbiAgICAgICAgd3JpdGVyLndyaXRlQ29tcG91bmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5dGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBCeXRlVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaG9ydChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIFNob3J0VmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROdW1iZXIobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBOdW1iZXJWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExvbmcobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBMb25nVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGbG9hdChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIEZsb2F0VmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREb3VibGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBEb3VibGVWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0cmluZyhuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIFN0cmluZ1ZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgYW55XT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5lbnRyaWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zaXplO1xuICAgIH1cblxuICAgIC8vIFRoYW5rcyBzdGFja292ZXJmbG93ISBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTk0ODMzNS9ob3ctY2FuLWktY2hlY2staWYtdHdvLW1hcC1vYmplY3RzLWFyZS1lcXVhbFxuICAgIHB1YmxpYyBlcXVhbHModGhhdDogTkJUVGFnQ29tcG91bmQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uc2l6ZSAhPT0gdGhhdC5jaGlsZHJlbi5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgdGVzdFZhbCA9IHRoYXQuY2hpbGRyZW4uZ2V0KGtleSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0VmFsID09PSB1bmRlZmluZWQgJiYgIXRoYXQuY2hpbGRyZW4uaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgIXZhbC5lcXVhbHModGVzdFZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBCeXRlVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBCeXRlVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEb3VibGVWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIERvdWJsZVZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRmxvYXRWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIEZsb2F0VmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBMb25nVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBMb25nVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOdW1iZXJWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIE51bWJlclZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgU2hvcnRWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIFNob3J0VmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBTdHJpbmdWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIFN0cmluZ1ZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIkJ5dGVWYWwiLCJEb3VibGVWYWwiLCJGbG9hdFZhbCIsIkxvbmdWYWwiLCJOdW1iZXJWYWwiLCJTaG9ydFZhbCIsIlN0cmluZ1ZhbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBY0EsTUFBcUIsY0FBZSxDQUFBO0FBQUEsRUFDeEIsSUFBQTtBQUFBLEVBQ1EsUUFBQSx1QkFBaUMsR0FBSSxFQUFBO0FBQUEsRUFFckQsT0FBYyxZQUFhLENBQUEsSUFBQSxFQUFjLFNBQXNDLEVBQUE7QUFDM0UsSUFBTyxPQUFBLGNBQUEsQ0FBZSxlQUFlLElBQUksWUFBQSxDQUFhLEdBQUcsWUFBYSxDQUFBLElBQUksQ0FBQyxDQUFBLEVBQUcsU0FBUyxDQUFBO0FBQUE7QUFDM0YsRUFFQSxPQUFjLGNBQUEsQ0FBZSxLQUFxQixFQUFBLFNBQUEsRUFBc0IsVUFBVSxLQUF1QixFQUFBO0FBQ3JHLElBQUEsTUFBTSxNQUFvQixHQUFBLElBQUksU0FBVSxDQUFBLEtBQUEsRUFBTyxTQUFTLENBQUE7QUFDeEQsSUFBQSxNQUFBLENBQU8sYUFBYSxPQUFPLENBQUE7QUFDM0IsSUFBQSxPQUFPLE9BQU8sS0FBTSxFQUFBO0FBQUE7QUFDeEIsRUFFTyxXQUFBLENBQVksT0FBc0IsSUFBTSxFQUFBO0FBQzNDLElBQUEsSUFBQSxDQUFLLElBQU8sR0FBQSxJQUFBO0FBQUE7QUFDaEIsRUFFTyxRQUFRLElBQW9CLEVBQUE7QUFDL0IsSUFBQSxJQUFBLENBQUssSUFBTyxHQUFBLElBQUE7QUFBQTtBQUNoQixFQUVPLE9BQXlCLEdBQUE7QUFDNUIsSUFBQSxPQUFPLElBQUssQ0FBQSxJQUFBO0FBQUE7QUFDaEIsRUFFTyxRQUFBLENBQVMsTUFBYyxLQUFrQixFQUFBO0FBQzVDLElBQUEsSUFBSSxLQUFpQixZQUFBLGNBQUEsSUFBa0IsSUFBUyxLQUFBLEtBQUEsQ0FBTSxTQUFXLEVBQUE7QUFDN0QsTUFBTSxNQUFBLElBQUks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