• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 23:50
CEST 05:50
KST 12:50
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
[ASL22] Ro16 Preview: Rough Waters10[ASL22] Ro24 Preview: Siren's Call8[ASL22] Ro24 Preview: Summer's End9Serral wins HomeStory Cup 2915Serral wins Maestros of the Game 244
Community News
StarCraft open world shooter announced at BlizzCon54Weekly Cups (Aug 30-Sep 7): herO thrives amid growing schism10Official StarCraft website teases new content ahead of BlizzCon?160Stellar Fest TWO the Moon (Dec 16-20)9Weekly Cups (August 24-30): Patches' balance mod takes over3
StarCraft 2
General
StarCraft open world shooter announced at BlizzCon How do you feel about the StarCraft shooter announcement at BlizzCon 2026? Balance hotfix patch 5.0.16b (July 16) Team Liquid Map Contest #22: Results and Winners Weekly Cups (Aug 30-Sep 7): herO thrives amid growing schism
Tourneys
RSL goes to London! 2026 Offline Finals Nov 21-22 KSL Week #92 IntoTheTV X SOOP SC2 League : Weekly & Monthly 2026 GSTL Announcement Sparkling Tuna Cup - Weekly Open Tournament
Strategy
[G] Having the right mentality to improve
Custom Maps
Nexus Wars 2021 GUIDE [M] (2) Industrial Park
External Content
Mutation # 542 The Ascended Mutation # 541 Binary Choice The PondCast: SC2 News & Results Mutation # 540 Dodge This
Brood War
General
Official StarCraft website teases new content ahead of BlizzCon? BGH Auto Balance -> http://bghmmr.eu/ Broodwar Prediction Market Practice Partners (Official) [D] Brainstorming a balance patch for Brood war
Tourneys
[ASL22] Ro16 Group A [ASL22] Ro16 Group B Escore Tournament - Season 3 Small VOD Thread 2.0
Strategy
Replay Review Process - What do you do? Simple Questions, Simple Answers Odyssey Mineral Stack Saturation Game Theory for Starcraft
Other Games
General Games
EVE Corporation Diablo IV Nintendo Switch Thread [Maplestory Hardcore] Let's Play~!! General RTS Discussion Thread
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
[TL LoL EUW IHs] Teemo shall perish TSM pausing esports and CLG Dead
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Community Thread
Community
General
Trading/Investing Thread US Politics Mega-thread UK Politics Mega-thread Things Aren’t Peaceful in Palestine Russo-Ukrainian War Thread
Fan Clubs
MarineLorD Fan Club The Creator Fan Club The ShoWTimE Fan Club
Media & Entertainment
Diablo Animated Series on Netflix Movie Discussion!
Sports
Football (Soccer) Thread TeamLiquid Health and Fitness Initiative For 2023 MLB/Baseball 2023
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
The Automated Ban List Northern Ireland Global Starcraft
Blogs
Virtual Romance, Real-Life C…
TrAiDoS
Regacy Esports:Our Goa…
regacyesports
Dreaming of BW patches (mod…
c3rberUs
LOCKPICKING NOOB
LUCKY_NOOB
Customize Sidebar...

Website Feedback

Closed Threads



Active: 8270 users

The Big Programming Thread - Page 537

Forum Index > General Forum
Post a Reply
Prev 1 535 536 537 538 539 1032 Next
Thread Rules
1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution.
2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20)
3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible.
4. Use [code] tags to format code blocks.
Cynry
Profile Blog Joined August 2010
810 Posts
October 26 2014 17:23 GMT
#10721
On October 27 2014 01:59 Manit0u wrote:
I was once working with someone else's code. His variable naming was very helpful and consistent (even more helpful than good names). Every input and output was in the name, so was the variable type (e. g. "s_somestring_in", "i_someint_out", "f_somefloat" - variable with local scope that's neither function param nor is return value etc.). Makes it really easy to follow, the only problem is when you want to change the variable type, as you then have to rename all occurances.

Was nice to work with it since at all times you knew exactly if you're dealing with variable that has been passed to the function, a variable that will be returned or something temporary.


That sounds pretty good ! Does the "s", "i", "f" stands for something in particular ?
_fool
Profile Joined February 2011
Netherlands685 Posts
October 26 2014 17:34 GMT
#10722
On October 27 2014 01:59 Manit0u wrote:
I was once working with someone else's code. His variable naming was very helpful and consistent (even more helpful than good names). Every input and output was in the name, so was the variable type (e. g. "s_somestring_in", "i_someint_out", "f_somefloat" - variable with local scope that's neither function param nor is return value etc.). Makes it really easy to follow, the only problem is when you want to change the variable type, as you then have to rename all occurances.

Was nice to work with it since at all times you knew exactly if you're dealing with variable that has been passed to the function, a variable that will be returned or something temporary.


I think that's Hungarian notation:
http://en.wikipedia.org/wiki/Hungarian_notation

Btw, renaming a variable in a codebase is usually taken care of by your IDE right?
"News is to the mind what sugar is to the body"
bangsholt
Profile Joined June 2011
Denmark138 Posts
Last Edited: 2014-10-26 17:39:30
October 26 2014 17:37 GMT
#10723
On October 27 2014 02:23 Cynry wrote:
Show nested quote +
On October 27 2014 01:59 Manit0u wrote:
I was once working with someone else's code. His variable naming was very helpful and consistent (even more helpful than good names). Every input and output was in the name, so was the variable type (e. g. "s_somestring_in", "i_someint_out", "f_somefloat" - variable with local scope that's neither function param nor is return value etc.). Makes it really easy to follow, the only problem is when you want to change the variable type, as you then have to rename all occurances.

Was nice to work with it since at all times you knew exactly if you're dealing with variable that has been passed to the function, a variable that will be returned or something temporary.


That sounds pretty good ! Does the "s", "i", "f" stands for something in particular ?


Hungarian notation - you prefix with the type of the variable - quite useful if you do C or embedded.

uint8_t = ui8<variable name>
uint16_t = ui16<variable name>
etc...

f is float, d is double, s/str is string.

p if it's a pointer.

Stuff like that. Can make a codebase incredibly ugly if overused.

On October 27 2014 02:34 _fool wrote:
Btw, renaming a variable in a codebase is usually taken care of by your IDE right?


If you have a somewhat modern one, yes... Sometimes you're stuck with old ones and the feature might not exist.
Cynry
Profile Blog Joined August 2010
810 Posts
October 26 2014 17:45 GMT
#10724
God I'm dumb today ><
s_somestring
i_someint
f_somefloat....
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
October 26 2014 17:49 GMT
#10725
On October 27 2014 02:45 Cynry wrote:
God I'm dumb today ><
s_somestring
i_someint
f_somefloat....

For the sake of completeness, nowadays the exact signature of a function is something the IDE should tell you, not the name of the function. I'd advise against hungarian notation.
If you have a good reason to disagree with the above, please tell me. Thank you.
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
Last Edited: 2014-10-26 18:31:38
October 26 2014 18:24 GMT
#10726
-snip BC your douchiness shouldn't mean i should respond in the same way-
There is no one like you in the universe.
StatixEx
Profile Blog Joined August 2011
United Kingdom779 Posts
Last Edited: 2014-10-26 21:15:35
October 26 2014 21:14 GMT
#10727
i use hungarian but dont do the underscore, can really help sometimes especially if you are tracing numbers which have to stay the same type

Hi everyone, just wandered onto this out of boredom. I used to program in c and c++ with a bit of actionscript now and again. Just recently started to teach python so anymore resources other than the ones on the front page would be great. Such a great language python im finding so far, has all the ability to make some good looking things and gets rid of all that dx and windows code to open a window! problem is, not sure how python does its stuff as im trying to relate it to c++ all time. Im mostly teaching beginners so dont need too much more than what i already know and im mostly using the shell (not pygame) any great resources for pygame would be good, seen a couple of you tube vids and while they are great at programming a game, its too much for newer learners. The second they start goin into rects and all that is where newbies start to get sonfused as they dont know so much about cartesian coords and stuff like that

any way any help is welcome and im quite happy to offer any
Manit0u
Profile Blog Joined August 2004
Poland17843 Posts
Last Edited: 2014-10-26 21:25:42
October 26 2014 21:22 GMT
#10728
On October 27 2014 02:37 bangsholt wrote:
Show nested quote +
On October 27 2014 02:23 Cynry wrote:
On October 27 2014 01:59 Manit0u wrote:
I was once working with someone else's code. His variable naming was very helpful and consistent (even more helpful than good names). Every input and output was in the name, so was the variable type (e. g. "s_somestring_in", "i_someint_out", "f_somefloat" - variable with local scope that's neither function param nor is return value etc.). Makes it really easy to follow, the only problem is when you want to change the variable type, as you then have to rename all occurances.

Was nice to work with it since at all times you knew exactly if you're dealing with variable that has been passed to the function, a variable that will be returned or something temporary.


That sounds pretty good ! Does the "s", "i", "f" stands for something in particular ?


Hungarian notation - you prefix with the type of the variable - quite useful if you do C or embedded.

uint8_t = ui8<variable name>
uint16_t = ui16<variable name>
etc...

f is float, d is double, s/str is string.

p if it's a pointer.

Stuff like that. Can make a codebase incredibly ugly if overused.

Show nested quote +
On October 27 2014 02:34 _fool wrote:
Btw, renaming a variable in a codebase is usually taken care of by your IDE right?


If you have a somewhat modern one, yes... Sometimes you're stuck with old ones and the feature might not exist.


For this thing I'm mostly stuck with editing through CLI so IDEs are out of the question and the way it works is that it only allows ed server-side. I'm usually doing it via FTP but even then you don't have IDEs for LPC.

Sounds silly but it taught me A LOT.
Time is precious. Waste it wisely.
Nesserev
Profile Blog Joined January 2011
Belgium2760 Posts
Last Edited: 2014-10-26 21:36:27
October 26 2014 21:34 GMT
#10729
--- Nuked ---
Deleted User 101379
Profile Blog Joined August 2010
4849 Posts
October 26 2014 21:40 GMT
#10730
Hungarian notation is something that should not be used in the way it's actually used in the wild. As Manit0u said, it's a pain to change the type of a variable. Microsoft ran into that a few years back when their API had to change and suddenly there were unsigned int named variables that were signed long ints and such.

Variables should be used in a limited scope so the declaration and use are always close together, which means to know the type you just have to look up (or use your IDE).

We use hungarian notation at work and it's simply annoying and superfluous and there were already instances of $intSomeVariable containing strings and such.

I would recommend reading this blog entry by Joel Spolsky.
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
October 26 2014 22:01 GMT
#10731
On October 27 2014 06:14 StatixEx wrote:
i use hungarian but dont do the underscore, can really help sometimes especially if you are tracing numbers which have to stay the same type

Hi everyone, just wandered onto this out of boredom. I used to program in c and c++ with a bit of actionscript now and again. Just recently started to teach python so anymore resources other than the ones on the front page would be great. Such a great language python im finding so far, has all the ability to make some good looking things and gets rid of all that dx and windows code to open a window! problem is, not sure how python does its stuff as im trying to relate it to c++ all time. Im mostly teaching beginners so dont need too much more than what i already know and im mostly using the shell (not pygame) any great resources for pygame would be good, seen a couple of you tube vids and while they are great at programming a game, its too much for newer learners. The second they start goin into rects and all that is where newbies start to get sonfused as they dont know so much about cartesian coords and stuff like that

any way any help is welcome and im quite happy to offer any


welcome!

what are you looking at making or learning about? python has something for basically any programmer so it's all up to what you want to tailor your learning towards.
There is no one like you in the universe.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
Last Edited: 2014-10-26 22:10:28
October 26 2014 22:04 GMT
#10732
On October 27 2014 06:40 Morfildur wrote:
Hungarian notation is something that should not be used in the way it's actually used in the wild. As Manit0u said, it's a pain to change the type of a variable. Microsoft ran into that a few years back when their API had to change and suddenly there were unsigned int named variables that were signed long ints and such.

Variables should be used in a limited scope so the declaration and use are always close together, which means to know the type you just have to look up (or use your IDE).

We use hungarian notation at work and it's simply annoying and superfluous and there were already instances of $intSomeVariable containing strings and such.

I would recommend reading this blog entry by Joel Spolsky.

Well that is an entirely different definition of hungarian than what I thought, and certainly a much better one.

On October 27 2014 06:34 Nesserev wrote:
This might be the dumbest thing that I've heard all month... care to explain yourself a bit more??

As the blog entry above describes nicely, I need to know what the function does/returns, not its type. Especially when it just adds unnecessary clutter. Much like comments that just say the same thing as the code they target.
If you have a good reason to disagree with the above, please tell me. Thank you.
Manit0u
Profile Blog Joined August 2004
Poland17843 Posts
October 26 2014 22:31 GMT
#10733
On October 27 2014 07:04 spinesheath wrote:
Show nested quote +
On October 27 2014 06:40 Morfildur wrote:
Hungarian notation is something that should not be used in the way it's actually used in the wild. As Manit0u said, it's a pain to change the type of a variable. Microsoft ran into that a few years back when their API had to change and suddenly there were unsigned int named variables that were signed long ints and such.

Variables should be used in a limited scope so the declaration and use are always close together, which means to know the type you just have to look up (or use your IDE).

We use hungarian notation at work and it's simply annoying and superfluous and there were already instances of $intSomeVariable containing strings and such.

I would recommend reading this blog entry by Joel Spolsky.

Well that is an entirely different definition of hungarian than what I thought, and certainly a much better one.

Show nested quote +
On October 27 2014 06:34 Nesserev wrote:
This might be the dumbest thing that I've heard all month... care to explain yourself a bit more??

As the blog entry above describes nicely, I need to know what the function does/returns, not its type. Especially when it just adds unnecessary clutter. Much like comments that just say the same thing as the code they target.


I believe that Nesserv was asking why in the world would you rely on your IDE to tell you that?
Time is precious. Waste it wisely.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
October 26 2014 22:55 GMT
#10734
On October 27 2014 07:31 Manit0u wrote:
Show nested quote +
On October 27 2014 07:04 spinesheath wrote:
On October 27 2014 06:40 Morfildur wrote:
Hungarian notation is something that should not be used in the way it's actually used in the wild. As Manit0u said, it's a pain to change the type of a variable. Microsoft ran into that a few years back when their API had to change and suddenly there were unsigned int named variables that were signed long ints and such.

Variables should be used in a limited scope so the declaration and use are always close together, which means to know the type you just have to look up (or use your IDE).

We use hungarian notation at work and it's simply annoying and superfluous and there were already instances of $intSomeVariable containing strings and such.

I would recommend reading this blog entry by Joel Spolsky.

Well that is an entirely different definition of hungarian than what I thought, and certainly a much better one.

On October 27 2014 06:34 Nesserev wrote:
This might be the dumbest thing that I've heard all month... care to explain yourself a bit more??

As the blog entry above describes nicely, I need to know what the function does/returns, not its type. Especially when it just adds unnecessary clutter. Much like comments that just say the same thing as the code they target.


I believe that Nesserv was asking why in the world would you rely on your IDE to tell you that?

Why wouldn't I? Assuming it's not in the same file, and considering that I certainly don't need the exact signature often enough to make it worth the clutter in the name... Most importantly, I don't need that when I'm just reading the code, say to change or fix it. I want to know what it does, not which types it uses. Code shoud be readable like prose, and I don't think specifying the type of each word in noun prose verb makes noun sense.
If you have a good reason to disagree with the above, please tell me. Thank you.
Manit0u
Profile Blog Joined August 2004
Poland17843 Posts
October 26 2014 23:09 GMT
#10735
Specifying the type, not really. But have you read the linked article? Hungarian Notation (apps version) is super useful as it gives you a ton of information about the variable (or function) that no IDE will provide.
Time is precious. Waste it wisely.
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
Last Edited: 2014-10-26 23:16:06
October 26 2014 23:14 GMT
#10736
Well not really, Hungarian Notation isn't really more than a means to write clearer code. If you wrote clearly in the first place and just learned about Hungarian Notation then it hasn't really changed anything. Actually if you use Visual Studio, Eclipse, you get a lot of benefits like being able to provide a summary of the function, and depending on how you would write the summary you get much more benefit from having the IDE than not having it. In other words, I can always supplement Hungarian Notation with an IDE, but you can't display a help tooltip about the function without the IDE, so the IDE's features are almost always a superset of not having an IDE.
There is no one like you in the universe.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
October 26 2014 23:19 GMT
#10737
On October 27 2014 08:09 Manit0u wrote:
Specifying the type, not really. But have you read the linked article? Hungarian Notation (apps version) is super useful as it gives you a ton of information about the variable (or function) that no IDE will provide.

Yes, as mentioned, I was thinking of the interpretation of hungarian where you specify the type. The one described in the article is a completely different thing and seems perfectly reasonable if used appropriately. I was misled by that common misinterpretation.

That being said, don't underestimate IDEs. IDEs won't display such information so prominently, but stuff like Resharper's Inspect Value Origin will give you a lot of information about variables.
If you have a good reason to disagree with the above, please tell me. Thank you.
Nesserev
Profile Blog Joined January 2011
Belgium2760 Posts
October 26 2014 23:25 GMT
#10738
--- Nuked ---
bangsholt
Profile Joined June 2011
Denmark138 Posts
October 27 2014 17:18 GMT
#10739
On October 27 2014 06:22 Manit0u wrote:
Show nested quote +
On October 27 2014 02:37 bangsholt wrote:
On October 27 2014 02:23 Cynry wrote:
On October 27 2014 01:59 Manit0u wrote:
I was once working with someone else's code. His variable naming was very helpful and consistent (even more helpful than good names). Every input and output was in the name, so was the variable type (e. g. "s_somestring_in", "i_someint_out", "f_somefloat" - variable with local scope that's neither function param nor is return value etc.). Makes it really easy to follow, the only problem is when you want to change the variable type, as you then have to rename all occurances.

Was nice to work with it since at all times you knew exactly if you're dealing with variable that has been passed to the function, a variable that will be returned or something temporary.


That sounds pretty good ! Does the "s", "i", "f" stands for something in particular ?


Hungarian notation - you prefix with the type of the variable - quite useful if you do C or embedded.

uint8_t = ui8<variable name>
uint16_t = ui16<variable name>
etc...

f is float, d is double, s/str is string.

p if it's a pointer.

Stuff like that. Can make a codebase incredibly ugly if overused.

On October 27 2014 02:34 _fool wrote:
Btw, renaming a variable in a codebase is usually taken care of by your IDE right?


If you have a somewhat modern one, yes... Sometimes you're stuck with old ones and the feature might not exist.


For this thing I'm mostly stuck with editing through CLI so IDEs are out of the question and the way it works is that it only allows ed server-side. I'm usually doing it via FTP but even then you don't have IDEs for LPC.

Sounds silly but it taught me A LOT.


Exactly where hungarian notation makes life so much easier :D

I've been doing something a bit similar, although I could install vim on the machine I remoted into... But that was all. It had vim and clang. Good times :D
ZenithM
Profile Joined February 2011
France15952 Posts
Last Edited: 2014-10-27 17:49:38
October 27 2014 17:23 GMT
#10740
Whether Hungarian notation is to be advised or not also depends on the language, I do believe. For example you don't want that naming convention is something like Java or C#. In fact, you can look up nearly all coding style guidelines out there on those languages. They specifically strongly advise you against it :D
The way to go in those languages is to design your types (classes/interfaces/traits/whatnot) so that they semantically qualify all their variables, and let your IDE help you if you somehow couldn't find out quickly what the type of the object was. Good coding practices however naturally render the types of variables obvious (short methods, stateless functions, good naming etc..)
Prev 1 535 536 537 538 539 1032 Next
Please log in or register to reply.
Live Events Refresh
OSC
20:30
Masters Cup #151
davetesta51
Liquipedia
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
RuFF_SC2 291
ViBE153
StarCraft: Brood War
Aegong 56
Icarus 6
Dota 2
NeuroSwarm185
LuMiX1
Counter-Strike
minikerr43
Other Games
summit1g12526
JimRising 580
PiGStarcraft277
Organizations
Other Games
BasetradeTV211
[ Show 11 non-featured ]
StarCraft 2
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• Migwel
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• masondota22018
League of Legends
• Lourlo1048
• Stunt162
Upcoming Events
Sparkling Tuna Cup
6h 10m
WardiTV Invitational
7h 10m
ByuN vs Percival
Cure vs Classic
Shopify Rebellion Sundays
11h 10m
Spirit vs Mixu
Clem vs TBD
RSL Revival
12h 10m
Serral vs Rogue
BlizzCon
14h 40m
IdrA vs MC
Replay Cast
20h 10m
Afreeca Starleague
1d 6h
Light vs JyJ
Soulkey vs hero
WardiTV Weekly
1d 7h
Monday Night Weeklies
1d 12h
Afreeca Starleague
2 days
Snow vs Shinee
Shine vs EffOrt
[ Show More ]
GSL
2 days
PiGosaur Cup
2 days
The PondCast
3 days
Kung Fu Cup
3 days
Replay Cast
3 days
KCM Race Survival
4 days
IntoTheTV X SOOP
4 days
Replay Cast
4 days
IntoTheTV X SOOP
5 days
Replay Cast
5 days
GSL
6 days
Replay Cast
6 days
Liquipedia Results

Completed

Acropolis #5 - TRS
PiG Sty Festival 8.0
Big Dog Cup 2026 Div 1

Ongoing

KCM Race Survival 2026 Season 3
K-JUNGMAN
ASL Season 22
Super Anchor Qualifying S3
CSL 2026 AUTUMN (S22)
Acropolis #5
Blizzard Classic Cup 2026
Blizzard Classic Cup 2026
RSL Revival: Season 6
Calamity Invitational
FISSURE Playground #3
BLAST Open Fall 2026
Esports World Cup 2026
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 2026

Upcoming

Acropolis #5 - GSA
Acropolis #5 - GSB
Acropolis #5 - GSC
SC4ALL II: Brood War
HSC XXX
Stellar Fest 2: Lunar Cup
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
RSL Offline Finals
PGL Major Singapore 2026
Stake Ranked Episode 6
BLAST Rivals Fall 2026
IEM Beijing 2026
Stake Ranked Episode 5
PGL Masters Bucharest 2026
1win Private Club #2
Thunderpick World Champ. '26
ESL Pro League Season 24
Stake Ranked Episode 4
1win Private Club #1
Logitech G Play Connect 2026
SL StarSeries Fall 2026
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.