def METHOD_NAME(self, values: Dict[str, Union[str, int]]) -> LogicSigAccount:
    """populate uses the map to fill in the variable of the bytecode and returns a logic sig with the populated bytecode"""
    # Get the template source
    contract = list(base64.b64decode(self.map["bytecode"]))
    shift = 0
    for k, v in self.sorted.items():
        if k in values:
            pos = v["position"] + shift
            if v["bytes"]:
                val = bytes.fromhex(values[k])
                lbyte = uvarint.encode(len(val))
                # -1 to account for the existing 00 byte for length
                shift += (len(lbyte) - 1) + len(val)
                # +1 to overwrite the existing 00 byte for length
                contract[pos : pos + 1] = lbyte + val
            else:
                val = uvarint.encode(values[k])
                # -1 to account for existing 00 byte
                shift += len(val) - 1
                # +1 to overwrite existing 00 byte
                contract[pos : pos + 1] = val
    # Create a new LogicSigAccount given the populated bytecode,
    #pprint.pprint({"values": values, "contract": bytes(contract).hex()})
    return LogicSigAccount(bytes(contract))