►
From YouTube: BE Pairing - 20211004 - Updating GraphqlController to read feature category from header
Description
In this session we push forward and MR we've been refining to update our GraphqlController to read the relevant request's feature category from the request header.
MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67800
A
Record
starting
so
we
are
diving
into
I'm
gonna
close
all
the
tabs,
except
for
this
one.
We
are
diving
into
pushing
this,
mr
forward,
which
previously,
for
all
these
graphql
controller,.
A
Logs
or
these
are
prometheus
logs,
the
feature
category
we
we
don't
know
it,
because
our
current
setup
for
feature
category
is
static
and
based
on
just
the
class
method,
but
the
graphql
is
one
controller
that
can
receive
all
kinds
of
queries,
and
so
we
have.
A
This
is
an
approach
where
we're
receiving
that
from
the
client
and
the
request,
and
we
check
if
it's
you
know,
make
sure
it's
not
forged,
make
sure
it's
a
valid
value,
and
things
like
that.
So
after
the
fact,
we
can
now
have
feature
categories
assigned
for
these
different
at
these
different
levels
and
based
on
bob's
recommendation.
A
This
is
using
the
very
cool
application
context
now
and
I
don't
know
I
was
not
aware
of
application
context
at
all
before
this,
but
basically
this
application
context
is
something
that
kind
of
exists
throughout
the
something
that
all
of
our
base
controllers
push
to
and
all
of
our
loggers
and
other
kind
of
anything
that
wants
to
know
the
context
of
a
thing
reads
from
this.
A
So
this
is
like
a
single
source
of
truth
for
things
like
feature
category
for
this
entire
operation,
and
so
what's
really
cool
is
now
that
we're
pushing
it
onto
here.
It
is
being
read
from
like
that
feature.
Category
isn't
just
applied
to
just
this
web
transaction
metrics.
It's
even
applied
to
like
the
sql
duration,
metrics
and
all
those
kind
of
things.
So
that's
really
cool,
but
previously
it
would
all
be
not
owned
because
we
were
just
reading
it
from
the
graphql
controller.
A
It's
like
yeah,
it's
like
a
global
variable,
that's
okay,
to
use,
yep!
There's
a
lot
of
sharing
and
caring
going
on
with
this
thing.
So
here's
some
of
the
immediate
challenges
with
this.
Let
me
go
down,
and
so
let
me
show
the
approach
that
I
took
and
let
me
show
where,
where
bob's,
coming,
where
some
of
bob's
responses
and
I'd
love
to
see,
if
you
all
have
creative
ideas
outside
of
this,
that
would
be
fantastic
because
of
the
way
this
application
context
works.
It's
really
cool.
A
You
could
just
application
context,
push
at
any
part
and
it's
gonna
and
update
any
kind
of
attribute,
and
it
will
update
anything.
That's
trying
to
read
from
that.
We'll
look
at
the
latest
one
and
at
the
end
of
the
request,
it
cleans
up
that
whole
stack.
So
it's
pretty
optimized
and
I
you
know
and
thread
safe
and
all
of
those
things
so
he
originally
was
was
looking
for
us
to
okay
because
of
the
nature
of
application
context,
I
can
just
add
something
to
graphql
controller
that
looked
like
this
like
before
action.
A
I'm
just
gonna
push
the
feature
category
and
just
get
it
from
the
request.
Just
on
the
graphql
control.
I
wouldn't
have
to
update
anything
else,
but
when
I
did
this,
I
noticed
it
wasn't
working,
and
I
noticed
that
my
graphql
controller,
this
set
current
context,
was
always
happening
before
the
application
controller.
One
was
so
it
was
always
being
overwritten
with
not
owned.
Don't
know
if
you
all
are
familiar
with
the
ordering
of
how
these
before
action
stuff
gets,
triggered
in
rails,
based
on
base
classes
and
and
subclasses
or
or
not,.
B
Evaluated
at
class
class
evaluation
time,
so
I
would
assume,
if
there's
a
mix
in
later
that
has
a
before
in
it
or
a
subclass
like
it's
going
to
win
over
an
existing
one,
but
rails
may
have
something.
We
should
look
at
the
docks.
A
Yeah,
so
what
I
was
noticing,
I
don't
have
ruby
mine
up.
I'm
sorry,
chad,.
A
A
This
was
always
happening
after
a
graphql
controller
could
do
its
thing,
and
that
was
frustrating,
and
so
then
I
had
so
then
what
I
did
was
update
how
this
method
gets
the
feature
category
for
action.
We
had
to
update
that.
Oh
sorry,
we
had
to
update
the
way
this
method
works,
to
use
the
actual
request,
information
stuff
like
that
and
that's
the
stuff
that
bob
was
like.
That's
not
quite
ideal,
because
this
is
only
the
graphql
controller
needs.
This.
A
So
I
I
don't
know
what
the
nature
of
prepend
versus
birth
versus
before
is
either.
B
A
B
C
A
A
Okay,
I
am
going
to
start
the
gdk2,
so
I
can
be
testing
this
out.
A
Yeah,
I
think
the
goal
is
to
try
to
have
implement
because
there's
a
lot
of
cross-cutting
concerns
that
use
this
like.
We
do
logging
from
various
different,
not
processes
but
but
wildly
different
places,
and
we
want
to
know
what's
the
cross-cutting
context.
So
it's
like
I,
it
seems
helpful
that
we
have
this
one
single
source
of
truth
for
this
kind
of
stuff.
B
A
There's
not
many
there's,
not
many
things
actually
push
to
application
contacts.
There's
like
in
our
base
api
controller.
We
push
this
stuff
in
the
application
controller.
We
push
this
stuff,
but
we
might
also
in
like
some
services,
push
just
some
things
as
well
and
then,
when
you
push
it'll
just
whatever
you
push,
takes
precedence
of
what
was
previously
there
and
it's
not
going
to
erase
anything
you're
not
providing
to
it
automatically.
A
A
You
know
wherever
I
wherever
I
wanted
to
and
it
should
take
precedence,
and
so
I
want
to
do
that
for
the
graphql
controller,
and
so
I'm
gonna
try
it
again,
and
I
tried
that
originally
and
I
wasn't
able
to
get
the
timing
of
these
things
right,
but
I
am
going
to
try
it
again.
A
C
But
I
I've
added
a
link
to
the
filters
documentation
of
controllers,
but
actually
from
from
the
documentation
itself,
it's
not
clear
in
which
order
they
happen,
but
so,
for
example,
you
have
the
before
and
after
action
and
around
action,
and
then
you
have
the
flavor
of
prepend,
so
it's
all
mixing,
so
I'm
not
sure
about
the
exact
order
how
they
are
executed.
So
I
remember
seeing
something
similar.
A
B
A
A
I
I
pretty
sure
it
needs
to
do
pre-penned,
oh
yeah.
It
looks
like
we're
just
probably.
A
B
A
B
The
question
the
problem
is
like
we
we're
both
trying
to
use
the
same
stage
of
the
rails
controller
life
cycle,
but
we're
back
to
a
load
ordering
type
or
some
other
issue,
because
they're
both
trying
to
do
the
earliest
possible
thing.
A
Yes,
now
I
did
before
action.
I
did
not
do
a
round
action
in
the
kill
control.
So
let
me
let
me
try
that
out,
and
that
would
be
interesting
so
and
let
me
just
add.
A
B
A
A
B
Based
on
the
top
of
that
article,
no
befores
and
afters
are
outside
of
a
round.
A
I
had
before
action
before
because
I'm
getting
confused,
but
I
know
I
had
before
action
before
I.
I
guess,
because
before
action
means
I'm
going
to
go
first
and
then
they're
going
to
go
and
that's
the
problem
I
want
to
go
after
they
go.
I
want
to
go
after
application.
Controller
goes,
I
think,
but
here's
the
other
thing
you
bring
up
a
really
good
point.
We
had
to
change
this
to
prepend
around
action
because
we
wanted
to
fix
the
context
in
some
cases
wasn't
being
set
up
early
enough.
I
guess.
A
A
All
right
cool,
so
I'm
also
going
to
add
some
puts
I'm
here
in
graphql
controller
set
current
context.
A
Okay,
cool,
so
rails
is
doing
its
thing.
I'm
gonna
tail
rails.
A
I
always
type
tails
rails.
This
is
the
one
of
the
rare
times
that
I
did
tail
rails
correctly.
The
first
time.
B
A
A
Dr
gdk
sounds
like
a
super
villain
and
some
sort
of
weird
some
weird
coding
universe.
A
So
let
me
ask
you,
then,
chad,
if
you
go
to
like
the
rails,
dock
and
you're,
so
you're-
probably
not
doing
this
as
much
as
I
am,
but
if
you're
like,
how
do
I
test
if
a
set
has
something
and
I
go
there
and
I'm
like
oh
there's
include
or
there's
this
other
alias
like
rails,
has
multiple
aliases
for
almost
all
their
methods.
Do
you
always
prefer
to
use?
You
know
this
is
the
method
you
don't
use
the
aliases
for
the
methods
or
whatever.
A
B
A
All
right,
so
the
gdk
is
attempting
to
spin
up.
It
would
be
amazing
to
be
able
to
unit
test
this.
This
kind
of
ordering
issue
or.
A
A
Would
be
really
cool,
so
if
I'm
here
in
graphql
controller
spec,
am
I
doing
any
checking
for
feature
category
here?
I'm
not,
but
maybe
I
could
post
execute
and
see
that
the
feature
category
was
came
from
the
request
or
something.
A
I
don't
know
I
don't
know
what
I'm
doing
all
right.
It
sets
feature
category
from
request.
B
A
A
B
A
A
I
have
one
this
is
an
external
monitor,
but
I
have
my
laptop
monitor.
It
doesn't
have
anything
on
it
yeah.
Why.
A
I
I
do.
I
do
windows
tab
a
lot
or
command
tab
on
my
external
keyboard.
It's
the
windows
key,
although
it's
completely
rubbed
off
the
on
my
keyboard.
I
have
two
keys
that
are
completely
blank
from
overuse.
B
Yeah,
my
my
a
and
s
and
d
are
mostly
gone.
A
B
Yeah
for
me,
you
need
you,
need
those
double
shot.
Keycaps
come
come,
join
us
in
the
keyboards
channel,
spend
thousands
of
dollars.
Oh.
A
B
A
So
my
my
brother
and
I
used
to
work
together
and
he's
a
software
engineer,
and
we
would
you
know
pair
programs
sit
next
to
each
other
and
but
I
use
them
so
any
so
pair
programming
and
switching
seats
was
always
a
challenge
for
him
because
he
doesn't
dump
and
he
uses
this
like
funky
ergonomic
keyboard
thing.
So,
oh,
yes,
that's
half
of
it.
Oh
man!
B
Like
only
a
couple
months,
just
because
I
I
type
really
badly
like
not
like
incorrectly,
like
my
my
pointer,
goes
to
the
my
left
pointer
goes
to
the
y
key,
which
is
bad,
and
so
I
did
this
kind
of
as
a
way
to
correct
it
a
little
bit.
So
I
keep
them
really
far
apart.
B
B
A
A
B
I
honestly
don't
know
it's
like
like
superstitious
in
rails
like
if,
if
something
is
going
wrong,
you
need
to
do
it,
but
not
everybody
does
it.
We
don't
have
a
robocop
or
lynch
or
anything
for
it.
Do
we.
B
B
B
A
Gosh,
I'm
gonna.
I
keep
running
to
this.
I
know
that
this
is
sentinel
one.
I
kno,
I'm
not
even
gonna
talk
about
it,
I'm
so
frustrated
with
this
thing
I
I
got.
These
interrupted
system
calls
all
over
a
gdk
update
at
one
time
and
was
researching
it
and
they
were
like.
You
need
to
try
disabling
your
security
thing
talk
to
security
and
we
tried
a
number
of
things
and
finally
uninstalling
sentinel
one
caused
it
to
work
so
anytime,
I
see
interrupted
sentence.
Call
I'm
not
a
happy
camper.
A
A
B
A
I
wanna
do
something
like
I
don't
know
something
like
this,
and
I
want
to
double
check.
This
is
coming
from
the
request.
I
don't
know
if
this
is
the
right
way
to
do
that.
B
A
And
I
specifically
want
to
do
that,
because
this
is
the
issue
that
I
was
running
into
before,
where
the
application
controller
kept
overwriting
it,
and
that
was
that
was
bugging
me.
So
I
want
to.
I
really
want
to
test
this
out
this
way.
I
don't
know
if
I
can
just
slap
headers
into
here,
should.
B
A
C
I've
got
a
question
about
the
definition
you've
added
to
the
graph
controller,
because
is,
it
is
called
the
same
way
we
call
the
other.
Is
it
called
set
current
context?
So
maybe
we
are
overriding.
The
method.
A
Right,
it
is
oh
gosh,
oh
does
it
oh,
no,
it
probably
does.
Are
you
serious,
are
the
privates
running
into
each
other?
Do
they
do
that.
C
Yeah
because
graphql
controller
inherits
from
application
controller,
so
you
need
to
name
it
differently.
I
guess
but.
B
A
From
the
application
controller,
that
makes
sense,
I'm
also
realized-
I
said
around
and
I'm
not
yielding
anything
here.
So
I
I
clearly
didn't
do
this
correctly.
I
guess
I
need
to
yield
and
then
I
don't
know
what
this
ensure
is
about,
but
I
guess
I
need
to
just
yield
after
I
do
my
thing
like
that
sure
which
okay.
B
B
C
B
A
Wow
from
from
other
languages,
that's
what
I
would
expect
it's
private.
No
one
can
call
me.
No
one
can
call
this
except
for
me
and
then
but
protected
is
about
the
inheritance
changes
all
right.
So
headers.
A
A
And
while
this
is
writing,
I
would
love
to
get
your
all
perspectives
on
this.
This
was
surprising
to
me.
A
Oh
wait,
let
me
see,
maybe
bob
got
rid
of
the
message.
A
A
C
Entirely
so
it's
so:
it's
not
a
glass
method,
because
class
class
variable
because
class
variables
are
at
edge
using
the
add
edge.
But
this
second
fact
is
true.
It
is
an
instance
variable
of
a
class
which
makes
it
makes
it
confusing,
but
meaning
that
it
this
instance
this
variable
holds
on
on
the
class
definition.
So
it's
per
process.
You
should
only
see,
I
think,
just
one
instance
of
it,
but
it
might
have
some
issues
regarding
so,
for
example,
you
have
multiple
threads
loading
or
calling
the
s
class
method
categories.
A
C
Calling
so
if,
if
we
are
loading,
the
files
in
threads
or
in
multiple
processes,
which
we
have
on
gitlab,.
C
You
have
so
it
increases
memory
anyway,
so
it's
so
you
so,
for
example,
you
have
a
puma
insulation,
like
with
16
processors.
C
A
Well,
the
threads
with,
I
think,
that's
where
it's
coming
from
with
puma,
it's
gonna
load,
different
instances
of
this
class,
and
so
and
then,
if
I'm
like
tearing
down,
I
don't
know,
I
don't
know
what
I'm
talking
about,
but
if
I'm
tearing
down
threads
and
spinning
them
back
up
whatever
like
yeah,
we
could.
I
could
see
how
we
end
up.
I
really
want
this
to
be
process
specific.
A
A
C
So
yeah
right
it
is
straight
safe.
So
it's
if
you
call
the
method
inside
the
thread
and
the
thread
dies.
We
should
still
end
up
having
this
yaml
being
loaded
after
the
thread
dies.
So
this
shouldn't
be
a
problem,
but
there's
also
again
handwave
memory
contention
or
something
like
that.
So
if,
if
we
should,
if
we
read
stuff
from
from
disk,
we
should
do
it
before
forking,
so
during
initialization
of
puma
before
they
start
spawning
processes,
because
otherwise
you
have
those
again
hand,
wavy
copy
and
right
stuff
and
so
on.
C
C
Right
away
before
the
fork
so-
and
I
need
to
look
at
this
up
so
I'm
too
hand-wavy
right
now,
but.
C
A
Oh
interesting,
so
are
you?
Are
you
saying
that
this
process
memory
cache
is
probably
the
best,
is
the
best
approach,
but
adding
maybe
a
call
to
categories
when
we
first
start
up
so
that
we
could
do
this
eagerly
might
be
the
would
be
the
ideal,
although
we
probably
won't
do
that
here
in
this
mmr,
but.
C
Yeah,
I'm
not
sure
if,
if
I
agree
with
that,
all
categories
will
are
being
loaded
per
per
request.
I
I
don't
understand
this
one
actually.
A
Yeah
I'll
ask
I'll
ask
about
that,
and
the
only
thing
I
can
think
is:
maybe
because
different
environments,
because
of
puma
on
development
that
definitely
wasn't
happening
and
but
because
of
puma.
Maybe
when
things
are,
you
know.
A
B
C
B
C
B
A
Okay,
so
I
do
notice
here
bob
asked
about
for
that
for
the
setting
the
feature
category
from
the
header.
If
we
don't
get
something
from
the
request,
let's
just
yield
right
away
and
then
choosing
to
use
this
with
context
thing.
This
with
context
lets
us
do
a
push
that
kind
of
cleans
it
up
cleans
itself
up
when
the
block
resolves,
which
is
kind
of
cool,
so
I'm
gonna.
Thankfully
we
have
a
nice
little
automated
test
for
that.
A
A
I
guess
with
context
I
want
to
do
this
feature.
Category
do
end
yield
is
this:
is
this
ruby-esque.
A
We
don't
need
to
worry
about
it,
yeah
yep,
but
only
do
this
if
we
actually
get
something
from
the
request,
and
this
from
request
looks
like
did
you
notice
that
command
click
chat
and
vs
code?
A
We
only
get
this
from
the
request
if
we
are
csrf
verified
if
it's
an
actual
valid
category-
and
I
had
to
add
this
method,
because
when
I
was
writing
unit
tests
for
this
thing,
this
class
instance
variable
wasn't
ever
resetting
itself.
So
this
is
the
fastest
thing
for
me
to
do,
but
with
the
thing
that
bob
was
recommending,
we
wouldn't
even
need
to
call
the
we
wouldn't
even
need
the
reset
if
we
use
the
process
memory
cache
apparently
so
that
might
be
cool.
C
So
personally,
I
I
try
to
to
avoid
singletons
at
all
costs,
because
in
the
end
you
instead
of
using
singleton,
you
could
just
create
a
normal
class
like
not
having
static
methods
at
all
class
methods
at
all,
and
you
could
instead
just
assign
an
instance
of
this
feature-
categories
class,
for
example,
to
a
constant,
and
then
you
have
an
in
in
singleton
as
well.
So
then
it
will
still
work.
So
that's
again.
A
C
Just
just
my
my
pet,
I'm
not
sure
if,
if
yeah,
I
can
make
it
clear
too
so
so
it
sets
providing
all
those
reset
methods.
Yeah,
we
just
use
plain
good
objects,
I
would
say-
and
we.
A
A
Yeah,
but
I'm
up
for
I'm
up
for
refactoring
to
do
that.
Could
you
help
me
do
that
or
do
you
do
you
think
it's
not
worth
it
here.
B
I
think
that
class
variables
just
good
when
you
get
into
the
class
level
and
especially
persisting
state
at
the
class
level.
It
gets
weird
in
ruby
in
the
in
the
slack
thread
for
this
I
dropped
the
subtle
difference
between
a
class
variable
and
the
class
instance
variable,
which
is
what
you're
using
here,
and
you
know
with
peter's
approach.
You
don't
even
think
about
that.
Yeah.
B
C
A
Okay,
let's,
let's
go
crazy;
let's
try
to
do
it.
So
if
I
was
going
to
initialize
this,
I
think
its
state
is
going
to
be
what
are
all
the
categories
and
and
then
maybe
we
can
have
a
factory
method
that
builds
it
from
the
yaml
or
something.
So
how
do
I
have
class
variables?
How
do
I
have
properties?
A
Did
I
do
something
like
this?
I
don't
know
okay
awesome
and
maybe
should
I
do
you
think
I
should
receive
it
as
a
set
or
should
I
to
set
it
here.
Maybe
so
maybe
we
just
take
an
array
and
I
can
just
transform
it
as
a
set
here,
because
we
do
want
it
to
be
a
set.
A
A
Yes,
thank
you
for
that,
and
so
then
this
is
all
going
to
be
instant
stuff.
This
from
request
is
going
to
be
an
instance
thing,
and
that
means
we're
just
going
to
call
valid,
because
this
is
also
going
to
be
an
instance
thing,
and
this
is
going
to
look
more
like
a
factory
method
for
something
like
create
default.
A
Active
record
from
yaml
you
like
lev,
that
sounds
good.
Okay,
and
maybe
I
can
also
have
something
like
yaml
categories
and-
and
I
could
do
something
like
I
don't
know
what
I'm
doing.
I
have
no
idea.
C
I
think
we
don't
need
that,
so
we
can
actually
remove
the
yeah
this
method
completely
and
just
move
the
loading
the
yammer
to
the
yeah
right.
C
C
Yeah
you
can
either
use
ads,
but
at
gitlab
I've
seen
a
lot
of
the
use
of
actual
attribute
reader,
so
yeah
we
tend
to
avoid
the
the
ads
like
the
marking
or
like
doing
the
instance
variable
thinking.
So
we
just
do
in
a
private
block,
archer
reader
categories,
and
then
you
can
use
the
methods
categories,
yeah,
newline
at
utter
reader,
atg
yeah,
reader
categories.
A
A
Valid
we
want
to
be
public,
okay,
because
I
think
we,
if
we're
not
using
it,
we
this
whole
logic,
is
duplicated
multiple
times,
at
least
in
our
specs,
that
we
we
could
totally
reuse
here.
Okay,
so
this
is
cool
to
to
benefit.
How
could
we
potentially
cache
this
instance.
C
Yeah,
I
think
we
have
config
initializers
and
there's
a
lot
of
going
on,
so
one
one
idea
could
be
to
create
a
new
initializer
which
just
calls
load
from
yaml
in
there
and
but
I
need
to
actually
I'm
not
sure
when
config
initializers
are
being
called
so
called.
So
if,
if
you
go
into
the
config
initializers
directory,
you
see
a
lot
of
files
over
there.
A
C
C
A
Could
we
use
this?
Could
we
use
this
to
wrap
that
that's
just
a
crazy
idea.
A
B
Yeah,
I
don't
know
that
that's
necessary
like
before
we
initialize
it.
Can
we
go
ahead
and
get
the
the
constant
approach
because,
like
the
initializer
is
just
an
optimization,
it's
going
to
get
loaded.
The
first
time
a
class
uses
the
constant
right.
C
Since
we
are
using
sideways
now,
it
should
be,
and
and
if
we
are
using
eager
loading
actually-
and
we
redo
this
for
for
production-
it
should
be
the
case
yeah.
So
maybe
I'm
not
sure.
So
we
could
either
create
a
constant
saying,
like
called
instance
in
all
uppercase
and
settings
and
doing,
like
instance,
like
instance,
equals
to
from
load
from
yaml
which
won't
work
yet
because
we
have
this
load
from
yammer
is
not
defined
right
now
we
have
to
put
it.
B
C
Another
approach
would
be
because
I
really
like
the
name
feature
categories
actually
to
be
used
as
a
so.
We
already
have
an
interface
which
so
you
are
already
calling
feature:
categories,
dot,
valids
feature
contours
from
request
and
so
on.
From
other
places,.
A
C
So,
for
example,
I
don't
know,
let's
call
it
foo,
so
this
one
just
call
it
foo
this.
This
class
feature
categories,
rename
it
tofu
yeah
yeah,
just
just
to
to
make
the
point.
Yeah
delete
this
one,
the
the
foo
consent
yeah
just
to
the
whole
line.
Your
whole
line
yeah
create
go
below
the
class
definition
like
at
the
end
and
yeah
and
now
type
feature
categories.
C
B
A
Got
it
would,
would
you
would
you
prefer
if
this
was,
you
know
screaming
snake
case.
B
That
seems
less
idiomatic.
I,
like
the
other
one,
seems
like
it's
a
class
interface.
You
know
it's
just
the
fact
that
it's
a
class
interface
implies
that
it's
persistent
and
you
don't
have
to
worry
about
anything
at
the
instance.
A
Got
it
and
that's
what
you
were
saying
was
classes
are
constants,
okay,
yeah
I'll,
try
this
out
and
I'll
shoot
this
over
to
bob
and
see
what
see
what
he
thinks
and
I'll
ping
you
all.
I'm.
A
I've
gotta
hop
off
right
now,
but
this
is
super
helpful
and
I'm
glad
we
figured
out
the
around
stuff.
So
before
action
wasn't
working
around
action
seems
to
work.
Now
we
have
a
unit
test
for
it.
I
can
actually
get
rid
of
a
number
of
a
bit
of
code.
That's
not
being
used
anymore
now,
which
is
great,
so
I
really
appreciate
your
help
on
this.
Thank
you
so
much.