Text Manipulation Formulas
[Link]
This workbook contains examples from the article "Text Manipulation Formulas in Excel." Regarding copyright
this file like a book. You may use the ideas and techniques and formulas explained here, but you may not repr
copy substantial portions from it, just as you would not do so with a book. Thank you. - Jon Wittwer
NEW: Now updated with LET and LAMBDA functions for the more complicated formulas.
NEW Microsoft 365 Functions! TEXTAFTER, TEXTBEFORE, TEXTJOIN, TEXTSPLIT, REGEXREPLACE
EXAMPLES
☆ LEN: Get the length of a text string (number of characters)
Formula: =LEN(text)
☆ UPPER, LOWER, PROPER: Change the case of a text string
Formula: =UPPER(text)
Formula: =LOWER(text)
Formula: =PROPER(text)
☆ EXACT: Case-sensitive text comparisons
Formula: =EXACT(text,UPPER(text))
Formula: =EXACT(text,LOWER(text))
Formula: =EXACT(text,PROPER(text))
☆ CONCATENATE: Combine text to create a string
Formula: =CONCATENATE("Hi"," ","World")
Formula: ="Hi"&" "&"World"
NOTE When used for concatenation, the & character is used as an "operator" rather than a function.
operators are +, -, and /.
The CONCAT and TEXTJOIN functions are also useful for concatenating strings, but are ava
365 subscription using Excel 2016 or Excel Online.
Formula: =CONCAT(A1:B1)
Formula: =TEXTJOIN(", ", TRUE, A1:B1)
☆ CHAR, UNICHAR: Return a special character based on a numeric
When you concatenate text and need to include double quotes, you can use the CHAR(34) or UNICHAR(34) f
function lets you return the character for a given numeric code (most of the codes correspond to ASCII values
function does the same thing for decimal Unicode values (UTF-16). The CODE and UNICODE functions do th
you the decimal numeric value for a given character.
The UNICHAR and UNICODE functions are available in Excel 2013 or later.
Use CHAR(10) or UNICHAR(10) to return the line break character - and remember to toggle Word Wrap for th
of the line break.
Code CHAR CODE UNICHAR UNICODE
34 " 34 " 34
182 ¶ 194 ¶ 182
169 © 194 © 169
149 • 226 149
10004 Err:502 Err:502 ✔ 10004
128515 Err:502 Err:502 😃 128515
Formula: =CHAR(34) & value & CHAR(34)
Formula: ="Hi" & CHAR(10) & "World"
SEE ALSO Using Unicode Characters in Excel
☆ REPT: Repeat a text string N times
The REPT function creates a text string by repeating a character or string a number of times. The following ex
REPT("★",num) to create a dot plot.
Votes Dot Plot
5 ★★★★★
9 ★★★★★★★★★
3 ★★★
6 ★★★★★★
Create a Progress bar without Conditional Formatting
You can create a progress bar using an in-cell bar via conditional formatting, but if that method is not available
reasons), you can represent the progress as a discrete fraction like n/10 and use REPT to create an in-cell pro
idea to use "empty" character symbols to represent the incomplete portion of the progress bar because the res
exactly into a cell like a conditional formatting progress bar.
Formula: =REPT("☒",ROUND(progress*10,0)) & REPT("☐",ROUND((1-progress)*10,0))
Progress Using REPT
35.0% ☒☒☒☐☐☐☐☐☐☐
75.0% ⚑⚑⚑⚑⚑⚑⚑⚑⚐⚐
Create a Sprint-style Progress bar
When combined with concatenation and special unicode characters, you can create an in-cell "sprint chart" lik
A sprint chart is just a progress bar that shows the progress relative to the amount of time left. The time can be
chart as a watch, clock or hourglass symbol.
Date Start Days Today Progress In-Cell Sprint Chart
12/1/2017 14 12/10/2017 28% ⚑⚑⚑⚑⚐⚐⚐⚐⚐⚐⚐⚐⚐⚐
Symbols Others
Complete: ⚑ ☒ , ⚑, 🏃
Incomplete: ⚐ ☐, ⚐
Today: ⌚ ⌚, ⌛, 🕓
Finish: 🏁
Formula: sprint = 14
progress = 24.5%
complete = ROUND(sprint*progress,0)
time = IF(TODAY()<start_date,0,IF(TODAY()>(start_date+sprint),sprint,TODAY()-start_date))
=REPT("⚑",MIN(time,complete)) & REPT("⚐",MAX(0,time-complete)) & "⌛" &
REPT("⚑",MAX(0,complete-time)) & REPT("⚐",sprint-MAX(time,complete)) & "🏁"
Why do some unicode characters like the watch ⌚ and hourglass ⌛ and finishline flag 🏁 change to other chara
formula? I have no idea.
Team Progress
A 40% ⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐⚐⚐⚐⚐
B 73% ⚑⚑⚑⚑⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐
C 65% ⚑⚑⚑⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐⚐
D 56% ⚑⚑⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐⚐⚐
REFERENCE Using Unicode Characters in Excel
☆ TRIM, CLEAN, SUBSTITUTE: Remove extra spaces and other cha
TRIM removes all spaces (ASCII character 32) except for one space between words.
Formula: =TRIM(text)
If you also need to remove nonprinting characters such as tabs, newlines, etc. you can use the CLEAN functio
ASCII characters 0-31.
Formula: =CLEAN(text)
You can use the SUBSTITUTE function when cleaning up text if you need to remove other types of non-ASCII
replace the characters with normal spaces. Wrap the function within TRIM and CLEAN to remove extra space
characters. This is a good way to handle tabs (9) and newlines (10) and non-breaking spaces (160) so that yo
that should be separated by a space. The example below nests the SUBSTITUTE function multiple times to ge
and non-breaking spaces within one formula.
Formula: =TRIM( CLEAN( SUBSTITUTE( SUBSTITUTE( SU
BSTITUTE(text,CHAR(160)," "),CHAR(10),"
"),CHAR(9)," ") ) )
Formula converted to LAMBDA:
LAMBDA: v42_textCleanPlus
=v42_textCleanPlus(text)
Sometimes your text has special quote symbols that need to be changed to normal quotes. These special quo
’(146), “(147), ”(148). The normal double quotes is CHAR(34).
Formula: =SUBSTITUTE( SUBSTITUTE( SUBSTITUTE( SUB
STITUTE(text,CHAR(145),"'"),CHAR(146),"'"),CHAR
(147),CHAR(34)),CHAR(148),CHAR(34))
Formula converted to LAMBDA:
LAMBDA: v42_textFixSpecialQuotes
=v42_textFixSpecialQuotes(text)
☆ FIND, SEARCH: Get the position of text within a string
The FIND and SEARCH functions will return the starting character position of a text string within another string
sensitive and FIND is not. The default for the [start_num] argument is 1 (the beginning of the string).
Case Sensitive
Formula: =FIND(find_text,within_text,[start_num])
=FIND(" ","Tom Sawyer")
NOT Case Sensitive
Formula: =SEARCH(find_text,within_text,[start_num])
=SEARCH(" ","Tom Sawyer")
The [start_num] argument can come in handy if you want to find the position of the 2nd occurrence of text with
this by using a nested FIND or nested SEARCH formula, like this:
Find the Position of the 2nd Space
Formula: =FIND(" ",text,FIND(" ",text,1)+1)
Find the Position of the 2nd "A"
Formula: =SEARCH("A",text,SEARCH("A",text,1)+1)
☆ SUBSTITUTE: Replace the Nth or each occurrence of text within a
The SUBSTITUTE function is very powerful, especially because it can be used to replace the Nth occurrence
some other character. If the Nth occurrence is not specified, it will replace every occurrence.
Formula: =SUBSTITUTE(original_text,old_text,new_text,[occurrence])
old_text new_text
Replace each occurrence: # ,
old_text new_text
Replace only the 2nd occurrence: # ,
When combined with FIND or REPLACE, you can use SUBSTITUTE to find the position of the Nth occurrence
another text string.
Find the Position of the 3rd space in the text string
Formula: =FIND("#",SUBSTITUTE(text," ","#",3),1)
Text: Tim A. J. Crane
☆ MID, REPLACE: Extract or replace text based on position and leng
The MID function is like the substr() function in other coding languages. It extracts a string from within another
starting character position and the number of characters. The REPLACE function is similar, except that instead
replaces the text with a string that you specify.
Formula: =MID(text,start_num,num_chars)
start_num num_chars
5 3
Formula: =REPLACE(text,start_num,num_chars,replace_text)
start_num num_chars
3 1
☆ LEFT, RIGHT: Get a number of characters starting from the left or r
The LEFT and RIGHT functions are like shorthand versions of the MID function. The LEFT function extracts te
of the string and RIGHT function extracts text starting from the end of the string.
Formula: =LEFT(text,num_chars)
Formula: =RIGHT(text,num_chars)
☆ REGEXREPLACE: Replace text using a Regular Expression
The new REGEX… functions (REGEXTEST, REGEXREPLACE, REGEXEXTRACT) are powerful new functio
the power of regular expressions.
Example: Remove all non-alphanumeric characters
Formula: =REGEXREPLACE(text,"[^a-zA-Z0-9]","")
Example: Replace all alphanumeric characters with *
Formula: =REGEXREPLACE(text,"[a-zA-Z0-9]","*")
Example: Replace all but the last 4 digits with *
Formula: =REGEXREPLACE(text,".(?=.{4})","*")
Other Examples: Ask ChatGPT or CoPilot
Prompt: How to I use REGEXREPLACE to remove all non-alphanumeric characters, except for spaces
☆ Count the number of spaces in a text string
You can use this technique to count other characters besides spaces. Just substitute " " with "," or ";" to count
or semi-colons for example.
Formula: =LEN(text)-LEN(SUBSTITUTE(text," ",""))
LAMBDA: =L_COUNTCHAR(char,within_text)
See the lambda function "L_COUNTCHAR" in the Vertex42 Lambda Library
☆ Count the number of occurrences of a string within a string
If you want to count the number of occurrences of a string within a string, then you can use a slightly modified
formula. In this case, you'll need to divide the result by the length of string.
Formula: =(LEN(text) -
LEN( SUBSTITUTE(text,string","") ) ) /
LEN(string)
LAMBDA: =L_COUNTCHAR(text,within_text)
See the lambda function "L_COUNTCHAR" in the Vertex42 Lambda Library
☆ Extract a First Name
To extract the first word or name from a text string, you can use the LEFT function and then use FIND to retur
space. Subtracting 1 gives you the number of characters in the first word or name.
Extract a First Name
Formula: =LEFT(text,FIND(" ",text)-1)
It a space is not found, FIND will return an error, so you can wrap the formula with ISERROR to return the full
are found, like this:
Formula: =IFERROR( LEFT(text,FIND(" ",text)-1), text)
Office 365! Using the new TEXTBEFORE function
Formula: =TEXTBEFORE(text," ",)
Use [match_end]=1 to return "Tom" if no space.
Office 365! Using the new TEXTSPLIT function
Formula: =INDEX( TEXTSPLIT( text,," "),1)
(returns the first value in the array returned by TEXTSPLIT)
Office 365! Using the new REGEXEXTRACT function
Formula: =REGEXEXTRACT( text, "^\w+")
(returns the first "word")
☆ Extract Text After the First Space
To return the text after the first space, you can use the RIGHT function and then calculate the length of the las
FIND(" ",text). If a name only contains a first and last name, this would return the last name, but if it is a name
it will return "Allen Smith".
Formula: =RIGHT(text,LEN(text)-FIND(" ",text))
Using the MID function instead of RIGHT
Formula: =MID(text,FIND(" ",text)+1,9999999)
Office 365! Using the new TEXTAFTER function
Formula: =TEXTAFTER(text," ")
Office 365! Using the new REGEXEXTRACT function
Formula: =REGEXEXTRACT( text, " (?<= )(.+)")
☆ Extract the Last Name
The return the last name in a string when there may be more than two names, we replace FIND(" ",text) with t
space. To do that, first count the number of spaces using the formula mentioned above, then SUBSTITUTE th
another special character and use FIND to get the position of that special character. You can use any characte
be in the name. The example below uses the "!" character.
Extract a Last Name
Formula: =IFERROR( RIGHT(text,LEN(text)-
FIND("!",SUBSTITUTE(text," ","!",LEN(text)-
LEN(SUBSTITUTE(text," ",""))))), "")
I've wrapped the formula with IFERROR because if the name contains no spaces, I assume the name is only a
the empty string "". You could instead use IFERROR to return the original text value instead of "".
Office 365! The TEXTAFTER function makes this much simpler! The cool thing is that this function has an "
built in, so the following formula does the same thing as above.
Formula: =TEXTAFTER(text," ",-1,,,"")
Office 365! Using REGEXEXTRACT
Formula: =REGEXEXTRACT( text, "\b\w+$")
REFERENCE [Link]: Split text into different columns with functions
☆ Return the Nth word in a string
This function is really crazy, but useful. Basically what is going on is that you replace the delimiter with a bunch
that you create a new text string that can be divided into chunks, where each chunk contains a different word.
space surrounding each word, so you use TRIM to remove it.
Formula: =TRIM(MID(SUBSTITUTE(text,delimeter,REPT("
",LEN(text))),(word-1)*LEN(text)+1,LEN(text)))
=TRIM(MID(SUBSTITUTE(text,delimeter,REPT("
",LEN(text))),(word-1)*LEN(text)+1,LEN(text)))
Office 365! The TEXTSPLIT function makes this much simpler! TEXTSPLIT will convert a text string into an
then pick the nth column.
Formula: =INDEX(TEXTSPLIT(text,,row_delim),row_num)
LAMBDA: v42_textGetNthWord
=v42_textGetNthWord(text,delimiter,n)
REFERENCE [Link]
REFERENCE [Link]
☆ Convert a Text String to an Array of Words
Want to convert "One#Two#Three" into an array like {"One";"Two";"Three"} that can be used within array form
the formula in the previous tip and replace "word" with the following:
Formula: word = ROW(INDIRECT("1:"&((LEN(text)-LEN(SUBSTITUTE(text,delimiter,"")))/LEN(delimite
The final formula will look like this:
Formula: =TRIM(MID(SUBSTITUTE(text,delimieter, REPT(" ",LEN(text))), (ROW(INDIRECT("1:"&((LEN
LEN(SUBSTITUTE(text,delimiter,"")))/LEN(delimiter)+1))) -1) * LEN(text)+1, LEN(text)))
To display the results within an array of cells, remember to use Ctrl+Shift+Enter. Use TRANSPOSE if you wan
of this formula in a row instead of a column.
text delimiter Results (entered as an array formula)
T Allen Smith T Allen Smith
Todd Smith Todd Smith #N/A
Todd Todd Todd Todd
A##B##C ## A B C
Office 365! TEXTSPLIT can be used to convert a text string into an actual array. You can use VALUE,
SUBSTITUTE, and other text functions to clean up the data before or after converting to an arra
Text String: "1","2","3"; "4","5","6"; "7","8","9"
Col Delimiter: ,
Row Delimiter: ;
Result: #NAME? #NAME? #NAME?
#NAME? #NAME? #NAME?
#NAME? #NAME? #NAME?
REFERENCE [Link]
☆ Convert a Text String to an Array of Characters
See "L_TEXT2ARRAY" in the Vertex42 Lambda Library
The following function will split a text string into an array of separate characters.
Formula: =MID(text_string, ROW(INDIRECT("1:"&LEN(text_string))), 1)
text Results (entered as a multi-cell array formula)
3B9Q 3 B 9 Q
Office 365! The SEQUENCE function makes this much simpler, without requiring a multi-cell array (uses th
instead)
Formula: =MID(text_string, SEQUENCE(, LEN(text_string)), 1)
text Results (entered as a multi-cell array formula)
3B9Q #NAME? #NAME? #NAME? #NAME?
LAMBDA: L_TEXT2ARRAY
text Results (entered as a multi-cell array formula)
3B9Q Err:509 Err:509 Err:509 Err:509
3B9Q Err:509 Err:509 Err:509 Err:509
If you wrap the function with CODE or UNICODE then you can display the numeric code for each character in
Formula: =UNICODE( MID(text_string, ROW(INDIRECT("1:"&LEN(text_string))), 1) )
text Results (entered as a multi-cell array formula)
!"= 33 32 34 32
Using the above lambda
!"= Err:508 Err:508 Err:508 Err:508
Office 365! With an Office 365 subscription, you can wrap the above functions with TEXTJOIN to display a
separated by a delimiter.
Formula: =TEXTJOIN(",",TRUE, UNICODE(MID(text,ROW(INDIRECT("1:"&LEN(text)) ),1)) )
text Result
!"= 33,32,34,32,61
Using the above lambda
!"= Err:508
☆ Experiment with Flash Fill or Text-to-Columns
This example is provided for you to experiment with using flash fill (Ctrl+e) or the text-to-columns feature.
☆ Formula in Image for Blog Post "Text Manipulation with Excel Form
Start With
Result
REFERENCES
☆ Some references have been included above. See the [Link] website for official documentation of
[Link]
© 2017-2024 Vertex42 LLC
ormulas in Excel." Regarding copyright and sharing, think of
s explained here, but you may not reproduce this worksheet or
k. Thank you. - Jon Wittwer
plicated formulas.
OIN, TEXTSPLIT, REGEXREPLACE
of characters)
Text Result
onetwothree 11
ase of a text string
Text Result
this text THIS TEXT
THIS TEXT this text
this text This Text
Text Result
THIS TEXT TRUE
this text TRUE
This Text TRUE
Value 1 Value 2 Result
Hi World Hi World
Hi World Hi World
as an "operator" rather than a function. Other examples of
for concatenating strings, but are available only with an Office
Hi World #NAME?
A B #NAME?
er based on a numeric code.
use the CHAR(34) or UNICHAR(34) function. The CHAR
the codes correspond to ASCII values). The UNICHAR
CODE and UNICODE functions do the reverse and will tell
ater.
d remember to toggle Word Wrap for the cell to see the effect
Value Result
Hello "Hello"
With Word Wrap Without
Hi Hi
World World
ng a number of times. The following example uses
tting, but if that method is not available to you (for compatibility
0 and use REPT to create an in-cell progress chart. It's a good
on of the progress bar because the resulting string will not fit
UND((1-progress)*10,0))
Using Conditional Formatting
35.0%
75.0%
u can create an in-cell "sprint chart" like the following example.
he amount of time left. The time can be represented in the
Cell Sprint Chart
⚑⚑⚑⚐⚐⚐⚐⚐⚐⚐⚐⚐⚐
te+sprint),sprint,TODAY()-start_date))
me-complete)) & "⌛" &
MAX(time,complete)) & "🏁"
finishline flag 🏁 change to other characters when used in a
⚑⚑⚑⚑⚑⚐⚐⚐⚐⚐⚐⚐⚐
⚑⚑⚑⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐
⚑⚑⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐⚐
⚑⚑⚑⚑⚑⚑⚑⚐⚐⚐⚐⚐⚐
ra spaces and other characters
tween words.
Text Result
hi world hi world
s, etc. you can use the CLEAN function which removes all
Text Result
Hi
HiWorld
World
Hi World Hi World
ed to remove other types of non-ASCII characters or want to
IM and CLEAN to remove extra spaces and nonprinting
non-breaking spaces (160) so that you don't combine words
BSTITUTE function multiple times to get rid of tabs, newlines,
Text Result
Hi Hi World
World
Hi Err:509
World
Hi
Err:509
World
d to normal quotes. These special quotes symbols are: ‘(145),
Text Result
“Hi ‘world!’ ” "Hi 'world!' "
“Hi ‘world!’ ” Err:509
“Hi ‘world!’ ” Err:509
hin a string
ion of a text string within another string. SEARCH is case
(the beginning of the string).
within_text find_text Result
ooAooaoo a 6
Tom Sawyer 4
within_text find_text Result
ooAooaoo a 3
Tom Sawyer 4
sition of the 2nd occurrence of text within a string. You can do
text Result
Jim A. Swift 7
within_text find_text Result
ooAooaoo A 6
currence of text within a string
e used to replace the Nth occurrence of a character with
ce every occurrence.
original_text Result
1#2#3#4 1, 2, 3, 4
original_text occurrence Result
1#2#3#4 2 1#2, 3#4
find the position of the Nth occurrence of a string within
Result
10
ed on position and length
It extracts a string from within another string by specifying the
E function is similar, except that instead of extract the text, it
text value Result
one#two#three two
text value replace_text Result
1#2#3 BLAH 1#BLAH#3
starting from the left or right
unction. The LEFT function extracts text starting from the left
e string.
text num_chars Result
Hi World 4 Hi W
Hi World 4 orld
egular Expression
XEXTRACT) are powerful new functions that let you harness
text Result
(123) 456-7890 1234567890
"Hello, World #42!" HelloWorld42
text Result
(123) 456-7890 (***) ***-****
123-00-4567 ***-**-****
text Result
1234 5678 9809 **********9809
umeric characters, except for spaces and periods, from a text string?
ust substitute " " with "," or ";" to count the number of commas
Within Text Character Result
Todd Allen Smith 2
Todd Allen Smith d 2
Within Text Character Result
Todd Allen Smith d Err:509
g within a string
g, then you can use a slightly modified version of the above
ng.
Name String Result
A##B##C ## 2
A, B, C , 2
Within Text String Result
A##B##C ## Err:509
(800) 345-6732 800 Err:509
FT function and then use FIND to return the position of the first
d or name.
Name Result
Tom Sawyer Tom
Tom #VALUE!
rmula with ISERROR to return the full text value if no spaces
Name Result
Tom Tom
Name Result
Tom Sawyer Tom
Todd Allen Smith Todd
Tom #NAME?
Tom Tom
Name Result
Tom Sawyer #NAME?
Todd Allen Smith #NAME?
Tom #NAME?
Name Result
Tom Sawyer #NAME?
Todd Allen Smith #NAME?
Tom #NAME?
and then calculate the length of the last name using LEN(text)-
eturn the last name, but if it is a name like "Todd Allen Smith"
Name Result
Tom Sawyer Sawyer
Todd Allen Smith Allen Smith
Name Result
Tom Sawyer Sawyer
Todd Allen Smith Allen Smith
Tom #NAME? (error expected)
Name Result
Tom Sawyer Sawyer
Todd Allen Smith Allen Smith
Tom #NAME? (error expected)
Name Result
Tom Sawyer #NAME?
Todd Allen Smith #NAME?
Tom #NAME? (error expected)
ames, we replace FIND(" ",text) with the position of the last
entioned above, then SUBSTITUTE the last space with
al character. You can use any character that you know won't
Name Result
Todd A. B. Smith Smith
Todd Smith Smith
Todd
no spaces, I assume the name is only a first name, so I return
al text value instead of "".
cool thing is that this function has an "if_not_found" option
above.
Name Result
Todd A. B. Smith Smith
Todd Smith Smith
Todd #NAME?
Name Result
Todd A. B. Smith #NAME?
Todd Smith #NAME?
Todd #NAME?
t you replace the delimiter with a bunch of blank spaces so
each chunk contains a different word. There will be a lot of
Name delimiter word Result
One#Two#Three # 1 One
One#Two#Three # 2 Two
One#Two#Three # 3 Three
TSPLIT will convert a text string into an array based on a delimiter. INDEX can
Name delimiter word Result
One#Two#Three # 1 #NAME?
One#Two#Three # 2 #NAME?
One#Two#Three # 3 #NAME?
Name delimiter word Result
One#Two#Three # 1 Err:509
One#Two#Three # 2 Err:509
One#Two#Three # 3 Err:509
-[Link]
ee"} that can be used within array formulas? First, start with
ITUTE(text,delimiter,"")))/LEN(delimiter)+1)))
N(text))), (ROW(INDIRECT("1:"&((LEN(text)-
))) -1) * LEN(text)+1, LEN(text)))
ft+Enter. Use TRANSPOSE if you want to display the results
ctual array. You can use VALUE,
ata before or after converting to an array.
tring-cell-in-excel-without-vba-e-g-for-array-formula
aracters.
#N/A #N/A #N/A
out requiring a multi-cell array (uses the spillable array
he numeric code for each character in the string.
N(text_string))), 1) )
61 #N/A #N/A
Err:508
functions with TEXTJOIN to display a list as a text string
RECT("1:"&LEN(text)) ),1)) )
+e) or the text-to-columns feature.
Name First Middle Last
Todd Allen Smith Todd Allen Smith
Tom Sawyer
Huck
A. J. Aimes
Mr. Johnson
ulation with Excel Formulas"
Text Manipulation
Excel Formulas
m website for official documentation of Excel functions.
86ad-547d-4ea9-a065-7bb697c2a56e